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.

[REVIEW] Quick and Easy Skill Shop

Quick And Easy Skill ShopVersion: 1.0
By: LegacyX


Introduction
This script enables you to have a shop you can buy/learn skills from.

Features
  • Learn Skills
  • Individual Hero Skills
  • Learn Skills On Level

Screenshots
none yet sorry.

Script

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

# ** Quick and Easy Skill Shop

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

#   Author: LegacyX

#   Version: 1.0

#   Build Date: 26.02.09

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

#   

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

=begin

=============================

* Info:

=============================

    After seeing Sephirothspawn's Skill Shop script i decided to make my own....so here it is,

 i will try to comment this script alot for Newbs but it isn't hard to figure out what goes where.

==============================

  * How to Use:                        

==============================

    You will need to call "$skill_shop =[i]"   i = ID of skill...you must call the code for it to work!.

 You will also need to call "$scene = Scene_Skill_Shop.new" to open up the Skill shop main window.

===============================

 * Example:

===============================

 

  $skill_shop = [1,2,3,6,7]

  $scene = Scene_Skill_Shop.new

 

 To set the text that appears in the Skill shop main windows Find   "# Skill Shop Config

You can set Skill Price under "# Price Data".

You can allow skills to be learnt by individual heros by finding "# Skill data".

 

This is the layout:

[ID of skill, Level requirement for learn]

 

==============================

 * Special Thanks & Credits:

==============================

 

     Sephirothspawn: For all the coding help and the Skill Shop script which inspired me

                    to make my own.

 

=end

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

# ^ Module SkillShop_Config Begins

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

module Skill_Shop

 # Skill Shop Config

     #Edit here

    Shop_Message = "Welcome how can i help?"

    How_Learn = "Who would you like to teach?"   #Text shown above Characters in shop window

    Can_Learn = "Learn!"                                    #Text shown when a hearo can learn the skill

    Can_Learn_Lv = "Learn on Lv"                        #text shown when a hero CAN learn the skill

    Cant_Learn = "Unable to learn"                     #Text shown if a hero is unable to learn that perticular skill

    Learnt = "Learned!"                                     #text shown when a hero has learnt a skill

    Teach = "Teach!"                                          #Command (Buy in normal shops)

    Cancel = "Exit"                                           #Command (Cancel in normal shops)

 

  # Add Prices Here

  PRICE = {

  0 => 100,   #Defualt price for skills with no price set

  1 => 150,   #Price for Skill ID   1

  2 => 550,

  3 => 450,

  }

 

  # Skill Data

  # add the skills that each individual hero can learn.

  #Layout is mentioned above.

  SKILL_BUY = {

1 => [

  [1,4],[2,3],[3,1],[7,1],

],

 

2 => [

  [1,4],[2,3],[3,1],[7,5],

],

 

3 => [

  [1,4],[2,3],[3,1],[7,5],

],

 

}

  # Add Price

  def self.skill_price(id)

     if PRICE.include?(id)

        return PRICE[id]

     else

        return PRICE[0]

     end

  end

  # Add Hero id

  def self.skill_buy(id)

     if SKILL_BUY.include?(id)

        return SKILL_BUY[id]

     else

        return []

     end

  end

end

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

# ** Class Game_Actor

#------------------------------------------------------------------------------

#   This class handles the actor array. Refer to "$game_actors" for each

#   instance of this class.

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

class Game_Actor < Game_Battler

  def learn?(skill)

     learn = skill_learn?(skill.id)

     if learn

        return false

     else

        return true

     end

  end

end

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

#class Window_Skill_ShopCommand

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

class Window_Skill_ShopCommand < Window_Selectable

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

     super(0, 64, 480, 64)

     self.contents = Bitmap.new(width - 32, height - 32)

     self.contents.font.name = "Tahoma"

     self.contents.font.size = 21

     @item_max = 2

     @column_max = 2

     #Commands Setup... if you wish to add more commands edit here.

     s1 = Skill_Shop::Teach

     s2 = Skill_Shop::Cancel

     @commands = [s1, s2]

     refresh

     self.index = 0

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  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_Skill_ShopBuy

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

