Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Sorties: Dread Mac Farlane - episode 6 / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

287 connectés actuellement

29371060 visiteurs
depuis l'ouverture

1007503 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Zarok

ConsoleFun

RPG Fusion

Kingdom Ultimate

Level Up!

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RMVX Ace] Script A-rpg maison


arttroy - posté le 14/07/2012 à 00:19:30 (2394 messages postés)

❤ 0

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


Portion de code : Tout sélectionner

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)

❤ 0

Sprite = image X)
J'ai pas testé par contre

Portion de code : Tout sélectionner

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)

❤ 0

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:
image image image image image image image image image image

Portion de code : Tout sélectionner

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 :

image

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 (2288 messages postés) - staff

❤ 0

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)

❤ 0

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 (2288 messages postés) - staff

❤ 0

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)

❤ 0

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 ? :doute5

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Mack - posté le 26/07/2012 à 09:58:30 (2288 messages postés) - staff

❤ 0

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)

❤ 0

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)

Portion de code : Tout sélectionner

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 (2288 messages postés) - staff

❤ 0

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)

❤ 0

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

image image image image image image image image image image


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:

image

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 :

Portion de code : Tout sélectionner

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 :

Portion de code : Tout sélectionner

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 :

Portion de code : Tout sélectionner

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)

❤ 0

ya t-il possibiliter de recevoir gold+xp ??

Index du forum > Entraide > [RESOLU] [RMVX Ace] Script A-rpg maison

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers