Partagez
Aller en bas
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 11:31
L'idée peut paraître simple. En fait, elle est très facilement réalisable sans script. Cependant, J'aimerais faire une condition qui n'a qu'a demander a un script pour savoir le ID du terrain. Attention, ici, je ne parle pas de récupéré dans une variable le ID. Je parle plutôt d'obtenir un vrai ou faux pour une condition. Par exemple:
Soit un code qui fait: Si script retourne 60 alors....
Dans le cas ou c'est impossible sans variable:
Un code comme ceci: Si script=60 retourne vrai ou faix.
Mettre le 60 directement dans le script est un peu moins fonctionnel à mon avis.

Je sais très bien que je peu le faire sans script. C'est pour des fin de visibilité principalement, pour rendre le code clair tout en sauvant
quelque variable par la même occasion.

Merci d avance.
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 13:38
id du terrain ? tu veux dire l'id de la map , non ?
avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 26
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 14:13
Effectivement, une précision serait appréciable, ça change tout si tu parles de l'ID de zone, de l'ID de terrain ou de l'ID de la map...
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 14:41
Je parle de l'ID de Region qui n'existe que sous RPG Maker Vx Ace. =:0)
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 15:58
Code:

$game_map.region_id(5,5)

te donnera l'id de region de la case 5,5

donc :
Code:

$game_map.region_id($game_player.x,$game_player.y)

Mais malheureusement , un test tel quel est pas possible : la ligne est trop longue est coupée puis buggue à l'execution (pfouuuh)
donc , faut ruser un peu :

Code:

class Game_Interpreter
def curr_region
return $game_map.region_id($game_player.x,$game_player.y)
end

et aprés tu peux faire un test sur curr_region
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 16:23
Merci, ça ressemble vraiment à ce que je cherche. Par contre, j'ai quelque questions.
Ou serait-il mieux de définir class Game_Interpreter?
Est-il possible de passer un paramètre a une classe? Comme ça je pourais l'utiliser pour me retourner un
vrai ou faux. À ma connaisance, il n'est pas posible de faire quelque chose comme ca:
Si script retourne 60 alors.....

avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 28 Fév 2012 - 16:57
c'est un script en plus , donc avant "main" à la fin . toujours . il ne faut jamais modifier directement dans la classe standard .
Tu peux faire un truc comme "Si script retourne 60" , oui bien sur . Mais n'oublie pas que c'est "==" et pas "=" que tu dois utiliser pour ton test .
tu pourras donc faire un test :
Si script : curr_region==16 alors ... sinon ...

Mais sinon oui aussi , tu peux aussi utiliser un parametre .
Code:

class Game_Interpreter
def curr_region(region_id)
return $game_map.region_id($game_player.x,$game_player.y)==region_id
end
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mer 29 Fév 2012 - 4:57
J'aimerais savoir s'il existe un moyen de copier mon code sur un post. C'est embêtant de devoir réécrire lol.
Enfin, j'ai fait un test peu concluant. J'ai écrit: Variabke1=$curr_region pour ensuite fait afficher cette variable. Le résultat est inévitablement 0. A noter que j'ai directement modifié la classe game_interpreter. Quand j'ai essayer de le mettre ailleurs ça plantais. Sans doute dois-je le faire hériter ou qeulque chose comme ça. Je ne connais pas le ruby.
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mer 29 Fév 2012 - 10:25
y'a une balise pour le code sur un post. appuie sur "citer" sur mon post , tu la verras .

Variabke1=$curr_region????
pourquoi un $ ? évidemment que ça marche pas ... en faisant ça , tu appeles une variable globale $curr_region qui n'existe pas au lieu de la methode curr_region .
et puis , tu n'as meme pas besoin de passer par une variable .
teste directement :
Code:

print curr_region