class Window_Skill_ShopBuy < Window_Selectable

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize(shop_goods)

     super(0, 128, 368, 352)

     @skill_shop_goods = $skill_shop

     refresh

     self.index = 0

  end

  #--------------------------------------------------------------------------

  def skill

     return @data[self.index]

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  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

     # If the number of items is not 0, it draws up bit map, drawing all item

     @item_max = @data.size

     if @item_max > 0

        self.contents = Bitmap.new(width - 32, row_max * 32)

     self.contents.font.name = "Tahoma"

     self.contents.font.size = 21

        for i in 0...@item_max

           draw_item(i)

        end

     end

  end

  #--------------------------------------------------------------------------

  def draw_item(index)

     skill = @data[index]

     # Acquiring the frequency of possession of the item

     price = Skill_Shop.skill_price(skill.id)

     enabled = (price <= $game_party.gold)

     # If price is not below the money in hand, at the same time the frequency of possession 99, usually in letter color

     # So if is not, it sets to invalid letter color

     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_Skill_ShopStatus

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

class Window_Skill_ShopStatus < Window_Selectable

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

     super(368, 128, 272, 352)

     self.contents = Bitmap.new(width - 32, height - 32)

     self.contents.font.name = "Tahoma"

     self.contents.font.size = 21

     @item = nil

     refresh

     self.active = false

     self.index = -1

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  def refresh

     self.contents.clear

     @item_max = $game_party.actors.size

     if @item == nil

        return

     end

     self.contents.font.color = system_color

     self.contents.draw_text(4, 0, self.width - 32, 32, Skill_Shop::How_Learn)

     self.contents.font.color = normal_color

     # Equipment supplementary information

     for i in 0...$game_party.actors.size

        # Acquiring the actor

        can = false

        lv = false

        ac_lv = 0

        actor = $game_party.actors[i]

        can_learn = Skill_Shop.skill_buy(actor.id)

        id = @item.id

        for e in 0...can_learn.size

           if can_learn[e][0] == id

              can = true

              if can_learn[e][1] <= actor.level

                 lv = true

              else

                 lv = false

                 ac_lv = can_learn[e][1]

              end

              break

           else

              can = false

           end

        end

        enabled = (can and lv and actor.learn?(@item))

        # If equipment possibility if usually in letter color, the impossibility, it sets to invalid letter color

        if enabled

           self.contents.font.color = normal_color

        else

           self.contents.font.color = disabled_color

        end

        #Draw Character Pic

        bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)

        cw = bitmap.rect.width / 4

        ch = bitmap.rect.height / 4

        src_rect = Rect.new(0, 0, cw, ch)

        cx = contents.text_size(actor.name).width

        self.contents.blt(cx, 64 + 64 * i, bitmap, src_rect)

        # Drawing the name of the actor

        self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)

        # Check Skill

        if can == false

           text = Skill_Shop::Cant_Learn

        elsif can == true and lv == false

           ac = ac_lv.to_s

           text = Skill_Shop::Can_Learn_Lv + " " + ac + "+"

        elsif actor.learn?(@item) == false

           text = Skill_Shop::Learnt

        else

           text = Skill_Shop::Can_Learn

        end

        # Drawing the item

        self.contents.draw_text(124, 64 + 64 * i, 112, 32, text, 2)

     end

  end

  #--------------------------------------------------------------------------

  def item=(item)

     if @item != item

        @item = item

        refresh

     end

  end

  #--------------------------------------------------------------------------

  def update_cursor_rect

     # Cursor position as for -1 all selection, -2 below independence selection (user himself)

     if @index < 0

        self.cursor_rect.empty

     else

        self.cursor_rect.set(0, 62 + @index * 64, self.width - 32, 50)

     end

  end

end

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

#class Scene_Skill_Shop

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

#

#

#-----I advise you not to touch anything past here unless you know what you are doing.-------

#

#

