Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
Voir le deal

Aller en bas
Balbereith
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 31
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires Individual Equipment 522164 ) [Coco' Smile]
Date d'inscription : 13/05/2009

Individual Equipment Empty Individual Equipment

Lun 20 Aoû 2012 - 21:27
Salutations ! Voici un script d'individualisation de l'équipement. Crédit :Fomar0153
Individual Equipment SS0020

Code:
=begin
Individual Equipment
by Fomar0153
Version 1.1
----------------------
Notes
----------------------
Ce script change la façon dont les armes et les armures sont affichées en jeu.
Ce script rend toutes les armes et armures uniques.
----------------------
Instructions
----------------------
Plug and play.
Si vous voulez être capable de porter plus de 150 armes et 150 armures
modifiez MAX_INVENTORY_SIZE au début du script.
Ce script a été fait pour être la base d'autre script
par exemple :
Proper Weapon et 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



Dernière édition par Balbereith le Lun 3 Sep 2012 - 2:25, édité 1 fois
stribiliounou
stribiliounou
Membre

Nombre de messages : 212
Age : 26
Localisation : Trou perdu
Distinction : aucune
Date d'inscription : 14/07/2012

Individual Equipment Empty Re: Individual Equipment

Mar 21 Aoû 2012 - 0:00
Ca peut-être très intéressant par exemple pour un système d'artisanat, histoire que tu sortes pas le meilleure équipement possible au premier coup !

Merci ! Smile

Edit: question: ce script permet d'avoir des équipements à bonus aléatoires compris entre tant et tant ? (sinon j'ai mal compris, désolé)
Balbereith
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 31
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires Individual Equipment 522164 ) [Coco' Smile]
Date d'inscription : 13/05/2009

Individual Equipment Empty Re: Individual Equipment

Mar 21 Aoû 2012 - 0:31
Le script individualise juste, au lieu d'avoir un espace dans l'inventaire par id d'objet par exemple :
85 épée = 1 espace de l'inventaire et bien là, 85 épée = 85 espace de l'inventaire

Les objets sont affichés un à un et non plus groupe par groupe.

Après ce script est décrit comme la base pour deux autres scripts donc seul à part pour "l'esthétique", il sert pas à grand chose XD
stribiliounou
stribiliounou
Membre

Nombre de messages : 212
Age : 26
Localisation : Trou perdu
Distinction : aucune
Date d'inscription : 14/07/2012

Individual Equipment Empty Re: Individual Equipment

Sam 25 Aoû 2012 - 14:46
Ah d'accord ! Je retire ce que j'ai dit alors.
Bah merci quand même xD.
shneskelecta
shneskelecta
Membre

Nombre de messages : 14
Distinction : aucune
Date d'inscription : 20/12/2010

Individual Equipment Empty Re: Individual Equipment

Mer 24 Oct 2012 - 21:54
Script 'Game_Party' line 103: NoMethodError occurred. Undefined method '+' for'={}:Hash

Bonsoir ! Voici un petit problème récurent quand je clic sur équipement in game, si jamais la solution circule, je suis preneur !^^

Merci et bonne soirée !
Contenu sponsorisé

Individual Equipment Empty Re: Individual Equipment

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum