Bienvenue visiteur !
|
Désactiver la neige
Statistiques
Liste des membres
Contact
Mentions légales
364 connectés actuellement
30912421 visiteurs depuis l'ouverture
2057 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
arttroy -
posté le 14/07/2012 à 00:19:30 (2394 messages postés)
| Just working | Domaine concerné: script
Logiciel utilisé: RMVX Ace
Bonsoir à tous et toutes, j'ai un petit souci j'aimerais savoir comment modifier ce script afin que l'affichage des dégâts ne se fasse plus par sprites mais en utilisant les images que j'ai créées
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
| module ABS_Config
Default_Animation = 1
Opacity_Burn = 10
Enemy_Recover = 60
Attack_Key = :X
Player_Recover = 40
end
class Game_Map
attr_accessor :enemies
attr_accessor :damage_sprites
alias abs_setup setup
def setup(map_id)
@enemies.nil? ? @enemies = [] : enemies.clear
abs_setup(map_id)
end
end
class ABS_Enemy
include ABS_Config
attr_accessor :hp
attr_accessor :attack
attr_accessor :defense
attr_reader :name
attr_reader :animation
def initialize(id)
enemy = Game_Enemy.new(0,id)
@name = enemy.name
note = enemy.enemy.note
if note.include?("Animation=")
aid = note.sub("Animation=","")
@animation = aid.to_i
else
@animation = Default_Animation
end
@hp = enemy.mhp
@attack = enemy.atk
@defense = enemy.def
end
end
class Game_Event < Game_Character
attr_reader :enemy
alias abs_setup_page_settings setup_page_settings
alias abs_initialize initialize
alias abs_update update
alias abs_start start
def initialize(map_id, event)
@enemy = nil
@recover =0
abs_initialize(map_id, event)
end
def setup_page_settings
abs_setup_page_settings
check_enemy
end
def check_enemy
unless @enemy.nil?
@enemy = nil
$game_map.enemies.delete(self) if $game_map.enemies.include?(self)
end
return if @list.nil?
for command in @list
next unless command.code == 108 or command.code == 408
if command.parameters[0].include?("cmd:enemy=")
id = command.parameters[0].sub("cmd:enemy=","")
@enemy = ABS_Enemy.new(id.to_i)
@trigger = 2
$game_map.enemies.push(self)
print "#{@enemy.name} crie!\n"
end
end
end
def damage_enemy(value)
jump(0,0)
value -= @enemy.defense
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
@enemy.hp -= value
if @enemy.hp <= 0
$game_map.enemies.delete(self)
RPG::SE.new("Collapse1",80).play
end
end
def update
if @enemy != nil
@recover -= 1 if @recover > 0
update_kill if @enemy.hp <= 0
end
abs_update
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
@character_name = ""
@opacity = 255
@priority_type = 0
@trigger = 0
@enemy = nil
end
end
def start
@enemy.nil? ? abs_start : attack
end
def attack
return if @enemy.hp <= 0 or @recover > 0
@recover = ABS_Config::Enemy_Recover
$game_player.animation_id = @enemy.animation
$game_player.damage_hero(@enemy.attack)
end
end
class Game_Player < Game_Character
alias abs_initialize initialize
alias abs_update update
def initialize
@recover = 0
@kill_player = false
abs_initialize
end
def update
@recover -= 1 if @recover > 0
update_attack if @recover == 0 and Input.trigger?(ABS_Config::Attack_Key)
update_kill if @kill_player
abs_update
end
def update_attack
return if @kill_player
for enemy in $game_map.enemies
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
attack_enemy(enemy) if ax == 0 and ay == -1
when 4
attack_enemy(enemy) if ay == 0 and ax == 1
when 6
attack_enemy(enemy) if ay == 0 and ax == -1
when 8
attack_enemy(enemy) if ax == 0 and ay == 1
end
end
end
def attack_enemy(event)
hero = $game_party.members[0]
event.damage_enemy(hero.atk)
event.animation_id = hero.weapons[0].animation_id
@recover = ABS_Config::Player_Recover
end
def damage_hero(value)
jump(0,0)
return if @kill_player
hero = $game_party.members[0]
value -= hero.def
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
if value > hero.hp
hero.hp = 1
@kill_player = true
RPG::SE.new("Collapse1",80).play
else
hero.hp -= value
end
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
SceneManager.goto(Scene_Gameover)
end
end
end
class Spriteset_Map
alias abs_initialize initialize
alias abs_update update
alias abs_dispose dispose
def initialize
$game_map.damage_sprites = []
abs_initialize
end
def update
abs_update
trash = []
for sprite in $game_map.damage_sprites
sprite.update
trash.push(sprite) if sprite.disposed?
end
for item in trash
$game_map.damage_sprites.delete(item)
end
trash.clear
end
def dispose
abs_dispose
for sprite in $game_map.damage_sprites
sprite.bitmap.dispose
sprite.dispose
end
$game_map.damage_sprites.clear
end
end
class Damage_Sprite < Sprite
def initialize(target,value)
super(nil)
@target = target
@tone = Tone.new(255,0,0,0)
self.bitmap = Bitmap.new(100,20)
self.bitmap.draw_text(0,0,100,20,value,1)
self.tone = @tone
self.ox = 50
self.x = @target.screen_x
self.y = @target.screen_y - 40
self.z = 999
@timer = 20
end
def update
self.x = @target.screen_x
self.y = @target.screen_y - 40
if @timer > 0
@timer -= 1
self.zoom_x += 0.01
self.zoom_y += 0.01
else
self.opacity > 0 ? self.opacity -= 15 : dispose
end
end
def dispose
self.bitmap.dispose
super
end
end |
Si quelqu'un sait comment faire s'il vous plaît.J'espère vraiment que quelqu'un pourra m'aider.
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
zou -
posté le 14/07/2012 à 13:20:04 (2197 messages postés)
| | Sprite = image
J'ai pas testé par contre
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
| module ABS_Config
Default_Animation = 1
Opacity_Burn = 10
Enemy_Recover = 60
Attack_Key = :X
Player_Recover = 40
end
class Game_Map
attr_accessor :enemies
attr_accessor :damage_sprites
alias abs_setup setup
def setup(map_id)
@enemies.nil? ? @enemies = [] : enemies.clear
abs_setup(map_id)
end
end
class ABS_Enemy
include ABS_Config
attr_accessor :hp
attr_accessor :attack
attr_accessor :defense
attr_reader :name
attr_reader :animation
def initialize(id)
enemy = Game_Enemy.new(0,id)
@name = enemy.name
note = enemy.enemy.note
if note.include?("Animation=")
aid = note.sub("Animation=","")
@animation = aid.to_i
else
@animation = Default_Animation
end
@hp = enemy.mhp
@attack = enemy.atk
@defense = enemy.def
end
end
class Game_Event < Game_Character
attr_reader :enemy
alias abs_setup_page_settings setup_page_settings
alias abs_initialize initialize
alias abs_update update
alias abs_start start
def initialize(map_id, event)
@enemy = nil
@recover =0
abs_initialize(map_id, event)
end
def setup_page_settings
abs_setup_page_settings
check_enemy
end
def check_enemy
unless @enemy.nil?
@enemy = nil
$game_map.enemies.delete(self) if $game_map.enemies.include?(self)
end
return if @list.nil?
for command in @list
next unless command.code == 108 or command.code == 408
if command.parameters[0].include?("cmd:enemy=")
id = command.parameters[0].sub("cmd:enemy=","")
@enemy = ABS_Enemy.new(id.to_i)
@trigger = 2
$game_map.enemies.push(self)
print "#{@enemy.name} crie!\n"
end
end
end
def damage_enemy(value)
jump(0,0)
value -= @enemy.defense
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
@enemy.hp -= value
if @enemy.hp <= 0
$game_map.enemies.delete(self)
RPG::SE.new("Collapse1",80).play
end
end
def update
if @enemy != nil
@recover -= 1 if @recover > 0
update_kill if @enemy.hp <= 0
end
abs_update
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
@character_name = ""
@opacity = 255
@priority_type = 0
@trigger = 0
@enemy = nil
end
end
def start
@enemy.nil? ? abs_start : attack
end
def attack
return if @enemy.hp <= 0 or @recover > 0
@recover = ABS_Config::Enemy_Recover
$game_player.animation_id = @enemy.animation
$game_player.damage_hero(@enemy.attack)
end
end
class Game_Player < Game_Character
alias abs_initialize initialize
alias abs_update update
def initialize
@recover = 0
@kill_player = false
abs_initialize
end
def update
@recover -= 1 if @recover > 0
update_attack if @recover == 0 and Input.trigger?(ABS_Config::Attack_Key)
update_kill if @kill_player
abs_update
end
def update_attack
return if @kill_player
for enemy in $game_map.enemies
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
attack_enemy(enemy) if ax == 0 and ay == -1
when 4
attack_enemy(enemy) if ay == 0 and ax == 1
when 6
attack_enemy(enemy) if ay == 0 and ax == -1
when 8
attack_enemy(enemy) if ax == 0 and ay == 1
end
end
end
def attack_enemy(event)
hero = $game_party.members[0]
event.damage_enemy(hero.atk)
event.animation_id = hero.weapons[0].animation_id
@recover = ABS_Config::Player_Recover
end
def damage_hero(value)
jump(0,0)
return if @kill_player
hero = $game_party.members[0]
value -= hero.def
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
if value > hero.hp
hero.hp = 1
@kill_player = true
RPG::SE.new("Collapse1",80).play
else
hero.hp -= value
end
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
SceneManager.goto(Scene_Gameover)
end
end
end
class Spriteset_Map
alias abs_initialize initialize
alias abs_update update
alias abs_dispose dispose
def initialize
$game_map.damage_sprites = []
abs_initialize
end
def update
abs_update
trash = []
for sprite in $game_map.damage_sprites
sprite.update
trash.push(sprite) if sprite.disposed?
end
for item in trash
$game_map.damage_sprites.delete(item)
end
trash.clear
end
def dispose
abs_dispose
for sprite in $game_map.damage_sprites
sprite.bitmap.dispose
sprite.dispose
end
$game_map.damage_sprites.clear
end
end
class Damage_Sprite < Sprite
def initialize(target,value)
super(nil)
@target = target
#@tone = Tone.new(255,0,0,0)
#self.bitmap = Bitmap.new(100,20)
#self.bitmap.draw_text(0,0,100,20,value,1)
chffre = [value%100000,value%10000,value%1000,value%100,value%10]
for i in [0,1,2,3,4]
if chiffre[i] == 0
chiffre[i] = nil
else
break
end
end
chiffre.compact!
if chiffre.size == 0
chiffre = [0]
end
self.bitmap = Bitmap.new(21*chiffre.size,20)
for i in 0...chiffre.size
src_bitmap = Cache.picture("chiffredegat" + chiffre[i].to_s)
src_rect = Rect.new(0,0,21,24)
self.bitmap.blt(21*i, 0, src_bitmap, src_rect)
end
self.tone = @tone
self.ox = 50
self.x = @target.screen_x
self.y = @target.screen_y - 40
self.z = 999
@timer = 20
end
def update
self.x = @target.screen_x
self.y = @target.screen_y - 40
if @timer > 0
@timer -= 1
self.zoom_x += 0.01
self.zoom_y += 0.01
else
self.opacity > 0 ? self.opacity -= 15 : dispose
end
end
def dispose
self.bitmap.dispose
super
end
end |
|
arttroy -
posté le 15/07/2012 à 11:32:12 (2394 messages postés)
| Just working | Ouah merci mister Zou et désolé de mon incompétence en RGSS mais je me soigne...
Donc en fait il ya un petit souci ligne 211 il manque un "i" à chiffre mais bon ça j'ai corrigé (je te soupçonne d'ailleurs de l'avoir fais exprès).
Mon souci viens du fait que lorsque la valeur affichée devrais être "7" il me marque "77777" à l'écran et lorsque la valeur est supérieure à 9 il me renvoie un message d'erreur "unable to find graphics/picture/chiffredegat10" pour la valeur 10 par exemple.
Le troisième souci est lorsque la valeur est "0" ça l'affiche correctement mais trop à gauche du personnage(à la place du premier"7" dans l'exemple précédent en fait).
Sinon encore merci à toi tu n'imagines pas comment ça me sors une épine (giganteque) du pied grâce à toi. Pas de doutes tu es aussi rapide et efficace que la marque de ton avatar.
Ça y est j'ai trouvé comment tout afficher correctement je poste la solution (+ le reste du code qui permet de faire une base d' A-rpg + les images redimensionnées correctement) pour ceux qui désireraient faire la même chose:
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
| module ABS_Config
Default_Animation = 1
Opacity_Burn = 10
Enemy_Recover = 60
Attack_Key = :X
Player_Recover = 40
end
class Game_Map
attr_accessor :enemies
attr_accessor :damage_sprites
alias abs_setup setup
def setup(map_id)
@enemies.nil? ? @enemies = [] : enemies.clear
abs_setup(map_id)
end
end
class ABS_Enemy
include ABS_Config
attr_accessor :hp
attr_accessor :attack
attr_accessor :defense
attr_reader :name
attr_reader :animation
def initialize(id)
enemy = Game_Enemy.new(0,id)
@name = enemy.name
note = enemy.enemy.note
if note.include?("Animation=")
aid = note.sub("Animation=","")
@animation = aid.to_i
else
@animation = Default_Animation
end
@hp = enemy.mhp
@attack = enemy.atk
@defense = enemy.def
end
end
class Game_Event < Game_Character
attr_reader :enemy
alias abs_setup_page_settings setup_page_settings
alias abs_initialize initialize
alias abs_update update
alias abs_start start
def initialize(map_id, event)
@enemy = nil
@recover =0
abs_initialize(map_id, event)
end
def setup_page_settings
abs_setup_page_settings
check_enemy
end
def check_enemy
unless @enemy.nil?
@enemy = nil
$game_map.enemies.delete(self) if $game_map.enemies.include?(self)
end
return if @list.nil?
for command in @list
next unless command.code == 108 or command.code == 408
if command.parameters[0].include?("cmd:enemy=")
id = command.parameters[0].sub("cmd:enemy=","")
@enemy = ABS_Enemy.new(id.to_i)
@trigger = 2
$game_map.enemies.push(self)
print "#{@enemy.name} crie!\n"
end
end
end
def damage_enemy(value)
jump(0,0)
value -= @enemy.defense
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
@enemy.hp -= value
if @enemy.hp <= 0
$game_map.enemies.delete(self)
RPG::SE.new("Collapse1",80).play
end
end
def update
if @enemy != nil
@recover -= 1 if @recover > 0
update_kill if @enemy.hp <= 0
end
abs_update
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
@character_name = ""
@opacity = 255
@priority_type = 0
@trigger = 0
@enemy = nil
end
end
def start
@enemy.nil? ? abs_start : attack
end
def attack
return if @enemy.hp <= 0 or @recover > 0
@recover = ABS_Config::Enemy_Recover
$game_player.animation_id = @enemy.animation
$game_player.damage_hero(@enemy.attack)
end
end
class Game_Player < Game_Character
alias abs_initialize initialize
alias abs_update update
def initialize
@wait = 0
@recover = 0
@kill_player = false
abs_initialize
end
def update
@recover -= 1 if @recover > 0
update_attack if @recover == 0 and Input.trigger?(ABS_Config::Attack_Key)
update_kill if @kill_player
update_wait_opacity
abs_update
end
def update_attack
return if @kill_player
for enemy in $game_map.enemies
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
attack_enemy(enemy) if ax == 0 and ay == -1
when 4
attack_enemy(enemy) if ay == 0 and ax == 1
when 6
attack_enemy(enemy) if ay == 0 and ax == -1
when 8
attack_enemy(enemy) if ax == 0 and ay == 1
end
end
@opacity = 0
@transparent = true
case @direction
when 2
@animation_id = 5
when 4
@animation_id = 2
when 6
@animation_id = 3
when 8
@animation_id = 4
end
@wait = 3
end
def attack_enemy(event)
hero = $game_party.members[0]
event.damage_enemy(hero.atk)
event.animation_id = hero.weapons[0].animation_id
@recover = ABS_Config::Player_Recover
end
def damage_hero(value)
jump(0,0)
return if @kill_player
hero = $game_party.members[0]
value -= hero.def
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
if value > hero.hp
hero.hp = 1
@kill_player = true
RPG::SE.new("Collapse1",80).play
else
hero.hp -= value
end
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
SceneManager.goto(Scene_Gameover)
end
end
def update_wait_opacity
if @wait > 0
@wait -= 1
if @wait == 0
@opacity = 255
@transparent = false
end
end
end
end
class Spriteset_Map
alias abs_initialize initialize
alias abs_update update
alias abs_dispose dispose
def initialize
$game_map.damage_sprites = []
abs_initialize
end
def update
abs_update
trash = []
for sprite in $game_map.damage_sprites
sprite.update
trash.push(sprite) if sprite.disposed?
end
for item in trash
$game_map.damage_sprites.delete(item)
end
trash.clear
end
def dispose
abs_dispose
for sprite in $game_map.damage_sprites
sprite.bitmap.dispose
sprite.dispose
end
$game_map.damage_sprites.clear
end
end
class Damage_Sprite < Sprite
def initialize(target,value)
super(nil)
@target = target
#@tone = Tone.new(255,0,0,0)
#self.bitmap = Bitmap.new(100,20)
#self.bitmap.draw_text(0,0,100,20,value,1)
chiffre = [value%1000/100,value%100/10,value%10]
print value
for i in [0,1,2]
if chiffre[i] == 0
chiffre[i] = nil
else
break
end
end
chiffre.compact!
if chiffre.size == 0
chiffre = [0]
end
self.bitmap = Bitmap.new(19*chiffre.size,20)
for i in 0...chiffre.size
src_bitmap = Cache.picture("chiffredegat" + chiffre[i].to_s)
src_rect = Rect.new(0,0,19,24)
self.bitmap.blt(19*i, 0, src_bitmap, src_rect)
end
#self.tone = @tone
if value >= 100
self.ox = 60
self.x = @target.screen_x + 20
self.y = @target.screen_y - 40
elsif value >= 10
self.ox = 50
self.x = @target.screen_x + 40
self.y = @target.screen_y - 40
else
self.ox = 45
self.x = @target.screen_x + 60
self.y = @target.screen_y - 40
end
self.z = 999
@timer = 20
end
def update
self.x = @target.screen_x + 40
self.y = @target.screen_y - 40
if @timer > 0
@timer -= 1
self.zoom_x += 0.01
self.zoom_y += 0.01
else
self.opacity > 0 ? self.opacity -= 15 : dispose
end
end
def dispose
self.bitmap.dispose
super
end
end |
Alors voilà ça c'est le code actuel avec le rajout d'une animation d'attaque. Bon du coup un autre problème arrive maintenant quand j'appuie sur la touche action voilà ce qui se passe :
Alors que normalement le héros devrait devenir transparent lorsque j'appuie sur la touche d'action pour que l'animation s'affiche correctement comme vous pouvez le voir ça n'est pas le cas... Quelqu'un aurait il une solution pour ça ?
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
Mack -
posté le 25/07/2012 à 15:42:26 (2313 messages postés)
- | | T'as essayer de faire que dans l'animation la cible soit effacer ?
Ça serait peut être moins chiant.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
arttroy -
posté le 25/07/2012 à 15:45:27 (2394 messages postés)
| Just working | Ah bah non j'y avais pas pensé (en même temps j'ignorais que c'était possible...) je vais regarder ça de suite...
Edit : bon ben impeccable, ça fonctionne me reste plus qu'à trouver comment bloquer les déplacements du héros... de nouveau (ça deviens une habitude...) merci à toi Mack pour quelqu'un qui s'est formé sur le tas je te trouve super calé en tout cas.
Bonne journée et merci de ton investissement dans la communauté ça fait vraiment plaisir.
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
Mack -
posté le 25/07/2012 à 15:52:44 (2313 messages postés)
- | | Pour bloqué, selon moi la meilleur solution c'est de reproduire ce qu'il se passe lorsqu'on utilise la commande "déplacer un évent ( Héros ) - > Attendre X Frames".
La flemme de regarder, mais ça doit être dans Game_Interpreter.
( Et à mon avis c'est juste une variable qu'ils rendent égale à la valeur. )
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
arttroy -
posté le 25/07/2012 à 15:58:51 (2394 messages postés)
| Just working | Je n'en demandais pas autant j'aurais cherché un peu mais merci j'y jette un œil de suite mine de rien ça commence à prendre forme mon projet de créer un script A-rpg utilisable et modifiable facilement même par des novices (comme moi) en script.
Bon à l'origine mon idée était de créer mon propre système pour mon jeu mais je me suis dit que ce serait pas mal de le partager ensuite pour aider les débutants (ou les fainéants comme tu veux...) qui ne sont pas trop chauds pour toucher au script...
J'ai épluché le Game_Interpreter et le Game_event (comme je ne trouvais pas dans le premier), ben rien je ne trouve pas...
Edit : Est ce que tu ne voulais pas dire Game_Character ?
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
Mack -
posté le 26/07/2012 à 09:58:30 (2313 messages postés)
- | | Autant pour moi, c'bien dans Game_Character.
En changeant @wait_count, ça devrait faire l'affaire je pense.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
arttroy -
posté le 26/07/2012 à 17:26:56 (2394 messages postés)
| Just working | Oui c'est ce que j'avais pensé, merci beaucoup pour la confirmation. Bonne journée à toi.
Edit : j'ai testé comme ça (je ne met que le Game_Character)
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
| class Game_Player < Game_Character
alias abs_initialize initialize
alias abs_update update
def initialize
@wait_count = 0
@recover = 0
@kill_player = false
abs_initialize
end
def update
@recover -= 1 if @recover > 0
update_attack if @recover == 0 and Input.trigger?(ABS_Config::Attack_Key)
update_kill if @kill_player
update_wait_count if @wait_count > 0
abs_update
end
def update_attack
return if @kill_player
for enemy in $game_map.enemies
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
attack_enemy(enemy) if ax == 0 and ay == -1
when 4
attack_enemy(enemy) if ay == 0 and ax == 1
when 6
attack_enemy(enemy) if ay == 0 and ax == -1
when 8
attack_enemy(enemy) if ax == 0 and ay == 1
end
end
@move_speed = 0
@move_frequency = 0
@wait_count = 30
case @direction
when 2
@animation_id = 5
when 4
@animation_id = 2
when 6
@animation_id = 3
when 8
@animation_id = 4
end
end
def attack_enemy(event)
hero = $game_party.members[0]
event.damage_enemy(hero.atk)
event.animation_id = hero.weapons[0].animation_id
@recover = ABS_Config::Player_Recover
end
def damage_hero(value)
jump(0,0)
return if @kill_player
hero = $game_party.members[0]
value -= hero.def
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
if value > hero.hp
hero.hp = 1
@kill_player = true
RPG::SE.new("Collapse1",80).play
else
hero.hp -= value
end
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
SceneManager.goto(Scene_Gameover)
end
end
def update_wait_count
if @wait_count > 0
@wait_count -=1
else
@move_speed = params[0]
@move_frequency = params[0]
end
end
end |
Mais ça n'est pas ça, là le personnage se met à avancer tout doucement d'une case bloquant toute autre action.
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
Mack -
posté le 26/07/2012 à 18:56:29 (2313 messages postés)
- | | 6 Frames ? A mon avis, c'est vraiment pas assez ...
Juste pour essayer, mets un gros un chiffre, genre 100 ou 200 frames.
Si ton héros se bloque, t'auras juste à trouver le bon nombre de frames.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
arttroy -
posté le 26/07/2012 à 19:14:35 (2394 messages postés)
| Just working | Des nouvelles enfin la base du script est terminée (presque sans toucher au script d'origine du logiciel), je vous fais un petit tuto rapide pour l'installation :
I / Importation de ressources :
Tout d'abord commencez par copier ces images dans le dossier Pictures de votre dossier
Ensuite copiez ces animations dans le dossier animation de votre projet ou créez en des similaires
Spoiler (cliquez pour afficher)
Spoiler (cliquez pour afficher)
Spoiler (cliquez pour afficher)
Spoiler (cliquez pour afficher)
Dans le cas où vous utiliseriez celles-ci il vous faudra récupérer le script pour utiliser les persos XP sur VXAce ici:
http://www.rpg-maker.fr/scripts-307-mapxp-characters-on-vxvxace.html
ensuite importez ce charset (créé sur Loose Leaf) et nommez le " $xp héros marche " par exemple:
Et ça c'est le template pour l'animation pour ceux qui souhaitent créer la leur
Spoiler (cliquez pour afficher)
II / Partie script :
Copiez ce code juste au dessus de main :
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
| module ABS_Config
Default_Animation = 1
Opacity_Burn = 10
Enemy_Recover = 60
#--------------------------------------------------------------------------
# Ici vous pourrez modifier la touche action par défaut c'est X
# (touche A du clavier)
#--------------------------------------------------------------------------
Attack_Key = :X
Player_Recover = 40
end
class Game_Map
attr_accessor :enemies
attr_accessor :damage_sprites
alias abs_setup setup
def setup(map_id)
@enemies.nil? ? @enemies = [] : enemies.clear
abs_setup(map_id)
end
end
class ABS_Enemy
include ABS_Config
attr_accessor :hp
attr_accessor :attack
attr_accessor :defense
attr_reader :name
attr_reader :animation
def initialize(id)
enemy = Game_Enemy.new(0,id)
@name = enemy.name
note = enemy.enemy.note
if note.include?("Animation=")
aid = note.sub("Animation=","")
@animation = aid.to_i
else
@animation = Default_Animation
end
@hp = enemy.mhp
@attack = enemy.atk
@defense = enemy.def
end
end
class Game_Event < Game_Character
attr_reader :enemy
alias abs_setup_page_settings setup_page_settings
alias abs_initialize initialize
alias abs_update update
alias abs_start start
def initialize(map_id, event)
@enemy = nil
@recover =0
abs_initialize(map_id, event)
end
def setup_page_settings
abs_setup_page_settings
check_enemy
end
def check_enemy
unless @enemy.nil?
@enemy = nil
$game_map.enemies.delete(self) if $game_map.enemies.include?(self)
end
return if @list.nil?
for command in @list
next unless command.code == 108 or command.code == 408
if command.parameters[0].include?("cmd:enemy=")
id = command.parameters[0].sub("cmd:enemy=","")
@enemy = ABS_Enemy.new(id.to_i)
@trigger = 2
$game_map.enemies.push(self)
end
end
end
def damage_enemy(value)
jump(0,0)
value -= @enemy.defense
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
@enemy.hp -= value
if @enemy.hp <= 0
$game_map.enemies.delete(self)
RPG::SE.new("Collapse1",80).play
end
end
def update
if @enemy != nil
@recover -= 1 if @recover > 0
update_kill if @enemy.hp <= 0
end
abs_update
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
@character_name = ""
@opacity = 255
@priority_type = 0
@trigger = 0
@enemy = nil
end
end
def start
@enemy.nil? ? abs_start : attack
end
def attack
return if @enemy.hp <= 0 or @recover > 0
@recover = ABS_Config::Enemy_Recover
$game_player.animation_id = @enemy.animation
$game_player.damage_hero(@enemy.attack)
end
end
class Game_Player < Game_Character
alias abs_initialize initialize
alias abs_update update
def initialize
@wait = 0
@recover = 0
@kill_player = false
abs_initialize
end
def update
@recover -= 1 if @recover > 0
update_attack if @recover == 0 and Input.trigger?(ABS_Config::Attack_Key)
update_kill if @kill_player
update_wait_time
abs_update
end
def update_attack
return if @kill_player
for enemy in $game_map.enemies
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
attack_enemy(enemy) if ax == 0 and ay == -1
when 4
attack_enemy(enemy) if ay == 0 and ax == 1
when 6
attack_enemy(enemy) if ay == 0 and ax == -1
when 8
attack_enemy(enemy) if ax == 0 and ay == 1
end
end
@can_move = true
@wait = 25
#--------------------------------------------------------------------------
# Pour l'animation du héros, ça se passe ici, modifier la valeur de :
# @animation_id =
# Le chiffre doit correspondre à celui de l'animation dans votre base de
# données
# Positions :
# when 2 -> bas
# when 4 -> gauche
# when 6 -> droite
# when 8 -> haut
#--------------------------------------------------------------------------
case @direction
when 2
@animation_id = 5
when 4
@animation_id = 2
when 6
@animation_id = 3
when 8
@animation_id = 4
end
end
def attack_enemy(event)
hero = $game_party.members[0]
event.damage_enemy(hero.atk)
event.animation_id = hero.weapons[0].animation_id
@recover = ABS_Config::Player_Recover
end
def damage_hero(value)
jump(0,0)
return if @kill_player
hero = $game_party.members[0]
value -= hero.def
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self,value))
if value > hero.hp
hero.hp = 1
@kill_player = true
RPG::SE.new("Collapse1",80).play
else
hero.hp -= value
end
end
def update_kill
if @opacity > 0
@opacity-= ABS_Config::Opacity_Burn
else
SceneManager.goto(Scene_Gameover)
end
end
def update_wait_time
if @wait > 0
@wait -= 1
else
@can_move = false
end
end
end
class Spriteset_Map
alias abs_initialize initialize
alias abs_update update
alias abs_dispose dispose
def initialize
$game_map.damage_sprites = []
abs_initialize
end
def update
abs_update
trash = []
for sprite in $game_map.damage_sprites
sprite.update
trash.push(sprite) if sprite.disposed?
end
for item in trash
$game_map.damage_sprites.delete(item)
end
trash.clear
end
def dispose
abs_dispose
for sprite in $game_map.damage_sprites
sprite.bitmap.dispose
sprite.dispose
end
$game_map.damage_sprites.clear
end
end
#--------------------------------------------------------------------------
# Les dégâts sont limités d'origine à 999HP si vous voulez changer cela,
# modifiez ces lignes
# chiffre = [value%1000/100,value%100/10,value%10]
# for i in [0,1,2]
#--------------------------------------------------------------------------
class Damage_Sprite < Sprite
def initialize(target,value)
super(nil)
@target = target
chiffre = [value%1000/100,value%100/10,value%10]
for i in [0,1,2]
if chiffre[i] == 0
chiffre[i] = nil
else
break
end
end
chiffre.compact!
if chiffre.size == 0
chiffre = [0]
end
#--------------------------------------------------------------------------
# dans cette partie si vous utilisez d'autres images pour l'affichage des dégâts
# respectez des dimensions de 19 X 24 ou modifiez les valeurs égales à celles-ci
#--------------------------------------------------------------------------
self.bitmap = Bitmap.new(19*chiffre.size,20)
for i in 0...chiffre.size
src_bitmap = Cache.picture("chiffredegat" + chiffre[i].to_s)
src_rect = Rect.new(0,0,19,24)
self.bitmap.blt(19*i, 0, src_bitmap, src_rect)
end
#--------------------------------------------------------------------------
# Cette partie concerne l'affichage des dégâts modifiez la valeur de
# @target.screen_x ou @target.screen_y pour modifier la position de l'affichage
#--------------------------------------------------------------------------
if value >= 100 #centaines
self.ox = 60
self.x = @target.screen_x + 20
self.y = @target.screen_y - 70
elsif value >= 10 #dizaines
self.ox = 50
self.x = @target.screen_x + 40
self.y = @target.screen_y - 70
else #unités
self.ox = 45
self.x = @target.screen_x + 60
self.y = @target.screen_y - 70
end
self.z = 999
@timer = 20
end
def update
self.x = @target.screen_x + 40
self.y = @target.screen_y - 70
if @timer > 0
@timer -= 1
self.zoom_x += 0.01
self.zoom_y += 0.01
else
self.opacity > 0 ? self.opacity -= 15 : dispose
end
end
def dispose
self.bitmap.dispose
super
end
end |
Une fois ceci fait, allez dans les scripts de base de RMVX Ace dans le Game_Player à la ligne 285 vous devriez trouver ça :
1
2
3
4
5
6
7
8
| def movable?
return false if moving?
return false if @move_route_forcing || @followers.gathering?
return false if @vehicle_getting_on || @vehicle_getting_off
return false if $game_message.busy? || $game_message.visible
return false if vehicle && !vehicle.movable?
return true
end |
Remplacez par :
1
2
3
4
5
6
7
8
9
| def movable?
return false if moving?
return false if @can_move
return false if @move_route_forcing || @followers.gathering?
return false if @vehicle_getting_on || @vehicle_getting_off
return false if $game_message.busy? || $game_message.visible
return false if vehicle && !vehicle.movable?
return true
end |
Et voilà on en a fini avec les scripts...
III / Réglages :
Pour ce qui est du script tout ce que vous risquez d'avoir à modifier est commenté dans le code
Passons aux animations, pour chacune d'entre elle faites comme ceci :
Spoiler (cliquez pour afficher)
Spoiler (cliquez pour afficher)
1 : pas grand chose à ajouter...
2 : pour cette partie c'est pas très compliqué faites insérer jusqu'à avoir 6 frames ensuite contentez vous de sélectionner la pose voulue (1 et 2 pour la première, 3 et 4 pour la seconde, 5 et 6 pour la troisième) puis réglez là comme en "a" (numéro de la pose) et en "b" (à mettre impérativement comme ça)
3 : dans cet onglet changer le "frames 1 à 16" par "1 à 6"
IV / Créer les ennemis :
A partir de maintenant c'est super simple, sur votre map créez un event comme ceci :
Spoiler (cliquez pour afficher)
Spoiler (cliquez pour afficher)
Pour chaque monstre que vous créerez choisissez l'apparence et réglez tout comme en "1"
Puis dans l'event -> commande "insérer un commentaire" puis faites comme en "2", le chiffre correspondant au numéro de l'ennemi dans la base de données.
Pour finir dans la base de données allez dans l'onglet "ennemis" et faites comme en "3" le chiffre correspondant au numéro de l'animation de la base de données (c'est celle qui sera affichée sur le héros lors de l'attaque dudit monstre)
Et voilà c'est terminé. j'espère que cette base pourra servir à d'autres, pour d'éventuelles questions n'hésitez pas à me MP.
je tiens à remercier Mack avant tout , mais aussi Zeus81 et Zou qui m'ont aidé à modifier la base de script que j'avais élaborée grâce aux tutos youtube de Khas Arcthunder (auteur du sapphire system).
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
raphidu13 -
posté le 25/11/2014 à 10:41:43 (3 messages postés)
| | ya t-il possibiliter de recevoir gold+xp ??
|
Index du forum > Entraide > [RESOLU] [RMVX Ace] Script A-rpg maison
|
|
|