class Scene_Skill_Shop

  #--------------------------------------------------------------------------

  def main

     # Drawing up the help window

     @help_window = Window_Help.new

     # Drawing up the command window

     @command_window = Window_Skill_ShopCommand.new

     # Drawing up the Goldwyn dough

     @gold_window = Window_Gold.new

     @gold_window.x = 480

     @gold_window.y = 64

     # Drawing up the dummy window

     @dummy_window = Window_Base.new(0, 128, 640, 352)

     # Drawing up the purchase window

     @buy_window = Window_Skill_ShopBuy.new($game_temp.shop_goods)

     @buy_window.active = false

     @buy_window.visible = false

     @buy_window.help_window = @help_window

     # Drawing up the status window

     @status_window = Window_Skill_ShopStatus.new

     @status_window.visible = false

     @status_window.active

     # Transition execution

     Graphics.transition

     # Main loop

     loop do

        # Renewing the game picture

        Graphics.update

        # Updating the information of input

        Input.update

        # Frame renewal

        update

        # When the picture changes, discontinuing the loop

        if $scene != self

           break

        end

     end

     # Transition preparation

     Graphics.freeze

     # Releasing the window

     @help_window.dispose

     @command_window.dispose

     @gold_window.dispose

     @dummy_window.dispose

     @buy_window.dispose

     @status_window.dispose

  end

  #--------------------------------------------------------------------------

  def update

     # Renewing the window

     @help_window.update

     @command_window.update

     @gold_window.update

     @dummy_window.update

     @buy_window.update

     @status_window.update

     # When the command window is active,: Update_command is called

     if @command_window.active

        update_command

        return

     end

     # When the purchase window is active,: Update_buy is called

     if @buy_window.active

        update_buy

        return

     end

     # When the target window is active,: Update_target is called

     if @status_window.active

        update_target

        return

     end

  end

  #--------------------------------------------------------------------------

  def update_command

     # The B when button is pushed

     if Input.trigger?(Input::B)

        # Performing cancellation SE

        $game_system.se_play($data_system.cancel_se)

        # Change to map picture

        $scene = Scene_Map.new

        return

     end

     # When C button is pushed

     if Input.trigger?(Input::C)

        # Eliminating the help text

        @help_window.set_text("")

        # It diverges at cursor position of the command window

        case @command_window.index

        when 0   # It purchases

           # Performing decision SE

           $game_system.se_play($data_system.decision_se)

           # State of window to purchase mode

           @command_window.active = false

           @dummy_window.visible = false

           @buy_window.active = true

           @buy_window.visible = true

           @buy_window.refresh

           @status_window.visible = true

        when 1   # It stops

           # Performing decision SE

           $game_system.se_play($data_system.decision_se)

           # Change to map picture

           $scene = Scene_Map.new

        end

        return

     end

  end

  #--------------------------------------------------------------------------

  def update_buy

     # Setting the item of the status window

     @status_window.item = @buy_window.skill

     # The B when button is pushed

     if Input.trigger?(Input::B)

        # Performing cancellation SE

        $game_system.se_play($data_system.cancel_se)

        # State of window to early mode

        @command_window.active = true

        @dummy_window.visible = true

        @buy_window.active = false

        @buy_window.visible = false

        @status_window.visible = false

        @status_window.item = nil

        # Eliminating the help text

        @help_window.set_text("")

        return

     end

     # When C button is pushed

     if Input.trigger?(Input::C)

        # Acquiring the item

        @item = @buy_window.skill

        @price = Skill_Shop.skill_price(@item.id)

        enabled = (@price <= $game_party.gold)

        # When the item is invalid, or when price it is on from the money in hand

        unless   enabled

           # Performing buzzer SE

           $game_system.se_play($data_system.buzzer_se)

           return

        end

        # Performing decision SE

        $game_system.se_play($data_system.decision_se)

        @buy_window.active = false

        @status_window.active = true

        @status_window.index = 0

     end

  end

  #--------------------------------------------------------------------------

  def update_target

     # The B when button is pushed

     if Input.trigger?(Input::B)

        # Performing cancellation SE

        $game_system.se_play($data_system.cancel_se)

        # Eliminating the target window

        @buy_window.active = true

        @status_window.index =- 1

        @status_window.active = false

        return

     end

     # When C button is pushed

     if Input.trigger?(Input::C)

        @actor = $game_party.actors[@status_window.index]

        can = false

        lv = false

        can_learn = Skill_Shop.skill_buy(@actor.id)

        id = @item.id

        for i in 0...can_learn.size

           if can_learn[i][0] == id

              can = true

              if can_learn[i][1] <= @actor.level

                 lv = true

              else

                 lv = false

              end

              break

           else

              can = false

           end

        end

        enabled = (can and lv and @actor.learn?(@item))

        # When with SP and so on is cut off and it becomes not be able to use

        unless enabled

           # Performing buzzer SE

           $game_system.se_play($data_system.buzzer_se)

           return

        end

        # Performing shop SE

        $game_system.se_play($data_system.shop_se)

        @actor.learn_skill(@item.id)

        $game_party.lose_gold(@price)

        @buy_window.refresh

        @gold_window.refresh

        @status_window.refresh

        @buy_window.active = true

        @status_window.index =- 1

        @status_window.active = false

       end

  end

