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=e0af397be5198eabe6d68c15c949bffaMé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

Un sort de cible en vJass
Aller à la page Précédente  1, 2, 3
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 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: 06/09/09 13:58    Sujet du message: Citer

><
Le problème ne vient pas des if dans une action ...

C'est juste que pour des déclencheurs dynamiques (créés et détruits en cours de jeu) il est plus chiant d'éviter les leaks si tu utilises des actions de trigger (TriggerAddAction) plutôt qu'uniquement des conditions (TriggerAddCondition), de par leur nature.

Si tu utilises uniquement des conditions de trigger tu n'as pas à te soucier de tels leaks, tu peux simplement détruire le trigger.

PS : On parle bien de conditions de triggers pas de if/then/else(if)
_________________
Le violet, c'est moche.
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: 06/09/09 14:43    Sujet du message: Citer

Ok. Bon bah j'vais voir ça alors. Wink
_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 06/09/09 15:40    Sujet du message: Citer

Bon si j'ai bien compris, mon résultat doit être juste, y a-t-il des trucs faux là dedans ?
Jass:
scope Spell01 initializer Init

    globals
        private hashtable ht = InitHashtableBJ()
    endglobals
   
    private function SpellEffects takes nothing returns boolean
        local trigger t = GetTriggeringTrigger()
        local unit dummy = LoadUnitHandleBJ(0, GetHandleId(t), ht)
        local unit caster = LoadUnitHandleBJ(1, GetHandleId(t), ht)
       
        if GetEventDamageSource() == dummy then
            call UnitDamageTargetBJ(caster, GetTriggerUnit(), 100, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL)
            call RemoveUnit(dummy)
            call TriggerClearConditions(t)
            call DestroyTrigger(t)
        endif
       
        return false
    endfunction
   
    private function CastSpell takes nothing returns nothing
        local unit u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'u000', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 0)
        local trigger t = CreateTrigger()
        local triggercondition condition
       
        set condition = TriggerAddCondition(t, Condition(function SpellEffects)) // The spell's actions.
        call TriggerRegisterUnitEvent(t, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED)
        call SaveUnitHandleBJ(u, 0, GetHandleId(t), ht) // We save the dummy for later.
        call SaveUnitHandleBJ(GetTriggerUnit(), 1, GetHandleId(t), ht) // We save the caster too.
        call IssueTargetOrder(u, "attack", GetSpellTargetUnit())
    endfunction
   
    private function CastSpell_Cond takes nothing returns boolean
        return GetSpellAbilityId() == 'A000'
    endfunction
   
    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
        call TriggerAddCondition(t, Condition(function CastSpell_Cond))
        call TriggerAddAction(t, function CastSpell)
    endfunction
   
endscope

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 06/09/09 15:46    Sujet du message: Citer

Pourquoi utilises tu ces BJ totalement useless ?
Elles font la même chose que les natives avec des arguments dans un ordre différent, ca n'aide pas vraiment à lire le code.
_________________
Le violet, c'est moche.
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: 06/09/09 15:48    Sujet du message: Citer

De laquelle/Desquelles parles-tu ?
Mais ce n'est pas la question ici, stp.

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 06/09/09 15:52    Sujet du message: Citer

Celle là est discutable :
Jass:

function UnitDamageTargetBJ takes unit whichUnit, unit target, real amount, attacktype whichAttack, damagetype whichDamage returns boolean
    return UnitDamageTarget(whichUnit, target, amount, true, false, whichAttack, whichDamage, WEAPON_TYPE_WHOKNOWS)
endfunction


Jass:
TriggerRegisterAnyUnitEventBJ

est définitivement utile.

Mais les autres ><

Ce n'est peut être pas la question mais ca ne facilite pas la lecture des fonctions hashtables, corrige cela.
Sinon TriggerClearConditions est inutile.
_________________
Le violet, c'est moche.
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: 06/09/09 16:15    Sujet du message: Citer

SaveUnitHandleBJ
Y'en a une pas BJ ? J'suis en train de chercher pour changer mon TESH, qui n'est toujours pas à jour. ^^'

[EDIT] Bon c'est bon, voilà là tout va bien mon Trollounay ?


Jass:
scope Spell01 initializer Init

    globals
        private hashtable ht = InitHashtable()
    endglobals
   
    private function SpellEffects takes nothing returns boolean
        local trigger t = GetTriggeringTrigger()
        local unit dummy = LoadUnitHandle(ht, 0, GetHandleId(t))
        local unit caster = LoadUnitHandle(ht, 1, GetHandleId(t))
       
        if GetEventDamageSource() == dummy then
            call UnitDamageTarget(caster, GetTriggerUnit(), 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
            call RemoveUnit(dummy)
            call DestroyTrigger(t)
        endif
       
        return false
    endfunction
   
    private function CastSpell takes nothing returns nothing
        local unit u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'u000', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 0)
        local trigger t = CreateTrigger()
        local triggercondition condition
       
        set condition = TriggerAddCondition(t, Condition(function SpellEffects)) // The spell's actions.
        call TriggerRegisterUnitEvent(t, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED)
        call SaveUnitHandle(ht, 0, GetHandleId(t), u) // We save the dummy for later.
        call SaveUnitHandle(ht, 1, GetHandleId(t), GetTriggerUnit()) // We save the caster too.
        call IssueTargetOrder(u, "attack", GetSpellTargetUnit())
    endfunction
   
    private function CastSpell_Cond takes nothing returns boolean
        return GetSpellAbilityId() == 'A000'
    endfunction
   
    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
        call TriggerAddCondition(t, Condition(function CastSpell_Cond))
        call TriggerAddAction(t, function CastSpell)
    endfunction
   
