Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
339 connectés actuellement
30741691 visiteurs depuis l'ouverture
2064 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
kvk -
posté le 30/01/2013 à 23:20:28 (322 messages postés)
| | 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 (5274 messages postés)
| 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)
| | 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 (5090 messages postés)
| Bilouteux fou | 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, mon joli site ouèb tout bô tout frai ! |
kvk -
posté le 31/01/2013 à 13:11:11 (322 messages postés)
| | 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 (5090 messages postés)
| Bilouteux fou | 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, mon joli site ouèb tout bô tout frai ! |
kvk -
posté le 31/01/2013 à 13:24:35 (322 messages postés)
| | 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)
| | 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)
| | 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)
| | 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.
|
|
|