end

 

 

Instructions
Place above MAin and Below Scene_Debug, futher intructions in code.
Use $scene = Scene_Skill_Shop.new to call Skill Shop window
(if there any problems Just ask.)

Compatibility
Cannot be used with RMVX yet.

Credits and Thanks
Sephirothspawn: For all the coding help you have given me. And for your Skill Shop script which has inspired me
to make my own.
Author's Notes
I will be making the script compatible with the SDK soon.. that will be version 1.1
and i will be also trying to make it compatible with RMVX.

Terms and Conditions
No limits....but i would like some credit if you use this script in your game.
 

cairn

Member

You actually made the silliest mistake of ruby/programming ever. You gave the module the name Skill_Shop, while ALL the other module calls on the whole script are going with SKILL_SHOP::*the variable name here*. Just change the module name and you have a working script.

Besides that, the script is quite good actually, and it's useful to some people. Good job with!
 
oh... im sorry about that..

but thanks for the comment =]

Edit:

I have changed it to Config... will you let me know if any errors accure please...ass well as what you did you make the error accure?
 

cairn

Member

I didn't manage to test the script with the changed name, but I advise you to change the module's name to something like SkillShop_Config, as Config is a pretty common term used when you start something.
 
When you have more than four heroes in your party, the window does not scroll. It would be more user friendly if it did so that users don't have to set up their party every time.

Also, can it be set up to run on AP?
 
@Khoa

im already trying to make it so that its compatible with VX...

@Sol_fury..
I can try to make it run on AP and.. im not sure about the party thing...but ill have a play around ok.

@cairn
thanks.. il change it right away.

Edit:

changed module Config to; Module SkillShop_Config
 
Someone named Nechigawara Sanzenin made this almost exact script a while back. Even the typos are the same. Are you that person by chance?
 
I wonder why all those stupid Â's came from, so i decided to remove them. But after i removed the Â's it worked to playtest but when i entered the Teach! an error occoured. and it dint work for me so i changed the module, hope that was okay? And then it worked.


So now its working,

I think its great, very useful to me and my game, Thanks!


Edit: So i wont post it if you dont think its okay, I mean, in this topic like a reply :) Or in PM
 
LegacyX":2nt2zp6s said:
No, you can post it :)

ill aslo edit it later and have a look see :P

Alright...

Here it goes:
Code:
#==============================================================================

# ** Quick and Easy Skill Shop By FF12_master **

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

#   Author: FF12_master

#   Version: 1.0

#   Build Date: 26.02.09

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

#   

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

=begin

=============================

* Info:

=============================

     After seeing Sephirothspawn's Skill Shop script i decided to make my own....so here it is,

  i will try to comment this script alot for Newbs but it isn't hard to figure out what goes where.

==============================

   * How to Use:                        

==============================

     You will need to call "$skill_shop =[i]"   i = ID of skill...you must call the code for it to work!.

  You will also need to call "$scene = Scene_Skill_Shop.new" to open up the Skill shop main window.

===============================

  * Example:

===============================

  

   $skill_shop = [1,2,3,6,7]

   $scene = Scene_Skill_Shop.new

  

  To set the text that appears in the Skill shop main windows Find   "# Skill Shop Config

You can set Skill Price under "# Price Data".

You can allow skills to be learnt by individual heros by finding "# Skill data".

  

This is the layout:

[ID of skill, Level requirement for learn]

  

==============================

  * Special Thanks & Credits:

==============================

  

      Sephirothspawn: For all the coding help and the Skill Shop script which inspired me

                     to make my own.

  

=end

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

# ^ Module SkillShop_Config Begins

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

