Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

[XP] Skill Shop

Skill Shop Version: 1.8
By: Game_guy

Introduction

I've seen a few skill shop scripts but one that didnt really fit my need so instead I made my own.

Screenshots

skillshoop.png

skillshoop2.png

skillshoop3.png

Demo

Version 1.8 Demo
Demo

Script

Code:
#===============================================================================

# Skill Shop

# Author: Game_guy

# Date: June 7th, 2009

# Version: 1.8

#===============================================================================

# 

# 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.

#===============================================================================

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 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]

      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

      @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 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

        @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)

      

      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)

            @skillbuy.active = true

            @status.active = false

            @status.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)

            @skillbuy.active = true

            @status.active = false

            @status.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

Instructions

In the script

FAQ

None yet

Compatibility

Wont work with other skill shop scripts
Tested with SDK by Sirus01 and it works with all versions :)

Credits and Thanks

  • game_guy ~ For making it

Author's Notes

Give credits and enjoy!

Terms and Conditions

Use for whatever just give credits.
 
anyone like this at all? I know theres otehr skillshops even already one posted here but I'd at least like to get some feedback on it.
 
I like it. It looks nice and is easy to use. I was wondering if it's possible to have this deduct from a variable instead of gold when learning abilities, and if you could have new abilities unlock based on completing a quest instead of being a certain level.
 
Ive got it in use, its only that you must edit the script for every skill u want for higher lvl.
And if you wanna varie prices, you gotta edit the script too, did all that, half an hour of work for all prices and all skill lvls


But yet, game_guy, i love it :D
 
@posts: Thanks for the comments guys.

@ravenfire: Okay first I'd have to mod window gold a bit to display the variable. As for adding skills to shops upon quest completion add this above $scene = Scene_Title.new in main

$skills = []

then every completed quest do this
$skills.push(skill_id)

then when calling the skill shop do this

$scene = SkillShop.new($skills)

@dylan: You saw through my disguise D:
 
Amazing skillzshop I've seen yet. I've tested it and, according to my computer, it works with the old versions of SDK. I didn't not get any errors.

Is it possible to add price discounts via variables? I'd like there to be an option to raise price, or better yet change prices in the middle of the game via events.

Good Job! :smile:
 
Thanks ^_^ I'm not sure.

Try changing the prices of a skill to this
$game_variables[1]

then change the variable one to different prices and test it out!

Let me know the results and thnx for the comment :)
 
Love this! Best I've seen thus far in the RMXP community! I never really liked how you learnt skills as you leveled... Diden't seem too realistic to me.

By the way, this works will the SDK. All versions.
~Good Job!
 

TCO

Member

i relly like this script but i have request.

i have achevievement book in my game, and u get achievement points after unlocking achievement. i would want to
be able use those achievement points for this shop. can u make it or do i have to keep searching for more experienced scripter?
 
Not going to be rude or anything.

But. this looks almost excatly like my Skill Shop, only you have made it less Customizable, and well the scripting is all over the place. Well thats all im going to say.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top