RMRK is retiring.
Server is paid up for the rest of 2026, but the forum may go after that. See here for more information. Please archive or save anything you would like to keep before 2027.
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.