[XP] multi slot & visual equipment screen problem

Started by Various, March 19, 2012, 10:56:20 am

Previous topic - Next topic

Various

March 19, 2012, 10:56:20 am Last Edit: March 21, 2012, 09:36:20 am by Various
hi people :P
im using an multi slot script and an visual equipment script but the problem is
im having more slots and so i want more visual equipment things (i tryd to change some things myself but it didnt worked

underneath i have the scripts, maybe someone has time to change it so it works

Visual Equipment
Spoiler: ShowHide
#==============================================================================
# ** Visual_Equipment Re-Edited (version Lambda)
#------------------------------------------------------------------------------
#    Written by Rataime
#    New Edits by DerVVulfman
#    February 25, 2008
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
# Revisions to note:
#  1) Added formatted headers and comments throughout the script.
#  2) Encapsulated the working code in a Visual Equipment module.
#  3) Set the equipment array into an instance value to lower resource costs.
#  4) Discovered a 'nil' $game_party bug.  Added 'return if...' statements.
#  5) Removed unnecessary Window_SaveFile edit.
#  6) Interpreter routine for 'Change Equipment' now aliased.
#  7) Interpreter routine for 'Change Equipment' now changes visible equipment.
#  8) Support for 'Change Party Members' now works, even w/ Large Party systems.
#  9) 'Change Equipment' now compatible with Fukuyama's Train Actor script.
# 10) System should now be usable with or without RMXP SDK.
# 11) Support for cancelled 'Continues' in the Title Menu.
#------------------------------------------------------------------------------
# ** Changing party members or equipment while still visible on the map will
# ** force the map to refresh, giving a slight pause.
#==============================================================================



#==============================================================================
# ** module Visual Equipment
#------------------------------------------------------------------------------
#  This module handles the image name and equipment drawing process.
#==============================================================================

module Visual_Equipment
 module_function
 
  #========================================================================
  #  **  C  O  N  F  I  G  U  R  A  T  I  O  N      S  Y  S  T  E  M  **  #
  #========================================================================
   # Caterpillar Systems
   CATERPILLAR_COMPATIBLE      = false   # Toggle for Fukuyama's original  
   SQUAD_MOVE_COMPATIBLE       = false   # Toggle for Near Fantastica's SBABS
   CCOA_CATER_COMPATIBLE       = false    # Toggle for Ccoa's Caterpillar
   TRICKSTER_CATER_COMPATIBLE  = false   # Toggle for Trickster's Caterpillar
   
 #--------------------------------------------------------------------------
 # * Get image file
 #     type     : type of equipment (if specified)
 #     item_id  : WeaponID or Armor_ID passed
 #--------------------------------------------------------------------------
 def get_file(type, item_id)
   case type
     # Weapons
     when 5
       return ""   if item_id == 1
     # Body Armor
     when 1
       return ""  if item_id == 20

     # Helmets
     when 2
       return ""     if item_id == 6      
       
     # Shields
     when 3
       
     # Accessories
     when 4
     
     else

     end    
     return nil
   end
 #--------------------------------------------------------------------------
 # * Add Sprite to Visual Array
 #--------------------------------------------------------------------------
 def add_sprite(i, type, item_id)
   sprite = get_file(type, item_id)
   return if sprite == nil
   @visual_equipment[i + 1].push(sprite)
 end
 #--------------------------------------------------------------------------
 # * Update Visual Equipment
 #--------------------------------------------------------------------------
 def equip_update
   @visual_equipment = Array.new
   return if $game_party == nil
   for i in 0..$game_party.actors.size
     @visual_equipment[i + 1] = []
   end
   # Sort through actors
   for i in 0...$game_party.actors.size
     add_sprite(i, 5, $game_party.actors[i].weapon_id) # Add the Weapon
     add_sprite(i, 1, $game_party.actors[i].armor3_id) # Add the Body Armor
     add_sprite(i, 2, $game_party.actors[i].armor2_id) # Add the Helmet
     add_sprite(i, 3, $game_party.actors[i].armor4_id) # Add the Accessory
     add_sprite(i, 4, $game_party.actors[i].armor1_id) # Add the Shield
   end
   #------------------------------------------------------------------------
   # * Visual Equipment Functions
   #------------------------------------------------------------------------
   RPG::Cache.clear
   return if $game_party == nil
   for i in 0...$game_party.actors.size
     for img in @visual_equipment[i + 1]
       bitmap = RPG::Cache.character($game_party.actors[i].character_name,
                     $game_party.actors[i].character_hue)
       if img != true and img != false
         add_equip(bitmap, img, i)
       end
     end
   end
 end
 #--------------------------------------------------------------------------
 # * Add Equipment
 #     sprite    : Original sprite bitmap
 #     to_add    : Equipment characterset
 #     character : Member in party
 #--------------------------------------------------------------------------
 def add_equip(sprite, to_add, character)
   return if $game_party == nil
   bmp = Sprite.new
   bmp.visible = false
   bmp.bitmap  = RPG::Cache.character(to_add,
                     $game_party.actors[character].character_hue)
   color = bmp.bitmap.get_pixel(0, 0)
   x = sprite.width
   y = sprite.height
   if @visual_equipment[0]
     x = x/4
     y = y/4
   end
   for i in 0..x
     for j in 0..y
       color_get = bmp.bitmap.get_pixel(i, j)
       if color_get != color
         sprite.set_pixel(i, j ,color_get)
       end
     end
   end
   bmp = nil
 end
end  



#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  This class handles temporary data that is not included with save data.
#  Refer to "$game_temp" for the instance of this class.
#==============================================================================

class Game_Temp
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor :visual_transfer          # Equipment changed in field switch
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 alias visual_initialize initialize
 def initialize
   # Perform the original call
   visual_initialize
   @visual_transfer = false              # Equipment changed in field
 end
end



#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
#  This sprite is used to display the character.It observes the Game_Character
#  class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Character < RPG::Sprite
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 alias visual_update update
 def update
   
   # Perform the original call
   visual_update
   # Update with the equipment
   if @character.direction != @character.old_d
     Visual_Equipment.equip_update
     @character.old_d = @character.direction
   end
 end
end

#==============================================================================
# ** Scene_Equip
#------------------------------------------------------------------------------
#  This class performs equipment screen processing.
#==============================================================================

class Scene_Equip
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_update_right update_right
 #--------------------------------------------------------------------------
 # * Frame Update (when right window is active)
 #--------------------------------------------------------------------------
 def update_right
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Update with the equipment
     Visual_Equipment.equip_update
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to menu screen
     $scene = Scene_Menu.new(2)
     return
   end
   # Perform the original call
   visual_update_right
 end
end



#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
#  This class handles the player. Its functions include event starting
#  determinants and map scrolling. Refer to "$game_player" for the one
#  instance of this class.
#==============================================================================

class Game_Player < Game_Character
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_update update
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------  
 def update
   # Do not perform during equipment transfer
   return if $game_temp.visual_transfer == true
   # Perform the original call
   visual_update
 end
end



#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  This interpreter runs event commands. This class is used within the
#  Game_System class and the Game_Event class.
#==============================================================================
class Interpreter
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_command_129 command_129
 alias visual_command_319 command_319
 #--------------------------------------------------------------------------
 # * Change Party Member
 #--------------------------------------------------------------------------
 def command_129
   # Perform the original call
   visual_command_129
   # Update with the equipment
   Visual_Equipment.equip_update
   # Continue
   return true    
 end
 #--------------------------------------------------------------------------
 # * Change Equipment
 #--------------------------------------------------------------------------
 def command_319
   # Perform the original call
   visual_command_319
   # Update with the equipment
   Visual_Equipment.equip_update
   # Turns the transfer system on
   $game_temp.visual_transfer = true
   # Switch to map screen
   $scene = Scene_Map.new    
   # Continue
   return true
 end
end



#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  This class performs map screen processing.
#==============================================================================

class Scene_Map
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_update update
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------  
 def update
   # Perform the original call
   visual_update
   # Turns equipment transfer system off
   $game_temp.visual_transfer = false if $game_temp.visual_transfer == true
 end
end



#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  This class deals with characters. It's used as a superclass for the
#  Game_Player and Game_Event classes.
#==============================================================================

class Game_Character
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------  
 attr_accessor :character_hue
 attr_accessor :old_d
end



#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_setup setup
 #--------------------------------------------------------------------------
 # * Setup
 #     actor_id : actor ID
 #--------------------------------------------------------------------------  
 def setup(actor_id)
   # Perform the original call
   visual_setup(actor_id)
   @character_hue = (@character_hue+1)%256
 end
end



#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
#  This class performs load screen processing.
#==============================================================================

class Scene_Load < Scene_File
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_read_save_data read_save_data
 alias visual_on_cancel on_cancel
 #--------------------------------------------------------------------------
 # * Cancel Processing
 #--------------------------------------------------------------------------  
 def on_cancel
   # Update with the equipment
   Visual_Equipment.equip_update
   # Perform the original call
   visual_on_cancel
 end
 #--------------------------------------------------------------------------
 # * Read Save Data
 #     file : file object for reading (opened)
 #--------------------------------------------------------------------------
 def read_save_data(file)
   # Perform the original call
   visual_read_save_data(file)
   # Update with the equipment
   Visual_Equipment.equip_update
 end
end



#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
#  This class performs save screen processing.
#==============================================================================

class Scene_Save < Scene_File
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_on_decision on_decision
 alias visual_on_cancel on_cancel
 #--------------------------------------------------------------------------
 # * Cancel Processing
 #--------------------------------------------------------------------------  
 def on_cancel
   # Update with the equipment
   Visual_Equipment.equip_update
   # Perform the original call
   visual_on_cancel
 end
 #--------------------------------------------------------------------------
 # * Decision Processing
 #--------------------------------------------------------------------------  
 def on_decision(file)
   # Update with the equipment
   Visual_Equipment.equip_update
   # Perform the original call
   visual_on_decision(file)
 end
end



#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  This class performs title screen processing.
#==============================================================================

class Scene_Title
 #--------------------------------------------------------------------------
 # * Alias Listings
 #--------------------------------------------------------------------------  
 alias visual_command_new_game command_new_game
 #--------------------------------------------------------------------------
 # * Command: New Game
 #--------------------------------------------------------------------------  
 def command_new_game
   # Perform the original call
   visual_command_new_game
   # Update with the equipment
   Visual_Equipment.equip_update
 end
end



Multi slot module
Spoiler: ShowHide
#==============================================================================
# Multi-slot equipment script
#------------------------------------------------------------------------------
# Section 1:  Modules
#------------------------------------------------------------------------------
# Guillaume777
# 6.2.2
# 2006/02/14
#==============================================================================

# To change slots of character
#     $game_actors[1].weapon_slots = [0,0]
#     $game_actors[1].armor_slots = [2,3,4,5,6,7]
#
# To make armor equipable in new slot :
#     Add (5) in its name, where 5 is its slot number
# To make 2handed weapons :
#     Add an element called 2handed to a weapon
#     or, adds its id in TWO_HANDED_WEAPONS = []
#     or, adds (2handed) in its name
# To make a weapon double attack
#     Add an element called 2attacks to a weapon
#     or, adds its id in DOUBLE_ATTACK_WEAPONS = []
#     or, adds (2atks) in its name
# To make a weapon/armor cursed
#     Adds its id in CURSED_WEAPONS or CURSED_ARMORS, or
#     put (cursed) in its name
# To make a weapon require an offhand instead of any weapon
#     Adds its id in NEEDS_OFFHAND or
#     Adds (needs_offhand) in its name

#==============================================================================
# *** MODULE:  Guillaume777's Multi-Slot Module
#------------------------------------------------------------------------------
#  This is the configuration module of the Multi-Slot system.  It allows you to
#  set the default names of your slots, tag your weapons and/or armors for many
#  types of enhancements and features, and etc.
#==============================================================================
module G7_MS_MOD
 
 #--------------------------------------------------------------------------
 # * Configuration Section
 #--------------------------------------------------------------------------
 #========Set weapon/armor properties ======================================
 CURSED_WEAPONS        = []             # ids of weapons to be cursed
 CURSED_ARMORS         = []             # ids of armors to be cursed
 TWO_HANDED_WEAPONS    = [98]             # ids of 2handed weapons
 DOUBLE_ATTACK_WEAPONS = [87]             # ids of double attack weapons
 NEEDS_OFFHAND         = []             # ids of weapons requiring an offhand

 SWITCH_EQUIP_WEAPONS  = []  # ids of weapons switched when equipped
 SWITCH_EQUIP_ARMORS   = []  # ids of switched armors(same above)
 # Use 1 array, first value of array = false item, second value = true item
 #
 # First value in the above arrays is displayed in the weapons/armors you can
 # choose.  When the weapon/armor is chosen, the second id value IS the weapon
 # or armor that you've chosen.  Example:  Trick someone to equip a cursed bow.

 #=========Set weapon/armor properties with element tagging and name edit===
 CURSED_STRING = 'cursed'  # put (cursed) in item name for it to be cursed
 HANDS_ELEMENT = 'handed'  # no. of hands in front of HANDS_ELEMENT in database
 HANDS_STRING  = 'handed'  # name of string in item name like (2handed)

 MULTI_ATTACK_ELEMENT = 'attacks' # name of element to tag to multi attacks
                                  # like (2attacks)
 MULTI_ATTACK_STRING = 'atks'     # string in item name, like (3atks)

 NEEDS_OFFHAND_STRING = 'needs_offhand' #string in item name if the weapon
                                        #needs an offhand like (needs_offhand)
                                       
 #=====Set character slots properties =======================================
 WEAPON_KINDS = [0]                     # number of weapons,  0 = weapon
 WEAPON_KIND_NAMES = []  # custom name of extra weapon slots
 WEAPON_KIND_POWERS = [100]           # 100 = normal power, 90 = 90% power
                                           # Leave empty or put nil inside
                                           # if you want the default names.
 ARMOR_KINDS = [1,2,3,5,6,7,8,9,10,]
 # 1 = shield
 # 2 = helmet
 # 3 = armor
 # 4 = acc
 # 5 = and more : extra slot
 EXTRA_SLOT_NAMES = ['Leg armor','Cape','Gauntlet','Boots','Amulet','Ring']
 # Name of the extra slots in equip window
 # You need as many words as there are '5' or more in armor_kinds
 # The first order of the slots names reflect the order of the 5 in armor_kinds
 # Put (5) or more to in the armor name to have it assigned to the extra slot


 #=============Set multi-weapon behavior====================================
 IGNORE_OFFHAND          = false # ignore off_hand support
 TWOHANDED_IN_OFFHAND    = true  # If false don't show two handed weapons in
                                 # the offhand window
 ALL_WEAPONS_FOR_SKILLS  = true  # true  = combined pwr of all weaps for skills
                                 # false = only power of first weapon
 SHIELD_HAND_SLOT        = 1     # slot number to be used for shield hand
 WEAPON_SHIELD_SHARE     = false  # if true, can't use a shield and a second
                                 # weapon at the same time
 SHIELD_HAND_WIELD       = true  # true = can use shield hand for 2handed weap.
 WEAPON_HAND_WIELD       = true  # true = can use weapon hand for 2handed weap.
 MULTI_WEAPONS_PENALITY  = 0     # percent of atk that will be subtracted if
                                 # you use two weapons at the same time.
                                 
 #============Set appearance properties ====================================
 FONT_NAME       = 'Arial'      # Font to use
 CURSED_COLOR    = Color.new(255, 50, 50)  # Color of cursed equiped items
 SHOW_REMOVE     = false                   # Show empty in offhand window

 WINDOWS_STRETCH = true    # true : equip_right stretch to adjust to # of slots
 MAX_SHOW_SLOTS  = 6       # Maximum number of slots in 1 screen in equip right
                           # window.  Useless if windows_stretch = false
 HELP_AT_BOTTOM  = false   # If true,  will leave place for help window at bot-
                           # tom.  Useless if you didn't modify the help window
                           # y-coordinate.

 STATUS_WINDOW_ARRANGE = true  # If true, you get a new status window.
 STATUS_WINDOW_SPACING = 24    # Space between each item in new status window.
 EVADE                 = false # If draw_actor_parameter is configured to
                               # receive parameter number 7 (evade), then it
                               # will show in new status window.
 # EVADE = true has no effect if STATUS_WINDOW_ARRANGE is false
 
 #================ end of settings =========================================

 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
   super
   RPG.set_new_item_types #fix armor and weapon properties at start of game
 end
 #--------------------------------------------------------------------------
 # * End of MODULE:  Guillaume777's Multi-Slot Module
 #--------------------------------------------------------------------------
end



#============================================================================
# ** MODULE:  RPG Module
#----------------------------------------------------------------------------
#  This sprite is used as an arrow cursor for the battle screen. This class
#  is used as a superclass for the Arrow_Enemy and Arrow_Actor classes.
#============================================================================
module RPG
 #--------------------------------------------------------------------------
 # * Set New Item Types
 #--------------------------------------------------------------------------
 def RPG.set_new_item_types
   if @initialized_item_types then return end
   for armor in $data_armors     # for each armor
     unless armor == nil         # if armor
       armor.set_adv_type        # set new type
       armor.set_cursed          # set if item is cursed or not
     end
   end
   for weapon in $data_weapons  # for each armor
     unless weapon == nil       # if armor
       weapon.set_needs_offhand # set if it needs an offhand or not
       weapon.set_nb_hands      # set the number of hands to wield it
       weapon.set_nb_attacks    # set the number of attacks it can do
       weapon.set_cursed        # set if item is cursed or not
     end
   end
   @initialized_item_types = true
 end
 #--------------------------------------------------------------------------
 # * Initialized Item Types
 #     bool      : boolean value (true/false)
 #--------------------------------------------------------------------------  
 def RPG.initialized_item_types=(bool)
   @initialized_item_types = bool
 end
   
 #==========================================================================
 # ** Armor
 #--------------------------------------------------------------------------
 # Data class for armors, adds new armor types
 #==========================================================================
 class Armor
   attr_accessor :cursed
   #------------------------------------------------------------------------
   # * Set Adv Type
   #------------------------------------------------------------------------  
   def set_adv_type
     pattern =  /\((\d+)\)/
     if @name.sub!(pattern, '') != nil
       # Set kind to the number in name of armor
       @kind = $1.to_i - 1
     end
   end
   #------------------------------------------------------------------------
   # * Set Cursed
   #------------------------------------------------------------------------    
   def set_cursed
     pattern = '('+G7_MS_MOD::CURSED_STRING+')'    
     if @name.sub!(pattern, '') != nil then cursed = true end
     if G7_MS_MOD::CURSED_ARMORS.include?(@id) then cursed = true end
     @cursed = cursed
   end
   #------------------------------------------------------------------------
   # * End of Armor Class
   #------------------------------------------------------------------------
 end

 #==========================================================================
 # ** Weapon
 #--------------------------------------------------------------------------
 # Data class for weapons, adds new weapon types
 #==========================================================================
 class Weapon
   #------------------------------------------------------------------------
   # * Public Instance Variables
   #------------------------------------------------------------------------
   attr_accessor :needs_offhand  # does it need an offhand weapon
   attr_accessor :nb_hands       # numbers of hands it requires
   attr_accessor :nb_attacks     # number of attacks it can do
   attr_accessor :cursed         # true if item is cursed
   #------------------------------------------------------------------------
   # * Set Cursed
   #------------------------------------------------------------------------  
   def set_cursed
     pattern = '('+G7_MS_MOD::CURSED_STRING+')'
     if @name.sub!(pattern, '') != nil then cursed = true end
     if G7_MS_MOD::CURSED_WEAPONS.include?(@id) then cursed = true end
     @cursed = cursed
   end
   #------------------------------------------------------------------------
   # * Set Needs OffHand
   #------------------------------------------------------------------------    
   def set_needs_offhand
     pattern = '('+G7_MS_MOD::NEEDS_OFFHAND_STRING+')'
     if @name.sub!(pattern, '') != nil then
       @needs_offhand = true
     elsif G7_MS_MOD::NEEDS_OFFHAND.include?(self.id) then
       @needs_offhand = true
     elsif @needs_offhand== nil then
       @needs_offhand = false
     end
   end
   #------------------------------------------------------------------------
   # * Returns number of hands needed for weapons
   #------------------------------------------------------------------------
   def set_nb_hands
     if G7_MS_MOD::TWO_HANDED_WEAPONS.include?(self.id) then
        nb_hands = 2
     end
     pattern = /\((\d+)#{G7_MS_MOD::HANDS_STRING}\)/
     if @name.sub!(pattern, '') != nil
       nb_hands = $1.downcase.delete('a-z')
       nb_hands = $1.to_i
     end
     # Search through the elements
     for elementnb in self.element_set
       elementname = $data_system.elements[elementnb].downcase
       # If the weapon has an element for another attack
       if elementname.delete('0-9') == G7_MS_MOD::HANDS_ELEMENT.downcase
         # Get the number of attacks
         elementname = elementname.delete('a-z')
         if elementname != '' then
           nb_hands = elementname.to_i
           # Delete the element
           self.element_set.delete(elementnb)
         end
       end
     end
     if nb_hands.is_a?(Integer) == false or nb_hands <= 0 then nb_hands = 1 end
     @nb_hands = nb_hands
   end
   #------------------------------------------------------------------------
   # * Returns the number of attack the weapon can do
   #------------------------------------------------------------------------
   def set_nb_attacks
     if G7_MS_MOD::DOUBLE_ATTACK_WEAPONS.include?(self.id) then
       nb_attacks = 2
     else
       nb_attacks = 1
     end
     pattern = /\((\d+)#{G7_MS_MOD::MULTI_ATTACK_STRING}\)/
     if @name.sub!(pattern, '') != nil
       nb_attacks = $1.downcase.delete('a-z')
       nb_attacks = $1.to_i
     end
     # Search elements that could add more attacks  
     for elementnb in self.element_set
       elementname = $data_system.elements[elementnb].downcase
       # If the weapon has an element for another attack
       if elementname.delete('0-9') == G7_MS_MOD::MULTI_ATTACK_ELEMENT.downcase
         # Get the number of attacks
         elementname = elementname.delete('a-z')
         if elementname != '' then
           nb_attacks = elementname.to_i
           # Delete the element
           self.element_set.delete(elementnb)
         end
       end
     end
     if nb_attacks.is_a?(Integer) == false or nb_attacks <= 0 then nb_attacks = 1 end
     @nb_attacks = nb_attacks
   end
   #------------------------------------------------------------------------
   # * End of CLASS:  Weapon
   #------------------------------------------------------------------------
 end
 #--------------------------------------------------------------------------
 # * End of MODULE:  RPG Module
 #--------------------------------------------------------------------------
end

Blizzard

It seems the last script didn't fit into your post and got cut off.
Check out our game brands:

Daygames
Game Night Games
Chugnar Games

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Various

March 21, 2012, 09:39:21 am #2 Last Edit: March 21, 2012, 09:40:38 am by Various
oops, in the preview it worked, ill add the rest

Multi-slot script : Actor
Spoiler: ShowHide
#==============================================================================
# Multi-slot equipment script
#------------------------------------------------------------------------------
# Section 2:  Actor
#------------------------------------------------------------------------------
# Guillaume777
# 6.2.1
# 2006/02/14
#==============================================================================

#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
 include G7_MS_MOD
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor :equip_mode         # To restore equipment after false equip
 attr_accessor :equip_type_force   # To bypass equip_type
 attr_accessor :equip_from_menu    # To prevent users to unequip cursed items
 attr_accessor :translucent_texts  # To store translucents slots
 #--------------------------------------------------------------------------
 # * Setup (Initializing new Slots)
 #     actor_id : actor ID
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_setup setup
 def setup(actor_id)
   g7_ms_game_actor_setup(actor_id) #setup normaly
   self.order_armor_ids
 end
 #--------------------------------------------------------------------------
 # * Number of Offhand Required
 #     ignore   : ignore  
 #--------------------------------------------------------------------------
 def nb_offhand_required(ignore=nil)
   nb_offhand = 0
   nb_need_offhand = 0
   for i in 0...self.weapon_slots.size
     if i != ignore then
       weapon = self.weapon_ids[i]
       if weapon == 0 then
         nb_offhand += 1
       elsif $data_weapons[weapon].needs_offhand then
         nb_need_offhand += 1
       else
         nb_offhand += 1
       end
     end
   end
   return (nb_need_offhand - nb_offhand)
 end
 
 #--------------------------------------------------------------------------
 # * Change Equipment ( Modified for extra equipment)
 #     equip_type : type of equipment
 #     id    : weapon or armor ID (If 0, remove equipment)
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_equip equip
 def equip(equip_type, id)
   if @equip_type_force != nil then equip_type = @equip_type_force end
   # equip_type_force is used to bypass the equip_type argument
   if self.equip_mode == 'STORE' then
   # Store equipment for it to be restored after checking what the stats would  
     self.equip_mode = nil
     @stored_armors = self.armor_ids.dup
     @stored_weapons = self.weapon_ids.dup
     saved_mode = 'STORE'
   elsif self.equip_mode == 'RESTORE'
     # Restore equipment after preview of new equipment on stats
     self.equip_mode = nil
     self.restore(equip_type)
     return
   # If equipped for real
   else
     if self.enough_hands?(equip_type,id) != false then
       # Switch items to be equipped to fool the players
       id = self.switch_items(equip_type,id)
     end
   end
   # If not enough hands then don't equip
   if self.enough_hands?(equip_type,id) == false then
     id = 0
   # If cursed and player tried to remove it, do nothing
   elsif self.equip_from_menu and self.cursed?(equip_type) then
     id = 0
   # If the slot is one of the 5 basic ones
   elsif equip_type <= 4
     # Equip the goold old way
     g7_ms_game_actor_equip(equip_type, id)
   else
     # Equip in the new way
     equip_extra(equip_type,id) #equip in the new way
   end
   # Fix in case there are no enough empty hands for all the equipped weapons
   if id != 0 then self.fix_handed_weapons(equip_type) end
   # This ensure that the next equiping will restore the original equipment
   if saved_mode == 'STORE' then  self.equip_mode = 'RESTORE'  end
 end
 #--------------------------------------------------------------------------
 # * Restore Equipment once the stats are checked and adds translucent
 #     equip_type : type of equipment
 #--------------------------------------------------------------------------
 def restore(equip_type)
   if self.translucent_texts == nil then self.translucent_texts = Array.new end
   self.equip_from_menu = false
   if equip_type != 0 and @stored_weapons[0] != self.weapon_ids[0]
     self.translucent_texts[0] = true
   end
   for i in 1...@stored_weapons.size
     if i+[self.armor_slots.size,4].max != equip_type  and  
       @stored_weapons[i] != self.weapon_ids[i] then
       self.translucent_texts[i] = true
     end
   end
   for i in 0...@stored_armors.size
     if  i+1 != equip_type  and  
       @stored_armors[i] != self.armor_ids[i] then
       self.translucent_texts[self.weapon_slots.size + i] = true
     end
   end
   @equip_type_force = nil  
   copy = self.translucent_texts.dup
   self.weapon_ids = @stored_weapons
   self.armor_ids = @stored_armors
   self.translucent_texts = copy
 end
 #--------------------------------------------------------------------------
 # * Switch Items.  Switches equipment to fool a player.
 #     equip_type : type of equipment
 #     id         : id
 #--------------------------------------------------------------------------
 def switch_items(equip_type,id)
   if self.cursed?(equip_type) == false then
     if equip_type == 0 or equip_type > [self.armor_slots.size,4].max
       for i in 0...SWITCH_EQUIP_WEAPONS.size
         if SWITCH_EQUIP_WEAPONS[i][0] == id then
           $game_party.lose_weapon(SWITCH_EQUIP_WEAPONS[i][0], 1)
           $game_party.gain_weapon(SWITCH_EQUIP_WEAPONS[i][1], 1)
           id = SWITCH_EQUIP_WEAPONS[i][1]
         end
       end
     else            
       for i in 0...SWITCH_EQUIP_ARMORS.size
         if SWITCH_EQUIP_ARMORS[i][0] == id  then
           $game_party.lose_armor(SWITCH_EQUIP_ARMORS[i][0], 1)
           $game_party.gain_armor(SWITCH_EQUIP_ARMORS[i][1], 1)
           id = SWITCH_EQUIP_ARMORS[i][1]
         end
       end
     end
   end
   return id
 end
 #--------------------------------------------------------------------------
 # * Enough Hands?  Returns if there are enough hands to hold a weapon
 #     equip_type : type of equipment
 #     id         : ID
 #--------------------------------------------------------------------------
 def enough_hands?(equip_type, id)
   # Enough Hand = true if you unequip something
   if id == 0 then return true end
   # If it's a weapon  
   if equip_type == 0 or equip_type > [self.armor_slots.size ,4].max
     nb = $data_weapons[id].nb_hands
   elsif self.weapon_shield_share and self.armor_slots[equip_type-1] == self.shield_hand_slot
     nb = 1
   else
     return true #return true if not shield or weapon
   end
   nb_s = 0 #nb shield slots
   if self.shield_hand_wield then
     for i in 0...self.armor_slots.size
       if self.armor_slots[i] == self.shield_hand_slot
         if self.weapon_shield_share != true then nb_s += 1  end
         if self.cursed?(i+1) then nb += 1 end
       end
     end
   end
   if self.weapon_hand_wield
     if self.cursed?(0) then # Penalities if can't remove first weapon
       nb = nb +  $data_weapons[self.weapon_ids[0]].nb_hands
     end
     for i in 1...self.weapon_slots.size # Penalities if cant remove weapon
       if self.cursed?(self.armor_slots.size + i)
         nb = nb +  $data_weapons[self.weapon_ids[i]].nb_hands
       end
     end
   end
   if nb == 1 then # If it only takes 1 hand to hold
     return true
   elsif nb > nb_s+1 and self.weapon_hand_wield != true
     return false
   elsif nb > self.weapon_slots.size+ nb_s and self.weapon_hand_wield
     return false
   elsif self.shield_hand_wield != true and self.weapon_hand_wield != true
     return false
   else
     return true
   end
 end
 #--------------------------------------------------------------------------
 # * Equip Weapon
 #     index : Index of weapon
 #     id    : weapon ID (If 0, remove equipment)
 #--------------------------------------------------------------------------
 def equip_weapon(index,id)
   if index == 0 then
     self.equip(0, id)
   else
     self.equip([self.armor_slots.size, 4].max + index, id)
   end
 end
 #--------------------------------------------------------------------------
 # * Equip Armor
 #     index : Index of armor
 #     id    : armor ID (If 0, remove equipment)
 #--------------------------------------------------------------------------  
 def equip_armor(index, id)
   self.equip(index+1, id)
 end
 #--------------------------------------------------------------------------
 # * Equip Extra Items
 #     equip_type : Index of item being equipped
 #     id         : ID if either armor or weapon (If 0, remove equipment)
 #--------------------------------------------------------------------------
 def equip_extra(equip_type,id)
   # If its an extra armor slot
   if equip_type <= [self.armor_slots.size,4].max
     if id == 0 or $game_party.armor_number(id) > 0
       update_auto_state($data_armors[self.armor_ids[equip_type-1]], $data_armors[id])
       $game_party.gain_armor(self.armor_ids[equip_type-1], 1)
       self.armor_ids[equip_type-1] = id
       $game_party.lose_armor(id, 1)
     end
   # If its a weapon slot
   else
     if id == 0 or $game_party.weapon_number(id) > 0
       equip_type = equip_type - [self.armor_slots.size, 4].max
       weapon = self.weapon_ids[equip_type]
       if weapon != nil then
         $game_party.gain_weapon(weapon, 1)
       end
       self.weapon_ids[equip_type] = id
       $game_party.lose_weapon(id, 1)
     end
   end
 end

 #--------------------------------------------------------------------------
 # * Fix Multi-Handed Weapons
 #     equip_keep : ID of weapon to keep
 #--------------------------------------------------------------------------
 def fix_handed_weapons(equip_keep=nil)
   array_wield_hands = Array.new         # Stores the slot of the weapon that
                                         # needs empty hands
   nb_emp_hands = 0                      # Store nb of empty hands
   penalities = 0                        # Stores extra hand required
   save_force = @equip_type_force
   save_menu = @equip_from_menu
   @equip_from_menu = false
   @equip_type_force = nil
   if self.shield_hand_wield
     for narmor in 0...self.armor_slots.size
       if self.armor_slots[narmor] == self.shield_hand_slot
         if self.weapon_shield_share == true then
           penalities += 1
         end
         if self.armor_ids[narmor] == 0 then
           nb_emp_hands += 1             # Stores empty shield hand
         end
       end
     end
   end
   for nweapon in 0...self.weapon_slots.size
     if self.weapon_ids[nweapon] == 0
       if self.weapon_hand_wield then
         nb_emp_hands += 1
       end
     else
       array_wield_hands.push(nweapon)   # Stores the hand to wield weapon
     end
   end
   for nweapon in Rg(array_wield_hands.size-1, 0, -1)
     if self.weapon_ids[array_wield_hands[nweapon]] != 0 then
       nb_hands = $data_weapons[self.weapon_ids[array_wield_hands[nweapon]]].nb_hands
       nb_hands += penalities
       penalities = 0
       save_hands = nb_hands
     end
     # If it finds an empty hand
     while nb_emp_hands != 0 and nb_hands > 1
       # Decrease the counter
       nb_hands += -1
       nb_emp_hands += -1
     end
     #if shield needs to be removed for empty hand
     if self.shield_hand_wield  then
       for namor in 0...self.armor_slots.size
         if nb_hands > 1 and self.armor_ids[namor] != 0 and
         self.armor_slots[namor] == self.shield_hand_slot and
         namor+1 != equip_keep and self.cursed?(namor+1) == false then
           nb_hands += -1
           self.equip(namor+1,0)
         end
       end
     end
     #if it must remove weapons to make room for empty hands
     if self.weapon_hand_wield == true then
       for nhand in Rg(self.weapon_slots.size-1, 0, -1)
         if nb_hands > 1 and self.weapon_ids[nhand] != 0
           if nhand == 0 then
             if equip_keep != 0 and self.cursed?(0) == false then
               n = nb_emp_hands
               nb_emp_hands += $data_weapons[self.weapon_ids[nhand]].nb_hands
               n = nb_emp_hands - n
               self.equip(0,0)
             end
           else
             if nhand+[self.armor_slots.size,4].max != equip_keep and
             self.cursed?(nhand+[self.armor_slots.size,4].max) == false
             then
               if nhand < array_wield_hands[nweapon] then
                 nb_emp_hands += 1
               else
                 nb_emp_hands += $data_weapons[self.weapon_ids[nhand]].nb_hands
               end
               self.equip([self.armor_slots.size,4].max+nhand, 0)    
             end
           end   # End of ( if nhnad == 0 )
         end     # End of ( if nb_hands != 1 )
         while nb_emp_hands != 0 and nb_hands > 1
           #if it finds empty hand
           nb_hands += -1 #decrease counter
           nb_emp_hands += -1
         end  
       end   # End of ( for nahand )
     end     # End of ( if self.weapon )
     # If still can't find a slot, remove the weapon
     if nb_hands > 1
       if array_wield_hands[nweapon] == 0 and self.cursed?(0) == false then
         nb_emp_hands = 1 + nb_emp_hands + save_hands - nb_hands
         self.equip(0, 0)
       elsif self.cursed?(array_wield_hands[nweapon]+[self.armor_slots.size,4].max) == false and
       array_wield_hands[nweapon] != 0 then
         nb_emp_hands = 1 + nb_emp_hands + save_hands - nb_hands
         self.equip(array_wield_hands[nweapon]+[self.armor_slots.size,4].max,0)
       end
     end
     # If it finds an empty hand
     while nb_emp_hands != 0 and nb_hands > 1
       # Decrease the counter      
       nb_hands += -1
       nb_emp_hands += -1
     end
     # If STILL not enough hands
     if nb_hands > 1 then
       # Remove the item the user tried to equip
       self.equip(equip_keep,0)
     end
   end
   @equip_type_force = save_force # Returns old equip_type_force
   @equip_from_menu = save_menu   # Return old equip_from_menu
 end
 #--------------------------------------------------------------------------
 # * Cursed Items
 #     equip_type : ID if either armor or weapon
 #--------------------------------------------------------------------------
 def cursed?(equip_type)
   if equip_type == 0
     weapon_id = self.weapon_ids[0]
     if weapon_id != 0 and $data_weapons[weapon_id].cursed then return true end
   # If Armor  
   elsif equip_type <= self.armor_slots.size
     armor_id = self.armor_ids[equip_type - 1]
     if armor_id != 0 and $data_armors[armor_id].cursed then return true end
   else
     weapon_id = self.weapon_ids[equip_type - [self.armor_slots.size, 4].max]
     if weapon_id != nil and weapon_id != 0 and $data_weapons[weapon_id].cursed then return true end
   end
   return false
 end
 #--------------------------------------------------------------------------
 # * Remove all cursed items
 #--------------------------------------------------------------------------
 def remove_curse
   self.equip_type_force = nil
   for i in 0...(self.weapon_slots.size + self.armor_slots.size)
     if self.cursed?(i) then self.equip(i,0) end
   end
 end
 #--------------------------------------------------------------------------
 # * Order Armor IDs for Slots
 #--------------------------------------------------------------------------
 def order_armor_ids
   equipment_array = Array.new
   for i in 0...self.armor_ids.size
     if self.armor_ids[i] != nil and self.armor_ids[i] != 0
       kind = $data_armors[self.armor_ids[i]].kind
       if equipment_array[kind] == nil then
         equipment_array[kind] = Array.new
       end
       equipment_array[kind].push(self.armor_ids[i])
       #array in which 0 = array for shield, 1 = array for helmet,
       #2 = array for armor and 3 = array for accessory, etc
     end
   end
   self.armor_ids = nil # Remove all armors
   armors = Array.new
   for i in 0...self.armor_slots.size
     aitem = nil
     if equipment_array[(self.armor_slots[i])-1] == nil then
       equipment_array[(self.armor_slots[i])-1] = Array.new
     end
     while aitem == nil and equipment_array[(self.armor_slots[i])-1].size != 0
       aitem = equipment_array[(self.armor_slots[i])-1].delete_at(0)
       if aitem == 0 then aitem = nil end
     end
     if aitem != nil then
       armors.push(aitem)  # Adds armor
     else
       armors.push(0)      # Adds empty
     end   # End of ( if iaitem != nil )
   end     # End of ( for i in  )
   self.armor_ids = armors
 end
 #--------------------------------------------------------------------------  
 # * Change Weapon Slots
 #     array      : Array for weapon slots
 #--------------------------------------------------------------------------
 def weapon_slots=(array)                        # Change slots of weapons
   if array == nil then array = WEAPON_KINDS end # Use default slots
     weapon_array = Array.new(self.weapon_ids)   # Save weapons
     self.weapon_ids = nil
     @weapon_slots = Array.new(array)            # New slots
     self.weapon_ids = weapon_array              # Re-equip items
     i = self.weapon_ids.size
     while self.nb_offhand_required > 1
       if self.weapon_ids[i] != nil and self.weapon_ids[i] != 0 then
         self.equip_weapon(i,0)
       end
     i = i-1
   end
 end

 #--------------------------------------------------------------------------  
 # * Change Armor Slots
 #     array      : Array for armor slots
 #--------------------------------------------------------------------------
 def armor_slots=(array) # change slots of armor
   if array == nil then array = ARMOR_KINDS end #returns to default if nothing
   equipment_array = Array.new
   for i in 0...[array.max, self.armor_slots.max].max+1
     if equipment_array[i] == nil then
       equipment_array[i] = Array.new
     end
   end
   for i in 0...self.armor_ids.size
     if self.armor_ids[i] != nil and self.armor_ids[i] != 0 then
       kind = $data_armors[self.armor_ids[i]].kind + 1
       equipment_array[kind].push(self.armor_ids[i])
       # Array in which 0 = array for shield, 1 = array for helmet,
       # 2 = array for armor and 3 = array for accessory, etc
     end
   end
   for kind in 0...[array.max, self.armor_slots.max].max+1
     if array.include?(kind) and self.armor_slots.include?(kind) then
       nb_i_new = 0
       nb_i_old = 0
       for i in 0...self.armor_slots.size
         if self.armor_slots[i] == kind then nb_i_old += 1 end
       end
       for i in 0...array.size
         if array[i] == kind then nb_i_new += 1 end
       end
       for i in nb_i_new...nb_i_old
         for k in 0...equipment_array[kind].size
           index = equipment_array[kind].index(0)
           if index != nil then
             equipment_array[kind].delete_at(index)
           end
         end
       end
     end
   end
   self.armor_ids = nil        # Remove items
   @armor_slots = array        # New array
   for i in 0...self.armor_slots.size
     aitem = nil
     kind = self.armor_slots[i]
     if equipment_array[kind].size != 0
       aitem = equipment_array[kind].delete_at(0)
       self.equip(i+ 1,aitem)  # Adds armor
     else
       self.equip(i+ 1,0)
     end
   end
 end
 #--------------------------------------------------------------------------
 # * Set new array of weapons, if nil then it removes all weapon
 #     array      : Array of weapon IDs
 #--------------------------------------------------------------------------
 def weapon_ids=(array)  # Be careful.  @item_type_force needs to be nil!
   if array == nil then
     self.equip(0, 0)    # Remove first weapon
     for i in 1...self.weapon_ids.size
       self.equip(i + [self.armor_slots.size,4].max, 0 ) # Remove all weapons
     end
     return
   end
   self.weapon_ids = nil
   for i in 0...self.weapon_slots.size
     # Ensure no weapons are equipped
     if array[i] == nil then array[i] = 0 end
     if i == 0 then            # If first weapon
       self.equip(0, array[i]) # Equip weapon
     else                      # Else if extra weapons
       self.equip(i + [self.armor_slots.size, 4].max, array[i])
     end
   end
 end
 #--------------------------------------------------------------------------
 # * Set new array of armors in ordered fashion
 #     array      : Array of armor IDs
 #--------------------------------------------------------------------------
 def armor_ids=(array)
   if array == nil then
     for i in 0...self.armor_slots.size
       self.equip(i + 1, 0)      # Remove all armors
     end
     return
   end
   self.armor_ids = nil          # Remove all armors
   for i in 0...self.armor_slots.size
     self.equip(i+ 1, array[i])  # Adds armor
   end
 end
 #--------------------------------------------------------------------------
 # * Return @armor_ids
 #--------------------------------------------------------------------------
 def armor_ids
   # Returns ids with all armor, also store 4 armor
   unless self.is_a?(Game_Actor)
     return []
   end
   if @armor_ids == nil then @armor_ids = Array.new(self.armor_slots.size) end
   ids = @armor_ids
   ids[0] = @armor1_id
   ids[1] = @armor2_id
   ids[2] = @armor3_id
   ids[3] = @armor4_id
   # Ensure no nil values are returned
   for i in 0...self.armor_slots.size
     if ids[i] == nil then ids[i] = 0 end
   end
   return ids
 end
 #--------------------------------------------------------------------------
 # * Return @Weapon_ids
 #--------------------------------------------------------------------------
 def weapon_ids
   # Returns ids with all weapon, also store first weapon
   unless self.is_a?(Game_Actor)
     return []
   end
   if @weapon_ids == nil then @weapon_ids = Array.new(self.weapon_slots.size) end
   ids = @weapon_ids
   ids[0] = @weapon_id
   # Ensure no nil values are returned
   for i in 0...self.weapon_slots.size
     if ids[i] == nil then ids[i] = 0 end
   end
   return ids
  end
 #--------------------------------------------------------------------------
 # * Returns names of armor
 #--------------------------------------------------------------------------
 def armor_slot_names
   # Return custom words for slots, or default ones
   if @armor_slot_names == nil then @armor_slot_names = Array.new end
   temp_array = Array.new(@armor_slot_names)
   # Default names of slots
   default_names = [$data_system.words.armor1,$data_system.words.armor2,$data_system.words.armor3,$data_system.words.armor4, self.extra_slot_names].flatten #default names of slots
   for i in 0...default_names.size
     if temp_array[i] == nil then temp_array[i] = default_names[i] end # If not
     # Custom then set as default
     if temp_array[i] == nil then temp_array[i] = $data_system.words.armor4 end
   end
   return temp_array
 end
 #--------------------------------------------------------------------------
 # * Returns names of weapons
 #--------------------------------------------------------------------------
 def weapon_slot_names
   # Return custom words for weapon slots, of default ones
   if @weapon_slot_names != nil then
     temp_array = Array.new(@weapon_slot_names)      # Use the custom values
   else
     temp_array = Array.new(self.weapon_slots.size)  # Use default values
   end
   default_names = WEAPON_KIND_NAMES                 # Default names of slots
   for i in 0...self.weapon_slots.size
     # If... Set as Constant      
     if temp_array[i] == nil then temp_array[i] = default_names[i] end
     if temp_array[i] == nil then temp_array[i] = $data_system.words.weapon end
     # If constant array is empty then use default one
   end
   return temp_array
 end
 #--------------------------------------------------------------------------
 # * Return all element of all equipped armor
 #--------------------------------------------------------------------------
 def guard_element_set
   # Return array with guard_element_set of all equipped armor
   set = []
   # Search all armor equipped
   for id in self.armor_ids
     next if id.nil?
     armor = $data_armors[id]
     # Add the element to set      
     set += (armor != nil ? armor.guard_element_set : [])
   end
   return set
 end
 #--------------------------------------------------------------------------
 # * Return all equipment
 #--------------------------------------------------------------------------
 def equipments
   # Return array with all equipment
   equipments = []
   self.weapon_ids.each {|id| equipments.push($data_weapons[id])}
   self.armor_ids.each {|id| equipments.push($data_armors[id])}
   return equipments
 end
 #--------------------------------------------------------------------------
 # * Return if item is equiped
 #--------------------------------------------------------------------------
 def equiped?(item)
   # Return if item is equipped, works with both armor and weapon
   case item
   when RPG::Weapon
     return self.weapon_ids.include?(item.id)
   when RPG::Armor
     return self.armor_ids.include?(item.id)
   else
     return false
   end
 end
 #--------------------------------------------------------------------------  
 # * Return list of weapons to use for attacks
 #--------------------------------------------------------------------------
 def attacks # This return an array with the list of all attacks of a character
             # This takes in consideration extra weapon + number of attacks of
             # each weapon
   attacks = Array.new
   for i in 0...self.weapon_ids.size
     weapon = $data_weapons[self.weapon_ids[i]]
     # If the weapon is valid      
     if weapon != nil and weapon.atk != 0 then
       for counter in 0...weapon.nb_attacks
         attacks.push(i) #add attacks
       end
     end
   end
   # Give one unarmed attack if no weapons on    
   if attacks.size == 0 then attacks[0] = 0 end
   return Array.new(attacks)
 end
 #--------------------------------------------------------------------------
 # * Get the weapon to be used in attack
 #--------------------------------------------------------------------------
 def get_weapon_data
   # This returns the weapon to use for the attack.
   weaponid = self.weapon_ids[self.attacks[self.attack_count]]
   weapon = $data_weapons[weaponid]
   return weapon
 end
 #--------------------------------------------------------------------------
 # * Get Offensive Animation ID for Normal Attacks
 #--------------------------------------------------------------------------
 def animation1_id
   # Set animation for current weapon
   weapon = self.get_weapon_data
   return weapon != nil ? weapon.animation1_id : 0
 end
 #--------------------------------------------------------------------------
 # * Get Target Animation ID for Normal Attacks
 #--------------------------------------------------------------------------
 def animation2_id
   # Set animation for current weapon
   weapon = self.get_weapon_data
   return weapon != nil ? weapon.animation2_id : 0
 end
 #--------------------------------------------------------------------------
 # * Get Basic Attack Power
 #   Get the atk to be used in attack ( or shown in menu screen )
 #--------------------------------------------------------------------------
 def base_atk
   multiplier = nil
   if $game_temp.in_battle and (self.current_action.kind == 0 or self.all_weapons_for_skills? != true)
     # If in battle & doing a normal attack, only use one weapon's attack power
     weapon = self.get_weapon_data
     n = weapon != nil ? weapon.atk : 0
     # Multiplier of hand as defined in self.weapon_slot_powers
     if weapon != nil and weapon.nb_hands == 1 then
       multiplier =  self.weapon_slot_powers[self.attacks[self.attack_count]]
     end
     if multiplier == nil then multiplier = 100 end
     n = n * (multiplier/100.0)
   else # Use cumulative attack power of all weapons if in status screen or
        # if using skill and all_weapons_for_skills == true
     n = 0
     for i in 0...self.weapon_slots.size
       weapon = $data_weapons[self.weapon_ids[i]]
       atk = weapon != nil ? weapon.atk : 0
       if weapon != nil and weapon.nb_hands == 1 then
         multiplier =  self.weapon_slot_powers[i]
       else
         multiplier = nil
       end
       if multiplier == nil then multiplier = 100 end
       atk = atk * (multiplier/100.0)
       n += atk
     end
   end
   nb_weap = 0
   for i in 0...self.weapon_slots.size
     if self.weapon_ids[i] != nil and self.weapon_ids[i] != 0
       nb_weap = nb_weap + 1
     end
   end # Penality if more than 1 weapon
   penality = self.multi_weapons_penality != nil ? self.multi_weapons_penality : 0
   penality = penality /100.0
   if nb_weap > 1 then n = n * ( 1 - penality ) end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Normal Attack Element
 #--------------------------------------------------------------------------
 def element_set
   # Return elemental set of the current weapon
   weapon = self.get_weapon_data
   return weapon != nil ? weapon.element_set : []
 end
 #--------------------------------------------------------------------------
 # * Get Normal Attack State Change (+)
 #--------------------------------------------------------------------------  
 def plus_state_set
   # Status the weapon can give
   weapon = self.get_weapon_data
   return weapon != nil ? weapon.plus_state_set : []
 end
 #--------------------------------------------------------------------------
 # * Get Normal Attack State Change (-)
 #--------------------------------------------------------------------------  
 def minus_state_set
   # Status the weapon can remove
   weapon = self.get_weapon_data
   return weapon != nil ? weapon.minus_state_set : []
 end
 #--------------------------------------------------------------------------
 # * Determine State Guard
 #     state_id : state ID
 #--------------------------------------------------------------------------
 def state_guard?(state_id)
   # Return state defense of all armor
   for i in self.armor_ids
     armor = $data_armors[i]
     if armor != nil
       if armor.guard_state_set.include?(state_id)
         return true
       end
     end
   end
   return false
 end
 #--------------------------------------------------------------------------
 # * Get Element Revision Value
 #     element_id : element ID
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_element_rate element_rate
 def element_rate(element_id)
   result = g7_ms_game_actor_element_rate(element_id)
   # Methods calculate bonus of extra weapon and armor
   if self.armor_slots.size > 4
     for i in 4...self.armor_slots.size
       armor = $data_armors[self.armor_ids[i]]
       if armor != nil and armor.guard_element_set.include?(element_id)
         result /= 2
       end
     end
   end
   return result
 end
 #--------------------------------------------------------------------------
 # * Get Basic Strength
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_str base_str
 def base_str
   n = g7_ms_game_actor_base_str
   for i in 1...self.weapon_slots.size
     weapon = $data_weapons[self.weapon_ids[i]]
     n += weapon != nil ? weapon.str_plus : 0
   end
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.str_plus : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Basic Dexterity
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_dex base_dex
 def base_dex
   n = g7_ms_game_actor_base_dex
   for i in 1...self.weapon_slots.size
     weapon = $data_weapons[self.weapon_ids[i]]
     n += weapon != nil ? weapon.dex_plus : 0
   end
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.dex_plus : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Basic Agility
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_agi base_agi
 def base_agi
   n = g7_ms_game_actor_base_agi
   for i in 1...self.weapon_slots.size
     weapon = $data_weapons[self.weapon_ids[i]]
     n += weapon != nil ? weapon.agi_plus : 0
   end
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.agi_plus : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Basic Intelligence
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_int base_int
 def base_int
   n = g7_ms_game_actor_base_int
   for i in 1...self.weapon_slots.size
     weapon = $data_weapons[self.weapon_ids[i]]
     n += weapon != nil ? weapon.int_plus : 0
   end
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.int_plus : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Basic Physical Defense
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_pdef base_pdef
 def base_pdef
   n = g7_ms_game_actor_base_pdef
   for i in 1...self.weapon_slots.size
     weapon = $data_weapons[self.weapon_ids[i]]
     n += weapon != nil ? weapon.pdef : 0
   end
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.pdef : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Basic Magic Defense
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_mdef base_mdef
 def base_mdef
   n = g7_ms_game_actor_base_mdef
   for i in 1...self.weapon_slots.size
     weapon = $data_weapons[self.weapon_ids[i]]
     n += weapon != nil ? weapon.mdef : 0
   end
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.mdef : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Basic Evasion Correction
 #--------------------------------------------------------------------------
 alias g7_ms_game_actor_base_eva base_eva
 def base_eva
   n = g7_ms_game_actor_base_eva
   for i in 4...self.armor_slots.size
     armor = $data_armors[self.armor_ids[i]]
     n += armor != nil ? armor.eva : 0
   end
   return n
 end
 #--------------------------------------------------------------------------
 # * Reset all slot data to default one
 #--------------------------------------------------------------------------
 def reset_all_slots
   self.armor_slots = nil
   self.weapon_slots = nil
   self.armor_slot_names = nil
   self.weapon_slot_names = nil
   self.extra_slot_names = nil
   self.weapon_slot_powers = nil
   self.shield_hand_wield = nil
   self.weapon_hand_wield = nil
   self.shield_hand_slot = nil
   self.weapon_shield_share = nil
   self.multi_weapons_penality = nil
   self.ignore_offhand = nil
   self.all_weapons_for_skills = nil
 end
 #--------------------------------------------------------------------------
 # * Returns behavior of items on character
 #--------------------------------------------------------------------------
 def weapon_shield_share
   return @weapon_shield_share != nil ? @weapon_shield_share : WEAPON_SHIELD_SHARE
 end
 def weapon_slots
   return @weapon_slots != nil ? @weapon_slots : WEAPON_KINDS
 end
 def armor_slots
   return @armor_slots != nil ? @armor_slots : ARMOR_KINDS
 end
 def shield_hand_wield
   return @shield_hand_wield != nil ? @shield_hand_wield : SHIELD_HAND_WIELD
 end
 def multi_weapons_penality
   return @multi_weapons_penality != nil ? @multi_weapons_penality : MULTI_WEAPONS_PENALITY
 end
 def weapon_slot_powers
   return @weapon_slot_powers != nil ? @weapon_slot_powers : WEAPON_KIND_POWERS
 end
 def weapon_hand_wield
   return @weapon_hand_wield != nil ? @weapon_hand_wield : WEAPON_HAND_WIELD
 end
 def shield_hand_slot
   return @shield_hand_slot != nil ? @shield_hand_slot : SHIELD_HAND_SLOT
 end
 def extra_slot_names
   return @extra_slot_names != nil ? @extra_slot_names : EXTRA_SLOT_NAMES
 end
 def ignore_offhand?
   return @ignore_offhand != nil ? @ignore_offhand : IGNORE_OFFHAND
 end
 def attack_count
   # Returns number of attacks already made
   return @attack_count != nil ? @attack_count : 0
 end
 def all_weapons_for_skills?
   return @all_weapons_for_skills != nil ? @all_weapons_for_skills : ALL_WEAPONS_FOR_SKILLS
 end
 #--------------------------------------------------------------------------
 # * Change behavior of items on character
 #--------------------------------------------------------------------------
 def multi_weapons_penality=(value)
   @multi_weapons_penality = value
 end
 def weapon_slot_powers=(value)
   @weapon_slot_powers = value
 end
 def weapon_shield_share=(bool)
   @weapon_shield_share = bool
 end
 def shield_hand_slot=(int)
   @shield_hand_slot = int
 end
 def shield_hand_wield=(bool)
   @shield_hand_wield = bool
 end
 def weapon_hand_wield=(bool)
   @weapon_hand_wield = bool
 end
 def ignore_offhand=(bool)
   @ignore_offhand = bool
 end
 def all_weapons_for_skills=(bool)
   @all_weapons_for_skills = bool
 end
 def attack_count=(value)
   # Set number of attacks already made
   @attack_count = value
 end
 #--------------------------------------------------------------------------
 # * Change names for your slots
 #--------------------------------------------------------------------------
 def shield_name=(text)
   # Set the shield slot name with...
   # $game_actors[numberofactor].shield_name = 'Yourname'
   @armor_slot_names[0] = text
 end
 def helmet_name=(text)
   @armor_slot_names[1] = text
 end
 def armor_name=(text)
   @armor_slot_names[2] = text
 end
 def accessory_name=(text)
   @armor_slot_names[3] = text
 end
 def extra_slot_names=(array)
   @extra_slot_names = array
 end
 def armor_slot_names=(array)
   # Set a new array of names.
   @armor_slot_names = array
 end
 def weapon_slot_names=(array)
   # Set a new array of weapon names.
   @weapon_slot_names = array
 end
 #--------------------------------------------------------------------------
 # * End of CLASS:  Game Actor
 #--------------------------------------------------------------------------  
end



#==============================================================================
# ** Game_Actors
#------------------------------------------------------------------------------
#  This class handles the actor array. Refer to "$game_actors" for each
#  instance of this class.
#==============================================================================

class Game_Actors
 #--------------------------------------------------------------------------
 # * Order Items
 #--------------------------------------------------------------------------  
 def order_items
   for actor in 0...@data.size
     if @data[actor] != nil and @data[actor] != 0 then
       # Order armors
       @data[actor].order_armor_ids
     end
   end
 end
 #--------------------------------------------------------------------------
 # * End of CLASS:  Game Actors
 #--------------------------------------------------------------------------  
end

Various

couldnt fit 2 scripts in 1 post this time (sorry double post x.x)

Multi-slot script : Windows
Spoiler: ShowHide
#==============================================================================
# Multi-slot equipment script
#------------------------------------------------------------------------------
# Section 3:  Windows
#------------------------------------------------------------------------------
# Guillaume777
# 6.2.1
# 2006/02/14
#==============================================================================

#==============================================================================
# ** Scene_Equip
#------------------------------------------------------------------------------
#  This class performs equipment screen processing.
#==============================================================================
class Scene_Equip
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  alias g7_ms_scene_equip_main main
  def main
    @additional_initialize_done = false
    g7_ms_scene_equip_main
    for i in 5...@item_windows.size
      @item_windows[i].dispose unless @item_windows[i].nil?
    end
  end
  #--------------------------------------------------------------------------
  # * Initialize the extra right windows
  #--------------------------------------------------------------------------
  def g7_ms_scene_equip_additional_initialize
  unless @additional_initialize_done
    @item_windows = []
    @item_windows[0] = @item_window1  # Weapon
    @item_windows[1] = @item_window2  # Shield
    @item_windows[2] = @item_window3  # Helmet
    @item_windows[3] = @item_window4  # Armor
    @item_windows[4] = @item_window5  # acc
    nb_old_windows = @item_windows.size
    for i in nb_old_windows...@actor.armor_slots.max+1
      # Add the remaining windows for extra slots
      @item_windows.push(Window_EquipItem.new(@actor, i) )
      @item_windows[i].help_window = @help_window
    end
    @item_windows.push(Window_EquipOffHand.new(@actor, 0))
    @item_windows[-1].help_window = @help_window
    # If windows_stretch is true, stretch window
    if G7_MS_MOD::WINDOWS_STRETCH
      h = (@actor.weapon_slots.size + @actor.armor_slots.size + 1) * 32
      h2 = (G7_MS_MOD::MAX_SHOW_SLOTS+1) * 32
      h = [h, h2].min
      @right_window.height = h
      if @right_window.index > @actor.weapon_slots.size + @actor.armor_slots.size - 1
        @right_window.index = @actor.weapon_slots.size + @actor.armor_slots.size - 1
      end
      if @left_window.y + @left_window.height == 256
        @left_window.height = @right_window.height
      elsif G7_MS_MOD::HELP_AT_BOTTOM == true and @left_window.height == 416 then
        # Make left window shorter
        @left_window.height -= 64
      end
      y_pos = (@right_window.y + @right_window.height)
      y_space = 480 - y_pos
      # If help at bottom, reduce bottom item window size
      if G7_MS_MOD::HELP_AT_BOTTOM == true then y_space -= 64  end
      for item_window in @item_windows
        next if item_window.nil?
        item_window.y = y_pos
        item_window.height = y_space
      end
    end
    @additional_initialize_done = true
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh and make visible the correct right window
  #--------------------------------------------------------------------------
  alias g7_ms_scene_equip_refresh refresh
  def refresh
    # This part is used to refresh the equipped item at the right window
    g7_ms_scene_equip_additional_initialize
    @actor.translucent_texts.fill(false)
    @actor.equip_type_force = index_to_equip_part(@right_window.index)
    @right_window.item_fix_on
    @right_window.scroll_fix_on
    save = @right_window.index
    @right_window.index = index_to_equip_kind(@right_window.index)
    if @right_window.index == 0 and @actor.ignore_offhand? != true then
      if @actor.nb_offhand_required(save) > 0 then
        @right_window.index = @item_windows.size-1
      end
    end
    @actor.equip_from_menu = true
    # Ensure current equipment will get properly stored...
    @actor.equip_mode = 'STORE'
    # ...and re-equiped
    @item_window = @item_windows[@right_window.index]
    @item_windows[@right_window.index].visible = true
    for i in 0...@item_windows.size
      if i != @right_window.index then
      @item_windows[i].visible = false
      end
    end
    # Equip and remove item
    g7_ms_scene_equip_refresh
    @actor.equip_from_menu = false                           
    @actor.equip_mode = nil
    @actor.equip_type_force = nil
    @right_window.index = save
    @right_window.scroll_fix_off
    @right_window.item_fix_off
    if @item_window.index != @old_index
      @right_window.refresh
    end
    @old_index = @item_window.index
  end
  #--------------------------------------------------------------------------
  # * Convert the right_window.index to equip_type
  #--------------------------------------------------------------------------
  alias g7_ms_scene_equip_update_item update_item
  def update_item
    # This changes the @right_window.index to the correct value to take
    # account of extra slots
    @actor.equip_type_force = index_to_equip_part(@right_window.index)
    @right_window.item_fix_on
    @right_window.scroll_fix_on
    save = @right_window.index
    @right_window.index = index_to_equip_kind(@right_window.index)
    @actor.equip_from_menu = true
    # Equip item
    g7_ms_scene_equip_update_item
    @actor.equip_from_menu = false
    @actor.equip_type_force = nil
    # If not in item_window screen
    if @item_window.index == -1
      # If shield-weapon can modify each other
      if @actor.shield_hand_wield == true and
        if @right_window.index == @actor.shield_hand_slot then
          @item_windows[0].refresh
          @item_windows[-1].refresh
        elsif @right_window.index == 0
          # Refresh the shield slot
          @item_windows[@actor.shield_hand_slot].refresh
        end
      end
      if @right_window.index == 0 and @actor.ignore_offhand? != true then
        if @item_window == @item_windows[-1] then
          @item_windows[0].refresh
        elsif @item_window == @item_windows[0] then
          @item_windows[-1].refresh
        end
      end
    end
    @right_window.index = save
    @right_window.scroll_fix_off
    @right_window.item_fix_off
    @actor.equip_type_force = nil
  end
  #--------------------------------------------------------------------------
  # * Convert index to equip part
  #     index : slot number
  #--------------------------------------------------------------------------
  def index_to_equip_part(index)
    # Return index of slot in the
    # array [0, @actor.armor_slots, actor.weapon_slots]
    # If Armor
    if index >= @actor.weapon_slots.size
      return index - (@actor.weapon_slots.size - 1)
    # If extra weapon
    elsif index >= 1
      # Make it last
      return index + [@actor.armor_slots.size, 4].max
    else
      return 0
    end
end
  #--------------------------------------------------------------------------
  # Convert index to equip kind
  #     index : slot number
  #--------------------------------------------------------------------------
  def index_to_equip_kind(index)
    # Return index of slot in either actor.weapon_slots or actor.armor_slots
    i = index_to_equip_part(index)
    # If armor
    if index >= @actor.weapon_slots.size
      set = @actor.armor_slots[i-1]
    # If weapon 
    else
      i = i == 0 ? 0 : i - [@actor.armor_slots.size, 4].max
      set = @actor.weapon_slots[i]
    end
    return set != nil ? set : 0
  end
  #--------------------------------------------------------------------------
  # * End of CLASS:  Scene Equip
  #-------------------------------------------------------------------------- 
end



#==============================================================================
# ** Window_EquipRight
#------------------------------------------------------------------------------
#  This window displays items the actor is currently equipped with on the
#  equipment screen.
#==============================================================================
class Window_EquipRight < Window_Selectable
  #--------------------------------------------------------------------------
  # * Item Fix On
  #--------------------------------------------------------------------------
  def item_fix_on
    # Fix window
    @fixed_item = @data[self.index]
    @fixed = true
  end
  #--------------------------------------------------------------------------
  # * Item Fix Off
  #--------------------------------------------------------------------------
  def item_fix_off
    #stop fixing window
    @fixed_item = nil
    @fixed = false
  end
  #--------------------------------------------------------------------------
  # * Don't scroll right window if you press L or R
  #--------------------------------------------------------------------------
  def update
    if Input.repeat?(Input::R) or  Input.repeat?(Input::L) then
      return
    else
      super
    end
  end
  #--------------------------------------------------------------------------
  # Draws equipped items with support of translucent and cursed items
  #     item        : item
  #     x           : draw spot x-coordinate
  #     y           : draw spot y-coordinate
  #     translucent : draw translucent
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, translucent = false)
    if item == nil
      return
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    if item.cursed
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
      self.contents.font.color = G7_MS_MOD::CURSED_COLOR
    elsif translucent
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), 128)
      self.contents.font.color = disabled_color
    else
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
      self.contents.font.color = normal_color
    end
    self.contents.draw_text(x + 28, y, 212, 32, item.name)
  end
  #--------------------------------------------------------------------------
  # * Prevent needless update of item quantities in item window
  #--------------------------------------------------------------------------
  alias g7_ms_window_equipright_item item
  def item
    # This ensures that the number of items doesn't get updated if you move
    # cursor in item window
    return @fixed_item if @fixed
    return g7_ms_window_equipright_item
  end
  #--------------------------------------------------------------------------
  # * Change the height of right windows to fit the slots
  #     actor : actor
  #--------------------------------------------------------------------------
  alias g7_ms_window_equipright_initialize initialize
  def initialize(actor)
    # Initialize with a different height
    g7_ms_window_equipright_initialize(actor)
    # Total height of right window
    h = (actor.weapon_slots.size + actor.armor_slots.size) * 32
    # Change the height                                                       
    self.contents = Bitmap.new(width - 32, h)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Shows the slot names and the name of the items you have equipped
  #--------------------------------------------------------------------------
  def refresh
    # Replaced method to show caption of all items and slot
    self.contents.clear
    @data = []
    # Begin Multi-slot equipment script Edit
    self.contents.font.name = G7_MS_MOD::FONT_NAME
    for i in 0...@actor.weapon_slots.size
      # Push the name(s) of the weapon(s)
      @data.push($data_weapons[@actor.weapon_ids[i]])
    end
    for i in 0...@actor.armor_slots.size
      # Push the names of the armors
      @data.push($data_armors[@actor.armor_ids[i]])
    end
    @caption = []
    for i in 0...@actor.weapon_slots.size
      # Push the name(s) of the weapon slots
      @caption.push(@actor.weapon_slot_names[i])
    end
    for i in 0...@actor.armor_slots.size
      # Push the names of the armor slots
      @caption.push(@actor.armor_slot_names[@actor.armor_slots[i]-1])
    end
    @item_max = @data.size
    if @actor.translucent_texts == nil then @actor.translucent_texts = Array.new end
    for i in 0...@data.size
      if @caption[i] != nil
        self.contents.font.color = system_color
        # Draw the name of the slots
        self.contents.draw_text(4, 32 * i, 92, 32, @caption[i])
      end
      # Draw the name of the equipment
      draw_item_name(@data[i], 92, 32 * i, @actor.translucent_texts[i])
    end
    # Support for other script
    if defined? xrxs_additional_refresh
      xrxs_additional_refresh
    end
  # End Multi-slot equipment script Edit
  end
  #--------------------------------------------------------------------------
  # * End of CLASS:  Window EquipRight
  #--------------------------------------------------------------------------
