class Game_Actor < Game_Battler
 include G7_MS_MOD
 attr_accessor :equip_mode #used to restore equipment after false equip
 attr_accessor :equip_type_force #used to bypass equip_type
 attr_accessor :equip_from_menu  #used to prevent the user to unequip cursed items
 attr_accessor :translucent_texts #used to store translucents slots
#--------------------------------------------------------------------------
# Init the new slots
#--------------------------------------------------------------------------
 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

 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
#=========================================================
# Modify how equipment is equiped so that extra items can be equipped
#=========================================================
 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
    else #if equipping for real
        if self.enough_hands?(equip_type,id) != false then
         id = self.switch_items(equip_type,id) #switch item to be equiped to
         #fool players
        end
    end


    if self.enough_hands?(equip_type,id) == false then #if not enough hands
         id = 0                                        #then don't equip
    elsif self.equip_from_menu and self.cursed?(equip_type) then
         id = 0         #if cursed and player tried to remove it, do nothing
    elsif equip_type <= 4 #if the slot is one of the 5 basic one
         g7_ms_game_actor_equip(equip_type, id) #equip the good old way
    else
        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 got checked and adds translucent
#=========================================================
 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 the id of an item to be equiped with another id to trick player
#=========================================================
 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

#=========================================================
# Returns if there are enough hands to hold weapon
#=========================================================
 def enough_hands?(equip_type, id)
   if id == 0 then return true end # enough hand = true if you remove something
     
   if equip_type == 0 or equip_type > [self.armor_slots.size ,4].max #if weapon
       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 == false 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

 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

 def equip_armor(index, id)
     self.equip(index+1, armor)
 end
#=========================================================
# Equip extra items
#=========================================================
 def equip_extra(equip_type,id)
  if equip_type <= [self.armor_slots.size,4].max # if its extra armor slot
   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
  else #if its weapon slot
   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


#=========================================================
# This fix multi handed weapons
#=========================================================
 def fix_handed_weapons(equip_keep=nil) #parameter for weapon to keep

  array_wield_hands = Array.new #stores slot of weapon that need 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
 
   while nb_emp_hands != 0 and nb_hands > 1
      #if it finds empty hand
      nb_hands += -1 #decrease counter
      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 if nhnad ==0
     end #end 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 for nahand
   end #end if self.weapon
 
 
   if nb_hands > 1 #if still can't find a slot, remove the weapon
 
    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
   while nb_emp_hands != 0 and nb_hands > 1
      #if it finds empty hand
      nb_hands += -1 #decrease counter
      nb_emp_hands += -1
   end
   if nb_hands > 1 then #if STILL not enough hands
    self.equip(equip_keep,0) # remove the item the user tried to equip
   end
  end #loop
 
 
  @equip_type_force = save_force #returns old equip_type_force
  @equip_from_menu = save_menu #return old equip_from_menu
 end

#=========================================================
# Return true if there is a cursed item at that position
#=========================================================
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
  elsif equip_type <= self.armor_slots.size #if armor
     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

#--------------------------------------------------------------------------
# It orders armor_ids to fit 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 if iaitem != nil
  end #end for i in
 
  self.armor_ids = armors
 end

#=========================================================
# Change 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 #reequip 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
#=========================================================
 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 #end def
#--------------------------------------------------------------------------
# Set new array of weapons, if nil then it removes all weapon
#--------------------------------------------------------------------------
 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
   if array[i] == nil then array[i] = 0 end #ensure no nil are equiped
   if i == 0 then #if first weapon
    self.equip(0, array[i]) #equip weapon
   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
#--------------------------------------------------------------------------
 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
  for i in 0...self.armor_slots.size #ensure no nil values are returned
   if ids[i] == nil then ids[i] = 0 end
  end

  return ids
 end

 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
 
  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 = [$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 temp_array[i] == nil then temp_array[i] = default_names[i] end #set as constant
   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 = []
  for id in self.armor_ids #seach all armor equipped
   next if id.nil?
   armor = $data_armors[id]
   set += (armor != nil ? armor.guard_element_set : []) #add the element to 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 weapon != nil and weapon.atk != 0 then #if weapon is valid
    for counter in 0...weapon.nb_attacks
     attacks.push(i) #add attacks
    end
   end
 
  end
 
  if attacks.size == 0 then attacks[0] = 0 end #give 1 unarmed attack if no weapons on
  return Array.new(attacks)
 
 end #end nb_attacks

#--------------------------------------------------------------------------
# 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
 def animation1_id #set animation for current weapon
  weapon = self.get_weapon_data
  return weapon != nil ? weapon.animation1_id : 0
 end
 def animation2_id #set animation for current weapon
  weapon = self.get_weapon_data
  return weapon != nil ? weapon.animation2_id : 0
 end

#--------------------------------------------------------------------------
# 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 and 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 definied 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

 def element_set #return elemental set of the current weapon
  weapon = self.get_weapon_data
  return weapon != nil ? weapon.element_set : []
 end
 def plus_state_set #status the weapon can give
  weapon = self.get_weapon_data
  return weapon != nil ? weapon.plus_state_set : []
 end
 def minus_state_set #status the weapon can remove
  weapon = self.get_weapon_data
  return weapon != nil ? weapon.minus_state_set : []
 end
#--------------------------------------------------------------------------
# Return state defense of all armor
#--------------------------------------------------------------------------
 def state_guard?(state_id)
#------------------------------------------------------------------------------
#Begin Multi-slot equipment script Edit
#------------------------------------------------------------------------------
 for i in self.armor_ids
#------------------------------------------------------------------------------
#End Multi-slot equipment script Edit
#------------------------------------------------------------------------------
   armor = $data_armors[i]
   if armor != nil
    if armor.guard_state_set.include?(state_id)
     return true
    end
   end
  end
  return false
 end

#=========================================================
# Methods calculate bonus of extra weapon and armor
#=========================================================
 alias g7_ms_game_actor_element_rate element_rate
 def element_rate(element_id)
  result = g7_ms_game_actor_element_rate(element_id)
  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

 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

 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

 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

 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

 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

 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

 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 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 #end class game actor

class Game_Actors
  def order_items
    for actor in 0...@data.size
      if @data[actor] != nil and @data[actor] != 0 then
        @data[actor].order_armor_ids #order armors
      end
    end
  end
end