Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
353 connectés actuellement
30732293 visiteurs depuis l'ouverture
2271 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
◂
| [Script] A-RPG basique avec des script (VX Ace)
Un petit système basique d'A-RPG pour Ace avec des scripts. | Ecrit par arttroy le 04/12/2012 |
▸
|
❤ 0 sBonjour à tous et toutes amis oniromanciens, voilà un petit tutoriel de ma fabrication (enfin presque...) pour installer un système sommaire d'A-rpg pour RMVX ACE. Il explique toutes les étapes importantes à suivre pour y arriver. Actuellement cette base ne gère pas les gains d'or et d'expérience mais je pense que par la suite ce seront des choses que j'ajouterai alors ce tuto sera certainement amené à être modifié. J'espère que ça pourra servir à d'autres que moi et sans plus attendre entrons dans le vif du sujet...
I / Importation de ressources :
Tout d'abord, il vous faudra 10 images dans le dossier Pictures de votre dossier de jeu pour montrer les dégâts :
chiffredegat0.png
chiffredegat1.png
chiffredegat2.png
Jusqu'à 9.
Ensuite il vous faudra quatre images dans le dossier Animations :
attaquebas.png
attaquedroite.png
attaquegauche.png
attaquehaut.png
Dans le cas où vous utiliseriez des personnages avec quatre frames au lieu de trois (comme sur VX Ace), il vous faudra ce script : http://www.rpg-maker.fr/scripts-307-mapxp-characters-on-vxvxace.html.
Ensuite importez le charset (créé sur Loose Leaf, par exemple) et nommez le " $xp héros marche".
Et ça c'est le template pour l'animation pour ceux qui souhaitent créer la leur
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).
|
Leicsirg -
posté le 06/12/2012 à 18:54:00 (830 messages postés)
| | ça à l'air sympa tout ça! Un screen du résultat final?
Je ne comptes pas l'utiliser mais en tout cas ça pourra servire à plus d'un
|
Livestreamz | FACTIONS: l'appel aux armes |
arttroy -
posté le 12/12/2012 à 19:15:55 (2394 messages postés)
| Just working | Et voilà sitôt vu sitôt fait :
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
Ryukko -
posté le 10/01/2013 à 12:39:22 (30 messages postés)
| | Salut! Salut!
Je fais mes débuts avec RPG Maker (je suis sur VX Ace), et merci pour ces tutos!
J'ai un soucis avec celui-ci car quand je lance le jeu après avoir tout bien fait comme il le fallait, j'obtiens un message d'erreur dans le script ABS Config
ligne 252 : Syntaxe error occurred
unexpected tEQ
if chiffre<i> == 0
Que puis-je faire pour arranger ceci?
Merci
|
treyamai -
posté le 30/01/2013 à 17:15:17 (2 messages postés)
| | Salut,
J'ai eu la même erreur, j'ai résolu le problème en remplaçant tous les chiffre<i> par chiffre
En tout cas bravo pour le script je test ça en ce moment
|
Zeus81 -
posté le 30/01/2013 à 19:46:28 (11071 messages postés)
| | Par chiffre[i] plutôt.
|
treyamai -
posté le 01/02/2013 à 18:25:26 (2 messages postés)
| | Je n'avais même pas vue que les crochets n'apparaissaient pas ^^ Dsl
Mais oui, bien vue Zeus81, merci de ta correction
|
arttroy -
posté le 06/03/2013 à 18:53:31 (2394 messages postés)
| Just working | Merci Zeus, fan de tes interventions monsieur ! Finalement le problème semble réglé
|
Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ? |
Théodren -
posté le 18/06/2013 à 15:59:33 (255 messages postés)
| Je suis juste au-dessus | Super pratique merci !
|
Francky |
Vince_1_2_0 -
posté le 10/11/2013 à 19:37:17 (1 messages postés)
| | Vraiment génial le tuto! Mais je me demandais si ce serai possibles de monter l'exp quand on tue des mobs. Merci d'avance.
|
Kagenekko -
posté le 01/03/2014 à 18:13:23 (15 messages postés)
| | Grr, encore un problème !
Il surgit quand je veux attaquer un ennemi !
line177 : NoMethodError occured
undefined method : "animation_id" for nil:Class
J'ai finalement retiré la ligne 177 et ça marche. :/
J'aimerai juste savoir, comment fait-on pour avoir un objet dès que le mob est mort ? Merci !
|
Ojhink -
posté le 08/06/2014 à 16:40:52 (5 messages postés)
| | Bonjour à tous je cherche à faire un a-rpg donc j'ai suivi ce tuto, mais après chaque réglages paramétrés minutieusement je n'abouti pas au résultat espéré...
Je m'explique :
- Lorsque je veut faire une attaque sur la gauche ça me fait une attaque vers la droite;
- Lorsque je fais une attaque sur la droite ça la fait vers le haut;
- Quand je fais une attaque vers le haut ça la fait vers le bas;
- Et finalement quand j'en fais une vers le bas ça me sort un autre attaque avec plein de coups qui apparaissent...
Donc je fais appel à vous tous car je suis nouveau sur RPG Maker VX Ace (c'est d'ailleurs mon premier RPG Maker) et encore une fois j'ai suivi le tuto à la lettre + les commentaires signalant des bugs et leurs réponses qui les ont résolu.
En gros je penses avoir tout fait correctement...
Et désolé si je parait un peu brutal mais ça urge un peut car je ne peux pas continuer le développement du jeu pour le moment...
Merci à vous
|
Uvnaxwao -
posté le 12/11/2014 à 13:11:41 (2 messages postés)
| | euh...
c'est normal qu'il me dise
"unable to find :
chiffredegat[0,2,9]"
car j'ai pas trouvé comment regler ce probleme...
EDIT : ah ben maintenant il me dit 0,0,0 au lieu de 0,2,9
WTF ><
EDIT2 : OMG en fait une fois sur deux il dit 0,2,9 et le reste 0,0,0
--" sérieux... sa deviens lourd...
|
raphidu13 -
posté le 24/11/2014 à 13:57:56 (3 messages postés)
| | Bonjour,
je vouler savoir si la suite (qui gére xp + or)
était scripter ??
ou ya t-il moyen de le faire autrement que par script ?
aprés la mort d'un monstre ?
|
Dont -
posté le 06/12/2014 à 22:08:05 (1 messages postés)
| | Bonjour, je me permet de relancer ce post.
Ce serait possible d'avoir un script permettant le loot des montres après leurs morts ?
Sinon un autre lien vers un autre A-RPG permettant le loots aussi, merci !
|
Darkairy -
posté le 22/12/2014 à 21:58:10 (1 messages postés)
| En train de maker | C'est sympa le problème c'est qu'on a qu'une animation
|
Speaky -
posté le 08/08/2015 à 16:34:31 (2 messages postés)
| | Les charset truc :X sont zarb,car qd j'en fais l'apparance d'un personnage,il est décallé O.o !!!
HELP HELP SVP !
|
Anatho5 -
posté le 04/10/2015 à 17:19:28 (1 messages postés)
| | Je trouve pas la Game-player il est ou ? Merci
|
Athanazya -
posté le 19/03/2016 à 16:02:56 (9 messages postés)
| | les images ne fonctionne plus
|
shadowsheart -
posté le 28/05/2016 à 19:24:01 (41 messages postés)
| | Athanazya a dit:
les images ne fonctionne plus
|
je ne les vois pas...Je fais quoi ?....
|
K-P |
Thalkwenda -
posté le 24/02/2019 à 15:42:16 (1 messages postés)
| | Salut, pareil les images ne sont plus accessibles...
| |
|
|