Comme je t'ais dit , ne modifie pas les classes standard . tu prend le bout de code que je t'ai filé tel quel et tu le met dans un nouveau script au dessus de main . la mehode "curr_region" sera ajouté à la classe game_interpreter sans virer les autres . tu dis "ça plantait" ... mais écoute , si ça plante , donne le message d'erreur .
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mer 29 Fév 2012 - 11:14
Ça marche maintenant, peu après avoir poster le message, j'ai compris l'histoire des == et du $. Un peu comme dans certain langage de programmation.

Par contre, le code qui plante est qu'à moitié réglé en fait. J'ai simplement fait:

def curr_region(region_id)
return $game_map.region_id($game_player.x,$game_player.y)==region_id
end

ce qui fonctionne.

Par contre, le code que tu a donnée:
class Game_Interpreter
def curr_region(region_id)
return $game_map.region_id($game_player.x,$game_player.y)==region_id
end

Lui plante. Il manque un end je crois. Je me demande comment Ruby fait pour savoir qu'il doit l'ajouter a Game_Interpreter. Juste parce qu'il a le même nom? Et pourquoi la neccesiter de le faire lier avec game_interpreter?

Certes, ça fonctionne. Mais je désire un peu mieux comprendre la logique du Ruby. Mais pour çà je vais lire de la documentation, ne t'en fais pas.

En gros ça fonctionne maintenant, merci beaucoup.

Tant qu'à y être, connaîtrais tu un code qui vérifie si un joueur a bougé? Présentement j utilise beaucoup de code pour ça.

En gros, mon jeu a des cartes de même grosseur. Un escalier situé a (5,15) sur une map trouve son équivalent sur une autre map. Par conséquent, au lieu d’utiliser des évents pour chaque escalier, j'utiliser un seul évent qui vérifie si le joueur se situe sur une region 60(un troue) 61(escalier descendant) 62(escalier qui monte)ou 63(sortie carte). Chacun est fait dans un Evénement commun.

Niveau code maintenant. C'est la que ça devient un peu du spaghetti.

Étant donnée que si je ne met pas de détection de mouvement, le joueur se fera téléporter en boucle d'une map a l'autre(escalier au même endroit), je dois créer deux tables dans mon évènement. La table un détecte si une des 4 flèches est utilisé. Si oui, la switch local A est activé et le code passe a la deuxième page. Comme ceci, le joueur a le temps de se déplacer de l'escalier et il n'y a pas de téléportation automatique.
La page deux est également un processus parallèle.

La page deux vérifie en permanence si le joueur se trouve sur une region (60,62,62,63) et appels l’évènement commum qui lui est attribué. Juste après, il désactive la switch A. Tout les évènement commun sont en automatique. Si je désactive la Switch A dans l’évènement commun, ça bogue... Mais ceci crée un autre problème. En fait, le code de la première page commence a s’exécuter avant même que l’évènement commun automatique ait fini de s’exécuter. Ainsi, si j'appuis sur une flèche durant la téléportation créer par l’évènement commun, la page 1 de mon code va réactiver la switch A et par conséquent puisque le joueur est bloqué par l’évènement commun automatique, celui-ci demeure sur une zone 61 ou 62 et est retéléporté aussi tôt.

Pour pallier à ce problème, je met que la page un s’exécute si la variable MouvementPossible est égal à 0.
Lors de l’évènement commun, cette variable est tout de suite mise à -1 et remise à 0 à la fin de celle-ci.

Ça fait en sorte que le joueur peu être incapable de bouger durant une fraction de seconde, mais ces passable.

Donc voila, ce code est plutôt compliqué pour rien je trouve. Je n'ai pas trouvé de façons plus simple de faire. J'essaie d'utiliser des script pour simplifier le code et peut-etre trouver une solution.

En résumé, ce que mon code dois pouvoir faire:

1.Ne pas commencer a s’exécuter tant que le joueur n'a pas bougé d'une case une fois arrivé sur la map.
2.Une fois un déplacement fait, exécuter le code en déclanchant l’évènement commun.
3.Attendre que l’évènement commun est terminer avant de permette à l’évènement de s'exécuter de nouveau.

