Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=a10c5fb091290812c15f7dbb38246db7Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Rustinage au game cache
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels
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...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 22/08/07 15:54    Sujet du message: Rustinage au game cache Citer

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 Razz
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à Confused).

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
Cache du jeu - Create a game cache from Map_By_Berak_Cache.w3v
Set GC = (Last created game cache)

Evidemment vous n'êtes pas obligé de créer le game cache avec ce nom de fichier w3v Razz
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
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 23/08/07 18:44    Sujet du message: Citer

au cas où vous ne l'auriez pas compris pour maitriser cet aspect non prévu initialement par blizzou du game cache, il faut avant toute chose maitriser le jass Razz
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 25/08/07 17:00    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Ziliev
Membre récent


Inscrit le: 21 Aoû 2007
Messages: 53
Sujets: 2
Spécialité en worldedit: GUI


MessagePosté le: 25/08/07 18:36    Sujet du message: Citer

Je saisis toujours pas l'avantage que ca a par rapport à un stockage dans une ou plusieurs variables Question 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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

Médailles: 1 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 25/08/07 18:53    Sujet du message: Citer

Je vais tenter d'expliquer en quoi c'est plus avantageux. 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à Confused).

EDIT : Ajout au tuto.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 26/08/07 11:42    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 DJ-JB
Membre actif


Inscrit le: 29 Oct 2007
Messages: 147
Sujets: 23



MessagePosté le: 31/10/07 23:08    Sujet du message: Citer

J'ai une erreur à cette ligne:

local unit x4d0x = I2U(GetStoredInteger(udg_GC,H2I(I2S(trig)),"x4d0x")

Surprised
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

Médailles: 1 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 01/11/07 08:58    Sujet du message: Citer

Euh c'est pour l'exemple évidemment !
Merci de le faire remarquer, j'ai oublié une parenthèse on dirait.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Concours de sorts amusants (Quantité : 1) Créateur de héros (Quantité : 1)

MessagePosté le: 01/11/07 13:51    Sujet du message: Citer

Faudrait que t'ajoutes au moins un évènements à "trig" pour qui se lance. Sinon on voit pas trop l'utilité.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 17/11/07 18:13    Sujet du message: Citer

Tu ne traites pas de la façon d'éliminer les variables du game cache.
Et les paramètres en gui du cache sont inversés par rapport à ceux en jass Rolling Eyes (mission et key)

Need un exemple plus meilleur aussi Razz
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

Médailles: 1 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 17/11/07 20:24    Sujet du message: Citer

Tu sais ce qu'il te reste à faire Troll

Razz
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 17/11/07 20:36    Sujet du message: Citer

Ce n'est pas mon tuto Surprised
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Concours de sorts amusants (Quantité : 1) Créateur de héros (Quantité : 1)

MessagePosté le: 17/11/07 20:49    Sujet du message: Citer

J'ai déjà fourni un exemple sur Weuhzor.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger
 Aesahethr
Membre actif


Inscrit le: 10 Avr 2008
Messages: 193
Sujets: 10



MessagePosté le: 15/04/08 15:39    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 15/04/08 15:47    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com