Annuaire du RPG

Répertoire de ressources/scripts[...] pour le logiciel Rpg Maker !
 
AccueilAccueil  PortailPortail  CalendrierCalendrier  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  ConnexionConnexion  

Partagez | 
 

 ACE - Individual Equipment

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Neko
Fondateur
Fondateur
avatar

Messages : 184
Date d'inscription : 14/07/2013
Age : 18
Localisation : Ici, la plupart du temps.

MessageSujet: ACE - Individual Equipment   Sam 27 Juil - 7:40

ACE - Individual Equipment


Auteur : Fomar0153

Screen :



Il change la façon dont l'équipement est manipulé, chaque pièce d'équipement est désormais considéré comme unique.

Script :

Code:

=begin
Individual Equipment
by Fomar0153
Version 1.1
----------------------
Notes
----------------------
This script changes the way weapons and armours are handled
in game. This script make every weapon and armour unique.
----------------------
Instructions
----------------------
Plug and play.
If you want to be able to carry more than 150 weapons and 150 armors
edit MAX_INVENTORY_SIZE which you can find at the top of the script.
This script is designed to be a base for other scripts.
For example:
Proper Weapon and Armour Customisation.
----------------------
Change Log
----------------------
1.0 -> 1.1 Added a single character (@) to fix a bug where you
          created new equipment when changing equipment.
----------------------
Known bugs
----------------------
None
=end

module CustomEquip
 
  MAX_INVENTORY_SIZE = 150
 
end

class Game_CustomEquip < Game_BaseItem
  #--------------------------------------------------------------------------
  # ● New attr_accessor & attr_reader
  #--------------------------------------------------------------------------
  attr_accessor :pos
  attr_reader  :item_id
  #--------------------------------------------------------------------------
  # ● Pos is used to identify weapons and armors
  #--------------------------------------------------------------------------
  def initialize
    super
    @pos = 0
  end
  #--------------------------------------------------------------------------
  # ● The rest of the methods allow this item to pretend to be RPG::Weapon
  #  and RPG::Armor in some cases, increasing compatability, thought not
  #  as much as I would like.
  #--------------------------------------------------------------------------
  def description
    return nil if is_nil?
    return object.description
  end
 
  def name
    return nil if is_nil?
    return object.name
  end
 
  def icon_index
    return nil if is_nil?
    return object.icon_index
  end
 
  def price
    return nil if is_nil?
    return object.price
  end
 
  def animation_id
    return nil if is_nil?
    return nil if is_armor? # variable only exists for RPG::Weapon
    return object.animation_id
  end
 
  def note
    return nil if is_nil?
    return object.note
  end
 
  def id
    return nil if is_nil?
    return object.id
  end
 
  def features
    return nil if is_nil?
    return object.features
  end
 
  def params
    return nil if is_nil?
    return object.params
  end
 
  def etype_id
    return nil if is_nil?
    return object.etype_id
  end
 
  def wtype_id
    return nil if is_nil?
    return nil if is_armor? # variable only exists for RPG::Weapon
    return object.wtype_id
  end
 
  def atype_id
    return nil if is_nil?
    return nil if is_weapon? # variable only exists for RPG::Armor
    return object.atype_id
  end
 
 
  # performance returns an integer calculated from the equip item's params.
  # each point in a param increasing performance by one, except
  # for attack and magic on weapon which counts double
  # for defence and magic defence on armours which counts double
  def performance
    return nil if is_nil?
    return object.performance
  end
 
end

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● Aliases init_all_items
  #--------------------------------------------------------------------------
  alias ie_init_all_items init_all_items
  def init_all_items
    ie_init_all_items
    @weapons = []
    @armors = []
  end
  #--------------------------------------------------------------------------
  # ● Rewrites weapons
  #--------------------------------------------------------------------------
  def weapons
    return @weapons
  end
  #--------------------------------------------------------------------------
  # ● Rewrites armors
  #--------------------------------------------------------------------------
  def armors
    return @armors
  end
  #--------------------------------------------------------------------------
  # ● Aliases item_number + Probably rewrite
  #--------------------------------------------------------------------------
  alias ie_item_number item_number
  def item_number(item)
    if item.class == RPG::Weapon or item.class == RPG::Armor
      return 1 # I haven't found this to cause unexpected behaviour
              # but I don't like it
    else
      return ie_item_number(item)
    end
  end
  #--------------------------------------------------------------------------
  # ● Aliases gain_item
  #--------------------------------------------------------------------------
  alias ie_gain_item gain_item
  def gain_item(item, amount, include_equip = false)
    if item.class == RPG::Weapon
      if amount > 0
        for i in 1..amount
          t = Game_CustomEquip.new
          t.object = item
          @weapons.push(t)
        end
        weapon_sort
      end
    elsif item.is_a?(Game_CustomEquip) && item.is_weapon?
      if amount == 1
        @weapons.push(item)
        weapon_sort
      elsif amount == -1
        # Can't sell more than 1 at a time
        # (is there any other way to remove more than 1 at a time?
        # except through events?)
        @weapons.delete_at(item.pos)
        weapon_sort
      end
    elsif item.class == RPG::Armor
      if amount > 0
        for i in 1..amount
          t = Game_CustomEquip.new
          t.object = item
          @armors.push(t)
        end
        armor_sort
      end
    elsif item.is_a?(Game_CustomEquip) && item.is_armor?
      if amount == 1
        @armors.push(item)
        armor_sort
      elsif amount == -1
        # Can't sell more than 1 at a time
        # (is there any other way to remove more than 1 at a time?
        # except through events?)
        @armors.delete_at(item.pos)
        armor_sort
      end
    else
      ie_gain_item(item, amount, include_equip)
      return
    end
    $game_map.need_refresh = true
  end
 
  def weapon_sort
    @weapons.sort! { |a, b|  a.item_id <=> b.item_id }
    for i in 0..@weapons.size - 1
      @weapons[i].pos = i
    end
  end
 
  def armor_sort
    @armors.sort! { |a, b|  a.item_id <=> b.item_id }
    for i in 0..@armors.size - 1
      @armors[i].pos = i
    end
  end
 
  alias ie_max_item_number max_item_number
  def max_item_number(item)
    if item.class == RPG::Weapon
      return CustomEquip::MAX_INVENTORY_SIZE - @weapons.size
    elsif item.class == RPG::Armor
      return CustomEquip::MAX_INVENTORY_SIZE - @armors.size
    else
      return ie_max_item_number(item)
    end
  end
