Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMé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

Crash de warcraft quand...

 
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
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 07/02/10 16:05    Sujet du message: Crash de warcraft quand... Citer

j'utilise un sort préalablement converti en Jass pour le rendre multiinstancible.
Ne faîtes pas attention à la fonction n°2:
Secret:

Jass:
function Trig_Retablissement_Func019001 takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A001' )
endfunction

function Trig_Retablissement_Func019002 takes nothing returns boolean
    return ( GetUnitTypeId(GetTriggerUnit()) == GetUnitTypeId(GetTriggerUnit()) )
endfunction
function Trig_Retablissement_Conditions takes nothing returns boolean
    if ( not GetBooleanAnd( Trig_Retablissement_Func019001(), Trig_Retablissement_Func019002() ) ) then
        return false
    endif
    return true
endfunction

function Trig_Retablissement_Func014C takes nothing returns boolean
    local unit LocalSortsUnitCible = GetSpellTargetUnit()
    if ( not ( UnitHasBuffBJ(LocalSortsUnitCible, 'B000') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Retablissement_Actions takes unit LocalSortsUnitCible, integer i, location LocalSortsPoint returns nothing
    local integer i=1
    local unit LocalSortsUnitCible = GetSpellTargetUnit()
    local location LocalSortsPoint = GetUnitLoc(LocalSortsUnitCible)
    call CreateNUnitsAtLoc( 1, 'h000', Player(PLAYER_NEUTRAL_PASSIVE), GetUnitLoc(LocalSortsUnitCible), bj_UNIT_FACING )
    call SetUnitVertexColorBJ( GetLastCreatedUnit(), 100, 100, 100, 100.00 )
    call UnitAddAbilityBJ( 'A00E', GetLastCreatedUnit() )
    call IssueTargetOrderBJ( GetLastCreatedUnit(), "shadowstrike", LocalSortsUnitCible )
    call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 600.00 + ( 200.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    call AddSpecialEffectLocBJ( LocalSortsPoint, "Abilities\\Spells\\Other\\Levelup\\LevelupCaster.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call RemoveLocation( LocalSortsPoint)
    loop
    exitwhen i > 10
    if ( Trig_Retablissement_Func014C() ) then
        call PolledWait( 1.00 )
        call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 60.00 + ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    else
    endif
    set i=i+1
    endloop
    call PolledWait( 0.50 )
    call RemoveUnit( GetLastCreatedUnit() )
endfunction

//===========================================================================
function InitTrig_Retablissement takes nothing returns nothing
    set gg_trg_Retablissement = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Retablissement, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Retablissement, Condition( function Trig_Retablissement_Conditions ) )
    call TriggerAddAction( gg_trg_Retablissement, function Trig_Retablissement_Actions )
endfunction



(Dans l'éditeur tout va bien, aucune erreur)

EDIT: c'est normal qu'il y ait plein de truc comme ça: '&#' ou ça veut dire que tout est faux? Shocked
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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/02/10 16:16    Sujet du message: Citer

Les seules variables locales nécessaires sont celles dans l'action de trigger car tu utilises un wait.
Tu as besoin d'utiliser une variable locale pour l'unité que tu créé "last created unit" est par définition non multi instanciable, étant donné que ca retourne la dernière unité crée.

Pour ton edit, il s'agit d'un bug des balises du forum, tu n'y es absolument pour rien.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 07/02/10 16:33    Sujet du message: Citer

Voilà j'ai fait ce que tu as dit mais quand je lance le sort ça crash toujours:
Secret:

Jass:
function Trig_Retablissement_Func019001 takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A001' )
endfunction

function Trig_Retablissement_Func019002 takes nothing returns boolean
    return ( GetUnitTypeId(GetTriggerUnit()) == GetUnitTypeId(GetTriggerUnit()) )
endfunction

function Trig_Retablissement_Conditions takes nothing returns boolean
    if ( not GetBooleanAnd( Trig_Retablissement_Func019001(), Trig_Retablissement_Func019002() ) ) then
        return false
    endif
    return true
endfunction

function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetSpellTargetUnit(), 'B000') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Retablissement_Actions takes unit LocalSortsUnitCible, integer i, location LocalSortsPoint, unit dummy returns nothing
    local integer i=1
    local unit LocalSortsUnitCible = GetSpellTargetUnit()
    local location LocalSortsPoint = GetUnitLoc(LocalSortsUnitCible)
    local unit dummy = null
    call CreateNUnitsAtLoc( 1, 'h000', Player(PLAYER_NEUTRAL_PASSIVE), GetUnitLoc(LocalSortsUnitCible), bj_UNIT_FACING )
    set dummy = GetLastCreatedUnit()
    call SetUnitVertexColorBJ( dummy, 100, 100, 100, 100.00 )
    call UnitAddAbilityBJ( 'A00E', dummy )
    call IssueTargetOrderBJ( dummy, "shadowstrike", LocalSortsUnitCible )
    call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 600.00 + ( 200.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    call AddSpecialEffectLocBJ( LocalSortsPoint, "Abilities\\Spells\\Other\\Levelup\\LevelupCaster.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call RemoveLocation( LocalSortsPoint)
    loop
    exitwhen i > 10
    if ( Trig_Retablissement_Func014C() ) then
        call PolledWait( 1.00 )
        call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 60.00 + ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    else
    endif
    set i=i+1
    endloop
    call PolledWait( 0.50 )
    call RemoveUnit( dummy )
endfunction

//===========================================================================
function InitTrig_Retablissement takes nothing returns nothing
    set gg_trg_Retablissement = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Retablissement, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Retablissement, Condition( function Trig_Retablissement_Conditions ) )
    call TriggerAddAction( gg_trg_Retablissement, function Trig_Retablissement_Actions )
endfunction


Citation:
Les seules variables locales nécessaires sont celles dans l'action de trigger car tu utilises un wait.

Oui mais la conditoon où j'ai mis une variable locale fait partie du wait. Donc il faut la locale non?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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/02/10 16:41    Sujet du message: Citer

Citation:
Oui mais la conditoon où j'ai mis une variable locale fait partie du wait. Donc il faut la locale non?

Non car c'est avant le wait, et même si c'était après le wait une variable locale n'est accessible que dans la fonction où elle a été déclarée.
Tu devrais dans ce cas utiliser une variable globale tampon (que tu set juste avant l'appel de la fonction condition).

Tu ne peux pas utiliser d'arguments dans une action de trigger (takes ...), tu dois mettre "takes nothing"
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 07/02/10 16:50    Sujet du message: Citer

Ca ne crashe plus Smile.
Par contre la boucle ne marche pas.
Je te donne encore le déclencheur au cas où il y aurait encore des fautes...
Secret:

Jass:
function Trig_Retablissement_Func019001 takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A001' )
endfunction

function Trig_Retablissement_Func019002 takes nothing returns boolean
    return ( GetUnitTypeId(GetTriggerUnit()) == GetUnitTypeId(GetTriggerUnit()) )
endfunction

function Trig_Retablissement_Conditions takes nothing returns boolean
    if ( not GetBooleanAnd( Trig_Retablissement_Func019001(), Trig_Retablissement_Func019002() ) ) then
        return false
    endif
    return true
endfunction

function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetSpellTargetUnit(), 'B000') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Retablissement_Actions takes nothing returns nothing
    local integer i=1
    local unit LocalSortsUnitCible = GetSpellTargetUnit()
    local location LocalSortsPoint = GetUnitLoc(LocalSortsUnitCible)
    local unit dummy = null
    call CreateNUnitsAtLoc( 1, 'h000', Player(PLAYER_NEUTRAL_PASSIVE), GetUnitLoc(LocalSortsUnitCible), bj_UNIT_FACING )
    set dummy = GetLastCreatedUnit()
    call SetUnitVertexColorBJ( dummy, 100, 100, 100, 100.00 )
    call UnitAddAbilityBJ( 'A00E', dummy )
    call IssueTargetOrderBJ( dummy, "shadowstrike", LocalSortsUnitCible )
    call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 600.00 + ( 200.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    call AddSpecialEffectLocBJ( LocalSortsPoint, "Abilities\\Spells\\Other\\Levelup\\LevelupCaster.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call RemoveLocation( LocalSortsPoint)
    loop
    exitwhen i > 10
    if ( Trig_Retablissement_Func014C() ) then
        call PolledWait( 1.00 )
        call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 60.00 + ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    else
    endif
    set i=i+1
    endloop
    call PolledWait( 0.50 )
    call RemoveUnit( dummy )
endfunction

//===========================================================================
function InitTrig_Retablissement takes nothing returns nothing
    set gg_trg_Retablissement = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Retablissement, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Retablissement, Condition( function Trig_Retablissement_Conditions ) )
    call TriggerAddAction( gg_trg_Retablissement, function Trig_Retablissement_Actions )
endfunction


_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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/02/10 17:47    Sujet du message: Citer

Autant pour moi je n'avais pas vu le wait dans la boucle.

Jass:
    loop
    exitwhen i > 10
    if ( Trig_Retablissement_Func014C() ) then
        call PolledWait( 1.00 )

->>

Jass:
    loop
    exitwhen i > 10
   set udg_VariableUnite = LocalSortsUnitCible
    if ( Trig_Retablissement_Func014C() ) then
        call PolledWait( 1.00 )


Jass:
function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetSpellTargetUnit(), 'B000') == true ) ) then
        return false
    endif
    return true
endfunction


->>
Jass:

function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B000') == true ) ) then
        return false
    endif
    return true
endfunction


udg_VariableUnite
est une variable globale de type unité déclarée dans l'éditeur de variable sous le nom "VariableUnite".

Ou tout simplement :

Jass:
if not ( UnitHasBuffBJ(LocalSortsUnitCible , 'B000') then
        call PolledWait( 1.00 )
        call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 60.00 + ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    else
    endif


Il faut aussi nullifier les variables location et unité à la fin de la fonction.
Jass:
call PolledWait( 0.50 )
call RemoveUnit( dummy )
set dummy = null
set LocalSortsUnitCible = null
set LocalSortsPoint =null
endfunction


Et tu devrais utiliser LocalSortsPoint dans CreateNUnitsAtLoc, sinon tu leak d'un point.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 07/02/10 18:05    Sujet du message: Citer

Pourquoi les nullifier?
Secret:

Jass:

    loop
    exitwhen i > 10
    set udg_VariableUniteGlobale = LocalSortsUnitCible
    if not ( UnitHasBuffBJ(udg_VariableUniteGlobale, 'B000') then
        call PolledWait( 1.00 )
        call SetUnitLifeBJ( LocalSortsUnitCible, ( GetUnitStateSwap(UNIT_STATE_LIFE, LocalSortsUnitCible) + ( 60.00 + ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A001', GetTriggerUnit())) ) ) ) )
    else
    endif
    set i=i+1
    endloop
    call PolledWait( 0.50 )
    call RemoveUnit( dummy )
    set dummy = null
    set LocalSortsUnitCible = null
    set LocalSortsPoint =null
endfunction


Là je suis plus trop... L'autre fonction (lancienne condition) il faut que je la supprime?
Quand j'active le déclo ça m'affiche:
- set udg_VariableUniteGlobale = LocalSortsUnitCible : attendait un nom de variable;
- if not ( UnitHasBuffBJ(udg_VariableUniteGlobale, 'B000') then : attendait un nom;
- else : attendait un "endloop";
- endif : attendait un "endloop"
Avec cette variable globale la multiinstanciabilité est toujours là?
Secret:

Tu es un bon pédagogue, j'apprend le Jass avec toi Laughing .


EDIT: non, j'avais oublié un 'e' désolé. Maintenent il n'y a plus aucune faute mais la boucle ne s'active toujours pas.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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/02/10 19:43    Sujet du message: Citer

Hmm j'ai édité mon post, tu as du le lire avant l'édit je penses.
Il faut nullifier les variables locales, sinon tu auras un leak de reference d'handle quand l'handle sera détruit et qu'une variable pointe encore dessus.

C'est toujours MUI avec la variable globale, car entre le set et son utilisation il n'y a aucun wait.

Mais si tu utilises la façon plus clean sans la variable globale, en effet la fonction Trig_Retablissement_Func014C devient inutile et tu peux la supprimer.

D'ailleurs c'est horrible comment le GUI gère les conditions, les appels de fonctions sont totalement inutiles et rendent l'utilisation d'une variable locale plus difficile ...
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 08/02/10 12:18    Sujet du message: Citer

YEAH, ça marche Smile. Merci.
Par contre c'est bizarre ici j'ai du mettre return true à la place de false:
Jass:
function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B000') == true ) ) then
        return false
    endif
    return true
endfunction

->>>>
Jass:
function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B000') == true ) ) then
        return true
    endif
    return true
endfunction

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 08/02/10 13:03    Sujet du message: Citer

A propos:
Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B000') == true ) ) then
        return true
    endif
    return true
endfunction

Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    return UnitHasBuffBJ(udg_VariableUnite, 'B000')
endfunction

Ou encore
Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    return GetUnitAbilityLevel(udg_VariableUnite, 'B000')>=1
endfunction

_________________
Revenir en haut
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 08/02/10 14:20    Sujet du message: Citer

Secret:

Apocalypse a écrit:
A propos:
Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B000') == true ) ) then
        return true
    endif
    return true
endfunction

Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    return UnitHasBuffBJ(udg_VariableUnite, 'B000')
endfunction

Ou encore
Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    return GetUnitAbilityLevel(udg_VariableUnite, 'B000')>=1
endfunction


Euh je comprends pas trop, je suis nul en Jass... Sad

Je pourrais encore vous demander de votre merveilleuse aide?
Voilà un autre déclencheur (ne faîtes pas attention à la fonction n°2):
Secret:

Jass:
function Trig_Feu_stellaire_Func019001 takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A000' )
endfunction

function Trig_Feu_stellaire_Func019002 takes nothing returns boolean
    return ( GetUnitTypeId(GetTriggerUnit()) == GetUnitTypeId(GetTriggerUnit()) )
endfunction

function Trig_Feu_stellaire_Conditions takes nothing returns boolean
    if ( not GetBooleanAnd( Trig_Feu_stellaire_Func019001(), Trig_Feu_stellaire_Func019002() ) ) then
        return false
    endif
    return true
endfunction

function Trig_Feu_stellaire_Func014Func001C takes nothing returns boolean
    if ( not ( IsUnitAliveBJ(udg_VariableUnite) == true ) ) then
        return true
    endif
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B002') == true ) ) then
        return true
    endif
    return true
endfunction

function Trig_Feu_stellaire_Func014Func008Func002Func001C takes nothing returns boolean
    if ( not ( GetOwningPlayer(GetEnumUnit()) == GetEnumPlayer() ) ) then
        return false
    endif
    return true
endfunction

function Trig_Feu_stellaire_Func014Func008Func002A takes nothing returns nothing
    if ( Trig_Feu_stellaire_Func014Func008Func002Func001C() ) then
        call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( 90.00 * I2R(GetUnitAbilityLevelSwapped('A000', GetTriggerUnit())) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    else
    endif
endfunction

function Trig_Feu_stellaire_Func014Func008A takes nothing returns nothing
    local unit LocalSortsUnitCible = GetSpellTargetUnit()
    set bj_wantDestroyGroup = true
    call ForGroupBJ( GetUnitsInRangeOfLocAll(512.00, GetUnitLoc(LocalSortsUnitCible)), function Trig_Feu_stellaire_Func014Func008Func002A )
endfunction

function Trig_Feu_stellaire_Func014C takes nothing returns boolean
    if ( not Trig_Feu_stellaire_Func014Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_Feu_stellaire_Actions takes nothing returns nothing
    local integer i=1
    local location LocalSortsPoint = GetUnitLoc(GetSpellTargetUnit())
    local unit LocalSortsUnitCible = GetSpellTargetUnit()
    local unit dummy
    call AddSpecialEffectLocBJ( LocalSortsPoint, "Abilities\\Spells\\Items\\AIre\\AIreTarget.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call UnitDamageTargetBJ( GetTriggerUnit(), LocalSortsUnitCible, ( 100.00 * I2R(GetUnitAbilityLevelSwapped('A000', GetTriggerUnit())) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    call CreateNUnitsAtLoc( 1, 'h000', Player(PLAYER_NEUTRAL_PASSIVE), LocalSortsPoint, bj_UNIT_FACING )
    set dummy = GetLastCreatedUnit()
    call SetUnitVertexColorBJ( dummy, 100, 100, 100, 100.00 )
    call UnitAddAbilityBJ( 'A00C', dummy )
    call IssueTargetOrderBJ( dummy, "shadowstrike", LocalSortsUnitCible )
    call RemoveLocation( LocalSortsPoint)
    loop
    exitwhen i > 4
    set udg_VariableUnite = LocalSortsUnitCible
    if ( Trig_Feu_stellaire_Func014C() ) then
        call PolledWait( 3.00 )
        set LocalSortsPoint = GetUnitLoc(LocalSortsUnitCible)
        call AddSpecialEffectLocBJ( LocalSortsPoint, "Abilities\\Spells\\Items\\AIre\\AIreTarget.mdl" )
        call DestroyEffectBJ( GetLastCreatedEffectBJ() )
        call RemoveLocation( LocalSortsPoint)
        set bj_wantDestroyGroup = true
        call ForForce( GetPlayersAllies(GetOwningPlayer(LocalSortsUnitCible)), function Trig_Feu_stellaire_Func014Func008A )
    else
    endif
    set i=i+1
    endloop
    call PolledWait( 0.50 )
    call RemoveUnit( GetLastCreatedUnit() )
endfunction

//===========================================================================
function InitTrig_Feu_stellaire takes nothing returns nothing
    set gg_trg_Feu_stellaire = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Feu_stellaire, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Feu_stellaire, Condition( function Trig_Feu_stellaire_Conditions ) )
    call TriggerAddAction( gg_trg_Feu_stellaire, function Trig_Feu_stellaire_Actions )
endfunction


Dans la fonction Trig_Feu_stellaire_Actions tout marche bien sauf au moment du pick every player et ça change de fonction. Donc ma variable LocalSortsUnitCible ne marche plus Arrow Les dégâts aux unités adjacente de la cible ne fonctionnent pas. J'ai essayé de copier les actions des autres fonctions pour les mettre dans la fonction Trig_Feu_stellaire_Actions mais ça ne marche pas Crying or Very sad .
Comment faire? -> si j'utilise une variable globale comme dans l'ancien déclo, le sort ne sera plus multiinstanciable puisqu'il y a des wait entre.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 08/02/10 18:11    Sujet du message: Citer

Sapeur-Goblin a écrit:
Apocalypse a écrit:
A propos:
Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(udg_VariableUnite, 'B000') == true ) ) then
        return true
    endif
    return true
endfunction

Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    return UnitHasBuffBJ(udg_VariableUnite, 'B000')
endfunction

Ou encore
Jass:
Function Trig_Retablissement_Func014C takes nothing returns boolean
    return GetUnitAbilityLevel(udg_VariableUnite, 'B000')>=1
endfunction

Euh je comprends pas trop, je suis nul en Jass... Sad

La première fonction que je t'ai mise: tu gagnes simplement des lignes de code.
Ca revient exactement au même que la tienne, mais en présenté différement (et plus court).

La deuxième: en utilisant le même système de code condensé (directement return blablabla au lieu d'inclure un if/then/else), je te montrais une autre façon de détecter la présence d'un Buff, qui t'évite de te servir de UnitHasBuffBJ() mais revient exactement au même.

Ton nouveau déclencheur:

Alors déjà remarque générale: lorsque tu utilises un Wait et que tes variables locales sont rendues obsolètes lors du changement de fonction, c'est là que le VJass est utile. Tu peux utiliser des structs. Cela dit je suppose que tu ne veux pas encore t'en servir.

Autre méthode, donc: les Hashtables. Mais je n'aime pas du tout m'en servir donc je ne pourrais pas trop t'aider à ce sujet.

Troisième méthode: utiliser le groupe DANS la fonction.

Je n'ai pas accès à l'éditeur en ce moment mais l'idée c'est que:

Jass:
function blabla takes nothing returns nothing
 call ForGroupBJ( GetUnitsInRangeOfLocAll(512.00, GetUnitLoc(LocalSortsUnitCible)), function Trig_Feu_stellaire_Func014Func008Func002A )
enfunction


Avec au dessus ta fonction Trig_Feu_stellaire_Func014Func008Func002A doit devenir:

Jass:
function blabla takes nothing returns nothing
    local group g = CreateGroup()
    local unit pickedUnit
        set g = Cequetuveuxcommegroup
        loop
            set pickedUnit = FirstOfGroup(g)
            exitwhen pickedUnit==null
            call UneFonctionSurTonUnité pickedUNit
            call GroupRemoveUnit(g,pickedUnit)
        endloop
        //Ne pas oublier de détruire/nullifier les variables locales
        set pickedUnit = null
        call DestroyGroup(g)
        set g = null
endfunction




En gros l'idée, tant que utiliseras des Wait, c'est de te servir du groupe dans la même fonction du début à la fin.
Ensuite, tu lance une boucle qui va attribuer à la variable unité pickedUnit la première unité trouvée pour le groupe g.
La boucle s'arrête quand pickedUnit renvoie null, à savoir que plus aucune unité n'est dans ce groupe.
En effet, tu demandes à chaque fois GroupRemoveUnit, ce qui vire l'unité de ton groupe.

Ca c'est pour avoir un groupe au sein d'une fonction.

Maintenant, si tu veux récupérer tes unités plus tard, tu peux les stocker en même temps dans une variable array.

Donc dans la boucle, quelque chose comme:
Jass:
function blabla takes nothing returns nothing
    local group g = CreateGroup()
    local unit pickedUnit
    local unit array indexedUnit
    local integer i = 0
    local integer stack = 0
        set g = Cequetuveuxcommegroup
        loop
            set pickedUnit = FirstOfGroup(g)
            exitwhen pickedUnit==null
            call UneFonctionSurTonUnité pickedUNit
            set indexedUnit[i]= pickedUnit
            set i = i + 1
            call GroupRemoveUnit(g,pickedUnit)
        endloop
        set i = stack
        //blablabla
        //maintenant tu veux retrouver les unités indexées:
        set i = 0
        loop
            exitwhen i > stack
            call UneFonctionSurTonUnité indexedUnit[i]
            set i = i + 1
        endloop

        //Ne pas oublier de détruire/nullifer les locales
        set pickedUnit = null
        call DestroyGroup(g)
        set g = null
        set i = 0
        loop
            exitwhen i > stack
            set indexedUnit[i] = null
            set i = i + 1
        endloop
endfunction

_________________
Revenir en haut
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 09/02/10 11:18    Sujet du message: Citer

Citation:
Tu peux utiliser des structs. Cela dit je suppose que tu ne veux pas encore t'en servir.

Si, je veux bien m'en servir, parce que là ton autre soluce je comprends pas trop.
Par contre j'ai l'impression que mon JassNewGenPack est périmé: quand j'ouvre une carte TFT ça m'affiche que le fichier est trop récent Surprised .
(mais je peux quand même l'ouvrir)
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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: 12/02/10 19:40    Sujet du message: Citer

Tu peux simplement aussi utiliser des variables globales tampons comme dans mon exemple (même en jass cela peut être intéressant).
_________________
Le violet, c'est moche.
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 -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1
La question posée dans ce topic a été résolue !

 
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