endscope

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 06/09/09 16:50    Sujet du message: Citer

Citation:
[EDIT] Bon c'est bon, voilà là tout va bien mon Trollounay ?

Non.

Tu oublies de flusher l'hashtable, tu ne nullifies pas les variables locales, tu devrais inverser l'ordre des paramètres pour l'hashtable.
Enfin fais une distinction pour le nom de tes variables locales et globales.
Perso je commence par une majuscule pour les globales et une minuscule pour les locals, mais stoi qui voit.
_________________
Le violet, c'est moche.
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: 07/09/09 16:51    Sujet du message: Citer

Merci de ton aide, et là ?
Jass:
scope Spell01 initializer Init

    globals
        private hashtable Ht = InitHashtable()
    endglobals
   
    private function SpellEffects takes nothing returns boolean
        local trigger t = GetTriggeringTrigger()
        local unit dummy = LoadUnitHandle(Ht, GetHandleId(t), 0)
        local unit caster = LoadUnitHandle(Ht, GetHandleId(t), 1)
       
        if GetEventDamageSource() == dummy then
            call UnitDamageTarget(caster, GetTriggerUnit(), 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
            call RemoveUnit(dummy)
            call FlushChildHashtable(Ht, GetHandleId(t))
            call DestroyTrigger(t)
        endif
       
        set t = null
        set dummy = null
        set caster = null
       
        return false
    endfunction
   
    private function CastSpell takes nothing returns nothing
        local unit u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'u000', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 0)
        local trigger t = CreateTrigger()
        local triggercondition condition
       
        set condition = TriggerAddCondition(t, Condition(function SpellEffects)) // The spell's actions.
        call TriggerRegisterUnitEvent(t, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED)
        call SaveUnitHandle(Ht, GetHandleId(t), 0, u) // We save the dummy for later.
        call SaveUnitHandle(Ht, GetHandleId(t), 1, GetTriggerUnit()) // We save the caster too.
        call IssueTargetOrder(u, "attack", GetSpellTargetUnit())
       
        set u = null
        set t = null
        set condition = null
    endfunction
   
    private function CastSpell_Cond takes nothing returns boolean
        return GetSpellAbilityId() == 'A000'
    endfunction
   
    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
       
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
        call TriggerAddCondition(t, Condition(function CastSpell_Cond))
        call TriggerAddAction(t, function CastSpell)
       
        set t = null
    endfunction
   
endscope

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 07/09/09 18:43    Sujet du message: Citer

Jass:
local triggercondition condition

est inutile , étant donné que tu n'as pas besoin de garder la trace de la condition ajoutée au trigger dynamique.
Fais simplement call TriggerAddCondition(...)

Sinon le reste c'est tout good, hormis que tu choisis des noms de variables encore plus affreux que moi.
Au moins pour les triggers j'utilise trig, "t" pouvant faire penser à un timer.

J'utiliserais aussi une private constant integer pour le spell.
_________________
Le violet, c'est moche.
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: 07/09/09 19:26    Sujet du message: Citer

Troll-Brain a écrit:
Jass:
local triggercondition condition

(1) est inutile , étant donné que tu n'as pas besoin de garder la trace de la condition ajoutée au trigger dynamique.
Fais simplement call TriggerAddCondition(...)

(2) Sinon le reste c'est tout good, hormis que tu choisis des noms de variables encore plus affreux que moi.
Au moins pour les triggers j'utilise trig, "t" pouvant faire penser à un timer.

(3) J'utiliserais aussi une private constant integer pour le spell.

(1) Oui en effet, j'en gardais la trace avant, c'est un oubli.

(2) Tu parles juste de cet exemple, ou des autres noms de variables ? >_<

(3) Ouais, c'est juste que c'est pas encore un système, car je compte l'en faire devenir un. ^^

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 07/09/09 19:41    Sujet du message: Citer

Citation:
(2) Tu parles juste de cet exemple, ou des autres noms de variables ? >_<

Les autres noms sont corrects.

Citation:
(3) Ouais, c'est juste que c'est pas encore un système, car je compte l'en faire devenir un. ^^

Aucun rapport, si jamais il te prend l'idée de modifier l'id du spell c'est plus clair et rapide avec une constant integer.
_________________
Le violet, c'est moche.
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: 07/09/09 19:43    Sujet du message: Citer

Ouais mais nan mon Trollounay, ça marchera pas comme ça, t'inquiète j'ai mon idée en tête. ^^
_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 07/09/09 22:18    Sujet du message: Citer

Rommstein60 a écrit:
Ouais mais nan mon Trollounay, ça marchera pas comme ça, t'inquiète j'ai mon idée en tête. ^^


C'est justement ça le problème en programmation. Les gens ont des idées plein la tête mais au final ils sont les seuls à se comprendre eux même.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2, 3
Page 3 sur 3

 
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