Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
281 connectés actuellement
30732105 visiteurs depuis l'ouverture
2083 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Wingan -
posté le 04/12/2023 à 17:37:33 (10 messages postés)
| | Domaine concerné: Script
Logiciel utilisé: RPG Maker XP
(Re)bonjour !
De retour avec une nouvelle question à propos d'un script de contre-attaque, qui permet de lancer des contre-attaques contre tous types de dégâts, qu'ils aient été infligés par des attaques physiques ou des compétences.
Il marche parfaitement bien, à un détail près.
Il provoque une erreur lorsqu'on utilise une compétence qui cible un personnage depuis le menu. L'erreur survient avec des compétences qui soignent, blessent ou infligent 0 dégât au personnage ciblé. En combat, tout va bien.
Le problème est présent même sur un projet vierge.
Voici le message d'erreur :
Script 'Contre' line 87: NoMethodError occurred.
undefined method 'active_battler' for #<Scene_Skill:0xf40fef0>
Ligne 87 qui est donc :
if $scene.active_battler == attacker and skill.power > 0
Et bien sûr, voici le script en question (que j'ai déjà un peu personnalisé).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
#==========================================================================
# ** UL Counter Attack
#==========================================================================
# Uncle Lanzer
# Version 1
# 21.09.10
#==========================================================================
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# This work is protected by the following license:
# #----------------------------------------------------------------------------
# #
# # Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# # ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #
# # You are free:
# #
# # to Share - to copy, distribute and transmit the work
# # to Remix - to adapt the work
# #
# # Under the following conditions:
# #
# # Attribution. You must attribute the work in the manner specified by the
# # author or licensor (but not in any way that suggests that they endorse you
# # or your use of the work).
# #
# # Noncommercial. You may not use this work for commercial purposes.
# #
# # Share alike. If you alter, transform, or build upon this work, you may
# # distribute the resulting work only under the same or similar license to
# # this one.
# #
# # - For any reuse or distribution, you must make clear to others the license
# # terms of this work. The best way to do this is with a link to this web
# # page.
# #
# # - Any of the above conditions can be waived if you get permission from the
# # copyright holder.
# #
# # - Nothing in this license impairs or restricts the author's moral rights.
# #
# #----------------------------------------------------------------------------
#################
# #
# CONFIGURATION #
# #
#################
# IT`S PRETTY SIMPLE........ JUST KILL THE BATMAN! <-- FORGET THAT -.-U
# MAKE A "(YOUR COUNTER NAME)" STATE
# UL_COUNTER_STATES = { A => [ B,C]}
# A = THE COUNTER STATE
# B = RATE OF SUCCESS
# C = STRENGHT OF COUNTER ( % OF A NORMAL ATTACK)
Scene_Battle::UL_Counter_States = { 66 => [100,100],
#Rancune2:
100 => [100,75],
#Rancune1:
122 => [100,50],
123 => [100,30], 142 => [30,30], 143 => [40,40], 144 => [50,50], 145 => [60,60], 184 => [100,100], 242 => [100,600], 249 => [150,100], 242 => [100,500],
280 => [80,100], 281 => [45,40], 344 => [100,180], 250 => [100,300], 430 => [30,30], 431 => [40,40], 432 => [50,50], 433 => [60,60],
#Rancune3:
436 => [100,100]} #ADD MORE BY THE SAME SYNTAX
# MESSAGGE WHEN COUNTER
Scene_Battle::UL_Counter_Messages = ['\m contre-attaque!']
# CHECKING SCRIPT
if !@ul_counterattack_disabled
# START
class Game_Battler
alias lanzer_counter_battler_atkeff attack_effect
def attack_effect(attacker)
lanzer_counter_battler_atkeff(attacker)
if $scene.active_battler == attacker
$scene.ul_atkcounter_test(self)
end
end
alias counter_skill_attacks skill_effect
def skill_effect(attacker, skill)
counter_skill_attacks(attacker, skill)
if $scene.active_battler == attacker and skill.power > 0
$scene.ul_atkcounter_test(self)
end
end
end
class Scene_Battle
attr_accessor :active_battler
def ul_atkcounter_test(battler)
# The actor is applied with a state that prevents movement. Stop counter.
return unless battler.movable?
ul_temp = UL_Counter_States.keys
for i in 0...ul_temp.size
if battler.state?(ul_temp[i])
if UL_Counter_States[ul_temp[i]][0] > rand(99)
@ul_counter = UL_Counter_States[ul_temp[i]][1]
@ul_countertarget = battler
return
end
end
end
end
alias lanzer_counter_battle_up4s5 update_phase4_step5
def update_phase4_step5
lanzer_counter_battle_up4s5
if @ul_countertarget != nil
@phase4_step = 1337 # LEET
@ul_atkcounter = 28
end
end
def ul_counter_update
if @ul_countertarget.dead? or @ul_atkcounter == 0 or !@ul_countertarget.movable?
@ul_atkcounter = nil
@ul_counter = nil
@ul_countertarget = nil
@phase4_step = 6
return
end
@ul_atkcounter -= 1
if @ul_atkcounter == 10
@ul_countertarget.animation_id = @ul_countertarget.animation1_id
@active_battler.animation_id = @ul_countertarget.animation2_id
ul_temp = rand(UL_Counter_Messages.size)
ul_temp = UL_Counter_Messages[ul_temp].clone
ul_temp.gsub!(/\\[Mm]/) { @ul_countertarget.name }
@help_window.set_text(ul_temp, 1)
@active_battler.attack_effect(@ul_countertarget)
if !@active_battler.damage.is_a?(String)
@active_battler.hp += @active_battler.damage
@active_battler.damage = @active_battler.damage * @ul_counter / 100
@active_battler.hp -= @active_battler.damage
@status_window.refresh
end
@active_battler.damage_pop = true
end
end
alias lanzer_counter_battle_update update
def update
if @ul_atkcounter != nil
ul_counter_update
end
lanzer_counter_battle_update
end
end
#--------------------------------------------------------------------------#
end
|
Merci d'avance à toute âme charitable qui aurait le courage de se pencher dessus Ça devrait être ma dernière question avant un bon moment.
|
| Chanter l'hyperchleuasme | La méthode active_battler est définie dans la classe Scene_Battle :
1
2
| class Scene_Battle
attr_accessor :active_battler |
Es-tu sûr que ta classe Scene_Skill hérite de la classe Scene_Battle ?
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
Wingan -
posté le 04/12/2023 à 18:26:57 (10 messages postés)
| | Ahem, merci pour ta réponse, mais il se trouve que je suis un néophyte absolu en matière de Ruby. Je serai donc incapable de te répondre...
En tout cas, j'utilise le système de combat par défaut (sait-on jamais).
|
Mack -
posté le 04/12/2023 à 18:29:01 (2310 messages postés)
- - | | Roi of the Suisse a dit: La méthode active_battler est définie dans la classe Scene_Battle :
1
2
| class Scene_Battle
attr_accessor :active_battler |
Es-tu sûr que ta classe Scene_Skill hérite de la classe Scene_Battle ? |
Ah peut près sur que c'est pas le cas, mais ça n'a aucun intérêt, non ?
J'me souviens plus du tout de la syntaxe, mais ça serait pas mieux de mettre une condition pour vérifier qu'il soit bien dans un Scene_Battle plutôt ?
( De mémoire c'est un truc du genre $scene.is_a(Scene_Battle), donc rajouter ça devant la condition qui pose problème et mettre le et qui effectue pas la seconde condition si la première n'est pas remplie serait mieux non ? )
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
| Chanter l'hyperchleuasme | Oui, il faut vérifier que ta $scene est une instance de la classe Scene_Battle.
La classe Scene_Battle a la méthode active_battler(), mais pas forcément la classe Scene_Skill.
Si jamais la classe Scene_Skill hérite de Scene_Battle, elle héritera de la méthode aussi.
Sinon, comme dit Mack, avant d'appeler la méthode active_battler() sur la variable $scene, vérifie que c'est bien une instance de la classe Scene_Battle, elle aura alors forcément la méthode.
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
Wingan -
posté le 05/12/2023 à 07:19:30 (10 messages postés)
| | Merci pour vos réponses, mais comme dit plus haut, je n'y connais rien en Ruby, donc je suis incapable d'apporter de telles modifications.
J'ai demandé à ChatGPT, qui m'a recommandé d'inclure la ligne class Scene_Skill < Scene_Battle pour que Scene_Skill hérite de Scene_Battle, mais je ne sais pas où la mettre.
Si jamais l'un de vous a le courage de me donner directement la modification à mettre dans le script, ce serait super.
|
Mack -
posté le 05/12/2023 à 10:41:01 (2310 messages postés)
- - | | Ouais, c'est une solution, mais pour moi c'est pas une bonne.
En gros en faisant ce que ChatGPT te dit, la Scene_Skill va hériter de tout les attribut du Scene_Battle, donc de plein de truc dont t'as rien à faire.
Tu peux te contenter d'englober les lignes :
1
| if $scene.active_battler == attacker |
et
1
| if $scene.active_battler == attacker and skill.power > 0 |
Par :
1
| if $scene.is_a?(Scene_Battle) |
( Avec le end juste après )
Comme ça si on est pas dans la Scene_Battle, le active_player ne sera jamais appelé.
( J'ai pas réussis à faire fonctionner le contre, je suppose que j'ai chier quelque part dans la config, mais j'ai plus le crash dans le menu des compétences, donc je te laisserais tester en combat )
Ah, et aussi, essaye d'utiliser la balise de code plutôt que celle de spoiler, c'est plus facile à lire :P
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Wingan -
posté le 05/12/2023 à 12:39:08 (10 messages postés)
| | Oups, pardon pour les balises, c'est corrigé !
J'ai appliqué ta proposition, et voilà ce que ça donne.
- Les contres marchent bien.
- Il n'y a plus de plantage dans le menu.
MAIS
- Toujours dans le menu, l'utilisation d'une compétence sur un allié ne fonctionne plus. Lorsque je valide l'allié cible, j'ai l'effet sonore d'action impossible et rien ne se passe (par exemple, le perso ciblé ne reçoit pas les PV de la compétence de soin).
Je commence à me dire que ce script est juste mal fichu ^^"
|
Mack -
posté le 06/12/2023 à 11:54:23 (2310 messages postés)
- - | | Question con, mais le nouveau if il englobe que la condition, il englobe pas la ligne lanzer_counter_battler_atkeff(attacker) ?
( Ni le counter_skill_attacks(attacker )
Pareil, le skill que tu veux lancer dans le menu est bien lancable ?
( Genre si c'est du soin, que la cible est pas toute sa vie )
Là sur le code que tu montres je vois rien qui pourrait bloquer ça a part le truc que j'ai dit avant
J'essaierais de voir ce soir pour faire des test
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
cortez -
posté le 06/12/2023 à 17:53:35 (524 messages postés)
| | C'est pas très beau et cela va sans doute poser des soucis si tu utilise d'autres scripts de bataille que ceux par defaut mais voici le code qui fonctionne. (notamment car je recopie une méthode en entier)
J'ai tout testé (des soin dans le menu et en combat) et ça fonctionne. Si quelqu'un sait comment améliorer mes truc n'hésitez pas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
| #==========================================================================
# ** UL Counter Attack
#==========================================================================
# Uncle Lanzer
# Version 1
# 21.09.10
#==========================================================================
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# This work is protected by the following license:
# #----------------------------------------------------------------------------
# #
# # Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# # ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #
# # You are free:
# #
# # to Share - to copy, distribute and transmit the work
# # to Remix - to adapt the work
# #
# # Under the following conditions:
# #
# # Attribution. You must attribute the work in the manner specified by the
# # author or licensor (but not in any way that suggests that they endorse you
# # or your use of the work).
# #
# # Noncommercial. You may not use this work for commercial purposes.
# #
# # Share alike. If you alter, transform, or build upon this work, you may
# # distribute the resulting work only under the same or similar license to
# # this one.
# #
# # - For any reuse or distribution, you must make clear to others the license
# # terms of this work. The best way to do this is with a link to this web
# # page.
# #
# # - Any of the above conditions can be waived if you get permission from the
# # copyright holder.
# #
# # - Nothing in this license impairs or restricts the author's moral rights.
# #
# #----------------------------------------------------------------------------
#################
# #
# CONFIGURATION #
# #
#################
# IT`S PRETTY SIMPLE........ JUST KILL THE BATMAN! <-- FORGET THAT -.-U
# MAKE A "(YOUR COUNTER NAME)" STATE
# UL_COUNTER_STATES = { A => [ B,C]}
# A = THE COUNTER STATE
# B = RATE OF SUCCESS
# C = STRENGHT OF COUNTER ( % OF A NORMAL ATTACK)
Scene_Battle::UL_Counter_States = { 66 => [100,100],
#Rancune2:
100 => [100,75],
#Rancune1:
122 => [100,50],
123 => [100,30], 142 => [30,30], 143 => [40,40], 144 => [50,50], 145 => [60,60], 184 => [100,100], 242 => [100,600], 249 => [150,100], 242 => [100,500],
280 => [80,100], 281 => [45,40], 344 => [100,180], 250 => [100,300], 430 => [30,30], 431 => [40,40], 432 => [50,50], 433 => [60,60],
#Rancune3:
436 => [100,100]} #ADD MORE BY THE SAME SYNTAX
# MESSAGGE WHEN COUNTER
Scene_Battle::UL_Counter_Messages = ['\m contre-attaque!']
# CHECKING SCRIPT
if !@ul_counterattack_disabled
# START
class Game_Battler
alias lanzer_counter_battler_atkeff attack_effect
def attack_effect(attacker)
lanzer_counter_battler_atkeff(attacker)
if $scene.active_battler == attacker
$scene.ul_atkcounter_test(self)
end
end
alias_method :counter_skill_effect, :skill_effect
alias_method :counter_skill_attacks, :counter_skill_effect
def counter_skill_effect(attacker, skill)
counter_skill_attacks(attacker, skill)
if $scene.active_battler == attacker and skill.power > 0
$scene.ul_atkcounter_test(self)
end
end
end
class Scene_Battle
attr_accessor :active_battler
alias counter_skill_action_result make_skill_action_result
def make_skill_action_result
# Get skill
@skill = $data_skills[@active_battler.current_action.skill_id]
# If not a forcing action
unless @active_battler.current_action.forcing
# If unable to use due to SP running out
unless @active_battler.skill_can_use?(@skill.id)
# Clear battler being forced into action
$game_temp.forcing_battler = nil
# Shift to step 1
@phase4_step = 1
return
end
end
# Use up SP
@active_battler.sp -= @skill.sp_cost
# Refresh status window
@status_window.refresh
# Show skill name on help window
@help_window.set_text(@skill.name, 1)
# Set animation ID
@animation1_id = @skill.animation1_id
@animation2_id = @skill.animation2_id
# Set command event ID
@common_event_id = @skill.common_event_id
# Set target battlers
set_target_battlers(@skill.scope)
# Apply skill effect
for target in @target_battlers
target.counter_skill_effect(@active_battler, @skill)
end
end
def ul_atkcounter_test(battler)
# The actor is applied with a state that prevents movement. Stop counter.
return unless battler.movable?
ul_temp = UL_Counter_States.keys
for i in 0...ul_temp.size
if battler.state?(ul_temp[i])
if UL_Counter_States[ul_temp[i]][0] > rand(99)
@ul_counter = UL_Counter_States[ul_temp[i]][1]
@ul_countertarget = battler
return
end
end
end
end
alias lanzer_counter_battle_up4s5 update_phase4_step5
def update_phase4_step5
lanzer_counter_battle_up4s5
if @ul_countertarget != nil
@phase4_step = 1337 # LEET
@ul_atkcounter = 28
end
end
def ul_counter_update
if @ul_countertarget.dead? or @ul_atkcounter == 0 or !@ul_countertarget.movable?
@ul_atkcounter = nil
@ul_counter = nil
@ul_countertarget = nil
@phase4_step = 6
return
end
@ul_atkcounter -= 1
if @ul_atkcounter == 10
@ul_countertarget.animation_id = @ul_countertarget.animation1_id
@active_battler.animation_id = @ul_countertarget.animation2_id
ul_temp = rand(UL_Counter_Messages.size)
ul_temp = UL_Counter_Messages[ul_temp].clone
ul_temp.gsub!(/\\[Mm]/) { @ul_countertarget.name }
@help_window.set_text(ul_temp, 1)
@active_battler.attack_effect(@ul_countertarget)
if !@active_battler.damage.is_a?(String)
@active_battler.hp += @active_battler.damage
@active_battler.damage = @active_battler.damage * @ul_counter / 100
@active_battler.hp -= @active_battler.damage
@status_window.refresh
end
@active_battler.damage_pop = true
end
end
alias lanzer_counter_battle_update update
def update
if @ul_atkcounter != nil
ul_counter_update
end
lanzer_counter_battle_update
end
end
#--------------------------------------------------------------------------#
end |
|
Mack -
posté le 06/12/2023 à 19:32:32 (2310 messages postés)
- - | |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
#==========================================================================
# ** UL Counter Attack
#==========================================================================
# Uncle Lanzer
# Version 1
# 21.09.10
#==========================================================================
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# This work is protected by the following license:
# #----------------------------------------------------------------------------
# #
# # Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# # ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #
# # You are free:
# #
# # to Share - to copy, distribute and transmit the work
# # to Remix - to adapt the work
# #
# # Under the following conditions:
# #
# # Attribution. You must attribute the work in the manner specified by the
# # author or licensor (but not in any way that suggests that they endorse you
# # or your use of the work).
# #
# # Noncommercial. You may not use this work for commercial purposes.
# #
# # Share alike. If you alter, transform, or build upon this work, you may
# # distribute the resulting work only under the same or similar license to
# # this one.
# #
# # - For any reuse or distribution, you must make clear to others the license
# # terms of this work. The best way to do this is with a link to this web
# # page.
# #
# # - Any of the above conditions can be waived if you get permission from the
# # copyright holder.
# #
# # - Nothing in this license impairs or restricts the author's moral rights.
# #
# #----------------------------------------------------------------------------
#################
# #
# CONFIGURATION #
# #
#################
# IT`S PRETTY SIMPLE........ JUST KILL THE BATMAN! <-- FORGET THAT -.-U
# MAKE A "(YOUR COUNTER NAME)" STATE
# UL_COUNTER_STATES = { A => [ B,C]}
# A = THE COUNTER STATE
# B = RATE OF SUCCESS
# C = STRENGHT OF COUNTER ( % OF A NORMAL ATTACK)
Scene_Battle::UL_Counter_States = { 66 => [100,100],
#Rancune2:
100 => [100,75],
#Rancune1:
122 => [100,50],
123 => [100,30], 142 => [30,30], 143 => [40,40], 144 => [50,50], 145 => [60,60], 184 => [100,100], 242 => [100,600], 249 => [150,100], 242 => [100,500],
280 => [80,100], 281 => [45,40], 344 => [100,180], 250 => [100,300], 430 => [30,30], 431 => [40,40], 432 => [50,50], 433 => [60,60],
#Rancune3:
436 => [100,100]} #ADD MORE BY THE SAME SYNTAX
# MESSAGGE WHEN COUNTER
Scene_Battle::UL_Counter_Messages = ['\m contre-attaque!']
# CHECKING SCRIPT
if !@ul_counterattack_disabled
# START
class Game_Battler
alias lanzer_counter_battler_atkeff attack_effect
def attack_effect(attacker)
b = lanzer_counter_battler_atkeff(attacker)
if @scene.is_a?(Scene_Battle)
if $scene.active_battler == attacker
$scene.ul_atkcounter_test(self)
end
end
return b
end
alias counter_skill_attacks skill_effect
def skill_effect(attacker, skill)
b = counter_skill_attacks(attacker, skill)
if @scene.is_a?(Scene_Battle)
if $scene.active_battler == attacker and skill.power > 0
$scene.ul_atkcounter_test(self)
end
end
return b
end
end
class Scene_Battle
attr_accessor :active_battler
def ul_atkcounter_test(battler)
# The actor is applied with a state that prevents movement. Stop counter.
return unless battler.movable?
ul_temp = UL_Counter_States.keys
for i in 0...ul_temp.size
if battler.state?(ul_temp[i])
if UL_Counter_States[ul_temp[i]][0] > rand(99)
@ul_counter = UL_Counter_States[ul_temp[i]][1]
@ul_countertarget = battler
return
end
end
end
end
alias lanzer_counter_battle_up4s5 update_phase4_step5
def update_phase4_step5
lanzer_counter_battle_up4s5
if @ul_countertarget != nil
@phase4_step = 1337 # LEET
@ul_atkcounter = 28
end
end
def ul_counter_update
if @ul_countertarget.dead? or @ul_atkcounter == 0 or !@ul_countertarget.movable?
@ul_atkcounter = nil
@ul_counter = nil
@ul_countertarget = nil
@phase4_step = 6
return
end
@ul_atkcounter -= 1
if @ul_atkcounter == 10
@ul_countertarget.animation_id = @ul_countertarget.animation1_id
@active_battler.animation_id = @ul_countertarget.animation2_id
ul_temp = rand(UL_Counter_Messages.size)
ul_temp = UL_Counter_Messages[ul_temp].clone
ul_temp.gsub!(/\\[Mm]/) { @ul_countertarget.name }
@help_window.set_text(ul_temp, 1)
@active_battler.attack_effect(@ul_countertarget)
if !@active_battler.damage.is_a?(String)
@active_battler.hp += @active_battler.damage
@active_battler.damage = @active_battler.damage * @ul_counter / 100
@active_battler.hp -= @active_battler.damage
@status_window.refresh
end
@active_battler.damage_pop = true
end
end
alias lanzer_counter_battle_update update
def update
if @ul_atkcounter != nil
ul_counter_update
end
lanzer_counter_battle_update
end
end
#--------------------------------------------------------------------------#
end
|
En faite, le script de base est mal branlé.
Pour faire simple, la méthode skill_effect est censé renvoyer un boolean ( vrai ou faux ).
Or, dans le script, ben cette partie est complétement passer à la trappe, on renvoi jamais le résultat de la méthode d'origine.
Donc en rajoutant juste le return, ça marche, mais comme la première fois, j'ai pas réussis à tester en combat.
En relisant un peu le script de base, j'me dit que en combat, même si l'ennemi rate son coup, le contre doit avoir lieu, je sais pas si c'est un truc que tu veux ou pas.
Par contre Cortez, je comprend pas ce que t'as essayé de faire ? ( Enfin, je comprend pas comment ça peut marcher ? )
Le problème initiale, c'était que ça essayé d'appeler une métode qui n'existait pas dans la classe Scene_Script, comment ça marche ce que t'as fait ?
Le alias_method va créer une méthode vide dans le cas où elle existe pas ?
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
cortez -
posté le 06/12/2023 à 19:47:48 (524 messages postés)
| | Mack a dit:
Par contre Cortez, je comprend pas ce que t'as essayé de faire ? ( Enfin, je comprend pas comment ça peut marcher ? )
Le problème initiale, c'était que ça essayé d'appeler une métode qui n'existait pas dans la classe Scene_Script, comment ça marche ce que t'as fait ?
Le alias_method va créer une méthode vide dans le cas où elle existe pas ? |
Très sérieusement je ne sais pas trop comment j'ai réussi.
Je me suis rendu compte que le script original alias la fonction skill_effet et avec plusieurs test (en retirant les if / end originaux) j'ai cru que le script re-definissait la methode skill_effect et donc j'en ai fait une copie, l'originale est appelé par les menus du jeu. La copie est appelée par Scene_battle uniquement (d'ou la redéfinition de la methode make_skill_action_result.
C'est superflux je pense mais cela fonctionne quand même. (je n'avais pas compris que la methode de base attendait un retour de valeur (true or false).
|
Wingan -
posté le 07/12/2023 à 08:09:56 (10 messages postés)
| | Merci encore pour vous retours !
J'ai testé vos 2 scripts, et l'un d'eux fonctionne (pour l'instant) à merveille. Il s'agit de celui de... (roulement de tambour) cortez !
Mack, avec le tien, les contre-attaques ne sont pas déclenchées, malheureusement
Avec celui de cortez, j'ai eu quelques conflits avec d'autres scripts, mais je les ai réorganisés dans l'éditeur et ça a l'air d'avoir tout corrigé. Je vais continuer de tester à fond mon jeu pour m'assurer que tout est bon, mais ça a l'air bien parti.
Je marquerai ce topic comme résolu après quelques tests supplémentaires, au cas où quelqu'un aurait le courage de proposer une autre version. En attendant, merci infiniment à vous tous pour votre aide et vos efforts. C'était vraiment sympa de votre part
|
cortez -
posté le 07/12/2023 à 16:55:14 (524 messages postés)
| | merci pour ton message,
j'ai gagné +20 en estime personnelle mais j'ai aussi -10 en "pourquoi ça marche quand même"
Bref le script de base était pas vraiment top mais après recherche y a pas vraiment d'autres choix sur le net. (pour XP pas grand chose mais pour VX ou version récente c'est l’embarras du choix)
Vive rpg maker XP (objectivement le meilleur des logiciels de making)
| Index du forum > Entraide > [RESOLU] [RPG Maker XP] Aide sur un script de contre-attaque quasi fonctionnel
|
|
|