Forum o programie RPG Maker
Skill Shop to skrypt dzięki któremu możemy kupywać umiejętności.
Autorem skryptu jest Game_guy
Skrypt:
#=============================================================================== # Skill Shop # Author: Game_guy # Date: June 7th, 2009 # Version: 2.2 #=============================================================================== # # 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 1 then return 50 when 57 then return 75 end return 10 end def llevel case id #========================== # CONFIG LEVEL #========================== # use # when skill_id then return level when 57 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 [57, 58, 59, 60] 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[i]] 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_party.gold) 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 = "Aquired" elsif GameGuy::UseClasses if classs.learnskills.include?($thing.id) && $thing.llevel <= actor.level self.contents.font.color = normal_color $text = "Can Learn" elsif classs.learnskills.include?($thing.id) && $thing.llevel > actor.level self.contents.font.color = disabled_color $text = "Can Learn At 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_Gold.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_party.gold) 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_party.lose_gold(@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_party.lose_gold(@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
Offline