Main Menu
  • Welcome to The RPG Maker Resource Kit.

[XP] Skill Shop

Started by game_guy, June 07, 2009, 10:43:16 AM

0 Members and 1 Guest are viewing this topic.

game_guy

Skill Shop
Authors: game_guy
Version: 1.5
Type: Skill Buying Script
Key Term: Custom Skill System


Introduction

What this script does is act as a shop but sells skills instead that you can teach to your party members.


Features


  • Sells Skills to teach Actors
  • Make it any actor can learn any skill
  • Make skills class specific
  • Easy to configure then most skill shops I've seen


Screenshots

N/A


Demo

Removed because demo had bugged version


Script


[SPOILER]
cc#===============================================================================
# Skill Shop
# Author: Game_guy
# Date: June 7th, 2009
# Version: 1.5
#===============================================================================
#
# 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
#===============================================================================
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
 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 8 then return [1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
     when 9 then return [69, 70, 71, 72, 57, 58, 59, 60, 61, 62, 63, 64]
     when 10 then return [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
     end
     return []
   end
 #==========================
 # END CONFIG
 #==========================
 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
   @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]
     draw_actor_graphic(actor, x - 40, y + 60)
     draw_actor_name(actor, x, y + 10)
     if actor.skill_learn?($thing.id)
       $text = "Aquired"
     elsif GameGuy::UseClasses#$data_classes[actor.class_id].learnskills.include?($thing.id)
       if $data_classes[actor.class_id].learnskills.include?($thing.id)
         $text = "Can Learn"
       else
         $text = "Can't Learn"
       end
       
     else
       $text = "Can Learn"
     end
     
     self.contents.draw_text(x, 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
     @command.active = true
     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
   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
       @skillbuy.active = true
     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
     @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)
     @status.active = false
     @skillbuy.active = true
     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.learn_skill(@skillbuy.skill.id)
           $game_party.lose_gold(@skillbuy.skill.price)
           $game_system.se_play($data_system.decision_se)
           @status.refresh
           return
         else
           $game_system.se_play($data_system.buzzer_se)
           return
         end
       else
         @actort.learn_skill(@skillbuy.skill.id)
         $game_party.lose_gold(@skillbuy.skill.price)
         $game_system.se_play($data_system.decision_se)
         @status.refresh
         return
       end
       
     else
       $game_system.se_play($data_system.buzzer_se)
       return
     end
   end
 end

end


[/SPOILER]


Instructions

In the script


Compatibility

Not tested with SDK. Wont work with other skill shop scripts


Credits and Thanks


  • game_guy ~ For making it


Author's Notes

Give credits and enjoy!

modern algebra

Looks nice. I will have to test it out.

game_guy

Yea I am trying to get as good as a scripter as I can. I enjoy doing this tell me if it works all right I only know of one person who actually tested it.