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: 06/09/09 13:58 Sujet du message:
><
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) _________________
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
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: 06/09/09 15:46 Sujet du message:
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. _________________
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: 06/09/09 15:52 Sujet du message:
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. _________________
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
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: 06/09/09 16:50 Sujet du message:
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. _________________
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)
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
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/09/09 18:43 Sujet du message:
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. _________________
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
Posté le: 07/09/09 19:26 Sujet du message:
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 »
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
Posté le: 07/09/09 22:18 Sujet du message:
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.
Toutes les heures sont au format GMT + 1 Heure Aller à la page Précédente1, 2, 3
Page 3 sur 3
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