end

class Window_ItemList < Window_Selectable
 
  alias ie_include? include?
  def include?(item)
    case @category
    when :weapon
      item.is_a?(Game_CustomEquip) && item.object.is_a?(RPG::Weapon)
    when :armor
      item.is_a?(Game_CustomEquip) && item.object.is_a?(RPG::Armor)
    else
      ie_include?(item)
    end
  end
 
  alias ie_draw_item draw_item
  def draw_item(index)
    item = @data[index]
    if item && !item.is_a?(Game_CustomEquip)
      ie_draw_item(index)
    elsif item && item.is_a?(Game_CustomEquip)
      rect = item_rect(index)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y, enable?(item))
      #draw_item_number(rect, item) just this line removed from the default
    end
  end
 
end


class Window_EquipItem < Window_ItemList
  #--------------------------------------------------------------------------
  # ● Aliases include?
  #--------------------------------------------------------------------------
  alias ie2_include? include?
  def include?(item)
    return true if item == nil
    return false unless item.is_a?(Game_CustomEquip)
    return ie2_include?(item.object)
  end
  #--------------------------------------------------------------------------
  # ● Rewrites update_help
  #--------------------------------------------------------------------------
  def update_help
    super
    if @actor && @status_window
      temp_actor = Marshal.load(Marshal.dump(@actor))
      temp_actor.force_change_equip(@slot_id, item) unless item.nil?
      @status_window.set_temp_actor(temp_actor)
    end
  end
end


class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● Rewrites init_equips
  #--------------------------------------------------------------------------
  def init_equips(equips)
    @equips = Array.new(equip_slots.size) { Game_CustomEquip.new } # only change
    equips.each_with_index do |item_id, i|
      etype_id = index_to_etype_id(i)
      slot_id = empty_slot(etype_id)
      @equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Rewrites change_equip
  #--------------------------------------------------------------------------
  def change_equip(slot_id, item)
    return unless trade_item_with_party(item, @equips[slot_id])
    return if item && equip_slots[slot_id] != item.etype_id
    if item.nil?
      @equips[slot_id] = Game_CustomEquip.new
    else
      @equips[slot_id] = item
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Rewrites force_change_equip
  #--------------------------------------------------------------------------
  def force_change_equip(slot_id, item)
    if item.nil?
      @equips[slot_id] = Game_CustomEquip.new
    else
      @equips[slot_id] = item
    end
    release_unequippable_items(false)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Rewrites trade_item_with_party
  #--------------------------------------------------------------------------
  def trade_item_with_party(new_item, old_item)
    #return false if new_item && !$game_party.has_item?(new_item) removed
    $game_party.gain_item(old_item, 1)
    $game_party.lose_item(new_item, 1)
    return true
  end
  #--------------------------------------------------------------------------
  # ● Rewrites change_equip_by_id
  #--------------------------------------------------------------------------
  def change_equip_by_id(slot_id, item_id)
    if equip_slots[slot_id] == 0
      t = Game_CustomEquip.new
      t.object = $data_weapons[item_id]
      $game_party.gain_item(t, 1)
      change_equip(slot_id, t)
    else
      t = Game_CustomEquip.new
      t.object = $data_armors[item_id]
      $game_party.gain_item(t, 1)
      change_equip(slot_id, t)
    end
  end
  #--------------------------------------------------------------------------
  # ● Rewrites optimize_equipments or does it
  #--------------------------------------------------------------------------
  def optimize_equipments
    clear_equipments
    equip_slots.size.times do |i|
      next if !equip_change_ok?(i)
      items = $game_party.equip_items.select do |item|
        item.etype_id == equip_slots[i] &&
        equippable?(item.object) && item.performance >= 0
      end
      change_equip(i, items.max_by {|item| item.performance })
    end
  end
end


class Window_ShopStatus < Window_Base
 
  alias ie_draw_possession draw_possession
  def draw_possession(x, y)
    return if @item.is_a?(RPG::EquipItem)
    ie_draw_possession(x, y)
  end
 
  alias ie_draw_equip_info draw_equip_info
  def draw_equip_info(x, y)
    ie_draw_equip_info(x, y - line_height * 2)
  end
end

Instructions :
Placez ce script en dessus de Main.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://annuairedurpg.jeuxvideoforum.com
 
ACE - Individual Equipment
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Annuaire du RPG :: RPG maker & co :: Scripts :: RGSS 3 :: Héros-
Sauter vers: