|
|
Auteur | Message |
---|
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: [VX] Variables locales Mer 25 Juin 2008 - 18:48 | |
| Voilà. Pour ceux qui voudrait pouvoir utiliser des variables locales (une valeur à l'intérieur d'un événement, habituellement un entier), voilà un petit script qui le permet et qui en plus, permet de l'afficher dans un message . - Code:
-
#=================================================================== # Auteur : Miraino Hikari # Version : 1.0 (25juin2008) # Sert à ajouter des variables locales dans les events. # Pour afficher la valeur dans un message, # \SV[MAPID,EVENTID,VARID] # où MAPID est l'ID de la carte où se trouve l'événement # EVENTID est l'ID de l'event # VARID est l'ID de la variable locale (entier ou chaîne) # # exemples : # \SV["B"] affiche la variable B de l'event courant # \SV[4] affiche la variable 4 de l'event courant # \SV[1,7,"A"] affiche la variable A de l'event 7 de la carte 1 # \SV[2,4,5] affiche la variable 5 de l'event 4 de la carte 2 # # Des instructions concernant l'affectation de ces variables sont # présentes sur http://rpg-maker-vx.bbactif.com/ #===================================================================
# ID des variables de contrôl utilisé lors de l'affichage de la valeur dans un message # facultatif si la valeur n'est jamais affichée. $MAP_ID_MESSAGE_VAR = 95 $EVENT_ID_MESSAGE_VAR = 96
class Game_SelfVars #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize @data = {} end #-------------------------------------------------------------------------- # * Get Self Switch # key : key #-------------------------------------------------------------------------- def [](key) if @data[key] == nil return 0 else return @data[key] end end #-------------------------------------------------------------------------- # * Set Self Switch # key : key #-------------------------------------------------------------------------- def []=(key, value) @data[key] = value end end
class Scene_Title < Scene_Base alias orig_obj_creation_SelfVars create_game_objects def create_game_objects orig_obj_creation_SelfVars $game_self_vars = Game_SelfVars.new end end
class Game_Event < Game_Character def get_id return @id end def get_map return @map_id end end
class Window_Message < Window_Selectable alias conv_sp_char_SelfVars convert_special_characters def convert_special_characters conv_sp_char_SelfVars #convertie les self varaibles de type "string" par référence à un autre event @text.gsub!(/\\SV\[(\d+),(\d+),\"(\D+)\"\]/i) { $game_self_vars[[$1.to_i,$2.to_i,$3.to_s]] } #convertie les self varaibles de type "integer" par référence à un autre event @text.gsub!(/\\SV\[(\d+),(\d+),(\d+)\]/i) { $game_self_vars[[$1.to_i,$2.to_i,$3.to_i]] } #convertie les self varaibles de type "string" sur l'event courant @text.gsub!(/\\SV\[\"(\D+)\"\]/i) { $game_self_vars[[$game_variables[$MAP_ID_MESSAGE_VAR].to_i,$game_variables[$EVENT_ID_MESSAGE_VAR].to_i,$1.to_s]] } #convertie les self varaibles de type "integer" sur l'event courant @text.gsub!(/\\SV\[(\d+)\]/i) { $game_self_vars[[$game_variables[$MAP_ID_MESSAGE_VAR].to_i,$game_variables[$EVENT_ID_MESSAGE_VAR].to_i,$1.to_i]] } end end Comme vous voyez, ce code est très court. Maintenant, passons à comment donner une valeur à ces variables. Ici, je donne un exemple pour un compteur de visite. Ce code doit être placer à l'intérieur de l'event. - Code:
-
#préparation event = get_character(0) m_v = $MAP_ID_MESSAGE_VAR e_v = $EVENT_ID_MESSAGE_VAR $game_variables[m_v]= map = event.get_map $game_variables[e_v]= id = event.get_id #affectation @cle = [map, id, "A"] $game_self_vars[@cle]+=1 La section préparation est toujours la même peu importe ce que vous voulez faire avec la variable. Vous ne devez rien changer dans cette section. La section affectation est l'endroit où vous changer vos trucs. key = [map, id, "A"] est la clé de la variable local. Les variables locales sont enregistrées dans un hash au même titre que les interrupteur locaux. Tout ce que vous avez à changer dans cette ligne est l'identificateur "A" pour l'identificateur que vous voulez. Il peut s'agir d'un entier (0-9999) ou d'un string entouré par des apostrophes. Voici quelques exemples pour éclaircir cette explication. - Spoiler:
key = [map, id, 1] @cle = [map, id, 2] @cle = [map, id, 321] @cle = [map, id, "A"] @cle = [map, id, "B"] @cle = [map, id, "coco"]
Finalement $game_self_vars[@cle]=$game_self_vars[@cle]+1 vous devez changer ce qu'il y a après le = pour avoir la valeur que vous voulez. Ici, je fait que la variable augmente de 1 à chaque visite, mais vous pouvez lui faire faire n'importe quoi. Ensuite, pour afficher dans un message, et bien, vous n'avez qu'à faire un texte du genre Tu m'as parlé \SV["A"] fois. et le texte affichera la valeur de la variable locale "A" dans le texte. C'est tout. Vous pouvez aussi afficher la valeur d'une variable locale d'un autre event en utilisant simplement \SV[mapID,eventID,"A"]. NOTE IMPORTANTE : Dans la version actuelle, au début de chaque event il est important que la section préparation soit présente si vous voulez modifier ou afficher la valeur sinon, c'est la variables précédente qui sera affectée/affichée. Je vais tenter de modifier ça un jour, mais pour le moment, assurer vous de faire attention à ce détail.
Dernière édition par MirainoHikari le Ven 27 Juin 2008 - 2:34, édité 2 fois |
|
| |
Seigneur Lv.18
Age : 31 Inscrit le : 06/06/2008 Messages : 2005
| Sujet: Re: [VX] Variables locales Mer 25 Juin 2008 - 18:53 | |
| Merci bien du script Miraino Hikari ! |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Mer 25 Juin 2008 - 19:04 | |
| Super ! Mais est-il possible par contre d'avoir une condition avec ce script ?!?
Et pourrez tu mettre aussi le script pour avoir plus d'interrupteur locaux ? |
|
| |
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
| Sujet: Re: [VX] Variables locales Mer 25 Juin 2008 - 19:15 | |
| Bouh tu nous a pas fait de pub...C'est génial . Comme je l'ai dit avant... Je teste dés que je peux. Mais je te rajoute tout de suite tes beaux points =). |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Mer 25 Juin 2008 - 20:05 | |
| - La Meche a écrit:
- Super ! Mais est-il possible par contre d'avoir une condition avec ce script ?!?
Et pourrez tu mettre aussi le script pour avoir plus d'interrupteur locaux ? Oui pour les conditions, il n'y a rien de plus simple. Tu as même plusieurs possibilités. Le première, tu affectes la valeur de la variable locale à une variable de contrôle temporaire et tu fait ton teste normalement avec la variable de contrôle. La deuxième possibilité, plus propre, c'est de faire ton teste via la fonction script de tes conditions. Tu mets $game_self_vars[@cle]==3 par exemple, si après 3 occurences tu fais dire «Laisse-moi tranquile» par le NPC et tu fait tes branches normalement. Je te mets un exemple de ce que ça l'air... Voilà. Le script pour les interrupteur locaux est déjà dans les scripts de base. Tu n'as qu'à faire la même chose, mais avec $game_self_switches plutot que $game_self_vars. La seule différence, c'est que tu ne peux pas afficher la valeur d'un interrupteur dans le texte. EDIT: Il est important de mettre un @cle et non pas juste key comme il est indiquer sur l'image. key est détruite dès que le script est terminer alors que @cle existe pour toute la durée de la page de l'événement. Je ne pouvais pas mettre @key car cette variable existe déjà et il y a un conflit. Donc essayer et redonner moi des nouvelels.EDIT2: La longueur des lignes est extrèmement importante dans les events. Si votre ligne dépasse l'espace alouer, le script ne marche plus. Essayer de trouver une méthode alternative de faire ce que vous voulez. Par exemple, remplacer $game_self_vars[@cle]=$game_self_vars[@cle]+1 peut facilement être remplacer par $game_self_vars[@cle]+=1 qui donne le même résultat et qui prends moins d'espace sur la ligne.
Dernière édition par MirainoHikari le Jeu 26 Juin 2008 - 14:29, édité 3 fois |
|
| |
Prêtre Lv13
Age : 32 Inscrit le : 19/06/2008 Messages : 877
| Sujet: Re: [VX] Variables locales Mer 25 Juin 2008 - 20:27 | |
| Testé et approuvé ! Hikari : le Maître des scripts ! :chou: Bien joué ! |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 6:32 | |
| Merci beaucoup !
Mais serait-il possible de remplacer une variable local par un nombre alétoire entre 1 et 3 par exemple ? Et aussi peut on retirer une valeur d'une variable local par une valeur d'une variable commune ? Et puis comme je suis pas doué en script je fais d'abors j'additionner la variable local de 50, aprés dans un evenement en commun je fais soustraire la variables local de 10 et je mais une condition comme quoi si la variable local est <= à 0 alors le monstre meut mais une fois l'attaque faite le monstre meurt alors que je devrai lui taper dessus cinq fois ! (Je sais je suis trés lourd !!!) |
|
| |
Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 9:00 | |
| Merci à toi Hikari (hey, j'ai pas dit Mirai!!!), je pense que ce script va aider beaucoup de personnes, dont moi ^^ |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 12:20 | |
| C'est un plaisir d'aider comme ça. D'ailleur, je pense faire un tuto de script/event avancé. Mes recherches ont mené à des possibilités pas mal cool.
À suivre...
:haha: |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 13:48 | |
| C'est bizarre moi ça bug un peu ! |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 14:02 | |
| Oui avec Gothor on s'est aperçu qu'il manquait de détail dans mon explication. J'ai fais l'edit. |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 17:54 | |
| Tu as bien dit que l'on pouvait activé de loin les interrupteur locaux ?!?
Et bien moi j'ai rentré
#selfswitch key = [15, 6, "B"] $game_self_switches[key] = true Dans inserer un script et il me marque une erreur SyntaxError occured while running script
Tu peut m'aider ?!? |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 18:03 | |
| Premièrement, j'ai fait un edit de mon script qui évite bien des erreurs. Remplace tous les key par @cle (pas @key car cette variable existe déjà) et réessaie. Moi je viens de faire un test avec un coffre qui était sur une autre map que l'event qui l'activait et ça fonctionné. Ah oui, aussi, assure-toi que le # de la map et de l'event sont correct... |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Jeu 26 Juin 2008 - 18:21 | |
| J'ai refait exactement comme toi mais rien ne se passe il me dit toujour la même erreur !
Edit : a non sa marche désolé |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Ven 27 Juin 2008 - 2:26 | |
| - La Meche a écrit:
- Merci beaucoup !
Mais serait-il possible de remplacer une variable local par un nombre alétoire entre 1 et 3 par exemple ? Et aussi peut on retirer une valeur d'une variable local par une valeur d'une variable commune ? Et puis comme je suis pas doué en script je fais d'abors j'additionner la variable local de 50, aprés dans un evenement en commun je fais soustraire la variables local de 10 et je mais une condition comme quoi si la variable local est <= à 0 alors le monstre meut mais une fois l'attaque faite le monstre meurt alors que je devrai lui taper dessus cinq fois ! (Je sais je suis trés lourd !!!) Pour donner une valeur aléatoire, rien de plus simple. Utilise la fonction rand(X) ou X est la base du nombre aléatoire que tu désires. rand renvoie une valeur entre 0 et X-1. Donc rand(3) renvoie une valeur entre 0 et 2. Si tu veux une valeur entre 1 et 3, fait $game_self_vars[@cle]=rand(3)+1.Pour affecter une valeur d'une variable de contrôle (je ne sais même plus à quoi ça sert ça finalement :haha:) en écrivant $game_variables[X]=$game_self_vars[@cle] ou faire l'inverse (affecter la valeur d'une variable de contrôle à une variable locale) en écrivant $game_self_vars[@cle]=$game_variables[X] où X est l'ID de la variable de controle. Pour soustraire 10 points de vie, fait quelque chose du genre $game_self_vars[@cle]-=10 et ta condition ressemblera à $game_self_vars[@cle]<=0J'espère que c'est suffisemment clair pour tout le monde (car en fait, j'avais répondu à La Meche en message privé) ========================== - Gothor a écrit:
- Merci à toi Hikari (hey, j'ai pas dit Mirai!!!), je pense que ce script va aider beaucoup de personnes, dont moi ^^
Disons que le fait de répondre à La Meche m'a fait oublier de te répondre comme je le voulais cher Gothor. Un edit spécialement pour toi. MERCI, enfin tu m'a appeler Hikari. Continue cette bonne habitude :batte:. Pour ce qui est du script, tu me connais, je suis là pour être utile à la communauté du forum . |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Lun 6 Oct 2008 - 16:31 | |
| Bon désolé du gros necropost mais j'ai encore (et oui encore >< ) un probléme ! Lorsque je crée un nouveau interrupteur local comme ça - Code:
-
$game_self_switches[@cleX]=true Donc là il est activé Aprés je crée un nouvelle page dans le même even et lorsque je met - Code:
-
$game_self_switches[@cleX]=true Sa marche ! Logique ! Mais lorsque j'enléve - Code:
-
$game_self_switches[@cleX]=true De la premiére page et ben la condition dans la 2eme page s'effectu quand même Oo alors que je n'ai pas dit à "X" de s'activer ! Donc voila mon bug ! Si vous pouviez me repondre! |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Lun 6 Oct 2008 - 17:07 | |
| T'as pensé à mettre false pour désactiver au lieu de true ?? Sinon, peut-être que je ne comprends pas bien ta question. Aussi, assure toi que ta page est bien activer uniquement lorsque le selfswitch est activé. |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Lun 6 Oct 2008 - 17:32 | |
| Eh tu peut me faire un exemple ? Car j'active dans la page 1 et la condition et dans la 2 Donc si je comprend bien led interrupteur locaux sont activé des que tu les créer ? |
|
| |
Voyageur Lv.10
Age : 32 Inscrit le : 21/08/2008 Messages : 496
| Sujet: Re: [VX] Variables locales Lun 6 Oct 2008 - 17:36 | |
| D' apres moi page 1 sans condition à la fin de l evenement tu active interupteur un interupteur local(ex: A) et sa enmene sur la page 2 si il y a condition interupteur A activé. page 2 condition interupteur A activé à la fin de l' évenement tu désactive interupteur A et tu va à la page 1. Sinon j' ai mal compri ta question -_-". |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Lun 6 Oct 2008 - 17:38 | |
| Eh je sais ça >< On parle d'interrupteur local rajouté ! Qui sont créé grace à ce script ! |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Lun 6 Oct 2008 - 18:31 | |
| En passant, tu parles d'interrupteur local dans le post des variables locales, mais bon enfin, vu que c'est similaire, je ne te tiendrai pas rigueur.
Tu parles par exemple si tu crées l'interrupteur G. Celui-là, tu dois le gerrer manuellement avec une branche conditionnelle (manuellement en script avec IF ou le système de l'editeur, condition SCRIPT). Un interrupteur a comme valeur par défaut NULL qui n'est ni vrai, ni faux, mais indéterminé, ce qui peux causer des ennuies. L'éditeur les mets par défaut à False, mais si tu en crée une sans lui donner de valeur, théoriquement, tu ne peux pas savoir la valeur qu'il aura (quoi que selon moi, RMVX doit les interpréter comme étant false (OFF)).
Si tu active manuellement un interrupteur local avec ce script pour activer à distance disons, assure toi de la syntaxe. L'autre truc, si tu active ou désactive un interrupteur local dans une page d'event, la page doit finir de s'exécuter avant de reprendre une nouvelle page, ce qui peut aussi être la cause de ton bug. Essaye de redéfinir un peu mieux l'état de tes pages d'event et de décrire plus clairement ce qui se produit. |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Mar 7 Oct 2008 - 8:39 | |
| Donc voila mon even Ici j'active "Nourriture" et desactive "Famine" Ici je met mes condition, et là la condition 2 se déroula alors que l'interrupteur "Famine" est désactivé, mais la condition 1 s'execute. Là je ne dit rien à l'interrupteur local "Nourriture", mais dans la page la condition 1 s'execute alors que "Nourriture" n'est ni active ni désactivé ! Voilà mon probléme ! J'aimerai que quand les interrupteur sont désactivé les conditions ne s'execute pas ! |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Mar 7 Oct 2008 - 14:52 | |
| LOL ok. Ton erreur est simple. Tes @cleX n'ont aucune valeur. Il faut que tu leur donne une valeur. N'oublie pas que les @cle ont une syntaxe spéciale. [MAP_ID, EVENT_ID, Key_ID]. |
|
| |
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: [VX] Variables locales Mar 7 Oct 2008 - 15:28 | |
| Donc ici pour avoir un interrupteur X dans l'even 1 Je met page 1 : $game_self_switches[[1, 1, "X"]]=true
Et dans la page de cette même even : condition : $game_self_switches[[1, 1, "X"]]==true
C'est bien ça ? |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Variables locales Mar 7 Oct 2008 - 16:16 | |
| Oui quelque chose dans ces eaux là. Un truc aussi en passant. Grâce à cette méthode, on peut affecter les varialbes/interrupteurs locaux des personnages. @cleActeur1 = [0,1,NomVar].
Mais oui. Si tu cherche l'interrupteur local X de l'event 1 de la map 2, tu écriras @cleX = [2,1,'X']. |
|
| |
| Sujet: Re: [VX] Variables locales | |
| |
|
| |
|