end



#============================================================================
# ** Window_EquipOffHand
#----------------------------------------------------------------------------
#  A new window class that displays an equipped item in the actor's off hand.
#============================================================================
class Window_EquipOffHand < Window_EquipItem
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add equippable weapons
    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)
        weapon = $data_weapons[i]
        if weapon.needs_offhand == false
          if G7_MS_MOD::TWOHANDED_IN_OFFHAND != false and weapon.nb_hands <= 1 then
            @data.push(weapon)
          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)
    self.contents.font.name = G7_MS_MOD::FONT_NAME
    #self.contents.font.size = 24
    for i in 0...@item_max-1
      draw_item(i)
    end
    if G7_MS_MOD::SHOW_REMOVE then
       i = @item_max -1
       x = 4 + i % @column_max * (288 + 32)
       y = i / @column_max * 32
       self.contents.draw_text(x+4, y, 100, 32, '[Remove]')
    end
  end
  #--------------------------------------------------------------------------
  # * End of CLASS:  Window EquipOffHand
  #--------------------------------------------------------------------------
end



#==============================================================================
# ** Window_Selectable
#------------------------------------------------------------------------------
#  This window class contains cursor movement and scroll functions.
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  # * Scroll Fix On
  #--------------------------------------------------------------------------
  def scroll_fix_on
    @scroll_fixed = true
  end
  #--------------------------------------------------------------------------
  # * Scroll Fix Off
  #-------------------------------------------------------------------------- 
  def scroll_fix_off
    @scroll_fixed = false
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Update Cursor Rectangle
  #--------------------------------------------------------------------------
  alias g7_ms_update_cursor_rect update_cursor_rect
  def update_cursor_rect
    # This prevents the windows from scrolling if scroll is fixed
    # This was added to ensure that if there are few slots, the right equip
    # screen doesn't scroll needlessly
    return if @scroll_fixed
    g7_ms_update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * End of CLASS:  Window Selectable
  #-------------------------------------------------------------------------- 
