- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Bug Contre-Attaque
Dim 27 Mar 2016 - 21:06
Coucou,
J'ai trouvé un bug avec le système de contre-attaque par défaut de RPG Maker. Lorsque l'attaque est multiple, c'est-à-dire que l'attaquant a X coups supplémentaires, celui qui renvoie l'attaque en face va donner autant de X coups. C'est un peu bête, d'autant que si l'attaquant meurt avant d'avoir subi tous les contres, ces derniers sont quand même joués dans le vide. L'idéal je pense serait que si l'adversaire voit un de ses X coups contré, sa série s'arrête, et la contre-attaque soit de un seul coup (et non pas copier la série de l'ennemi). Comment peut-on modifier cela ?
La portion de code impactée se trouve dans Scene_Battle à partir de la ligne 619 :
Si vous voulez tester le bug, c'est simple. Donnez à vos persos la caractéristique 100% de chances de contre-attaque et mettez à votre adversaire la caractéristique Attaques supplémentaires 4 par exemple. Lancez un combat et voyez par vous-même.
J'ai trouvé un bug avec le système de contre-attaque par défaut de RPG Maker. Lorsque l'attaque est multiple, c'est-à-dire que l'attaquant a X coups supplémentaires, celui qui renvoie l'attaque en face va donner autant de X coups. C'est un peu bête, d'autant que si l'attaquant meurt avant d'avoir subi tous les contres, ces derniers sont quand même joués dans le vide. L'idéal je pense serait que si l'adversaire voit un de ses X coups contré, sa série s'arrête, et la contre-attaque soit de un seul coup (et non pas copier la série de l'ennemi). Comment peut-on modifier cela ?
La portion de code impactée se trouve dans Scene_Battle à partir de la ligne 619 :
- Code:
#--------------------------------------------------------------------------
# * Invoke Counterattack
#--------------------------------------------------------------------------
def invoke_counter_attack(target, item)
@log_window.display_counter(target, item)
attack_skill = $data_skills[target.attack_skill_id]
@subject.item_apply(target, attack_skill)
refresh_status
@log_window.display_action_results(@subject, attack_skill)
end
Si vous voulez tester le bug, c'est simple. Donnez à vos persos la caractéristique 100% de chances de contre-attaque et mettez à votre adversaire la caractéristique Attaques supplémentaires 4 par exemple. Lancez un combat et voyez par vous-même.
- GelartoGelato Della Mamma
- Nombre de messages : 2919
Age : 29
Distinction : Grand bêta-testeur de la communauté Curse
Personne avec du goût
Je ne suis pas une glace italienne, bordel de merde! [Gel']
Mon plus grand fan [Yama']
Mon ptit bichon [encore Yama']
Jeau-Paul II[Mist']
Saint-Gelato Le Frais [Mist']
Écrivain du dimanche [Amal']
FF IV Fanatic [LaCommu']
Collectionneur de distinctions de merde [Yama]
ModoGel [Un staffieux mais lequel?]
RNGel 2.0 [Zeal']
Date d'inscription : 31/07/2012
Re: Bug Contre-Attaque
Dim 27 Mar 2016 - 21:59
Je peux pas t'aider (car je suis une bille en script) mais je pense pas que ça soit possible de voir 4 actions indépendantes comme une seule.
La caractéristique "Attaques supplémentaires" permet de "jouer X fois dans le même tour." Chaque action étant totalement indépendant les unes des autres, si la première est contré, ça serait moche pour les 3 autres qui le seront pas forcément (sauf si 100% mais on a rarement 100% de contre).
Plus que mette un seul coup, faudrait que les contre-attaques soient joués après chaque coup (ce qui serait bien plus logique) :
Attaque ennemi -> contre attaque -> Attaque ennemi -> contre attaque -> ect...
Ainsi si l'ennemi est censé mourir avant la fin de son combo, le joueur se fait pas arnaquer un ou plusieurs coups & y a aucune riposte dans le vent.
La caractéristique "Attaques supplémentaires" permet de "jouer X fois dans le même tour." Chaque action étant totalement indépendant les unes des autres, si la première est contré, ça serait moche pour les 3 autres qui le seront pas forcément (sauf si 100% mais on a rarement 100% de contre).
Plus que mette un seul coup, faudrait que les contre-attaques soient joués après chaque coup (ce qui serait bien plus logique) :
Attaque ennemi -> contre attaque -> Attaque ennemi -> contre attaque -> ect...
Ainsi si l'ennemi est censé mourir avant la fin de son combo, le joueur se fait pas arnaquer un ou plusieurs coups & y a aucune riposte dans le vent.
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Bug Contre-Attaque
Dim 27 Mar 2016 - 22:42
Attention, tu confonds Attaques supplémentaires et Actions supplémentaires. Ce que tu décris correspond aux Actions supplémentaires qui se configurent selon un pourcentage de chances d'être effectuées. Les Attaques supplémentaires dont je parle sont le nombre de fois en plus que la commande normale Attaque est jouée. Si par exemple on met +1, quand l'ennemi effectuera l'attaque standard, celle-ci sera jouée 2 fois. J'utilise cette caractéristique pour les ennemis pouvant attaquer de plusieurs endroits (un humanoïde à plusieurs bras ou encore un cerbère pour te donner quelques exemples).
Par défaut, les contres sont bien joués après chaque coup et lorsque l'ennemi meurt avant la fin de la série, celle-ci se poursuit avec les contres dans le vide.
Par défaut, les contres sont bien joués après chaque coup et lorsque l'ennemi meurt avant la fin de la série, celle-ci se poursuit avec les contres dans le vide.
- Azuma-01Membre
- Nombre de messages : 94
Age : 31
Localisation : Amos
Distinction : aucune
Date d'inscription : 22/09/2009
Re: Bug Contre-Attaque
Lun 28 Mar 2016 - 16:00
Bonjour!
Si j'ai bien compris, ceci devrait être une solution :
Résultats : Quand la cible contre-attaque il y a une chance que le tour du sujet ce termine (voir counter_break_rate). Si le sujet continue, il frappe de nouveau jusqu'à la fin de son tour ou que la cible le bloque avec succès d'une contre-attaque "bien placé" ou que le sujet meurt à la suite d'un coup vicieux (hp == 0 ou moins:p)!
(oups... j'ai encore fais mes commentaires en anglais...)
Si j'ai bien compris, ceci devrait être une solution :
- Code:
##------------------------------------------------------------------------------
## [VXAce] Multiple hits after death (MhAD bug)
## by Azuma-01
##
## Version : 1.0.0
## 28/03/16 - DD/MM/JJ
##
##By default, when the subject as an extra hit(s) capacity and the target
##perform a counter and kill the subect, the subject continue to attack
##beyond death... this fix stop the subject action on death...
##
##And add a little extra:
##-The ability to break the subject action when a target do a counter.
## With my default setting, the probality than the target can do such thing on
## counter is equal to the target critical rate * 10 (about 40% on default actor)
## to costumize, see the method "counter_break_rate" (line 24-29).
##------------------------------------------------------------------------------
class Scene_Battle
#--------------------------------------------------------------------------
# * When a target counter, chance to cancel the subject action
# note: if set to 1, always cancel the subject action ; 0, never
#--------------------------------------------------------------------------
def counter_break_rate(target)
# target critical rate * 10
return target.cri*10
# (target critical rate - subject critical rate) * 10
#return (target.cri - @subject.cri) *10
end
#--------------------------------------------------------------------------
# * Use Skill/Item
#--------------------------------------------------------------------------
def use_item
item = @subject.current_action.item
@log_window.display_use_item(@subject, item)
@subject.use_item(item)
refresh_status
targets = @subject.current_action.make_targets.compact
show_animation(targets, item.animation_id)
targets.each {|target| item.repeats.times { return if invoke_item(target, item) || @subject.hp<=0 } }
end
#--------------------------------------------------------------------------
# * Invoke Skill/Item
#--------------------------------------------------------------------------
def invoke_item(target, item)
# if target do a counter, calc chance to break the subject action
break_cycle = rand < counter_break_rate(target)
if rand < target.item_cnt(@subject, item)
invoke_counter_attack(target, item)
elsif rand < target.item_mrf(@subject, item)
invoke_magic_reflection(target, item)
else
apply_item_effects(apply_substitute(target, item), item)
break_cycle = false # no counter, target cant break action
end
@subject.last_target_index = target.index
return break_cycle
end
end
Résultats : Quand la cible contre-attaque il y a une chance que le tour du sujet ce termine (voir counter_break_rate). Si le sujet continue, il frappe de nouveau jusqu'à la fin de son tour ou que la cible le bloque avec succès d'une contre-attaque "bien placé" ou que le sujet meurt à la suite d'un coup vicieux (hp == 0 ou moins:p)!
(oups... j'ai encore fais mes commentaires en anglais...)
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Bug Contre-Attaque
Lun 28 Mar 2016 - 18:54
Coucou, je viens de tester et oui c'est bien ce que je voulais. Merci de ton aide. Je n'ai pas trop compris comment marchait le critical target rate * X mais en mettant * 100, celui qui contre-attaque interrompt la série de l'attaquant, ce qui me semble logique. J'ai testé avec la fonction Attaques supplémentaires et aussi en modifiant le nombre de coups dans la compétence d'attaque. Ça marche bien, la série est arrêtée. J'ai juste un petit souci de conflit avec un autre script. Il s'agit du script d'Efeberk qui permet d'animer en vidéo un skill. Je n'y connais pas grand chose en script mais ça doit être à cause de la def use_item qui semble être commune. En alternant la position des deux scripts, soit la contre-attaque marche mais je n'ai plus les skills en vidéo, soit l'inverse. Peux-tu regarder ça s'il te plaît ?
Le script d'Efeberk est ci-dessous :
Le script d'Efeberk est ci-dessous :
- Code:
# -------------------------------------------------
# Script Name : Play Movie before skill
# Scripter : efeberk
# Date : 29.07.2013 07:28
# Version : RPG Maker VX Ace(RGSS3)
# Modified by Trihan on 08/05/2015
#-----------------------------------
# Modifié par Mist', le 23/06/15 :
# Compatibilité avec le script LNX11a
#------------------------------------------------
#
# How to:
#
# Just add a little text to skill notetag
#
#
#
# x = movie name
#
module Play_Movie_Before_Skill
DURATION = 3 # x is used to control how long the cast message will last
end
class RPG::Skill < RPG::UsableItem
def movie
if @note =~ /movie: (.*)/
return $1.to_s
end
end
end
class Scene_Battle < Scene_Base
def use_item
#Intégration LNX11
item = @subject.current_action.item
if LNX11::BATTLELOG_TYPE == 2 && !item.no_display
helpdisplay_set(item, item.display_wait)
end
#Code de base Scene_Battle
@log_window.display_use_item(@subject, item)
@subject.use_item(item)
refresh_status
targets = @subject.current_action.make_targets.compact
#Intégration Play_Movie_Before_Skill
if item.is_a?(RPG::Skill) && item.movie
Play_Movie_Before_Skill::DURATION.times { @log_window.wait }
Graphics.play_movie('Movies/' + item.movie)
end
#Code de base Scene_Battle
show_animation(targets, item.animation_id)
targets.each {|target| item.repeats.times { invoke_item(target, item) } }
#Intégration LNX11
if LNX11::BATTLELOG_TYPE == 2
wait(item.end_wait)
helpdisplay_clear
end
wait_for_effect
end
end
- Azuma-01Membre
- Nombre de messages : 94
Age : 31
Localisation : Amos
Distinction : aucune
Date d'inscription : 22/09/2009
Re: Bug Contre-Attaque
Lun 28 Mar 2016 - 20:28
Pour bloquer l'action a tous coup remplace
pour récupérer t'es vidéo, remplace le script par celui-ci et place le APRÈS mon patch
- Code:
target.cri * 10
pour récupérer t'es vidéo, remplace le script par celui-ci et place le APRÈS mon patch
- Code:
# -------------------------------------------------
# Script Name : Play Movie before skill
# Scripter : efeberk
# Date : 29.07.2013 07:28
# Version : RPG Maker VX Ace(RGSS3)
# Modified by Trihan on 08/05/2015
#-----------------------------------
# Modifié par Mist', le 23/06/15 :
# Compatibilité avec le script LNX11a
#
# Modifié par Azuma-01, le 28/03/16 :
# Compatibilité avec le MhAD bugfix
#------------------------------------------------
#
# How to:
#
# Just add a little text to skill notetag
#
#
#
# x = movie name
#
module Play_Movie_Before_Skill
DURATION = 3 # x is used to control how long the cast message will last
end
class RPG::Skill < RPG::UsableItem
def movie
if @note =~ /movie: (.*)/
return $1.to_s
end
end
end
class Scene_Battle < Scene_Base
def use_item
#Intégration LNX11
item = @subject.current_action.item
if LNX11::BATTLELOG_TYPE == 2 && !item.no_display
helpdisplay_set(item, item.display_wait)
end
#Code de base Scene_Battle
@log_window.display_use_item(@subject, item)
@subject.use_item(item)
refresh_status
targets = @subject.current_action.make_targets.compact
#Intégration Play_Movie_Before_Skill
if item.is_a?(RPG::Skill) && item.movie
Play_Movie_Before_Skill::DURATION.times { @log_window.wait }
Graphics.play_movie('Movies/' + item.movie)
end
#Code de base Scene_Battle
show_animation(targets, item.animation_id)
#Intégration MhAD bugfix
targets.each {|target| item.repeats.times { return if invoke_item(target, item) || @subject.hp<=0 } }
#Intégration LNX11
if LNX11::BATTLELOG_TYPE == 2
wait(item.end_wait)
helpdisplay_clear
end
wait_for_effect
end
end
- NérylisMembre
- Nombre de messages : 615
Age : 35
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014
Re: Bug Contre-Attaque
Lun 28 Mar 2016 - 21:12
Impeccable, ça marche à la perfection. Merci beaucoup pour ton aide.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|