Voici des images de mon codes:

http://i41.servimg.com/u/f41/17/31/86/84/zzz110.png
http://i41.servimg.com/u/f41/17/31/86/84/zzz210.png
http://i41.servimg.com/u/f41/17/31/86/84/zzz310.png

Merci d'avace pour vos conseil.
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mer 29 Fév 2012 - 12:08
yep , j'avais oublié un "end" .

y'a un phénomene de "surcharge" qui fait que l'on peux définir plusieurs fois une meme classe , ça la complete simplement . Si une meme methode d'une classe donnée est présente dans plusieurs scripts , c'est celle qui est le plus bas qui a priorité (c'est pour ça qu'on met toujours les scripts customisés avant main : pour que ça "écrase" le standard) . Mais on a meme la possibilité de compléter une methode sans l'écraser grace aux "alias" .

"Game_interpreter" est la classe qui interprete les evenements . Donc si tu défini une methode dedans , tu peux l'utiliser directement sans mettre $game_interpreter devant . c'est juste pour ça : c'est plus pratique . j'aurais pu la mettre dans Game_Map par exemple par exemple mais dans ce cas , tu aurais du utiliser la methode ainsi :
Code:

Si script $game_map.curr_region(1) alors ...

pour ton systeme , tu devrais prendre des conventions de mapping pour te simplifier la tache . par exemple , quand tu descend un escalier , au lieu de se retrouver en haut de l'escalier de l'étage d'en bas , tu met le joueur au pied de l'escalier directement (donc en dehors de la zone qui teleporte en haut) . Ton problème est résolu et le joueur sera en bas de l'escalier donc n'aura pas à le descendre : tout le monde est gagnant .
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mer 29 Fév 2012 - 13:38
Merci pour l'information sur les script. Ca me permet de comprendre beaucoup mieux comment ils fonctionnent.

Pour ce qui est de mon code, j'ai déja pensé a ce que tu a dit. Cependant, c'est impossible...
La raison est simple, la téléportation est automatiquement faite sans que je donne les coordonnée.
Il ne fait que téléporter vers la map du dessin(défini au début de la page1) et avec les coordonné du joueur.
Maintenant, si j'essaie de faire en sorte qu'il ne se téléporte pas au même endroit, ça me cause deux problème.

Le premier, il existe 4 case possible aux alentour de l'escalier. Vers lequel va t-il être téléporter si je dois faire une condition automatique dans le code? Le définir manuellement gâcherais tout mes efforts pour créer une méthode automatisé. Ou encore, je devrais créer un méga code qui regarderais la passabilité des cases au alentour de l'escalier pour déterminer lequel est le mieux, ce qui serais plus lourd encore.

Deuxième problème, il existe certain évènement critique fonctionnant de la même façons qu’un escalier qui doivent impérativement téléporter le joueur exactement sur la même case de l'autre map. Bien que je pourrais créer une Region différente pour ça.

À lire ce que j'écris, tu dois vraiment te dire que je me complique la vie inutilement =:0)
Juste pour expliquer rapidement, je monte un jeu comme Lolo Adventure. Ça demande des tonne d’évènement spécial presque incodable. Mais pour pouvoir faire ce genre de tableau, il ne doit pas y avoir d’évènement sur aucune des cases jouables du jeu. Je rush déjà suffisamment à essayer de faire fonctionner certain truc lol.
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mer 29 Fév 2012 - 21:10
J’espère que ce n'est pas considéré du double postage....
J'ai finalement résolut mon problème. Avec un petit script mettable dans une condition qui vérifie si le joueur a bougé et d'un coût, toute la bidouille s'est évaporer.

Maintenant je me tourne vers mes autres problemes.
Voici ma question. J'ignore si je devrais créer un nouveau post pour...