module SkillShop_Config

  # Skill Shop Config

      #Edit here

     Shop_Message = "Welcome how can i help?"

     How_Learn = "Who would you like to teach?"   #Text shown above Characters in shop window

     Can_Learn = "Learn"                                    #Text shown when a hearo can learn the skill

     Can_Learn_Lv = "Learn On Lv"                        #text shown when a hero CAN learn the skill

     Cant_Learn = "Unable To Learn"                     #Text shown if a hero is unable to learn that perticular skill

     Learnt = "Learned"                                     #text shown when a hero has learnt a skill

     Teach = "Teach"                                          #Command (Buy in normal shops)

     Cancel = "Exit"                                           #Command (Cancel in normal shops)

  

   # Add Prices Here

   PRICE = {

   0 => 100,   #Defualt price for skills with no price set

   1 => 150,   #Price for Skill ID   1

   2 => 550,

   3 => 450,

   4 => 746,

   5 => 765,

   6 => 765,

   7 => 765,

   8 => 765,

   9 => 765,

   10 => 765,

   11 => 765,

   12 => 765,

   13 => 765,

   14 => 765,

   15 => 765,

   16 => 765,

   17 => 765,

   18 => 765,

   19 => 765,

   20 => 765,

   }

   # Skill Data

   # add the skills that each individual hero can learn.

   #Layout is mentioned above.

   SKILL_BUY = {

1 => [

   [1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],

],

  

2 => [

   [1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],

],

  

3 => [

   [1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],

],

  

}

   # Add Price

   def self.skill_price(id)

      if PRICE.include?(id)

         return PRICE[id]

      else

         return PRICE[0]

      end

   end

   # Add Hero id

   def self.skill_buy(id)

      if SKILL_BUY.include?(id)

         return SKILL_BUY[id]

      else

         return []

      end

   end

end

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

# ** Class Game_Actor

#------------------------------------------------------------------------------

#   This class handles the actor array. Refer to "$game_actors" for each

#   instance of this class.

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

class Game_Actor < Game_Battler

   def learn?(skill)

      learn = skill_learn?(skill.id)

      if learn

         return false

      else

         return true

      end

   end

end

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

#class Window_Skill_ShopCommand

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

class Window_Skill_ShopCommand < Window_Selectable

   #--------------------------------------------------------------------------

   # * Object Initialization

   #--------------------------------------------------------------------------

   def initialize

      super(0, 64, 480, 64)

      self.contents = Bitmap.new(width - 32, height - 32)

      self.contents.font.name = "Tahoma"

      self.contents.font.size = 21

      @item_max = 2

      @column_max = 2

      #Commands Setup... if you wish to add more commands edit here.

      s1 = SkillShop_Config::Teach

      s2 = SkillShop_Config::Cancel

      @commands = [s1, s2]

      refresh

      self.index = 0

   end

   #--------------------------------------------------------------------------

   # * Refresh

   #--------------------------------------------------------------------------

   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_Skill_ShopBuy

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

class Window_Skill_ShopBuy < Window_Selectable

   #--------------------------------------------------------------------------

   # * Object Initialization

   #--------------------------------------------------------------------------

   def initialize(shop_goods)

      super(0, 128, 368, 352)

      @skill_shop_goods = $skill_shop

      refresh

      self.index = 0

   end

   #--------------------------------------------------------------------------

   def skill

      return @data[self.index]

   end

   #--------------------------------------------------------------------------

   # * Refresh

   #--------------------------------------------------------------------------

   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

      # If the number of items is not 0, it draws up bit map, drawing all item

      @item_max = @data.size

      if @item_max > 0

         self.contents = Bitmap.new(width - 32, row_max * 32)

      self.contents.font.name = "Tahoma"

      self.contents.font.size = 21

         for i in 0...@item_max

            draw_item(i)

         end

      end

   end

   #--------------------------------------------------------------------------

   def draw_item(index)

      skill = @data[index]

      # Acquiring the frequency of possession of the item

      price = SkillShop_Config.skill_price(skill.id)

      enabled = (price <= $game_party.gold)

      # If price is not below the money in hand, at the same time the frequency of possession 99, usually in letter color

      # So if is not, it sets to invalid letter color

      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_Skill_ShopStatus

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

