| Artisan (Nv 5) |
 |
Inscrit le: 22 Nov 2011, 22:01 Messages: 199 Niveau RPG Maker: Moyen Logiciel(s) préféré(s): RPG Maker XP Point(s) Fort(s): Scripts Sexe: Masculin Points d'aide: 17/60
Créations :
Voir ses créations
|
Je vais encore retardé le tuto (voir l'annulé dsl ),
J'ai terminé les scripts (grosso-modo) et j'ai réalisé que c'était pas forcément évident pour quelqu'un qui ne s'y connait pas trop niveau ruby de s'y retrouver c'est pourquoi je vais finalement te passer des portions de codes et t'expliquer comment s'en servir pour récupérer des informations et les mettre dans des variables. Tu pourras tout de même faire certaines choses plus rapidement et plus facilement. Je vais éditer ce message pour les explications.-------------------------------------------------------------------------------------------------------------------------------- Edit: Tu dois créer un script au dessus de main et y coller tout ça.- Code: Tout sélectionner
module GameLolo # ######################################################################### # Interrupteurs # ======================================================================== HEROSPOSSPC = 1 TIRPOSSPC = 2 # ######################################################################### # Variables # ======================================================================== HEROSTYPEPOS = 1 TIRTYPEPOS = 2 XTIR = 3 YTIR = 4 DTIR = 5 # ######################################################################### end
Alors ici on a le module GameLolo, Ce module nous servira à savoir dans quelles variables ou interrupteurs mettre les valeurs calculées par les scripts. Exemple: pour l'interrupteur HEROSPOSSPC, j'ai mis 1 après le "=" ça veut dire que la valeur false ou true sera mise dans l'interrupteur d'id 1.
Maintenant à quoi sert ce que j'ai écrit: HEROSPOSSPC : Détermine si le héros se trouve à une position spéciale qui l'empêcherais de faire un tir simple. (devant un monstre, devant un coffre déplaçable, devant un rocher, devant les façades extérieures, devant une flèche). false ou true. TIRPOSSPC : Détermine si le tir se trouve à une position spéciale (sur un rocher, sur un monstre, sur un coffre déplaçable).
HEROSTYPEPOS : Devant quoi se trouve le héros? TIRTYPEPOS : Sur quoi se trouve le tir? 0 = monstre 1 = coffre déplaçable 2 = rocher 3 = flèche 4 = eau 5 = rien 6 = murs extérieurs (les bords) XTIR : Position x du tir. YTIR : Position y du tir. DTIR : Direction du tir.- Code: Tout sélectionner
def initialiser_jeu $event = nil end
Tu dois créer un event en démarage automatique et mettre dans cet event: insérer un script: tu écris dedans "initialiser_jeu" sans les guillemets. Tu peux déjà copier l'événement sur toutes tes maps de jeu.- Code: Tout sélectionner
def pos_heros x = $game_player.x y = $game_player.y d = $game_player.direction return x, y, d end
Cette méthode ne sert pas à grand chose mais je préfère appeler les positions du héros en faisant pos_heros[0] que $game_player.x. Il faut quand même la garder car je m'en sert dans les prochains codes.- Code: Tout sélectionner
def events(id, event_id, type) # 0 = monstre # 1 = coffre # 2 = rocher (pour le marteau) # 3 = fleche # 4 = eau (pour les ponts) x = $game_map.events[event_id].x y = $game_map.events[event_id].y d = $game_map.events[event_id].direction proprietes = [x, y, d] # emplacements 0 à 9 pour les monstre (10 monstres par map) id += 10 if type == 1 # emplacements 10 à 19 pour les coffres (10 coffres par map) id += 20 if type == 2 # emplacements 20 à 49 pour les rochers (30 rochers par map) id += 50 if type == 3 # emplacements 50 à 59 pour les fleches (10 fleches par map) id += 60 if type == 4 # emplacements 60 à 149 pour l'eau (90 eau par map) $event = [] $event[id] = proprietes end
Ça c'est le code le plus important. ça met dans un tableau nommé $event des infos utiles sur justement les événements de la map. Leur nature, leurs positions x et y et leur direction. Comment s'en servir? Pour un monstre tu mets dans l'event: inséter un script: tu écris "event(id_du_monstre, id_event, type) id_du_monstre : 0 si c'est le premier monstre de la carte que tu créer. id_event : ben l'id de l'event type : 0 # si c'est un monstre type : 1 # si c'est un coffre type : 2 # si c'est un rocher type : 3 # si c'est une fleche type : 4 # si c'est de l'eau(pont) En bref, event(0,2,0) = event de type monstre d'id 2 et dont le monstre est d'id 0. Il y a d'autres infos dans le code.- Code: Tout sélectionner
def positionner_tir x = pos_heros[0] x -= 1 if pos_heros[2] == 4 x += 1 if pos_heros[2] == 6 y = pos_heros[1] y -= 1 if pos_heros[2] == 8 y += 1 if pos_heros[2] == 2 $game_variables[GameLolo::XTIR] = x $game_variables[GameLolo::YTIR] = y $game_variables[GameLolo::DTIR] = pos_heros[2] end
Cette méthode sert à positionner le tir, -> Créer un nouvel événement c'est le tir du héros -> insérer un script: "positionner_tir" -> Placer un event (tu choisis les variables d'id dont la valeur est la même que XTIR et YTIR) Et là l'event qui représente le tir du héros se retrouvera devant le héros (le mouvement est à faire sans scripts)- Code: Tout sélectionner
def positions_spc?(testeur="heros", event_id=0) # event_id à définir si testeur = "tir" x = pos_heros[0] if testeur == "heros" y = pos_heros[1] if testeur == "heros" d = pos_heros[2] if testeur == "heros" x = $game_map.events[event_id].x if testeur == "tir" y = $game_map.events[event_id].y if testeur == "tir" d = $game_map.events[event_id].direction if testeur == "tir" value = false type = 5 # 5 = le héros peut tirer # 6 = le héros fait face aux murs extérieurs. for i in 0..9 # monstres if $event[i] != nil if testeur == "heros" if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 0 ; end if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 0 ; end if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 0 ; end if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 0 ; end elsif testeur == "tir" ; if x == $event[i][0] and y == $event[i][1]; value = true ; type = 0 ; end end end end for i in 10..19 # coffres if $event[i] != nil if testeur == "heros" if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 1 ; end if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 1 ; end if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 1 ; end if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 1 ; end elsif testeur == "tir" ; if x == $event[i][0] and y == $event[i][1]; value = true ; type = 1 ; end end end end for i in 20..49 # rochers if $event[i] != nil if testeur == "heros" if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 2 ; end if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 2 ; end if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 2 ; end if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 2 ; end elsif testeur == "tir" ; if x == $event[i][0] and y == $event[i][1]; value = true ; type = 2 ; end end end end for i in 50..59 # fleches if $event[i] != nil if testeur == "heros" if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 3 ; end if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 3 ; end if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 3 ; end if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 3 ; end end end end for i in 60..149 # eau if $event[i] != nil if testeur == "heros" if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 4 ; end if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 4 ; end if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 4 ; end if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 4 ; end end end end if testeur == "heros" if y == 11 and d == 2 ; value = true ; type = 6 ; end if x == 3 and d == 4 ; value = true ; type = 6 ; end if x == 13 and d == 6 ; value = true ; type = 6 ; end if y == 1 and d == 8 ; value = true ; type = 6 ; end end if testeur == "heros" $game_switches[GameLolo::HEROSPOSSPC] = value $game_variables[GameLolo::HEROSTYPEPOS] = type elsif testeur == "tir" $game_switches[GameLolo::TIRPOSSPC] = value $game_variables[GameLolo::TIRTYPEPOS] = type end end
J'expliquerais ce code aujourd'hui quand j'aurais dormi un petit peu (fatigé^^')Edit 2: Ici on a la méthode qui permet de savoir si le héros où le tir se trouve à une certaine position. Par exemple si tu créer un event en processus parallèle, tu mets une condition "si la touche C est appuyée". Tu fais à l'intérieur insérer un script où tu écris : positions_spc?("heros"), ceci va calculer les positions de ton héros et des événements qui peuvent interagir avec lui et renvoyer deux valeurs. La première, value qui sera placée dans l'interrupteur d'id HEROSPOSSPC (true ou false) Si c'est true le héros se trouve à une position spéciale. si c'est false c'est pas le cas et il peut tirer normalement. La seconde, type qui sera placée dans la variable d'id HEROSTYPEPOS (0 à 6) Si c'est 0 devant un monstre, si c'est 2 devant un coffre déplaçable ... Tu peux remplacer le héros entre parenthèses par tir et à ce moment ce qui sera calculé c'est la position du tir. J'espère que ça t'aidera au moins un petit peu. Si tu as besoins de scripts pour obtenir des positions ou quelque chose du genre n'hésites pas à demander.
_________________
--- Bad_maker ---
|
|