XGuarden - posté le 29/02/2012 à 21:03:43. (52 messages postés)
Abus | Citer
Domaine concerné: Script Event
Logiciel utilisé: RPG Maker Vx Ace
Première question, connaissez vous un bon moyen de faire nager ou noyer un personnage?

Deuxième question plus sérieuse...
Dans mes maps, il y a des troue. Quand un joueur tombe dedans, il se retrouve dans la map inférieur a l'endroit qui a les même coordonnée.

Mais voila, il arrive que le joueur tombe sur une case ou il ne peut pas se déplacer dont l'eau.

Je souhaite faire en sorte, que si le joueur tombe dans l'eau, que celui-ci réapparaît à la case jouable la plus près.

Idéalement, j'aimerais pouvoir récupéré dans une variable le id ou X Y de la case la plus prête.
En gros, je veux pouvoir dire: MaVariable = scriptTrouverPlusPret... ou encore, de façons automatique, juste appeler un script qui déplace le joueur sur la case la plus proche qui est marchable.

Encore mieux, sa serait de pouvoir passer a ce script des parametres optionel pour forcer la réapparition sur un certain type de terraintag ou de Region ou bien interdire de choisir certaine RegionTag.

Pour ce qui est des autres endroit que le joueur peut tomber mais qui n'est pas de l'eau, le code doit vérifier la case de dessous, puis toute celle en dessous et "faire tomber" le joueur vers celle-ci. S'il n'existe aucune case marchable alors le joueur tombe ailleur.

Niveau programmation, pas trop compliquer. Mais j'ignore comment détecter la passibiliter de la case ou se trouver le joueur.

J'ignore également comment détecter la case marcheable la plus proche.
J'ignore comment faire pour récuperer les coordonné d'une case avec un IDRegion de mon choix. La plus proche du joueur.

J'ignore également comment créer une case que l'ont ne peut pas aller dessus mais que si on tombe dessus par un event qu'on puise la quitter.

J'aimerais égallement savoir s'il existe un script de téléportation quej e puise appeler.
L'event est trop limité. Par exemple, ont ne peut pas téléporter à partir de coordonné retourné par un script. Il faut dabord le mettre dans une variable et après l'utiliser. Ou encore, ont ne peut pas utiliser un X fixe et un Y en variable. C'est un peu ridicule de devoir créer une variable "DadaY" juste pour mettre un 0 dedans et l'utiliser comme paramètre après pour ma téléportation.
En gros un truc du genre: scripteleporter(MapID,X,Y) serait parfais. Je pourais ainsi faire: scripteleporter(MapExtérieurID,ScriptPourAvoirJoeurX,ScriptPourAvoirJoeurY)

Enfin. Je sais que c'est beaucoup de requêtes à la fois. Merci d'avance pour votre aide.
Pour info, la plus importante des commandes que je cherche, est celle de trouver la zone marchable la plus proche. Merci.
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Jeu 1 Mar 2012 - 20:44
@XGuarden a écrit:
Première question, connaissez vous un bon moyen de faire nager ou noyer un personnage?
Mais faire nager , tu sais déja le faire ... en testant la zone , tu peux changer le charset que si le heros est dans l'eau . mais un peu plus compliqué pour la chenille , j'avoue .

@XGuarden a écrit:
Niveau programmation, pas trop compliquer. Mais j'ignore comment détecter la passibiliter de la case ou se trouver le joueur.
j'ai cherché un peu et c'est:
$game_map.check_passage($game_player.x, $game_player.y, 0x0f)

Et pour bouger en X , Y :
$game_player.moveto(X,Y)

avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Jeu 1 Mar 2012 - 23:56
Que signifie le 0x0f?

J'ai egallement une autre question.

Je désire modifier la ligne 410 de game_interpreter.
Celle-ci: eval(script)
Quand un script est trop long, un \n est inséré dedans. Ce qui fait planter cette ligne.
Par conséquent, il me suffirait de scanner "script" et de faire enlever tout les \n et la limite de longueur pour un script ne serait qu'un vague mauvais souvenir. Qu'en pensez-vous?

