Partagez
Aller en bas
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Petit problème - Script Equipment Requirements

le Sam 26 Sep 2015 - 18:49
Bonjour,

J'utilise le script de Fomar0153 pour mettre des conditions afin de pouvoir porter les équipements. A la base, le script n'affichait pas les équipements qu'on ne pouvait pas porter. Après une modif de Zouzaka, on peut désormais voir en grisé les équipements qu'on ne peut pas porter, avec aussi un ajout d'une interface.

Par contre, il y a un petit problème que je n'avais pas vu. Quand un équipement n'a pas toutes les conditions requises pour être porté, on ne peut pas s'en équiper, ce qui est normal. Sauf que si on sélectionne Optimal, le personnage peut se retrouver équipé des pièces qu'il n'est pas censé pouvoir porter. Quelqu'un pourrait me corriger cela s'il vous plaît ?

Le script de Fomar est ici :

Code:
=begin
Equipment Requirements
by Fomar0153
modified by Zouzaka
Version 1.3
----------------------
Notes
----------------------
Adds a level requirement to equipment.
----------------------
Instructions
----------------------
Notetag the weapons/armors like so:
<levelreq x>
<mhpreq x>
<mmpreq x>
<atkreq x>
<defreq x>
<matreq x>
<mdfreq x>
<agireq x>
<lukreq x>
<switchreq x>
<variablereq x,y>
<wepreq x>
<armreq x>
----------------------
Change Log
----------------------
1.0 -> 1.1 Added stat requirements
          Changed script name from Equipment Level Requirements
          to just Equipment Requirements
1.1 -> 1.2 Added switch and other equipment requirements
1.2 -> 1.3 Ajout D'une Window qui affiche les Conditions requises
          Réduit le script de base de plus de 50 lignes
----------------------
Known bugs
----------------------
None
=end
  #--------------------------------------------------------------------------
  # ● If set to true then it compares the requirement with the actor's base
  #  stat rather than their current.
  #--------------------------------------------------------------------------
EQUIPREQ_USE_BASE_STAT = true
  #--------------------------------------------------------------------------
  # ● Vocab for switch's
  #  every switch_id in a different line
  #--------------------------------------------------------------------------

Switch_Vocab = {
# Switch_ID => "Vocab",
2 => "Visiter la Campagne",
}
  #--------------------------------------------------------------------------
  # ● Vocab for variables
  #  every switch_id in a different line
  #--------------------------------------------------------------------------

Variable_Vocab = {
# Variable_ID => "Vocab",
2 => "Nombre de pierres à casser",
}
class Window_EquipItem
  #--------------------------------------------------------------------------
  # ● Check the requirements
  #--------------------------------------------------------------------------
  def enable?(item)
    unless item == nil
      return false if @actor.level < item.levelreq
      return false if reqstat(0) < item.mhpreq
      return false if reqstat(1) < item.mmpreq
      return false if reqstat(2) < item.atkreq
      return false if reqstat(3) < item.defreq
      return false if reqstat(4) < item.matreq
      return false if reqstat(5) < item.mdfreq
      return false if reqstat(6) < item.agireq
      return false if reqstat(7) < item.lukreq
      if item.switchreq > 0
        return false unless $game_switches[item.switchreq]
      end
      if item.variablereq != 0
        return false unless $game_variables[item.variablereq[0]] < item.variablereq[1]
      end
      if item.wepreq > 0
        e = []
        for equip in @actor.equips
          e.push(equip.id) if equip.class == RPG::Weapon
        end
        return false unless e.include?(item.wepreq)
      end
      if item.armreq > 0
        e = []
        for equip in @actor.equips
          e.push(equip.id) if equip.class == RPG::Armor
        end
        return false unless e.include?(item.armreq)
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● New Method
  #--------------------------------------------------------------------------
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? @actor.param_base(id) : @actor.param(id)
  end
