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.

Require an edited Skill shop.

So what I'm after is basically a skill shop.

However, There are few specifications that I would like.

I only have one character, and five weapons.

I'm sure you've played Devil May Cry; I'm after the kind of skill shop that that has.

Depending on which weapon is equipped, the shop will only show skills available for that weapon.

So it'd end up looking like this:
examam.png

The picture of the weapon would be in the pictures folder, with the same name as the weapon icon.

Each skill gives a predefined bonus to the weapon's base stats when learned. My imagination makes me think this...
Code:
when [1,2,3,4,5,6,7] increase variable RPG::Cache.weapons[1]ATK + 1

when [8,9,10,11] increase variable RPG::Cache.weapons[1]STR +1

 

etc.
Each skill costs a certain amount of gold and requires a certain predefined character level.

The script I'm currently using is this one:
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 [1]

      when 2 then return [2]

      when 3 then return [3]

      when 5 then return [4]

      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.windowskin = RPG::Cache.windowskin("Menu.png")

    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)

    self.windowskin = RPG::Cache.windowskin("Menu.png")

    @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.windowskin = RPG::Cache.windowskin("Menu.png")

    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 - 10, 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 - 10, 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

 

If anyone thinks that they could do this, I'd be very much appreciated. ^^

It may be harder than I think, I'm no scripter... If it is way too hard, tell me, and I'll ditch the hard parts.
 

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