• Anmelden

1

Dienstag, 4. Juni 2013, 20:48

Skill Shop

Hallo liebe Community,

Ich nutze zurzeit für unser MMO dieses Script:

Spoiler
#===============================================================================
# Skill Shop
# Author: Game_guy, gerkt(exp based addition), mast3rshake2049(idea)
# Date: June 7th, 2009
# Version: 2.2z
# VERY IMPORTANT ADDITION: Edited to use exp and not gold. Only works with one actor in the
# party. The actor have to be the actor with the ID=1 of the database.
#===============================================================================
#
# Intro:
# What this script does is act as a shop but sells skills instead.
#
# Instructions:
# 1: First how do you want it setup? Theres two ways
# 1: -Any person can learn any skill
# or
# 2: -Classes learn different skills then other classes
#
# Go down to UseClasses and set it to false for 1: or true for 2:
#
# 2: Ok now that thats over lets move onto price. Go down to CONFIG PRICE and
# follow the instructions there.
#
# 3: Skip this step if you set UseClasses to false.
# Go to CONFIG CLASS SKILLS and follow the instructions there.
#
# 4: Ok so everythings setup now. Time to actually find out how to open the
# skillshop right? You use this line
# $scene = SkillShop.new([skill id's go here])
# example
# $scene = SkillShop.new([1, 2]) will make a shop with the skills
# Heal and Great Heal
#
# 5: Ok the script now is able to make it where only skills are learnable at
# certain levels. Go to CONFIG LEVEL and follow instructions there.
#
# 6: Ok so now there's a new option that sorts the skills in the following.
# Alphabetical
# Reverse Alphabetical
# Numeric (Sorts it by Id)
# Reverse Numberic
# Price
# Reverse price
# At default its at numeric but to change it use this,
# $game_system.ssort = 0,1,2, or 3.
# 0 = Numeric, 1 = Reverse Numeric, 2 = Alphabetical,
# 3 = Reverse Alphabetical, 4 = Price, 5 = Reverse Price.
#===============================================================================
module GameGuy
#==========================
# BEGIN CONFIG
#==========================
UseClasses = true # if false anyone can learn any skill
# if true only classes can learn the defined skills
end
module RPG
class Skill
def price
case id
#==========================
# CONFIG PRICE
#==========================
# use
# when skill_id then return price
when 5 then return 40
when 57 then return 75
end
return 10
end
def llevel
case id
#==========================
# CONFIG LEVEL
#==========================
# use
# when skill_id then return level
when 5 then return 2
end
return 1
end
end
class Class
def learnskills
case id
#==========================
# CONFIG CLASS SKILLS
#==========================
# use
# when class_id then return [skill id's here]
when 1 then return [5]
when 2 then return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 81]
when 7 then return [69, 70, 71, 72, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80]
when 8 then return [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]
end
return []
end
#==========================
# END CONFIG
#==========================
end
end
class Game_System
attr_accessor :ssort
alias sort_me_skillz initialize
def initialize
@ssort = 0
sort_me_skillz
end
end
class Window_SkillCommand < Window_Selectable
def initialize
super(0, 64, 480, 64)
self.contents = Bitmap.new(width - 32, height - 32)
@item_max = 2
@column_max = 2
@commands = ["Learn", "Exit"]
refresh
self.index = 0
end
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i)
end
end
def draw_item(index)
x = 4 + index * 240
self.contents.draw_text(x, 0, 128, 32, @commands[index])
end
end

class Window_SkillBuy < Window_Selectable
def initialize(shop_goods)
super(0, 128, 368, 352)
@skill_shop_goods = shop_goods
self.active = false
refresh
self.index = 0
end
def skill
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 0...@skill_shop_goods.size
skill = $data_skills[@skill_shop_goods]
if skill != nil
@data.push(skill)
end
end
case $game_system.ssort
when 0
[@data].each {|ary| ary.sort! {|a, b| a.id <=> b.id}}
when 1
[@data].each {|ary| ary.sort! {|a, b| a.id <=> b.id}}
[@data].each {|ary| ary.reverse!}
when 2
[@data].each {|ary| ary.sort! {|a, b| a.name <=> b.name}}
when 3
[@data].each {|ary| ary.sort! {|a, b| a.name <=> b.name}}
[@data].each {|ary| ary.reverse!}
when 4
[@data].each {|ary| ary.sort! {|a, b| a.price <=> b.price}}
when 5
[@data].each {|ary| ary.sort! {|a, b| a.price <=> b.price}}
[@data].each {|ary| ary.reverse!}
else
[@data].each {|ary| ary.sort! {|a, b| a.id <=> b.id}}
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
skill = @data[index]
price = skill.price
enabled = (price <= $game_actors[1].exp)
if enabled
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4
y = index * 32
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)
self.contents.draw_text(x + 240, y, 88, 32, price.to_s, 2)
end
def update_help
@help_window.set_text(skill == nil ? "" : skill.description)
end
end