end
module RPG
  #--------------------------------------------------------------------------
  # ● Equip Item is inherited by both Weapon and Armor
  #--------------------------------------------------------------------------
  class EquipItem
    def variablereq
      self.note =~ /<variablereq (.*),(.*)>/i ? [$1.to_i,$2.to_i] : 0
    end
    def levelreq
      self.note =~ /<levelreq (.*)>/i ? $1.to_i : 0
    end
    def mhpreq
      self.note =~ /<mhpreq (.*)>/i ? $1.to_i : 0
    end
    def mmpreq
      self.note =~ /<mmpreq (.*)>/i ? $1.to_i : 0
    end
    def atkreq
      self.note =~ /<atkreq (.*)>/i ? $1.to_i : 0
    end
    def defreq
      self.note =~ /<defreq (.*)>/i ? $1.to_i : 0
    end
    def matreq
      self.note =~ /<matreq (.*)>/i ? $1.to_i : 0
    end
    def mdfreq
      self.note =~ /<mdfreq (.*)>/i ? $1.to_i : 0
    end
    def agireq
      self.note =~ /<agireq (.*)>/i ? $1.to_i : 0
    end
    def lukreq
      self.note =~ /<lukreq (.*)>/i ? $1.to_i : 0
    end
    def switchreq
      self.note =~ /<switchreq (.*)>/i ? $1.to_i : 0
    end
    def wepreq
      self.note =~ /<wepreq (.*)>/i ? $1.to_i : 0
    end
    def armreq
      self.note =~ /<armreq (.*)>/i ? $1.to_i : 0
    end
  end
end
class Window_Requirement < Window_Base
  def initialize(x, y)
    super(x, y, Graphics.width/2, Graphics.height)
    self.openness = 0
    self.z = 250
    @item = nil
    @actor = nil
    refresh
  end
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? @actor.param_base(id) : @actor.param(id)
  end
  def item ; return @item ; end
  def item=(item)
    @item = item
    refresh
  end
  def actor ; return @actor ; end
  def actor=(actor)
    @actor = actor
    refresh
  end
  def update
    super
    if Input.trigger?(:R)
      @actor = $game_party.menu_actor_next
      refresh
    elsif Input.trigger?(:L)
      @actor = $game_party.menu_actor_prev
      refresh
    end
  end
  def refresh
    contents.clear
    @req = ["item.levelreq","item.mhpreq","item.mmpreq","item.atkreq","item.defreq","item.matreq","item.mdfreq","item.agireq","item.lukreq"]#,"item.wepreq","item.armreq"]
    @vocab_req = [Vocab.level,Vocab.param(0),Vocab.param(1),Vocab.param(2),Vocab.param(3),Vocab.param(4),Vocab.param(5),Vocab.param(6),Vocab.param(7)]#,Vocab.weapon,Vocab.armor]
    @req_condition = ["@actor.level","reqstat(0)","reqstat(1)","reqstat(2)","reqstat(3)","reqstat(4)","reqstat(5)","reqstat(6)","reqstat(7)"]
    @t = 2
    change_color(normal_color)
    draw_text(contents.width/8, 0, contents.width, line_height, "Conditions requises")
    @req.each do |req|
      if item != nil && eval(req) != 0 && actor != nil
        eval(@req_condition[@req.index(req)]) < eval(req) ? change_color(text_color(2)) : change_color(normal_color)
        draw_text(0, line_height*@t, contents.width, line_height, @vocab_req[@req.index(req)]+" requis : "+eval(req).to_s)
        @t += 1
      end
    end
    change_color(normal_color)
    if item != nil && item.wepreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        if equip.class == RPG::Weapon
          e.push(equip.id)
        end
      end
      change_color(text_color(2)) unless e.include?(item.wepreq)
      draw_text(0, line_height*@t, contents.width, line_height, "Arme requise : "+$data_weapons[item.wepreq].name)
      @t += 1
    end
    change_color(normal_color)
    if item != nil && item.armreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        e.push(equip.id) if equip.class == RPG::Armor
      end
      change_color(text_color(2)) unless e.include?(item.armreq)
      draw_text(0, line_height*(@t), contents.width, line_height, "Armure requise : "+$data_armors[item.armreq].name)
      @t += 1
    end
    if item && item.switchreq != 0
      $game_switches[item.switchreq] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Switch_Vocab[item.switchreq])
      @t += 1
    end
    if item && item.variablereq != 0
      $game_variables[item.variablereq[0]] >= item.variablereq[1] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Variable_Vocab[item.variablereq[0]]+" "+$game_variables[item.variablereq[0]].to_s+"/"+item.variablereq[1].to_s)
    end
    change_color(normal_color)
    draw_text(0, contents.height-line_height*3, contents.width, line_height, "Prec.(Q) | Suiv.(W)",1)
    draw_text(0, contents.height-line_height*2, contents.width, line_height, "Personnage Actuel",1)
    draw_text(0, contents.height-line_height, contents.width, line_height, @actor.name,1) if @actor
  end
end

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

class Scene_Equip
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(Graphics.width/4,0)
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      if @window_req.openness == 0 && @item_window.active && @item_window.item != nil
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
        @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        @window_req.open
        @item_window.deactivate
      elsif @window_req.openness == 255
        @background.dispose if @background
        @window_req.close
        @item_window.activate
      end
    end
  end
end
class Scene_Item < Scene_ItemBase
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(Graphics.width/4,0)
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      if @window_req.openness == 0 && (@item_window.item.class == RPG::Weapon || @item_window.item.class == RPG::Armor)
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
        @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        @window_req.open
        @item_window.deactivate
      elsif @window_req.openness == 255
        @background.dispose if @background
        @window_req.close
        @item_window.activate
      end
    end
  end
end

Il y a aussi un script de vincent26, lié à ce système de pré-requis, je ne sais pas s'il peut avoir un impact, donc je le mets au cas où :
Code:
#Notetag the weapons/armors
#<maitrise name,y>
#<maitrise_rang name,rang>
 
Equipement_Vocab = {
# Variable_ID => "Vocab",
"Hache" => "Maitrise :",
"Lance" => "Maitrise :",
"Griffes" => "Maitrise :",
"Epée" => "Maitrise :",
"Katana" => "Maitrise :",
"Arc" => "Maitrise :",
"Dague" => "Maitrise :",
"Massue" => "Maitrise :",
"Bâton" => "Maitrise :",
"Arme à feu" => "Maitrise :",
}
module RPG
  #--------------------------------------------------------------------------
  # ● Equip Item is inherited by both Weapon and Armor
  #--------------------------------------------------------------------------
  class EquipItem
    def maitrise
      self.note =~ /<maitrise (.*)>/i ? $1 : 0
    end
    def maitrise_rang
      self.note =~ /<maitrise_rang (.*)>/i ? $1 : 0
    end
  end
end
class Window_EquipItem
  alias enable_weapon_upgrade? enable?
  def enable?(item)
    return false unless enable_weapon_upgrade?(item)
    unless item == nil
      if item.maitrise != 0
        array = item.maitrise.split(",")
        array[1] = array[1].to_i
        name = (Weapon_Upgrade::LIST_TYPE_ARME.index(array[0])+1).to_s
        nbr = $game_actors[@actor.id].weapon_upgrade[name] == nil ? 0 : $game_actors[@actor.id].weapon_upgrade[name]
        return false if nbr < array[1]
      end
      if item.maitrise_rang != 0
        array = item.maitrise_rang.split(",")
        name = (Weapon_Upgrade::LIST_TYPE_ARME.index(array[0])+1).to_s
        nbr2 = Weapon_Upgrade::LVL_DESCRIPTION.key(array[1])
        nbr = $game_actors[@actor.id].weapon_upgrade[name] == nil ? 0 : $game_actors[@actor.id].weapon_upgrade[name]
        return false if nbr < nbr2
      end
    end
    return true
  end
  
  alias draw_remove_equip_weapon_upgrade draw_remove_equip
  def draw_remove_equip(rect)
    change_color(normal_color, true)
    draw_remove_equip_weapon_upgrade(rect)
  end
  