Comme faire effacer une chaîne de caractère(\n) d'une autre(script)?
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Dim 4 Mar 2012 - 13:27
Bon, j'ai fait quelque truc dans mon code pour faire des test et découvrir les possibilité des script. Voici mon problème. J'ai le code suivant:

class Game_Interpreter
def curr_region(id1,id2=-1,id3=-1,id4=-1)
return true if $game_map.region_id($game_player.x,$game_player.y)==id1
return true if $game_map.region_id($game_player.x,$game_player.y)==id2
return true if $game_map.region_id($game_player.x,$game_player.y)==id3
return true if $game_map.region_id($game_player.x,$game_player.y)==id4
end
end

Mans quand je fait l'appel curr_region(4) , ça ne fonctionne pas... J’obtiens une erreur:
Nombre d'argument insuffisant, 0 fournit mais 1 minimum demandé.

Dans le fond, j'essaye simplement de pouvoir vérifier si un joueur est sur l'une des régions désiré.

Je n'ai pas trouvé d’opérateur "or" ou "and". Existe-il???

Merci d'avance!
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Lun 5 Mar 2012 - 13:34
Le meme code chez moi fonctionne parfaitement Smile

Bon, tu as juste oublié de retourner false :
Code:

class Game_Interpreter
def curr_region(id1,id2=-1,id3=-1,id4=-1)
return true if $game_map.region_id($game_player.x,$game_player.y)==id1
return true if $game_map.region_id($game_player.x,$game_player.y)==id2
return true if $game_map.region_id($game_player.x,$game_player.y)==id3
return true if $game_map.region_id($game_player.x,$game_player.y)==id4
return false
end
end

tu peux faire des "and" et des "or" , bien sur .
Code:

return true if $game_map.region_id($game_player.x,$game_player.y)==id1 or game_map.region_id($game_player.x,$game_player.y)==id2
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Lun 5 Mar 2012 - 18:23
EN fait, j'ai trouvé encore mieux! Je ne comprend pas vraiment le code mais il fonctionne...
Code:
class Game_Interpreter
  def curr_region(id1=-1,id2=-1,id3=-1,id4=-1)
    return true if [id1,id2,id3,id4].index($game_map.region_id($game_player.x,$game_player.y))
  end
end
Quelqu'un peu m'expliquer? Ça me gêne un peu d'utiliser du code que je ne comprend pas tout a fait...
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Lun 5 Mar 2012 - 18:35
Alors ...

tu as un tableau : [id1,id2,id3,id4]
et dedans , tu cherches la valeur $game_map.region_id($game_player.x,$game_player.y)

en clair , si tu appeles curr_region(10,4,6)
et que tu es dans la region 6 ,
[id1,id2,id3,id4].index($game_map.region_id($game_player.x,$game_player.y)) donnera 2(ben oui, ça commence à 0 donc 2 est la 3éme position)
si on est dans la rgion 1 , ça renvoie nil .

et là une curiosité que je connaissait pas bien avec les booléen : nil=false , 0,1,2,3...=true .

t'a encore oublié le "return false" à propos Smile
avatar
XGuarden
Membre

Nombre de messages : 38
Age : 34
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Lun 5 Mar 2012 - 19:11
la valeur par défaut de retour c'est pas déja false?
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Mar 6 Mar 2012 - 10:49
Non , c'est nil ...
Mais tu peux le vérifier toi meme avec la console Wink
avatar
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 25
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires ) [Coco' Smile]
Date d'inscription : 13/05/2009

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

le Dim 15 Juil 2012 - 20:22
Inactif, donc locké et déplacé.

Pour une réouverture, envoyer un message dans la boîte aux lettres.
Contenu sponsorisé

Re: Script pour obtenir le ID de la Region ou se trouve le héro.

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum