Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 06/01/08 19:43 Sujet du message: Variables locales |
|
|
L'ajout de variables locales se divisent en plusieurs parties:
- Interface
- Compiler
Au niveau de l'interface ce sont les fichiers:
UI\TriggerData.txt
UI\TriggerStrings.txt
Qui sont modifiés afin d'ajouter avec les actions de catégories générales (tel que Set, comment, if/then/else, ...) l'action pour déclarer une variable locale.
Celle-ci prend un paramètre: on choisis parmis la liste de variable globale laquelle on veut déclarer locale.
NB: A la base il y avait deux paramètres: le type et le nom (entré au clavier), mais elle a été abandonné étant donné que WE ne gère pas le type AnyType.
En GUI cela donne par exemple:
Gui: | Trigger: Local maVar Set maVar = 5 |
Traduis en Jass cela donne
Jass: | call #VLR( udg_maVar )
set udg_maVar = 5 |
C'est alors qu'intervient le compileur:
Il parse le fichier war3map.j généré afin de récupéré premièrement les variables globales générés (udg: User Defined Global (quelque chose de ce genre)) c'est à dire leur nom, type, est déploiement, valeur par défaut. Ensuite il parse les fonctions afin de remplacer les
Jass: | call #VLR( udg_%nomvar% ) |
par
Jass: | local %type% [array] udl_%nomvar% [= %valeurDefaut%] |
et il remplace toutes les occurrences par le nouveau nom de variable
ce qui résulte de notre exemple:
Jass: | local integer udl_maVar
set udl_maVar = 5 |
Vous avez donc les mêmes possibilités au niveau des variables locales qu'en Jass car vous pouvez en déclarer plusieurs et vous pouvez utilisez les variables locales déploiements.
Sources:
http://ayndlc.free.fr/guihelper/localvar/ _________________
Dernière édition par Ayane le 23/06/08 17:15; édité 2 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 |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 06/01/08 22:18 Sujet du message: |
|
|
si udg signifie bien quelque chose d'approchant à User Defined Global, alors udl est le plus approprié: User Defined Local. _________________
|
|
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: 07/01/08 21:23 Sujet du message: |
|
|
et c'est dispo ou pas encore ? _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 07/01/08 21:31 Sujet du message: |
|
|
Comme indiqué dans les nouvelles le système est fini, mais avant de le rendre disponible il faut que je finisse les systèmes nécessaires à l'intégration dans Grimoire.
En attendant je vais poster le code-source. _________________
Dernière édition par Ayane le 07/01/08 22:08; édité 1 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...)
|
Posté le: 07/01/08 22:02 Sujet du message: |
|
|
euh question bête ca marchera avec grimoire ? _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 07/01/08 22:07 Sujet du message: |
|
|
Arf je me suis trompé, c'est incorporé dans Grimoire et non WE Helper.
J'ai ajouté le lien vers les fichiers sources. _________________
|
|
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: 07/01/08 22:08 Sujet du message: |
|
|
: smiley de grand soulagement et de joie débordante _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 23/06/08 13:00 Sujet du message: |
|
|
Le parseur a été testé sur plusieurs situations (c'était déjà le cas mais quelques bogues ont été trouvés et corrigés).
Voici un exemple de l'entrée et du résultat:
war3map.w3j: ce qui est généré par l'éditeur
Code: | // Teste du VLR
globals
const boolean defaultBool = true
// Déclaration des globales GUI
string udg_myVar1 = "dada le cheval"
integer array udg_myVar2
endglobals
// Fonction actions d'un déclencheur GUI
function a takes nothing returns nothing
call #VLR(udg_myVar1)
call #VLR(udg_myVar2)
set udg_myVar1 = "Hello world!!! héhé"
set udg_myVar2[0] = 0
set udg_myVar2[1] = udg_myVar2[0] + 5
set udg_myVar1 = udg_myVar1 + "udg_myVar1"
endfunction
globals
boolean udg_myBool = defaultBool
endglobals
function b takes nothing returns nothing
call #VLR(udg_myBool)
set udg_myVar1 = "dodo"
set udg_myBool = true
endfunction |
Le script qui en résulte une fois passé dans le parseur
Code: | //-> Code modified by VLR
// Teste du VLR
globals
const boolean defaultBool = true
// Déclaration des globales GUI
string udg_myVar1 = "dada le cheval"
integer array udg_myVar2
endglobals
// Fonction actions d'un déclencheur GUI
function a takes nothing returns nothing
local string udl_myVar1 = "dada le cheval"
local integer array udl_myVar2
set udl_myVar1 = "Hello world!!! héhé"
set udl_myVar2[0] = 0
set udl_myVar2[1] = udl_myVar2[0] + 5
set udl_myVar1 = udl_myVar1 + "udl_myVar1"
endfunction
globals
boolean udg_myBool = defaultBool
endglobals
function b takes nothing returns nothing
local boolean udl_myBool = defaultBool
set udg_myVar1 = "dodo"
set udl_myBool = true
endfunction |
_________________
|
|
Revenir en haut |
|
|
profet Instanton Gravitationnel Singulier
Inscrit le: 21 Aoû 2007 Messages: 1633 Sujets: 53 Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...) Médailles: 2 (En savoir plus...)
|
Posté le: 23/06/08 13:54 Sujet du message: |
|
|
Est il nécessaire de déclarer une variable globale ayant le meme nom pour utiliser les variables locales dans les actions ? _________________
Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70% |
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 23/06/08 14:28 Sujet du message: |
|
|
Oui, je n'ais pas trouvé de solution plus simple, autrement il faudrait crocheter l'interface afin de pouvoir choisir une variable locale et que cela génère le code Jass approprié, chose complexe.
A la place il s'agit juste d'une action ajoutée qui fait choisir une variable, cette action génère en Jass un appel à la fonction #VLR (qui n'existe pas). Le parseur interprête les déclaration de variables globales (commençant par udg_) afin de récupérer le type, le nom, la valeur par défaut, ...; lorsqu'il tombe sur une ligne call #VLR, il la remplace par la déclaration locale puis va ensuite renommer toutes les occurrences de l'ancien nom de variable par le nouveau jusqu'à ce qu'il tombe sur un endfunction. Le fonctionnement est donc assez simple et ne pose pas vraiment de soucis à l'utilisateur. _________________
|
|
Revenir en haut |
|
|
profet Instanton Gravitationnel Singulier
Inscrit le: 21 Aoû 2007 Messages: 1633 Sujets: 53 Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...) Médailles: 2 (En savoir plus...)
|
Posté le: 23/06/08 15:01 Sujet du message: |
|
|
C'est vachement moins intéressant du coup ;( _________________
Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70% |
|
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: 23/06/08 16:46 Sujet du message: |
|
|
Est ce que comme le plugin de de UMSWE tu utilises les fichiers UI\TriggerData.txt et UI\TriggerStrings.txt originaux ou est il nécessaire que ces fichiers soient dans un dossier UI à la racine de warcraft3 ? _________________
|
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 23/06/08 17:23 Sujet du message: |
|
|
Justement je voulais faire que cela se serve des TriggerData.txt et TriggerStrings.txt originaux et que je n'ais que les ajouts à déterminer. J'allais donc coder quelque chose pour cela (comme dit dans quelques postes), lorsque j'ai vu que pour Umswe il l'avait recodé en Lua et qu'ils utilisaient ce système. Donc actuellement j'analyse le code de umswe pour faire de même.
@Profet: Pourquoi est-ce beaucoup moins intéressant? _________________
|
|
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 |
|
|
|