end
class Window_Requirement
  def refresh
    contents.clear
    @req = ["item.levelreq","item.mhpreq","item.mmpreq","item.atkreq","item.defreq","item.matreq","item.mdfreq","item.agireq","item.lukreq"]#,"item.wepreq","item.armreq"]
    @vocab_req = [Vocab.level,Vocab.param(0),Vocab.param(1),Vocab.param(2),Vocab.param(3),Vocab.param(4),Vocab.param(5),Vocab.param(6),Vocab.param(7)]#,Vocab.weapon,Vocab.armor]
    @req_condition = ["@actor.level","reqstat(0)","reqstat(1)","reqstat(2)","reqstat(3)","reqstat(4)","reqstat(5)","reqstat(6)","reqstat(7)"]
    @t = 2
    change_color(normal_color)
    draw_text(contents.width/8, 0, contents.width, line_height, "Conditions requises")
    @req.each do |req|
      if item != nil && eval(req) != 0 && actor != nil
        eval(@req_condition[@req.index(req)]) < eval(req) ? change_color(text_color(2)) : change_color(normal_color)
        draw_text(0, line_height*@t, contents.width, line_height, @vocab_req[@req.index(req)]+" requis : "+eval(req).to_s)
        @t += 1
      end
    end
    change_color(normal_color)
    if item != nil && item.wepreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        if equip.class == RPG::Weapon
          e.push(equip.id)
        end
      end
      change_color(text_color(2)) unless e.include?(item.wepreq)
      draw_text(0, line_height*@t, contents.width, line_height, "Arme requise : "+$data_weapons[item.wepreq].name)
      @t += 1
    end
    change_color(normal_color)
    if item != nil && item.armreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        e.push(equip.id) if equip.class == RPG::Armor
      end
      change_color(text_color(2)) unless e.include?(item.armreq)
      draw_text(0, line_height*(@t), contents.width, line_height, "Armure requise : "+$data_armors[item.armreq].name)
      @t += 1
    end
    if item && item.switchreq != 0
      $game_switches[item.switchreq] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Switch_Vocab[item.switchreq])
      @t += 1
    end
    if item && item.variablereq != 0
      $game_variables[item.variablereq[0]] >= item.variablereq[1] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Variable_Vocab[item.variablereq[0]]+" "+$game_variables[item.variablereq[0]].to_s+"/"+item.variablereq[1].to_s)
      @t += 1
    end
    if item && item.maitrise != 0
      array = item.maitrise.split(",")
      array[1] = array[1].to_i
      name = (Weapon_Upgrade::LIST_TYPE_ARME.index(array[0])+1).to_s
      return if @actor == nil
      nbr = $game_actors[@actor.id].weapon_upgrade[name] == nil ? 0 : $game_actors[@actor.id].weapon_upgrade[name]
      nbr >= array[1] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Equipement_Vocab[array[0]]+" "+array[1].to_s)
      @t += 1
    end
    if item && item.maitrise_rang != 0
      array = item.maitrise_rang.split(",")
      name = (Weapon_Upgrade::LIST_TYPE_ARME.index(array[0])+1).to_s
      return if @actor == nil
      nbr = $game_actors[@actor.id].weapon_upgrade[name] == nil ? 0 : $game_actors[@actor.id].weapon_upgrade[name]
      nbr2 = Weapon_Upgrade::LVL_DESCRIPTION.key(array[1])
      nbr >= nbr2 ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Equipement_Vocab[array[0]]+" "+array[1])
      @t += 1
    end
    change_color(normal_color)
    draw_text(0, contents.height-line_height*3, contents.width, line_height, "Prec.(Q) | Suiv.(W)",1)
    draw_text(0, contents.height-line_height*2, contents.width, line_height, "Personnage Actuel",1)
    draw_text(0, contents.height-line_height, contents.width, line_height, @actor.name,1) if @actor
  end
end


Dernière édition par Nérylis le Ven 4 Déc 2015 - 23:08, édité 1 fois
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 1 Oct 2015 - 18:20
Up
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Ven 9 Oct 2015 - 17:36
Up
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 15 Oct 2015 - 19:12
Re, je vous donne ce que Mist m'a fait ci-dessous. Là, ça empêche bien de s'équiper des équipements dont les conditions de pré-requis ne sont pas remplies, mais ça ne sélectionne pas forcément le meilleur équipement parmi les disponibles. Pour les armes, la fonction Optimal doit m'équiper de celle qui a la plus grosse attaque et pour les armures, celles qui ont le plus de défense. Les autres stats, il n'y a pas à s'en occuper. Et si un équipement n'a pas les pré-requis pour être porté, on passe à celui qui vient juste après en terme de valeur la plus haute (attaque pour les armes, défense pour les armures).

Code:
=begin

Mist's Adjustements on Optimize command in Equipment Requirements
by Fomar0153 modified by Zouzaka Version 1.3

=end

