Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Bantas Anomalie floodiforme
Inscrit le: 21 Aoû 2007 Messages: 1524 Sujets: 37
Médailles: 1 (En savoir plus...)
|
Posté le: 22/08/07 15:54 Sujet du message: Rustinage au game cache |
|
|
Connaissance conseillée : Pointeurs et changement de types (réexpliqué ici, à l'époque le tuto n'était pas rétabli)
Qu'est-ce que c'est et à quoi ça sert ?
Le rustinage au game cache consiste à stocker des informations dans le game cache pour les réutiliser plus tard, à la façon des variables. Là où c'est différent des variables, c'est qu'il va être possible de stocker toutes sortes d'informations de façon illimitée (enfin dans la limite de la RAM des PC), et en les récupérant avec une chaîne de texte. De plus des variables ne peuvent pas être créées en cours de jeu
Concrètement, il permet de multi-instancier facilement les actions dites "génériques" (qui sont répétées plusieurs fois au cours de la partie, comme les sorts). Pour certaines actions, comme les triggers par exemple, vous voulez parfois retenir des valeurs entre la création et le déclenchement. Pour cela, il est nécessaire d'utiliser une variable.
Simplement, cette variable sera réutilisée si votre action est refaite pendant l'attente, et les actions de la première éxécution seront brouillées. Avec le cache, on donne en quelques sortes le "nom" des déclencheurs/timers/unités aux variables, et elles ne seront utilisées que pour cette éxécution de la variable ! C'est un peu les variables locales inter-fonctions (houla ça veut rien dire ce que j'écris là ).
De quoi on a besoin pour s'en servir ?
Tout d'abord, il vous faut une variable de type Cache du jeu (que j'apellerais GC). Vous devez créer le cache à l'initialisation de la partie de la façon suivante : Gui: | Trigger: Actions |
Evidemment vous n'êtes pas obligé de créer le game cache avec ce nom de fichier w3v
Vous aurez ensuite besoin de fonctions de conversion (assez nombreuses, mais à présent je n'en ai besoin que d'une seule avec le vJass), que vous construirez de la façon suivante : Jass: | function H2I takes handle h returns integer
return h
return 0
endfunction | Cette fonction permet de convertir un pointeur (handle) en entier (integer), et c'est, selon moi, la pierre angulaire du rustinage. Vous aurez sûrement besoin d'autres fonctions, tel que : Jass: | function I2U takes integer i returns unit
return i
return null
endfunction | Ce genre de fonction vous permettra de récupérer vos données que vous avez stocké dans le game cache (enfin de les reconvertir dans leur type d'origine).
En pratique
Vous y voilà, vous êtes fin prês, je vais maintenant faire un exemple de comment utiliser ce fameux rustinage : Jass: | function PeuImporteCEstUnExemple takes nothing returns nothing
local trigger trig = CreateTrigger()
local unit x4d0x = GetHacker() //c'est juste pour l'exemple
call StoreInteger(udg_GC,H2I(I2S(trig)),"x4d0x",H2I(u)) //Avec cet action, je viens de stocker l'unité, sous forme d'entier, dans le cache. Le premier argument est le cache où stocker, le second argument est le "dossier" du cache dans lequel je stocke. Cet argument est ici le pointeur converti en entier (grâce à H2I, montrée plus haut) puis converti en texte. Ce dossier sera donc uniquement utilisé pour le déclencheur. Le 3e argument est le nom du "fichier" à stocker. Le 4e argument, enfin, est la donnée à stocker, ici une unité convertie en entier (grâce à H2I, souvenez vous que les unités et autres destructibles sont des pointeurs).
//Ajout des évenements à trig
call TriggerAddAction(trig,function SecondeFonctionDExemple)
endfunction |
Je viens de vous montrer comment stocker des données dans le game cache en utilisant un pointeur, voici maintenant comment récupérer vos données. Jass: | function SecondeFonctionDExemple takes nothing returns nothing
local trigger trig = GetTriggeringTrigger()
local unit x4d0x = I2U(GetStoredInteger(udg_GC,H2I(I2S(trig)),"x4d0x")) //Avec cet action, on vient de récupérer notre donnée sous forme d'entier, puis on l'a reconverti en unité avec I2U. Le premier argument est le cache, le 2nd le "dossier", le 3e le nom du "fichier".
call LynchagePublic(x4d0x) // :twisted:
endfunction |
EDIT : N'oubliez pas que le game cache est plus consommateur de mémoire que les variables ! utilisez-le avec parcimonie.
EDIT (09/08/09) : Avec le patch 1.24, la fonction GetHandleId est introduite. Il s'agit d'un equivalent a H2I, mais en native. De toutes facons, le return bug utilise pour ce genre de fonctions de conversion est sense avoir ete repare. De plus, l'utilisation faite du cache ici est sense etre prise en charge par les hashtables, cependant des tests sont effectuees sur celles ci a l'heure ou j'ecris ces lignes, et il parait qu'elles sont peu stables. _________________
Dernière édition par Bantas le 08/08/09 23:45; édité 4 fois |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 25/08/07 17:00 Sujet du message: |
|
|
sinon on est pas obligé de donner un tel nom au game cache.
Du moment que la chaîne n'est pas vide _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 25/11/07 17:50; édité 1 fois |
|
Revenir en haut |
|
|
Ziliev Membre récent
Inscrit le: 21 Aoû 2007 Messages: 53 Sujets: 2 Spécialité en worldedit: GUI
|
Posté le: 25/08/07 18:36 Sujet du message: |
|
|
Je saisis toujours pas l'avantage que ca a par rapport à un stockage dans une ou plusieurs variables Si c'est plus lourd quel est l'intérêt ? Dans les variables la place ne manque pas non plus, les déploiement dépassent les 800 possibilités ... _________________
|
|
Revenir en haut |
|
|
Bantas Anomalie floodiforme
Inscrit le: 21 Aoû 2007 Messages: 1524 Sujets: 37
Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 26/08/07 11:42 Sujet du message: |
|
|
8192 possiblitées exactement (0 à 8191)
Sinon l'intérêt c'est la facilité de l'utilisation des variables , tu peux meme faire une variable sous forme de texte _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
DJ-JB Membre actif
Inscrit le: 29 Oct 2007 Messages: 147 Sujets: 23
|
|
Revenir en haut |
|
|
Bantas Anomalie floodiforme
Inscrit le: 21 Aoû 2007 Messages: 1524 Sujets: 37
Médailles: 1 (En savoir plus...)
|
Posté le: 01/11/07 08:58 Sujet du message: |
|
|
Euh c'est pour l'exemple évidemment !
Merci de le faire remarquer, j'ai oublié une parenthèse on dirait. _________________
|
|
Revenir en haut |
|
|
Brissou de Mourièssou Créateur de sorts, depuis 1936.
Inscrit le: 30 Aoû 2007 Messages: 1510 Sujets: 26 Spécialité en worldedit: Développer des jeux vidéos pour le fun, donc world edit c'est comme faire une addition. Médailles: 2 (En savoir plus...)
|
Posté le: 01/11/07 13:51 Sujet du message: |
|
|
Faudrait que t'ajoutes au moins un évènements à "trig" pour qui se lance. Sinon on voit pas trop l'utilité. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
Bantas Anomalie floodiforme
Inscrit le: 21 Aoû 2007 Messages: 1524 Sujets: 37
Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
Brissou de Mourièssou Créateur de sorts, depuis 1936.
Inscrit le: 30 Aoû 2007 Messages: 1510 Sujets: 26 Spécialité en worldedit: Développer des jeux vidéos pour le fun, donc world edit c'est comme faire une addition. Médailles: 2 (En savoir plus...)
|
Posté le: 17/11/07 20:49 Sujet du message: |
|
|
J'ai déjà fourni un exemple sur Weuhzor. _________________
|
|
Revenir en haut |
|
|
Aesahethr Membre actif
Inscrit le: 10 Avr 2008 Messages: 193 Sujets: 10
|
Posté le: 15/04/08 15:39 Sujet du message: |
|
|
je ne maitrise pas le Jass (du tout ^^) mais cette histoire de game cache peut servir pour le repop des monstres sur une map type campagne bonus alors ? ou c'est vraiment trop lourd en mémoire ? parce que ca m'intéresserai fortement dans ce cas xD _________________
|
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
Posté le: 15/04/08 15:47 Sujet du message: |
|
|
Roh j'ai fait une map exemple y'a à peine une semaine pour ça -_-'
Cherche un peu tu devrais trouver. _________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain » |
|
Revenir en haut |
|
|
|