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.

Weapon Requirements

Status
Not open for further replies.
Basically this is a re-write of my first released script, so it's much better in alot of ways but if my old one works for you then you have no need for this.

Ok this script allows you to set requirements for using weapons and armour, str, dex, int and agi aswell as level and a fighting style requirement.

First the script:
Code:
module RPG
  
  class Weapon
    
    attr_reader   :str_needed
    attr_reader   :dex_needed
    attr_reader   :int_needed
    attr_reader   :agi_needed
    attr_reader   :lvl_needed
    attr_reader   :style_needed
    
    def setup_requirements
      @str_needed = 0
      @dex_needed = 0
      @int_needed = 0
      @agi_needed = 0
      @lvl_needed = 0
      @style_needed = ''
      
      case @id
      when 1
        @str_needed = 50
        @style_needed = 'Sword'
      when 29
        @int_needed = 50
        @style_needed = 'Rod'
      end
      
    end
    
  end
  
  class Armor
    
    attr_reader   :str_needed
    attr_reader   :dex_needed
    attr_reader   :int_needed
    attr_reader   :agi_needed
    attr_reader   :lvl_needed
    attr_reader   :style_needed
    
    def setup_requirements
      @str_needed = 0
      @dex_needed = 0
      @int_needed = 0
      @agi_needed = 0
      @lvl_needed = 0
      @style_needed = ''
      
      case @id
      when 1
        @str_needed = 50
      when 2
        @str_needed = 100
      end
      
    end
    
  end
  
end

class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add equippable weapons
    if @equip_type == 0
      weapon_set = $data_classes[@actor.class_id].weapon_set
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
          if @actor.meets_requirements?($data_weapons[i])
            @data.push($data_weapons[i])
          end
        end
      end
    end
    # Add equippable armor
    if @equip_type != 0
      armor_set = $data_classes[@actor.class_id].armor_set
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and armor_set.include?(i)
          if $data_armors[i].kind == @equip_type-1
            if @actor.meets_requirements?($data_armors[i])
              @data.push($data_armors[i])
            end
          end
        end
      end
    end
    # Add blank page
    @data.push(nil)
    # Make a bit map and draw all items
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max-1
      draw_item(i)
    end
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :styles
  #--------------------------------------------------------------------------
  # * Setup
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  alias styles_setup setup
  def setup(actor_id)
    styles_setup(actor_id)
    @styles = []
    if actor_id == 1
      @styles.push('Sword')
    end
    if actor_id == 8
      @styles.push('Rod')
    end
  end
  
  def meets_requirements?(item)
    if item.str_needed > self.str
      return false
    end
    if item.dex_needed > self.dex
      return false
    end
    if item.int_needed > self.int
      return false
    end
    if item.agi_needed > self.agi
      return false
    end
    if item.lvl_needed > self.level
      return false
    end
    if item.style_needed != ''
      if self.styles == []
        return false
      end
      return self.styles.include?(item.style_needed)
    end
    return true
  end
  
end

class Game_Temp
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias setup initialize
  def initialize
    setup
    for weapon in $data_weapons
      next unless weapon
      weapon.setup_requirements
    end
    for armour in $data_armors
      next unless armour
      armour.setup_requirements
    end
    
  end
  
end

There is only 1 replaced method in this script, so I will do merges (it's refresh in window_equipitem).

To use there are 3 places you'll need to edit:
module RPG
class weapon
setup_requirements​
class armor
setup_requirements​
class game_actor
setup​

I seriously hope that you can work with the sample code I surplied but just incase you can't...
This code is from the first of the 3 sections you'll need to edit
Code:
      case @id
      when 1
        @str_needed = 50
        @style_needed = 'Sword'
      when 29
        @int_needed = 50
        @style_needed = 'Rod'
      end
The first bit makes the person equipping the Bronze sword we all know need 50+ in strength before they can and they also have to be profficient in the style "Sword".
Please note their class still needs to be able to equip the weapon.

To change styles in game use:
$game_actors.styles.push('Style')
To add one and to remove one:
$game_actors.styles.delete('Style')

If you need help feel free to ask.
 
So, what would I do if I wanted, for example, one to use the Mithril Sword once he gains enough strength? Would I have to type 'Mithril Sword' to replace 'Sword'??
 
no one help me... so i help me self.

there is my version of the Script
Code:
=begin
form:
Weapon_requirements = {
ID => {
    "str"=>str,
    "dex"=>dex,
    "int"=>int,
    "agi"=>agi,
    "lvl"=>lvl,
    "style"=>"style"}
}

AND

Armor_requirements = {
ID => {
    "str"=>str,
    "dex"=>dex,
    "int"=>int,
    "agi"=>agi,
    "lvl"=>lvl,
    "style"=>"style"}
}

=end
Weapon_requirements = {
2 => {"str"=>0,
"dex"=>0, 
"agi"=>0, 
"lvl"=>2, 
"style"=>""} 
}
Armor_requirements = {
1 => {"str"=>0,
"dex"=>0, 
"int"=>0, 
"agi"=>0, 
"lvl"=>0, 
"style"=>""} 
}
Names = ["str","dex","int","agi","lvl","style"]#names of the Keys

class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add equippable weapons
    if @equip_type == 0
      weapon_set = $data_classes[@actor.class_id].weapon_set
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
          if @actor.meets_requirements?($data_weapons[i])
            @data.push($data_weapons[i])
          end
        end
      end
    end
    # Add equippable armor
    if @equip_type != 0
      armor_set = $data_classes[@actor.class_id].armor_set
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and armor_set.include?(i)
          if $data_armors[i].kind == @equip_type-1
            if @actor.meets_requirements?($data_armors[i])
              @data.push($data_armors[i])
            end
          end
        end
      end
    end
    # Add blank page
    @data.push(nil)
    # Make a bit map and draw all items
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max-1
      draw_item(i)
    end
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :styles
  #--------------------------------------------------------------------------
  # * Setup
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  alias styles_setup setup
  def setup(actor_id)
    styles_setup(actor_id)
    @styles = ['']
    if actor_id == 1
      @styles.push('Sword')
    end
    if actor_id == 8
      @styles.push('Rod')
    end
  end
  
  def meets_requirements?(item)
    id=item.id
    values = {}
    values[Names[0]] = self.str
    values[Names[1]] = self.dex
    values[Names[2]] = self.int
    values[Names[3]] = self.agi
    values[Names[4]] = self.level
    if item.is_a?(RPG::Weapon) 
      if Weapon_requirements[id] != nil
        for i in 0...Names.size-1
          Weapon_requirements[id][Names[i]] = 0  if  Weapon_requirements[id][Names[i]] == nil
          if Weapon_requirements[id][Names[i]] > values[Names[i]]
            return false
          end
        end
        Weapon_requirements[id][Names[5]] = ""  if  Weapon_requirements[id][Names[5]] == nil
        return self.styles.include?(Weapon_requirements[id][Names[5]])
      else
        return true 
      end
    else
      if Armor_requirements[id] != nil
        for i in 0...Names.size-2
          Armor_requirements[id][Names[i]] = 0  if  Armor_requirements[id][Names[i]] == nil
          if Armor_requirements[id][Names[i]] > values[Names[i]]
            return false
          end
        end
        Armor_requirements[id][Names[5]] = ""  if  Armor_requirements[id][Names[5]] == nil
        return self.styles.include?(Armor_requirements[id][Names[5]])
      else
        return true 
      end
    end
  end
end
 

cyro64

Member

How do I use this? If I'm using the scrip, how do I make different Fight style requirements. Oh and how do I make a weapon use all of this?
 
Status
Not open for further replies.

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