class Window_Skill_ShopStatus < Window_Selectable

   #--------------------------------------------------------------------------

   # * Object Initialization

   #--------------------------------------------------------------------------

   def initialize

      super(368, 128, 272, 352)

      self.contents = Bitmap.new(width - 32, height - 32)

      self.contents.font.name = "Tahoma"

      self.contents.font.size = 21

      @item = nil

      refresh

      self.active = false

      self.index = -1

   end

   #--------------------------------------------------------------------------

   # * Refresh

   #--------------------------------------------------------------------------

   def refresh

      self.contents.clear

      @item_max = $game_party.actors.size

      if @item == nil

         return

      end

      self.contents.font.color = system_color

      self.contents.draw_text(4, 0, self.width - 32, 32,  SkillShop_Config::How_Learn)

      self.contents.font.color = normal_color

      # Equipment supplementary information

      for i in 0...$game_party.actors.size

         # Acquiring the actor

         can = false

         lv = false

         ac_lv = 0

         actor = $game_party.actors[i]

         can_learn =  SkillShop_Config.skill_buy(actor.id)

         id = @item.id

         for e in 0...can_learn.size

            if can_learn[e][0] == id

               can = true

               if can_learn[e][1] <= actor.level

                  lv = true

               else

                  lv = false

                  ac_lv = can_learn[e][1]

               end

               break

            else

               can = false

            end

         end

         enabled = (can and lv and actor.learn?(@item))

         # If equipment possibility if usually in letter color, the impossibility, it sets to invalid letter color

         if enabled

            self.contents.font.color = normal_color

         else

            self.contents.font.color = disabled_color

         end

         #Draw Character Pic

         bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)

         cw = bitmap.rect.width / 4

         ch = bitmap.rect.height / 4

         src_rect = Rect.new(0, 0, cw, ch)

         cx = contents.text_size(actor.name).width

         self.contents.blt(cx, 64 + 64 * i, bitmap, src_rect)

         # Drawing the name of the actor

         self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)

         # Check Skill

         if can == false

            text =  SkillShop_Config::Cant_Learn

         elsif can == true and lv == false

            ac = ac_lv.to_s

            text =  SkillShop_Config::Can_Learn_Lv + " " + ac + "+"

         elsif actor.learn?(@item) == false

            text =  SkillShop_Config::Learnt

         else

            text =  SkillShop_Config::Can_Learn

         end

         # Drawing the item

         self.contents.draw_text(124, 64 + 64 * i, 112, 32, text, 2)

      end

   end

   #--------------------------------------------------------------------------

   def item=(item)

      if @item != item

         @item = item

         refresh

      end

   end

   #--------------------------------------------------------------------------

   def update_cursor_rect

      # Cursor position as for -1 all selection, -2 below independence selection (user himself)

      if @index < 0

         self.cursor_rect.empty

      else

         self.cursor_rect.set(0, 62 + @index * 64, self.width - 32, 50)

      end

   end

end

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

#class Scene_Skill_Shop

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

#

#

#-----I advise you not to touch anything past here unless you know what you are doing.-------

#

#