class Window_SkillStatus2 < Window_Selectable
def initialize
super(368, 128, 272, 352)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.z = 200
self.active = false
self.index = -1
end
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 64
y = i * 80
actor = $game_party.actors[i]
classs = $data_classes[$game_actors[actor.id].class_id]
draw_actor_graphic(actor, x - 40, y + 60)
draw_actor_name(actor, x - 13, y + 10)
if actor.skill_learn?($thing.id)
self.contents.font.color = crisis_color
$text = "Vorhanden"
elsif GameGuy::UseClasses
if classs.learnskills.include?($thing.id) && $thing.llevel <= actor.level
self.contents.font.color = normal_color
$text = "Erlernbar"
elsif classs.learnskills.include?($thing.id) && $thing.llevel > actor.level
self.contents.font.color = disabled_color
$text = "Ab Level " + $thing.llevel.to_s
else
self.contents.font.color = disabled_color
$text = "Can't Learn"
end
else
if actor.level >= $thing.llevel
self.contents.font.color = normal_color
$text = "Can Learn"
else
self.contents.font.color = disabled_color
$text = "Can Learn At Level " + $thing.llevel.to_s
end
end
self.contents.draw_text(x - 13, y + 40, 200, 32, $text)
end
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
end
end
end

class SkillShop
def initialize(skills)
@skills = skills
end
def main
@command = Window_SkillCommand.new
@help_window = Window_Help.new
@skillbuy = Window_SkillBuy.new(@skills)
@skillbuy.active = false
@skillbuy.help_window = @help_window
$thing = @skillbuy.skill
@status = Window_SkillStatus2.new
#@status.visible = false
@gold = Window_Exp.new
@gold.x = 480
@gold.y = 64

Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@gold.dispose
@skillbuy.dispose
@help_window.dispose
@command.dispose
@status.dispose
end
def update
@gold.update
@status.update
@gold.refresh
@command.update
@skillbuy.update
@help_window.update
$thing = @skillbuy.skill
@status.refresh
if @command.active
update_command
return
end

if @status.active
update_status
return
end

if @skillbuy.active
update_buy
return
end
end

def update_buy
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@skillbuy.active = false
@skillbuy.index = -1
@command.active = true
@command.index = 0
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
@skillbuy.active = false
@status.active = true
@status.visible = true
@status.index = 0 if @status.index == -1
end
end

def update_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
case @command.index
when 0
@command.active = false
@command.index = -1
@skillbuy.active = true
@skillbuy.index = 0
when 1
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
end
return
end
end

def update_status
if Input.trigger?(Input::B)
@status.active = false
@status.index = -1
@skillbuy.active = true
return
end
if Input.trigger?(Input::C)
price = @skillbuy.skill.price
@actort = $game_party.actors[@status.index]
enabled = (price <= $game_actors[1].exp)

if enabled
if @actort.skill_learn?(@skillbuy.skill.id)
$game_system.se_play($data_system.buzzer_se)
return
end
if GameGuy::UseClasses
if $data_classes[@actort.class_id].learnskills.include?(@skillbuy.skill.id) && @actort.level >= @skillbuy.skill.llevel
@actort.learn_skill(@skillbuy.skill.id)
$game_actors[1].exp -= (@skillbuy.skill.price)
$game_system.se_play($data_system.decision_se)
@status.refresh
@skillbuy.refresh
return
else
$game_system.se_play($data_system.buzzer_se)
return
end
else
if @actort.level >= @skillbuy.skill.llevel
@actort.learn_skill(@skillbuy.skill.id)
$game_actors[1].exp -= (@skillbuy.skill.price)
$game_system.se_play($data_system.decision_se)
@status.refresh
@skillbuy.refresh
else
$game_system.se_play($data_system.buzzer_se)
return
end
return
end

else
$game_system.se_play($data_system.buzzer_se)
return
end
end
end

end

#==============================================================================
# ** Window_Exp
#------------------------------------------------------------------------------
# This window displays amount of gold.
#==============================================================================

class Window_Exp < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
cx = contents.text_size('Exp').width
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 120-cx-2, 32, $game_actors[1].exp.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(124-cx, 0, cx, 32, 'Exp', 2)

end
end
zum Lesen den Text mit der Maus markieren


und normal kann man Zauber nur mit diesem Script per EXP erlernen, aber ich möchte es mit Gold einführen.
Kann mir jemand dies umschreiben?

Mfg Herodennis
!Mein Youtube Großprojekt!

Verschiedene Kurse!
Bild Bild

Schaut jetzt Hier bei mir vorbei!

Avery

Dinoritterin mit Herrschaft über die Contests und Ressourcen

  • Nachricht senden

2

Dienstag, 4. Juni 2013, 21:37

Das mit der Exp ist doch nur ein Edit, normal kann man in dem Shop die Skills "ganz normal" kaufen:
[XP] Skill Shop

3

Dienstag, 4. Juni 2013, 21:50

Okay danke :)
!Mein Youtube Großprojekt!

Verschiedene Kurse!
Bild Bild

Schaut jetzt Hier bei mir vorbei!

Social Bookmarks