class Game_BattlerBase
  def reqstat(id, actor)
    if actor.is_a?(Game_Actor)
      EQUIPREQ_USE_BASE_STAT ? actor.param_base(id) : actor.param(id)
    end
  end
  
  alias reqstat_equippable? equippable?
  def equippable?(item, actor = nil)
    if actor.is_a?(Game_Actor)
      return actor.level > item.levelreq
      return reqstat(0, actor) > item.mhpreq
      return reqstat(1, actor) > item.mmpreq
      return reqstat(2, actor) > item.atkreq
      return reqstat(3, actor) > item.defreq
      return reqstat(4, actor) > item.matreq
      return reqstat(5, actor) > item.mdfreq
      return reqstat(6, actor) > item.agireq
      return reqstat(7, actor) > item.lukreq

      if item.switchreq > 0
        return $game_switches[item.switchreq]
      end
      if item.variablereq != 0
        return $game_variables[item.variablereq[0]] < item.variablereq[1]
      end
    end
    reqstat_equippable?(item)
  end
end

class Scene_Equip < Scene_MenuBase
  def command_optimize
    Sound.play_equip
    @actor.optimize_equipments(@actor) # new parameter
    @status_window.refresh
    @slot_window.refresh
    @command_window.activate
  end
end

class Game_Actor < Game_Battler
  def optimize_equipments(actor) # new parameter
    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, actor) && item.performance >= 0 # new parameter
      end
      change_equip(i, items.max_by {|item| item.performance })
    end
  end
end
avatar
skymen
Membre

Nombre de messages : 1
Distinction : aucune
Date d'inscription : 22/10/2015

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 22 Oct 2015 - 12:15
Yo o/
Voilà un petit script a mettre en dessous de tout ce beau monde:
Code:

class RPG::Weapon < RPG::EquipItem
  def initialize
    super
    @wtype_id = 0
    @animation_id = 0
    @features.push(RPG::BaseItem::Feature.new(31, 1, 0))
    @features.push(RPG::BaseItem::Feature.new(22, 0, 0))
  end
  def performance
    params[2]
  end
  attr_accessor :wtype_id
  attr_accessor :animation_id
end

class RPG::Armor < RPG::EquipItem
  def initialize
    super
    @atype_id = 0
    @etype_id = 1
    @features.push(RPG::BaseItem::Feature.new(22, 1, 0))
  end
  def performance
    params[3]
  end
  attr_accessor :atype_id
end

Maintenant, ca va ignorer les valeurs de défense et d'attaque magique lors de l'optimisation pour ne mettre que les plus grandes valeurs de défense pour les armures, et d'attaque pour les armes.
J'ai testé de mon côté, c'est fonctionnel.
N'hésite pas a me dire si ca à marché, ou si tu voulais un truc différent Smile
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 22 Oct 2015 - 20:54
Salut, je viens de tester. J'ai gardé le script de Mist, il fallait bien le garder n'est-ce pas ?

Sinon, ça ne marche pas pour tous les personnages bizarrement. Je te mets une démo, y a pas mal de scripts dessus mais peut-être que ça joue aussi sur le fonctionnement : http://www.mediafire.com/download/ywfcpg8b4x2h18h/Bug+Optimal.exe
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Mer 28 Oct 2015 - 18:15
Re up

On m'a suggéré de dégager l'option Optimal mais perso, je préfère corriger le problème plutôt que de l'esquiver.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Lun 2 Nov 2015 - 6:32
Up
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 25
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Résolu Re: Petit problème - Script Equipment Requirements

le Lun 2 Nov 2015 - 9:56
Personnellement, je n'utilise pas la fonction optimiser, ça fait trop d'options dans le menu équipement, et ça fait tâche... Je préfère laisser le choix au joueur de prendre le temps de s'équiper comme il l'entend, de comparer, etc.

J'utilise pour ma part un autre que Fomar, il s'agit d'un de Xail System, je te laisse le lien. Pas eu de soucis de compatibilité : XS - Equipment Requirements

Je l'utilise avec qqn de ses autres, si tu as des questions ou choses qui bloquent, je t'aiderai comme je le peux.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Lun 2 Nov 2015 - 18:27
Le souci, c'est que le script de Fomar est lié à celui de vincent (qui me permet de gérer des conditions par rapport à la maîtrise des armes, système fait dans un autre script de vincent) et je préfère rester sur cette base.^^
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Lun 9 Nov 2015 - 6:38
Up, pas de news ?
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Sam 21 Nov 2015 - 11:14
Up, toujours d'actualité.
avatar
Shinokishi
Membre

Nombre de messages : 519
Age : 18
Localisation : Quelque part en France (mais je sais pas où)
Distinction : Message-minute (Spy)
Date d'inscription : 23/08/2015

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 26 Nov 2015 - 20:49
en fait à quoi pourquoi tu dit "up" ?
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 26 Nov 2015 - 20:50
Bin, je remonte le sujet pour pas que ça tombe dans l'oubli.
avatar
Shinokishi
Membre

Nombre de messages : 519
Age : 18
Localisation : Quelque part en France (mais je sais pas où)
Distinction : Message-minute (Spy)
Date d'inscription : 23/08/2015

Résolu Re: Petit problème - Script Equipment Requirements

le Jeu 26 Nov 2015 - 21:01
ah ok, bonne astuce sinon désolé je peux pas t'aider Sad
avatar
Zouzaka
Membre

Nombre de messages : 294
Age : 20
Distinction : aucune
Date d'inscription : 25/12/2011

Résolu Re: Petit problème - Script Equipment Requirements

le Ven 4 Déc 2015 - 8:27
Voila Smile
Code:
=begin
Equipment Requirements
by Fomar0153
modified by Zouzaka
Version 1.3
----------------------
Notes
----------------------
Adds a level requirement to equipment.
----------------------
Instructions
----------------------
Notetag the weapons/armors like so:
<levelreq x>
<mhpreq x>
<mmpreq x>
<atkreq x>
<defreq x>
<matreq x>
<mdfreq x>
<agireq x>
<lukreq x>
<switchreq x>
<variablereq x,y>
<wepreq x>
<armreq x>
----------------------
Change Log
----------------------
1.0 -> 1.1 Added stat requirements
          Changed script name from Equipment Level Requirements
          to just Equipment Requirements
1.1 -> 1.2 Added switch and other equipment requirements
1.2 -> 1.3 Ajout D'une Window qui affiche les Conditions requises
          Réduit le script de base de plus de 50 lignes
1.3 -> 1.4 Optimisation et resolution de bug
----------------------
Known bugs
----------------------
None
=end
  #--------------------------------------------------------------------------
  # ● If set to true then it compares the requirement with the actor's base
  #  stat rather than their current.
  #--------------------------------------------------------------------------
EQUIPREQ_USE_BASE_STAT = true
  #--------------------------------------------------------------------------
  # ● Vocab for switch's
  #  every switch_id in a different line
  #--------------------------------------------------------------------------

Switch_Vocab = {
# Switch_ID => "Vocab",
2 => "Visiter la Campagne",
}
  #--------------------------------------------------------------------------
  # ● Vocab for variables
  #  every variable_id in a different line
  #--------------------------------------------------------------------------

Variable_Vocab = {
# Variable_ID => "Vocab",
2 => "Nombre de pierres à casser",
}


class Game_Actor
  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) && item.performance >= 0 && reqstate?(item)
      end
      change_equip(i, items.max_by {|item| item.performance })
    end
  end
  def reqstate?(item)
    unless item == nil
      return false if level < item.levelreq
      return false if reqstat(0) < item.mhpreq
      return false if reqstat(1) < item.mmpreq
      return false if reqstat(2) < item.atkreq
      return false if reqstat(3) < item.defreq
      return false if reqstat(4) < item.matreq
      return false if reqstat(5) < item.mdfreq
      return false if reqstat(6) < item.agireq
      return false if reqstat(7) < item.lukreq
      if item.switchreq > 0
        return false unless $game_switches[item.switchreq]
      end
      if item.variablereq != 0
        return false unless $game_variables[item.variablereq[0]] < item.variablereq[1]
      end
      if item.wepreq > 0
        e = []
        for equip in equips
          e.push(equip.id) if equip.class == RPG::Weapon
        end
        return false unless e.include?(item.wepreq)
      end
      if item.armreq > 0
        e = []
        for equip in equips
          e.push(equip.id) if equip.class == RPG::Armor
        end
        return false unless e.include?(item.armreq)
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● New Method
  #--------------------------------------------------------------------------
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? param_base(id) : param(id)
  end
end
class Window_EquipItem
  #--------------------------------------------------------------------------
  # ● Check the requirements
  #--------------------------------------------------------------------------
  def enable?(item)
    return @actor.reqstate?(item)
  end
end
module RPG
  #--------------------------------------------------------------------------
  # ● Equip Item is inherited by both Weapon and Armor
  #--------------------------------------------------------------------------
  class EquipItem
    def variablereq
      self.note =~ /<variablereq (.*),(.*)>/i ? [$1.to_i,$2.to_i] : 0
    end
    def levelreq
      self.note =~ /<levelreq (.*)>/i ? $1.to_i : 0
    end
    def mhpreq
      self.note =~ /<mhpreq (.*)>/i ? $1.to_i : 0
    end
    def mmpreq
      self.note =~ /<mmpreq (.*)>/i ? $1.to_i : 0
    end
    def atkreq
      self.note =~ /<atkreq (.*)>/i ? $1.to_i : 0
    end
    def defreq
      self.note =~ /<defreq (.*)>/i ? $1.to_i : 0
    end
    def matreq
      self.note =~ /<matreq (.*)>/i ? $1.to_i : 0
    end
    def mdfreq
      self.note =~ /<mdfreq (.*)>/i ? $1.to_i : 0
    end
    def agireq
      self.note =~ /<agireq (.*)>/i ? $1.to_i : 0
    end
    def lukreq
      self.note =~ /<lukreq (.*)>/i ? $1.to_i : 0
    end
    def switchreq
      self.note =~ /<switchreq (.*)>/i ? $1.to_i : 0
    end
    def wepreq
      self.note =~ /<wepreq (.*)>/i ? $1.to_i : 0
    end
    def armreq
      self.note =~ /<armreq (.*)>/i ? $1.to_i : 0
    end
  end
end
class Window_Requirement < Window_Base
  def initialize(x, y)
    super(x, y, Graphics.width/2, Graphics.height)
    self.openness = 0
    self.z = 250
    @item = nil
    @actor = nil
    refresh
  end
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? @actor.param_base(id) : @actor.param(id)
  end
  def item ; return @item ; end
  def item=(item)
    @item = item
    refresh
  end
  def actor ; return @actor ; end
  def actor=(actor)
    @actor = actor
    refresh
  end
  def update
    super
    if Input.trigger?(:R)
      @actor = $game_party.menu_actor_next
      refresh
    elsif Input.trigger?(:L)
      @actor = $game_party.menu_actor_prev
      refresh
    end
  end
  def refresh
    contents.clear
    @req = ["item.levelreq","item.mhpreq","item.mmpreq","item.atkreq","item.defreq","item.matreq","item.mdfreq","item.agireq","item.lukreq"]#,"item.wepreq","item.armreq"]
    @vocab_req = [Vocab.level,Vocab.param(0),Vocab.param(1),Vocab.param(2),Vocab.param(3),Vocab.param(4),Vocab.param(5),Vocab.param(6),Vocab.param(7)]#,Vocab.weapon,Vocab.armor]
    @req_condition = ["@actor.level","reqstat(0)","reqstat(1)","reqstat(2)","reqstat(3)","reqstat(4)","reqstat(5)","reqstat(6)","reqstat(7)"]
    @t = 2
    change_color(normal_color)
    draw_text(contents.width/8, 0, contents.width, line_height, "Conditions requises")
    @req.each do |req|
      if item != nil && eval(req) != 0 && actor != nil
        eval(@req_condition[@req.index(req)]) < eval(req) ? change_color(text_color(2)) : change_color(normal_color)
        draw_text(0, line_height*@t, contents.width, line_height, @vocab_req[@req.index(req)]+" requis : "+eval(req).to_s)
        @t += 1
      end
    end
    change_color(normal_color)
    if item != nil && item.wepreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        if equip.class == RPG::Weapon
          e.push(equip.id)
        end
      end
      change_color(text_color(2)) unless e.include?(item.wepreq)
      draw_text(0, line_height*@t, contents.width, line_height, "Arme requise : "+$data_weapons[item.wepreq].name)
      @t += 1
    end
    change_color(normal_color)
    if item != nil && item.armreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        e.push(equip.id) if equip.class == RPG::Armor
      end
      change_color(text_color(2)) unless e.include?(item.armreq)
      draw_text(0, line_height*(@t), contents.width, line_height, "Armure requise : "+$data_armors[item.armreq].name)
      @t += 1
    end
    if item && item.switchreq != 0
      $game_switches[item.switchreq] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Switch_Vocab[item.switchreq])
      @t += 1
    end
    if item && item.variablereq != 0
      $game_variables[item.variablereq[0]] >= item.variablereq[1] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Variable_Vocab[item.variablereq[0]]+" "+$game_variables[item.variablereq[0]].to_s+"/"+item.variablereq[1].to_s)
    end
    change_color(normal_color)
    draw_text(0, contents.height-line_height*3, contents.width, line_height, "Prec.(Q) | Suiv.(W)",1)
    draw_text(0, contents.height-line_height*2, contents.width, line_height, "Personnage Actuel",1)
    draw_text(0, contents.height-line_height, contents.width, line_height, @actor.name,1) if @actor
  end