end



#==============================================================================
# *** Global IF condition
#     Shows a new status window if Status_window_arrange is true
#==============================================================================
if G7_MS_MOD::STATUS_WINDOW_ARRANGE
  #============================================================================
  # ** Window_Status
  #----------------------------------------------------------------------------
  #  This window displays full status specs on the status screen.
  #============================================================================
  class Window_Status < Window_Base
    #--------------------------------------------------------------------------
    # * Refresh
    #--------------------------------------------------------------------------
    def refresh
      # Begin Multi-slot equipment script Edit
      self.contents.font.name = G7_MS_MOD::FONT_NAME
      # End Multi-slot equipment script Edit
      self.contents.clear
      draw_actor_graphic(@actor, 40, 112)
      draw_actor_name(@actor, 4, 0)
      draw_actor_class(@actor, 4 + 144, 0)
      draw_actor_level(@actor, 96, 32)
      draw_actor_state(@actor, 96, 64)
      draw_actor_hp(@actor, 96, 112, 172)
      draw_actor_sp(@actor, 96, 144, 172)
      draw_actor_parameter(@actor, 96, 192, 0)
      draw_actor_parameter(@actor, 96, 224, 1)
      draw_actor_parameter(@actor, 96, 256, 2)
      draw_actor_parameter(@actor, 96, 304, 3)
      draw_actor_parameter(@actor, 96, 336, 4)
      draw_actor_parameter(@actor, 96, 368, 5)
      draw_actor_parameter(@actor, 96, 400, 6)
      # Begin Multi-slot equipment script Edit
      if G7_MS_MOD::EVADE
        # Activate if you have a draw_actor_paramter method that draws evade
        draw_actor_parameter(@actor, 96, 432, 7)
      end
      self.contents.font.color = system_color
      self.contents.draw_text(320, 16, 80, 32, 'EXP')
      self.contents.draw_text(320, 48, 80, 32, 'NEXT')
      self.contents.font.color = normal_color
      self.contents.draw_text(320 + 80, 16, 84, 32, @actor.exp_s, 2)
      self.contents.draw_text(320 + 80, 48, 84, 32, @actor.next_rest_exp_s, 2)
      self.contents.font.color = system_color
      self.contents.draw_text(320, 80, 96, 32, 'Equipment')
      y = 108
      for i in 0...@actor.weapon_slots.size
        draw_item_name($data_weapons[@actor.weapon_ids[i]], 320 + 16, y)
        y += G7_MS_MOD::STATUS_WINDOW_SPACING
      end
      for i in 0...@actor.armor_slots.size
        draw_item_name($data_armors[@actor.armor_ids[i]], 320 + 16, y)
        y += G7_MS_MOD::STATUS_WINDOW_SPACING
      end
      # End Multi-slot equipment script Edit     
    end
    #------------------------------------------------------------------------
    # * End of CLASS:  Window Status
    #------------------------------------------------------------------------
  end
  #--------------------------------------------------------------------------
  # * End of Global IF condition
  #--------------------------------------------------------------------------
end