class Scene_Skill_Shop

   #--------------------------------------------------------------------------

   def main

      # Drawing up the help window

      @help_window = Window_Help.new

      # Drawing up the command window

      @command_window = Window_Skill_ShopCommand.new

      # Drawing up the Goldwyn dough

      @gold_window = Window_Gold.new

      @gold_window.x = 480

      @gold_window.y = 64

      # Drawing up the dummy window

      @dummy_window = Window_Base.new(0, 128, 640, 352)

      # Drawing up the purchase window

      @buy_window = Window_Skill_ShopBuy.new($game_temp.shop_goods)

      @buy_window.active = false

      @buy_window.visible = false

      @buy_window.help_window = @help_window

      # Drawing up the status window

      @status_window = Window_Skill_ShopStatus.new

      @status_window.visible = false

      @status_window.active

      # Transition execution

      Graphics.transition

      # Main loop

      loop do

         # Renewing the game picture

         Graphics.update

         # Updating the information of input

         Input.update

         # Frame renewal

         update

         # When the picture changes, discontinuing the loop

         if $scene != self

            break

         end

      end

      # Transition preparation

      Graphics.freeze

      # Releasing the window

      @help_window.dispose

      @command_window.dispose

      @gold_window.dispose

      @dummy_window.dispose

      @buy_window.dispose

      @status_window.dispose

   end

   #--------------------------------------------------------------------------

   def update

      # Renewing the window

      @help_window.update

      @command_window.update

      @gold_window.update

      @dummy_window.update

      @buy_window.update

      @status_window.update

      # When the command window is active,: Update_command is called

      if @command_window.active

         update_command

         return

      end

      # When the purchase window is active,: Update_buy is called

      if @buy_window.active

         update_buy

         return

      end

      # When the target window is active,: Update_target is called

      if @status_window.active

         update_target

         return

      end

   end

   #--------------------------------------------------------------------------

   def update_command

      # The B when button is pushed

      if Input.trigger?(Input::B)

         # Performing cancellation SE

         $game_system.se_play($data_system.cancel_se)

         # Change to map picture

         $scene = Scene_Map.new

         return

      end

      # When C button is pushed

      if Input.trigger?(Input::C)

         # Eliminating the help text

         @help_window.set_text("")

         # It diverges at cursor position of the command window

         case @command_window.index

         when 0   # It purchases

            # Performing decision SE

            $game_system.se_play($data_system.decision_se)

            # State of window to purchase mode

            @command_window.active = false

            @dummy_window.visible = false

            @buy_window.active = true

            @buy_window.visible = true

            @buy_window.refresh

            @status_window.visible = true

         when 1   # It stops

            # Performing decision SE

            $game_system.se_play($data_system.decision_se)

            # Change to map picture

            $scene = Scene_Map.new

         end

         return

      end

   end

   #--------------------------------------------------------------------------

   def update_buy

      # Setting the item of the status window

      @status_window.item = @buy_window.skill

      # The B when button is pushed

      if Input.trigger?(Input::B)

         # Performing cancellation SE

         $game_system.se_play($data_system.cancel_se)

         # State of window to early mode

         @command_window.active = true

         @dummy_window.visible = true

         @buy_window.active = false

         @buy_window.visible = false

         @status_window.visible = false

         @status_window.item = nil

         # Eliminating the help text

         @help_window.set_text("")

         return

      end

      # When C button is pushed

      if Input.trigger?(Input::C)

         # Acquiring the item

         @item = @buy_window.skill

         @price =  SkillShop_Config.skill_price(@item.id)

         enabled = (@price <= $game_party.gold)

         # When the item is invalid, or when price it is on from the money in hand

         unless   enabled

            # Performing buzzer SE

            $game_system.se_play($data_system.buzzer_se)

            return

         end

         # Performing decision SE

         $game_system.se_play($data_system.decision_se)

         @buy_window.active = false

         @status_window.active = true

         @status_window.index = 0

      end

   end

   #--------------------------------------------------------------------------

   def update_target

      # The B when button is pushed

      if Input.trigger?(Input::B)

         # Performing cancellation SE

         $game_system.se_play($data_system.cancel_se)

         # Eliminating the target window

         @buy_window.active = true

         @status_window.index =- 1

         @status_window.active = false

         return

      end

      # When C button is pushed

      if Input.trigger?(Input::C)

         @actor = $game_party.actors[@status_window.index]

         can = false

         lv = false

         can_learn =  SkillShop_Config.skill_buy(@actor.id)

         id = @item.id

         for i in 0...can_learn.size

            if can_learn[i][0] == id

               can = true

               if can_learn[i][1] <= @actor.level

                  lv = true

               else

                  lv = false

               end

               break

            else

               can = false

            end

         end

         enabled = (can and lv and @actor.learn?(@item))

         # When with SP and so on is cut off and it becomes not be able to use

         unless enabled

            # Performing buzzer SE

            $game_system.se_play($data_system.buzzer_se)

            return

         end

         # Performing shop SE

         $game_system.se_play($data_system.shop_se)

         @actor.learn_skill(@item.id)

         $game_party.lose_gold(@price)

         @buy_window.refresh

         @gold_window.refresh

         @status_window.refresh

         @buy_window.active = true

         @status_window.index =- 1

         @status_window.active = false

        end

   end

end
 

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