Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 01:16 Sujet du message: Variable et événement / Déplacement région
Salut salut !
Bon j'ai deux problèmes
Le premier :
J'ai deux déclencheurs :
Gui:
Trigger:
Mine activation Evénements Conditions
Actions
Effet spécial - Destroy MineEffect Déclencheur - Turn on Mine declenche <gen> Set MinePoint = (Random point in Apparition monstres <gen>) Région - Center Mine <gen> on MinePoint Effet spécial - Create a special effect at (Center of Mine <gen>) using unitscreepsGoblinLandMineGoblinLandMine.mdl Set MineEffect = (Last created special effect)
Gui:
Trigger:
Mine declenche
Evénements
Unité - A unit enters Mine <gen>
Conditions
(Owner of (Triggering unit)) Différent de Joueur 12 (Marron)
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
((Triggering unit) is Un héros) Egal à TRUE
Alors - Actions
Unité - Set life of (Triggering unit) to ((Vie of (Triggering unit)) - ((Vie Max of (Triggering unit)) x 0.20)) Unité - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) - ((Mana Max of (Triggering unit)) x 0.20))
Sinon - Actions
Unité - Kill (Triggering unit)
Effet spécial - Destroy MineEffect Effet spécial - Create a special effect at MinePoint using war3mapImportedNewMassiveEX.mdx Effet spécial - Destroy (Last created special effect) Custom script: call RemoveLocation(udg_MinePoint) Déclencheur - Turn off (This trigger)
Dans le premier je déplace la région Mine mais apparemment ce déplacement n'est pas pris en compte dans l'événement du second trigger. J'ai fais quelques test et la région est bien déplacée mais l'événement du déclencheur utilise la position initiale de la région. J'aimerai savoir comment corriger ça.
Le second :
Est ce possible d'utiliser une variable dans un événement ? Si oui comment ?
Merci _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Inscrit le: 21 Avr 2008 Messages: 1607 Sujets: 81 Spécialité en worldedit: Utiliser le travail des autres Médailles: 3 (En savoir plus...)
Posté le: 21/11/10 11:04 Sujet du message:
Salut, lorsque tu fais "Set MinePoint" tu stockes le point qui représente le centre de ta région, pas le centre de ta région.
Il faut que tu redéfinisses le point que tu vas utiliser. _________________
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 11:44 Sujet du message:
soraiku :
Les deux questions sont liées. Si je peux pas utiliser de variable dans mes événements la variable sera inutile. Surtout qu'avec les région on peut pas faire l'équivalent de :
Gui:
Trigger:
Déclencheur sans titre 001
Evénements
Unité - A unit Meurt
Conditions
(Unit-type of (Triggering unit)) Egal à variable
Enfin il me semble.
Crowolf a écrit:
Salut, lorsque tu fais "Set MinePoint" tu stockes le point qui représente le centre de ta région, pas le centre de ta région.
Il faut que tu redéfinisses le point que tu vas utiliser.
Désolé mais je ne comprend ni le probleme ni la solution. Le point ne me sert qu'à déplacer la région donc je vois pas à quoi ça peut servir de stocker le centre de la région. _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 21/11/10 12:44 Sujet du message:
Comme je suis de bonne humeur, je vais tout t'expliquer comment ça marche et je n'omettrai aucun détail technique ennuyeux . Bonne lecture.
1) On ne peut pas mettre de variable en évènement : au début d'une partie, un script est lancé pour initialiser les déclencheurs. En clair, cela rajoute les évènements au déclencheur qui ne les possèdent pas automatiquement. Comme ce script est lancé avant le lancement de n'importe quel déclencheur, donc la plupart des variables ont encore leur valeur de base ("Pas d'unité" pour les unités, par exemple).
De plus, les évènements utilisent les valeurs des variables, et pas les variables elles-mêmes (c-à-d que si tu changes la valeur de la variable avec l'action "Set variable" (Move region devrait donc marcher) après avoir donné l'évènement, ça ne changera pas l'évènement).
Voilà pourquoi on ne peut pas mettre de variable en évènement : c'est inutile.
Cependant, tu as une action magique :
Gui:
Trigger:
Déclencheur - Add to TRIGGER the event EVENT
Dès que tu as fixé la valeur de ta variable, tu peux l'utiliser (et cette fois, tu pourras y mettre tes variables). N'oublie pas que l'évènement ne changera pas si tu utilises "Set" sur ta variable après coup.
2) Tu modifies ta région sans utiliser de "Set" mais ça ne marche pas : Le problème, c'est que ce n'est pas ta région qui est utilisé pour l'évènement, mais autre chose.
D'abord, les régions en GUI s'appellent des rect en jass. Ensuite, il existe aussi des régions en jass, qui ne sont donc pas les mêmes choses. Une région jass est un ensemble de "points" (c-à-d des petites rects de 32x32) qui peuvent former n'importe quelle figure géométrique, et pas seulement les rectangles.
Donc ton évènement utilise une région jass basé sur ta rect. Peut-être que tu comprendras mieux avec le code :
Jass:
function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, r)
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
C'est ce qui se passe lorsque tu utilises l'action "Add event (unit enters region)" (ou lorsque que tu mets cet évènement directement sur un déclencheur).
Donc changer la rect ne change pas la région créée pour l'évènement. Tu dois modifier directement la région.
Tu as 2 solutions :
- Ou bien tu utilises l'action "Add event" à chaque fois que tu changes ta rect de place (mais il faudra vérifier, d'une façon ou d'une autre, que ce ne sont pas les précédents évènements qui s'activent, parce qu'il ne disparaîtront pas (en plus, la condition "Is unit in region" bug et ne marcherait pas si les régions se chevauchent)).
- Ou bien tu fais le minimum de jass nécessaire pour pouvoir modifier ta région jass. Il te faut le JNGP pour ça (parce que tu ne peux pas déclarer une variable de type région jass en GUI) et faire ceci :
Dans la partie "Custom Script" de ta map, tu tapes ces 3 lignes :
Jass:
globals
region MyRegion = null
endglobals
C'est la déclaration d'une globale de région que tu ne peux pas faire sans le JNGP.
Ensuite, tu retires l'évènement "A unit enters Mine <gen>" de ton déclencheur puisqu'on créera manuellement l'évènement.
En initialisation, tu créés tes variables et tu mets tout en place :
Gui:
Trigger:
-------- Création de la région correspondant à la rect -------- Custom script: set MyRegion = CreateRegion() Custom script: call Region AddRect(MyRegion, gg_rct_Mine) -------- On initie l'évènement -------- Custom script: call TriggerRegisterEnterRegion(gg_trg_Mine_declenche declenche, MyRegion, null)
Jusque là, on n'a rien fait de plus que ce que WE fait automatiquement. Mais on va pouvoir modifier la région en même temps que la rect, maintenant. A chaque fois que tu modifieras ta rect, tu pourras donc mettre ça :
Gui:
Trigger:
-------- On enlève les points de l'ancienne rect -------- Custom script: call RegionClearRect(MyRegion, gg_rct_Mine) -------- On modifie la rect -------- Set MinePoint = (Random point in Apparition monstres <gen>) Région - Center Mine <gen> on MinePoint -------- On ajoute la nouvelle rect à la région -------- Custom script: call Region AddRect(MyRegion, gg_rct_Mine)
En bonus, je te met la liste des fonctions que tu peux utiliser pour les régions jass :
Secret:
Jass:
native CreateRegion takes nothing returns region
native RemoveRegion takes region whichRegion returns nothing // Pour le leak
native RegionAddRect takes region whichRegion, rect r returns nothing
native RegionClearRect takes region whichRegion, rect r returns nothing
native RegionAddCell takes region whichRegion, real x, real y returns nothing // Un pavé de 32x32
native RegionAddCellAtLoc takes region whichRegion, location whichLocation returns nothing
native RegionClearCell takes region whichRegion, real x, real y returns nothing
native RegionClearCellAtLoc takes region whichRegion, location whichLocation returns nothing
native IsUnitInRegion takes region whichRegion, unit whichUnit returns boolean // Non buggés, contrairement à leurs cousins pour les rects.
native IsPointInRegion takes region whichRegion, real x, real y returns boolean
native IsLocationInRegion takes region whichRegion, location whichLocation returns boolean
native TriggerRegisterEnterRegion takes trigger whichTrigger, region whichRegion, boolexpr filter returns event // Y'a pas de fonction pour les rects, sinon, ce serait trop simple ^^'.
native TriggerRegisterLeaveRegion takes trigger whichTrigger, region whichRegion, boolexpr filter returns event
constant native GetTriggeringRegion takes nothing returns region // En réponse évènement.
Et voilà ! Simple comme bonjour. Je tiens à préciser quand même que ces deux problèmes viennent du GUI, puisqu'en jass, on ajoute les évènements quand on veut et on utilise les régions plus facilement. _________________
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 13:16 Sujet du message:
Merci beaucoup pour le roman ^^. Je comprends mieux maintenant. Par contre j'ai deux question :
Où est ce que je peux télécharger le JNGP (j'ai trouvé un tuto sur hiveworshop mais faut s'inscrire pour télécharger) ?
Comment on ajoute du custom script à une map ? _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Pour les custom scripts, t'a l'action "Custom script" (tout en haut de la liste des actions) qui permet de juste rentrer une ligne de code en GUI.
Sinon, tu peux passer à la vitesse supérieure et utiliser soit la partie Custom Script Code (tu sélectionnes l'icône de map au-dessus des déclencheurs), soit l'option "convertir en texte personnalisé" sur ton déclencheur pour le transformer en jass. _________________
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 13:33 Sujet du message:
J'ai le même lien mais quand je clic sur download j'ai une erreur comme quoi il est indisponible. _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 15:27 Sujet du message:
Bon j'ai trouvé un autre lien pour le JNGP.
Par contre le
Jass:
globals
region MyRegion = null
endglobals
je dois le mettre avec 3 action custom script ou c'est à un autre endroit ?
EDIT : Et euh comment je fais pour jouer à une map que j'ai modifié avec le JNGP ? _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 21/11/10 15:56 Sujet du message:
Tu peux le mettre n'importe où : le JNGP le rajoutera automatiquement dans la déclaration des variables globales.
Tu peux jouer avec le W3 normal lorsque t'as modifié une map avec le JNGP. Par contre, il faut décocher l'option "Reinventing the craft" et sauvegarder avant d'utiliser "Tester map". _________________
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 16:09 Sujet du message:
Quand je compile et qu'il y a une erreur il est sensé se passer quoi ? Parce que quand j'enregistre JassHelper plante à l'étape "error found, please wait" et je suis obligé d'appeler mon pote Ctrl+alt+suppr. _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 21/11/10 16:16 Sujet du message:
Ça ne devrait pas planter, ça devrait te montrer tes erreurs après 3/4 secondes. Tu as quelle version de jasshelper? Essaies de mettre la globale dans la partie "Custom script code" mais ça devrait marcher n'importe où... _________________
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 16:33 Sujet du message:
J'ai la version 0.9.1.2
Pour l'instant j'ai ma global tout en haut de mon trigger Mine declenche que j'ai convertis en JASS.
EDIT : j'ai mis la version 0.A.2.B et ça plante plus, j'ai plus qu'à corriger les erreurs.
EDIT 2 : erreur corrigé, j'ai pu tester ma map ... maintenant il se pase plus rien ! _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Inscrit le: 06 Nov 2007 Messages: 184 Sujets: 17 Spécialité en worldedit: Faire lagger
Posté le: 21/11/10 17:45 Sujet du message:
CA MARCHE ! YAHOO !
J'avais pas viré l'événement de Mine declenche.
Merci beaucoup Tirlititi _________________
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
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