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

Tutos: Godot : Premier Contact -Partie (...) / Tutos: Godot : Premier Contact -Partie (...) / Making-of: Ma première game jam classée / Jeux: Oracle of Tao / Jeux: Mystic Slayer [Value+!] / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

72 connectés actuellement

11003129 visiteurs
depuis l'ouverture

1016 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Hellsoft

Planète Glutko

RPG Fusion

Level Up!

Le Temple de Valor

Alex d'Or

RPG Maker - La Communauté

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [VX Ace] Multiples informations dans une seule variable.


kvk - posté le 30/01/2013 à 23:20:28 (322 messages postés)

❤ 0

Domaine concerné: Script
Logiciel utilisé: VX Ace
Salut !

Pardon d'abord, je n'ai qu'un faible vocabulaire en matière de programmation, je vais donc devoir faire dans le descriptif pour exposer ma question.

Je n'ai d'experience de scripting qu'un emulateur d'Ultima Online du nom de Sphere. Sur cet emulateur, il y avait la possibilité d'enregistrer de multiples informations dans une variable, en utilisant de l'hexadecimal. Cela s’appelait des "flags".

Le principe est similaire à ce que l'on peut trouver en editant des sauvegardes de "vieux" jeux (Genre Baldur's gate).

En gros, nous avons une variable qui va contenir tous les sujets qu'aura révélé, ou non, un personnage au joueur.
01- Le tueur est un homme.
02- L'arme du crime est un chandelier.
04- Le lieu du meurtre est la bibliothèque.
08- Le Meurtrier est né à Dijon.


Par cette méthode, l'on obtient une valeur unique pour chaque situation :
03 : L'information 01 et 02 ont été révélées.
05 : L'information 04 et 01 ont été révélées.
06 : L'information 04 et 02 ont été révélées.
07 : L'information 04, 02 et 01 ont été révélées.
09 : L'information 08 et 01 ont été révélées.
...
0f : Toutes les informations ont été révélées.

Bref, ça permets de limiter grandement le nombre de variables et, je suppose, le "lag" / ralentissement (En tout cas sur UO c'etait le cas, mais peut être était-ce du au fonctionnement de l’émulateur + le fait que ce soit du online).

Dans tous les cas, c'est plus agréable de travailler avec un nombre limité de variables.

L'on pouvait ensuite consulter si la variable contenait le flag 01 par la ligne "if <variable>& 01", retirer un flag avec "variable &= ~01" et en ajouter avec "variable |=1".

Est-ce qu'il existe quelque chose de similaire sur VX Ace? Mon exploration des scripts - en diagonal je l'avoue - ne m'a pas permis de trouver quoi que ce soit de ce genre.

Je suppose qu'il me faudrait alors scripter un truc un peu sale pour avoir un tel système?

Merci de vos reponses !

"Il est plus facile de professer en paroles un humanisme de bon aloi, que de rendre service à son voisin de palier."


Tasslehoff - posté le 30/01/2013 à 23:49:44 (4854 messages postés)

❤ 0

Disciple de Pythagolf

Mhh.. j'ai pas trop compris comment fonctionne ce système de flags mais je suppose que tu peux utiliser des arrays à la place.
Les arrays sont des variables pouvant contenir plusieurs valeurs numériques ou des chaînes de lettres.

Tu le définis comme ça :
variable = [valeur1, valeur 2, valeur3, ... ]

Pour ensuite modifier la valeur numéro n (n=0 pour la première valeur) :
variable[n] = "prout"
ou
variable[n] = 15

Pour rajouter une ou plusieurs valeurs à la fin :
variable.push(valeur1, valeur2, ...)

Pour savoir si l'une des valeur est égale à x :
if variable.include?(x)

Pour supprimer toutes les valeurs égales à x :
variable.delete(x)

Pour plus d'info tu peux te référer à la documentation Ruby ou à l'aide de RMXP qui est très bien faite.



~~


kvk - posté le 31/01/2013 à 00:28:49 (322 messages postés)

❤ 0

Super, merci pour ces pistes Tasslehoff!

"Il est plus facile de professer en paroles un humanisme de bon aloi, que de rendre service à son voisin de palier."


Joke - posté le 31/01/2013 à 12:44:13 (5066 messages postés)

❤ 0

Tu as que les clés 1, 2, 4, 8 ?

En évent, les variables vont jusqu'à 99999999 (8 chiffres)

Tu peux récupérer les chiffres indépendamment du genre si tu as
A=12345678
Et que tu veux récupérer uniquement le "6", dedans, tu fais :
B = A
B modulo 1000
B diviser par 100

Si tu veux récupérer le "34", dedans, tu fais :
B = A
B modulo 1000000
B diviser par 10000

Du coup, dans une seule variable, tu peux stocker soit :
8 valeurs allant jusqu'à 9 (Par exemple : 1-2-3-4-5-6-7-8)
ou
4 valeurs allant jusqu'à 99 (Par exemple : 12-34-56-78)
ou
2 valeurs allant jusqu'à 999 + 1 allant jusqu'à 99 (Par exemple : 123-456-78)
ou
2 valeurs allant jusqu'à 9999 (1234-5678)

ou tu découpe tes 9 chiffres comme tu veux. (Par exemple : 1-234-56-78)

Note, si tu as du mal à comprendre le modulo, c'est juste le reste d'une division euclidienne :
54321 modulo 1000 => tu imagine "54321=54*1000+321" => 321 c'est le reste de la division euclidienne (ou division entière), 54 étant le résultat de la division.

donc une fois que tu as 321 avec le modulo, reste à diviser par 10 si tu veux 32, ou par 100 si tu veux juste 3

Si tu as "A=123456" et que tu veux changer le 34 par 89, tu fais :

Si tu ne sais pas que c'est 34 :
B = A
B modulo 10000
B / 100
B * 100
A - B
A + 8900

Si tu sais que c'est 34 :
A - 3400
A + 8900

Si ta variable est sous la forme "A=aa-bb-cc-dd"
et que tu veux contrôler si "aa"=25 ET "cc"=13, tu cherche à récupérer A sous la forme "aa-cc" et contrôler s'il est égal à "2513"

Pour passer de "aa-bb-cc-dd" à "aa-cc", tu fais :
B = A
B / 1000000
B * 100
C = A
C modulo 10000
C / 100
B additionner C
condition : Si B = 2513

Ou bien retirer "B*100" et faire deux condition imbriquées :
Si B = 25
--Si C = 13

biloumaster.fr


kvk - posté le 31/01/2013 à 13:11:11 (322 messages postés)

❤ 0

Ouch !
Ca a l'air exactement ce que je recherchais !
Par contre, je vais attendre ce soir dans des conditions plus sereines pour bien comprendre tout ça.

Merci d'avoir pris le temps de me répondre !

"Il est plus facile de professer en paroles un humanisme de bon aloi, que de rendre service à son voisin de palier."


Joke - posté le 31/01/2013 à 13:17:19 (5066 messages postés)

❤ 0

Pour simplifier, tu peux compter le nombre de 0 au modulo et à la division :

A = 12356

tu veux récupérer le 3 ? récupère d'abord 356 => trois derniers chiffres = trois 0 à modulo

tu as 356, tu veux virer 56 ? => deux derniers chiffres = deux 0 à diviser

ce qui fait :
B = A
B modulo 1000
B diviser 100

C'est une méthode sympa en évent, mais après, je te conseille quand même les scripts sauf si ça t'amuse en évent, car tu passe quand même de 6 lignes à une seule dans certains cas. ^^

biloumaster.fr


kvk - posté le 31/01/2013 à 13:24:35 (322 messages postés)

❤ 0

Ha c'est plus clair !
Et oui, dans l’idéal, je préfère aussi passer par les scripts. Ça me semble toujours plus hygiénique.

"Il est plus facile de professer en paroles un humanisme de bon aloi, que de rendre service à son voisin de palier."


Estheone - posté le 31/01/2013 à 17:25:04 (312 messages postés)

❤ 0

Tu peux utiliser les flags sur vx ace aussi. Fais une recherche ctrl+shift+f avec 0x dans les scripts et tu verras que les flags sont utilisés.

Mais si tu tiens vraiment à regrouper des variables binaires je te conseille comme Tasslehoff d'utiliser des tableaux (Array) avec des valeurs true ou false ; c'est bien plus pratique à utiliser et de toute façon les limitations techniques de l'époque d'Ultima Online ne sont plus d'actualité. ;)

Wandering Souls : Jeu complet / Topic sur Oniro


Zeus81 - posté le 31/01/2013 à 18:47:18 (11071 messages postés)

❤ 0

Pour les opérations binaires la syntaxe en Ruby est exactement la même qu'en C.
var |= 1<<n pour mettre le bit n à 1
var &= ~(1<<n) pour mettre le bit n à 0
var ^= 1<<n pour switcher l'état du bit n
Après pour lire un seul bit plutôt que d'utiliser un masque type C c'est mieux de faire var[n] == 1 (ou 0)
A remplacer var par $game_variables[id]


kvk - posté le 05/10/2013 à 11:25:31 (322 messages postés)

❤ 0

Je remonte ce vieux sujet pour partager ce script de Tsukihime, qui fait exactement ce que je cherchais.

Merci encore de votre aide, en tout cas :-]

"Il est plus facile de professer en paroles un humanisme de bon aloi, que de rendre service à son voisin de palier."

Index du forum > Entraide > [VX Ace] Multiples informations dans une seule variable.

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