end

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

class Scene_Equip
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(Graphics.width/4,0)
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      if @window_req.openness == 0 && @item_window.active && @item_window.item != nil
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
        @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        @window_req.open
        @item_window.deactivate
      elsif @window_req.openness == 255
        @background.dispose if @background
        @window_req.close
        @item_window.activate
      end
    end
  end
end
class Scene_Item < Scene_ItemBase
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(Graphics.width/4,0)
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      if @window_req.openness == 0 && (@item_window.item.class == RPG::Weapon || @item_window.item.class == RPG::Armor)
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
        @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        @window_req.open
        @item_window.deactivate
      elsif @window_req.openness == 255
        @background.dispose if @background
        @window_req.close
        @item_window.activate
      end
    end
  end
end
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Ven 4 Déc 2015 - 15:38
Je viens de tester sans prendre en compte les modifs de Mist et de Skymen (c'est ce que je devais faire, non ?). Ça marche bien au niveau des équipements que je ne suis pas censé porter, ils ne sont pas sélectionnés, donc c'est nickel. Par contre, sur certains slots, ce ne sont pas les équipements ayant la meilleure défense qui sont sélectionnés. C'est normal ? Comment as-tu procédé pour mettre à jour le script ? Est-ce que ce sont les équipements ayant le plus de stats globalement qui sont sélectionnés ? Si c'est ça, à la limite ça me conviendra très bien.
avatar
Zouzaka
Membre

Nombre de messages : 294
Age : 20
Distinction : aucune
Date d'inscription : 25/12/2011

Résolu Re: Petit problème - Script Equipment Requirements

le Ven 4 Déc 2015 - 18:06
Je n'est en rien changé la manière dont la sélection de l'Équipement fonctionne.
A la base l'optimisation se fait en 2 etapes
Etape 1:

Une liste est créer incluant les équipement respectant certains critères.
(L'équipement convient au slots, qu'il soit équiprobable)
Code:
item.etype_id == equip_slots[i] &&
equippable?(item) && item.performance >= 0
---> c'est ici ou j'ai ajouté un nouveau critère : que les conditions de l'équipement soit respecté
Code:
&& reqstate?(item)

Etape 2: Sélection du meilleur équipement dans la liste
je n'est en aucun cas approché cette étape Smile
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 30
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petit problème - Script Equipment Requirements

le Ven 4 Déc 2015 - 23:06
Je pense avoir compris, la fonction Optimal sélectionne bien l'équipement avec le plus de stats, pas celui qui a une stat en particulier la mieux montée. Du coup par exemple, même si j'ai un équipement avec 10 de mieux en défense, 25 de mieux en agilité et 30 de mieux en chance, il ne me le sélectionnera pas parce qu'il y a un équipement avec 200 de mieux en MP (200 supérieur à 10+25+30).

Bon, conclusion, ta modification me convient puisqu'elle résout le bug de départ. Aussi, je te remercie pour ton aide hyper rapide car tu as réussi en moins de 24h là où beaucoup sur d'autres forums, notamment internationaux, m'ont laissé en vrac pendant 2 mois à m'expliquer comment me passer de ma demande. Donc, merci beaucoup. Smile
Contenu sponsorisé

Résolu Re: Petit problème - Script Equipment Requirements

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