- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Petit problème - Script Equipment Requirements
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 :
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ù :
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
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
Jeu 1 Oct 2015 - 18:20
Up
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
Ven 9 Oct 2015 - 17:36
Up
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
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
- skymenMembre
- Nombre de messages : 1
Distinction : aucune
Date d'inscription : 22/10/2015
Re: Petit problème - Script Equipment Requirements
Jeu 22 Oct 2015 - 12:15
Yo o/
Voilà un petit script a mettre en dessous de tout ce beau monde:
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
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
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
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
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
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
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.
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.
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
Lun 2 Nov 2015 - 6:32
Up
Re: Petit problème - Script Equipment Requirements
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.
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.
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
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.^^
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
Lun 9 Nov 2015 - 6:38
Up, pas de news ?
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
Sam 21 Nov 2015 - 11:14
Up, toujours d'actualité.
- ShinokishiMembre
- Nombre de messages : 523
Age : 24
Localisation : Chez moi
Distinction : Message-minute (Spy)
Date d'inscription : 23/08/2015
Re: Petit problème - Script Equipment Requirements
Jeu 26 Nov 2015 - 20:49
en fait à quoi pourquoi tu dit "up" ?
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
Jeu 26 Nov 2015 - 20:50
Bin, je remonte le sujet pour pas que ça tombe dans l'oubli.
- ShinokishiMembre
- Nombre de messages : 523
Age : 24
Localisation : Chez moi
Distinction : Message-minute (Spy)
Date d'inscription : 23/08/2015
Re: Petit problème - Script Equipment Requirements
Jeu 26 Nov 2015 - 21:01
ah ok, bonne astuce sinon désolé je peux pas t'aider
- ZouzakaMembre
- Nombre de messages : 302
Age : 25
Distinction : aucune
Date d'inscription : 25/12/2011
Re: Petit problème - Script Equipment Requirements
Ven 4 Déc 2015 - 8:27
Voila
- 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
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
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.
- ZouzakaMembre
- Nombre de messages : 302
Age : 25
Distinction : aucune
Date d'inscription : 25/12/2011
Re: Petit problème - Script Equipment Requirements
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)
Etape 2: Sélection du meilleur équipement dans la liste
je n'est en aucun cas approché cette étape
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
- Code:
&& reqstate?(item)
Etape 2: Sélection du meilleur équipement dans la liste
je n'est en aucun cas approché cette étape
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Petit problème - Script Equipment Requirements
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.
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.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|