Converted the spell to MUI, now... Help!

emjlr3

Change can be a good thing
Reaction score
395
MrApples said:
"Condition AND Condition".

just make one condition

function blah takes nothing returns boolean
return blah and blah and blah and blah // just add all your stuff there
endfunction

again I suggest looking at my blink storm spell, its old, and not written great, but it should help
 

MrApples

Ultra Cool Member
Reaction score
78
Now theres 48 compiled errors...
Code:
function Trig_Blink_Strike_Conditions takes nothing returns boolean
   return GetSpellAbilityId() == 'A085'
endfunction

function Trig_Blink_Strike_Func010Func002002003001001 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Blink_Strike_Func010Func002002003001002 takes group TempGroup2 returns boolean
    return ( IsUnitInGroup(GetFilterUnit(), TempGroup2) == false )
endfunction

function Trig_Blink_Strike_Func010Func002002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Blink_Strike_Func010Func002002003001001(), Trig_Blink_Strike_Func010Func002002003001002() )
endfunction

function Trig_Blink_Strike_Func010Func002002003002 takes nothing returns boolean
    return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(CastingUnit)) == true )
endfunction

function Trig_Blink_Strike_Func010Func002002003 takes group TempGroup2, unit CastingUnit returns boolean
    return GetBooleanAnd( Trig_Blink_Strike_Func010Func002002003001(), Trig_Blink_Strike_Func010Func002002003002() )
endfunction

function Trig_Blink_Strike_Actions takes nothing returns nothing
    local unit CastingUnit
    local unit BlinkStrikeTarget
    local location TempPoint
    local location TempPoint2
    local group TempGroup
    local group TempGroup2
    set CastingUnit = GetSpellAbilityUnit()
    set TempPoint = GetUnitLoc(GetSpellTargetUnit())
    set BlinkStrikeTarget = GetSpellTargetUnit()
    call SetUnitPositionLoc( CastingUnit, TempPoint2 )
    call SetUnitFacingToFaceUnitTimed( CastingUnit, BlinkStrikeTarget, 0 )
    call SetUnitAnimation( CastingUnit, "attack" )
    call UnitDamageTargetBJ( CastingUnit, BlinkStrikeTarget, ( 175.00 + ( 150.00 * ( I2R(GetUnitAbilityLevelSwapped('A085', CastingUnit)) - 1 ) ) ), ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
    call RemoveLocation(TempPoint)
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = ( GetUnitAbilityLevelSwapped('A085', GetSpellAbilityUnit()) * 2 )
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set TempPoint = GetUnitLoc(BlinkStrikeTarget)
        set TempGroup = GetUnitsInRangeOfLocMatching(512, TempPoint, Condition(function Trig_Blink_Strike_Func010Func002002003))
        set BlinkStrikeTarget = GroupPickRandomUnit(TempGroup)
        set TempPoint2 = GetUnitLoc(BlinkStriketarget)
        if ( BlinkStrikeTarget == null ) then
            exitwhen true
        else
            call AddLightningLoc( "LEAS", TempPoint, TempPoint2 )
            call SetUnitPositionLoc( CastingUnit, TempPoint2 )
            call SetUnitFacingToFaceUnitTimed( CastingUnit, BlinkStrikeTarget, 0 )
            call SetUnitAnimation( CastingUnit, "attack" )
            call UnitDamageTargetBJ( CastingUnit, BlinkStrikeTarget, ( 150.00 + ( 200.00 * ( I2R(GetUnitAbilityLevelSwapped('A085', CastingUnit)) - 1 ) ) ), ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
            call PolledWait( 0.25 )
            call DestroyLightningBJ( GetLastCreatedLightningBJ() )
            call GroupAddUnitSimple( BlinkStrikeTarget, TempGroup2 )
            set BlinkStrikeTarget = null
        endif
        call RemoveLocation(TempPoint)
        call RemoveLocation(TempPoint2)
        call DestroyGroup(TempGroup)
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call DestroyGroup(TempGroup2)
    set TempPoint = null
    set TempPoint2 = null
    set TempGroup = null
    set TempGroup2 = null
endfunction

//===========================================================================
function InitTrig_Blink_Strike takes nothing returns nothing
    set gg_trg_Blink_Strike = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Blink_Strike, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Blink_Strike, Condition( function Trig_Blink_Strike_Conditions ) )
    call TriggerAddAction( gg_trg_Blink_Strike, function Trig_Blink_Strike_Actions )

Are all the functions necessary? Also I did remove one of the functions to put it in
Code:
        if ( BlinkStrikeTarget == null ) then
as Dino.pl suggested, but you said it may need the function?


I did look at your code emilj, its similar, alot fancier, I noticed you put all the functions for the group into 1 function, would that be better to do?
 

Sim

Forum Administrator
Staff member
Reaction score
534
emjlr3 said:
just make one condition

function blah takes nothing returns boolean
return blah and blah and blah and blah // just add all your stuff there
endfunction

again I suggest looking at my blink storm spell, its old, and not written great, but it should help

What he means is not checking stuff with function calls but directly into the Actions function.

Example :
Code:
if ( GetOwningPlayer(OURHERO) == Player(0) ) then

Instead of

Code:
 if (( func_Trig_Revive_Hero_002002003002001 ) = true ) then

...And inside the function calling you check if the player is the player(0) and return true.

What he wants is the above condition already checking in the actions, not calling another function that will check if the condition is meeted.
 

emjlr3

Change can be a good thing
Reaction score
395
u r still using your locals in other functions.... y?
 

Sim

Forum Administrator
Staff member
Reaction score
534
Code:
function Trig_Blink_Strike_Func010Func002002003001002 takes group TempGroup2 returns boolean
    return ( IsUnitInGroup(GetFilterUnit(), TempGroup2) == false )
endfunction

This condition takes a group that you never give. In the GetBooleanAnd function below that calls this other function, you take again the group but you don't give it. Then when you link together the 2 functions you don't give the group !

In fact, you never give the group. You just take it. You must "give" it to the functions!
 

MrApples

Ultra Cool Member
Reaction score
78
>What he wants is the above condition already checking in the actions, not calling another function that will check if the condition is meeted.

Only because this supposely better...

But i'd rather just get it working...


>This condition takes a group that you never give. In the GetBooleanAnd function below that calls this other function, you take again the group but you don't give it. Then when you link together the 2 functions you don't give the group !

In fact, you never give the group. You just take it. You must "give" it to the functions!

I have no idea what you mean.
 
D

dArKzEr0

Guest
Code:
set TempGroup = GetUnitsInRangeOfLocMatching(512, TempPoint, [b]Condition(function Trig_Blink_Strike_Func010Func002002003)[/b])

Tell me what condition you want happening here. In English, not in code. I'll clear up your functions problem for you, because it's all related to that one condition.

From what I'm understanding, you want the game to pick all units in a range of 512 from the position of the target of the ability who match the condition:
1. unit is enemy of player owning the casting unit
2. picked unit is alive
3. (here's where I'm confused) unit is in group "TempGroup2"

Are those the conditions you're looking for? If so, you never specify what TempGroup2 is. What is it that you want?

-darkz

Edit://
Nevermind, I see what you're trying to accomplish with "TempGroup2." Did you test your spell when you made it in GUI? The GUI trigger you posted in your first post seems buggy.
 

Sim

Forum Administrator
Staff member
Reaction score
534
MrApples said:
I have no idea what you mean.

Your condition functions "take" TempGroup2 ... but you never give them the group ! You must add it in the function call.
 

MrApples

Ultra Cool Member
Reaction score
78
The GUI trigger works... most of the time.

>Your condition functions "take" TempGroup2 ... but you never give them the group ! You must add it in the function call.

How would I go about doing that?

TempGroup2 is there so that units that were hit, will not be hit again. A unit may only be hit a maxinum of once per cast.
 

MrApples

Ultra Cool Member
Reaction score
78
I just need to know how to give the variables(hopefully), or how to put it directly into the action if thats better.
 
D

dArKzEr0

Guest
Code:
function Trig_Blink_Strike_Conditions takes nothing returns boolean
   return GetSpellAbilityId() == 'A085'
endfunction

function Trig_Blink_Strike_Func010Func002002003001001 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Blink_Strike_Func010Func002002003001002 takes group TempGroup2 returns boolean
    return ( IsUnitInGroup(GetFilterUnit(), TempGroup2) == false )
endfunction

function Trig_Blink_Strike_Func010Func002002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Blink_Strike_Func010Func002002003001001(), Trig_Blink_Strike_Func010Func002002003001002() )
endfunction

function Trig_Blink_Strike_Func010Func002002003002 takes nothing returns boolean
    return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(CastingUnit)) == true )
endfunction

function Trig_Blink_Strike_Func010Func002002003 takes group TempGroup2, unit CastingUnit returns boolean
    return GetBooleanAnd( Trig_Blink_Strike_Func010Func002002003001(), Trig_Blink_Strike_Func010Func002002003002() )
endfunction

function Trig_Blink_Strike_Actions takes nothing returns nothing
    local unit CastingUnit
    local unit BlinkStrikeTarget
    local location TempPoint
    local location TempPoint2
    local group TempGroup
    local group TempGroup2
    set CastingUnit = GetSpellAbilityUnit()
    set TempPoint = GetUnitLoc(GetSpellTargetUnit())
    set BlinkStrikeTarget = GetSpellTargetUnit()
    call SetUnitPositionLoc( CastingUnit, TempPoint2 )
    call SetUnitFacingToFaceUnitTimed( CastingUnit, BlinkStrikeTarget, 0 )
    call SetUnitAnimation( CastingUnit, "attack" )
    call UnitDamageTargetBJ( CastingUnit, BlinkStrikeTarget, ( 175.00 + ( 150.00 * ( I2R(GetUnitAbilityLevelSwapped('A085', CastingUnit)) - 1 ) ) ), ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
    call RemoveLocation(TempPoint)
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = ( GetUnitAbilityLevelSwapped('A085', GetSpellAbilityUnit()) * 2 )
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set TempPoint = GetUnitLoc(BlinkStrikeTarget)
        set TempGroup = GetUnitsInRangeOfLocMatching(512, TempPoint, Condition(function Trig_Blink_Strike_Func010Func002002003))
        set BlinkStrikeTarget = GroupPickRandomUnit(TempGroup)
        set TempPoint2 = GetUnitLoc([B]BlinkStriketarget) //capitalize the T, JASS is case-sensitive[/B]
        if ( BlinkStrikeTarget == null ) then
            exitwhen true
        else
            call AddLightningLoc( "LEAS", TempPoint, TempPoint2 )
            call SetUnitPositionLoc( CastingUnit, TempPoint2 )
            call SetUnitFacingToFaceUnitTimed( CastingUnit, BlinkStrikeTarget, 0 )
            call SetUnitAnimation( CastingUnit, "attack" )
            call UnitDamageTargetBJ( CastingUnit, BlinkStrikeTarget, ( 150.00 + ( 200.00 * ( I2R(GetUnitAbilityLevelSwapped('A085', CastingUnit)) - 1 ) ) ), ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
            call PolledWait( 0.25 )
            call DestroyLightningBJ( GetLastCreatedLightningBJ() )
            call GroupAddUnitSimple( BlinkStrikeTarget, TempGroup2 )
            set BlinkStrikeTarget = null
        endif
        call RemoveLocation(TempPoint)
        call RemoveLocation(TempPoint2)
        call DestroyGroup(TempGroup)
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call DestroyGroup(TempGroup2)
    set TempPoint = null
    set TempPoint2 = null
    set TempGroup = null
    set TempGroup2 = null
endfunction

//======================================================================  =====
function InitTrig_Blink_Strike takes nothing returns nothing
    set gg_trg_Blink_Strike = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Blink_Strike, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Blink_Strike, Condition( function Trig_Blink_Strike_Conditions ) )
    call TriggerAddAction( gg_trg_Blink_Strike, function Trig_Blink_Strike_Actions )
[B]//you need an "endfunction" here; don't know if you just forgot to copy and paste it.[/B]

That takes care of your fixable syntax errors. Now, for passing arguments from your main function to your boolexpr, according to corvusHaunt and phyrex1an in this thread , you simply can't do it without globals. However, this will work:

Code:
function UnitIsAliveAndEnemy takes nothing returns boolean
    local unit caster = GetSpellAbilityUnit()
    return (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(caster)) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0 )
endfunction

and change this:
Code:
set TempGroup = GetUnitsInRangeOfLocMatching(512, TempPoint, Condition(function Trig_Blink_Strike_Func010Func002002003))
to this:
Code:
set TempGroup = GetUnitsInRangeOfLocMatching(512, TempPoint, Condition(function UnitIsAliveAndEnemy))

However, that doesn't take care of TempGroup2.
You can use this function:
Code:
function IsUnitAliveEnemyNotInGroup takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    return ( (GetUnitState(whichUnit, UNIT_STATE_LIFE) > 0) and (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(caster)) and not (IsUnitInGroup(GetFilterUnit(), udg_TempGroup2) )
endfunction
But note that udg_TempGroup2 is a global variable, and therefore the spell is no longer MUI (the effect of two units casting the spell in the same vicinity would be that they cannot both hit one unit, as that unit will be in TempGroup2 if one of them targets it).

I have no guarantee that your spell will work though, it seems very buggy to me. Good luck.

-darkz

P.S. I havn't had time to work on your game setup trigger, maybe I'll get to it today. I hope to have it done before the end of the weekend 'cause I'm leaving on vacation on Monday and I won't be back 'till next Friday.

Edit://
Also, change as many non-native functions to native (JassCraft is great for this) such as:

SetUnitFacingToFaceUnitTimed -> SetUnitFacingTimed
UnitDamageTargetBJ -> UnitDamageTarget
GetUnitAbilityLevelSwapped -> GetUnitAbilityLevel
PolledWait -> TriggerSleepAction
DestroyLightningBJ -> DestroyLightning
GetLastCreatedLightningBJ -> use the variable bj_lastCreatedLightning instead
GroupAddUnitSimple -> GroupAddUnit

I think AddLightningLoc leaks unless you do "set lightningVariable = AddLightningLoc(x, y, z)" but don't quote me.

Also, bj_forLoopAIndex is a global variable. Simply set "local integer a" at the start of your function and replace bj_forLoopAIndex with a throughout the whole thing.

Post your function when you're done editting it incase I missed something.
 

MrApples

Ultra Cool Member
Reaction score
78
Can't use SpellAbilityUnit, since there is a wait.

And that code has 107 compiled errors...
 
D

dArKzEr0

Guest
That was your code, I only pasted it in my post for easier reference. The point was for you to learn by fixing it yourself :eek: .

How does SpellAbilityUnit work? Is it a global variable? I thought it referred to the unit casting in the function which it was called.

-darkz
 

MrApples

Ultra Cool Member
Reaction score
78
(Casting Unit) can't be used after a wait action because if another unit casts something in that time its reset.

Thereis a polled wait.
 

MrApples

Ultra Cool Member
Reaction score
78
Well I give, no matter what I try to do with the functions I get like a 100 compiled errors. Even when trying to put all the conditions for TempGroup into one function like on emilj's trigger it screwed up alot.

So this is the final trigger, in GUI.
Code:
Blink StrikeBU
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Blink Strike [NEW]
    Actions
        Set BlinkStrikeCasting = (Casting unit)
        Animation - Change BlinkStrikeCasting's vertex coloring to (100.00%, 100.00%, 100.00%) with 40.00% transparency
        Special Effect - Create a special effect attached to the weapon of BlinkStrikeCasting using Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
        Set BlinkStrikeEffect = (Last created special effect)
        Set BlinkStrikeTarget = (Target unit of ability being cast)
        Set TempPoint = (Position of BlinkStrikeTarget)
        Unit - Move BlinkStrikeCasting instantly to TempPoint
        Custom script:   call RemoveLocation(udg_TempPoint)
        Unit - Make BlinkStrikeCasting face BlinkStrikeTarget over 0.00 seconds
        Animation - Play BlinkStrikeCasting's attack animation
        Unit - Cause BlinkStrikeCasting to damage BlinkStrikeTarget, dealing (175.00 + (150.00 x ((Real((Level of Blink Strike [NEW] for BlinkStrikeCasting))) - 1.00))) damage of attack type Hero and damage type Normal
        Set BlinkStrikeTarget = No unit
        For each (Integer A) from 1 to ((Level of Blink Strike [NEW] for BlinkStrikeCasting) x 2), do (Actions)
            Loop - Actions
                Set TempPoint = (Position of BlinkStrikeCasting)
                Set TempGroup = (Units within (500.00 + (50.00 x (Real((Level of Blink Strike [NEW] for BlinkStrikeCasting))))) of TempPoint matching (((((Matching unit) is alive) Equal to True) and (((Matching unit) is in BlinkStrikeUsed) Equal to False)) and (((Matching unit) belongs to a
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (TempGroup is empty) Equal to True
                    Then - Actions
                        Custom script:   exitwhen true
                    Else - Actions
                        Set BlinkStrikeTarget = (Random unit from TempGroup)
                        Set TempPoint2 = (Position of BlinkStrikeTarget)
                        Unit - Move BlinkStrikeCasting instantly to TempPoint2
                        Unit - Make BlinkStrikeCasting face BlinkStrikeTarget over 0.00 seconds
                        Animation - Play BlinkStrikeCasting's attack animation
                        Unit - Cause BlinkStrikeCasting to damage BlinkStrikeTarget, dealing (150.00 + (200.00 x ((Real((Level of Blink Strike [NEW] for BlinkStrikeCasting))) - 1.00))) damage of attack type Hero and damage type Normal
                        Custom script:   call RemoveLocation(udg_TempPoint)
                        Custom script:   call RemoveLocation(udg_TempPoint2)
                        Custom script:   call DestroyGroup(udg_TempGroup)
                        Wait 0.25 game-time seconds
                        Unit Group - Add BlinkStrikeTarget to BlinkStrikeUsed
                        Set BlinkStrikeTarget = No unit
        Animation - Change BlinkStrikeCasting's vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
        Special Effect - Destroy BlinkStrikeEffect
        Custom script:   call DestroyGroup(udg_BlinkStrikeUsed)
        Custom script:   set udg_TempPoint = null
        Custom script:   set udg_TempPoint2 = null
        Custom script:   set udg_TempGroup = null
        Custom script:   set udg_BlinkStrikeUsed = null

I adopted 3 things from emilj's trigger, the check if group is empty instead if random unit = no unit, the pheonix effect to weapon, and the transparancy of Casting Unit.

I know that this will not work if it is casted twice within the same time frame, but according to Vexorian array variables are like 40,000 X slower then single so i'll take my chances.

The map i'm working on has to be released, so I can't spend 3 more weeks trying to fix a what should be simple bug.
 

emjlr3

Change can be a good thing
Reaction score
395
y did u not look at my JASS version? you could have jsut used that and changed it to your liking

Code:
function Trig_Blink_Storm_Fast_JASS_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A006'        
endfunction

function Unit_Group takes nothing returns boolean
    return GetBooleanAnd( IsUnitAliveBJ(GetFilterUnit()) == true, IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true )
endfunction

function Trig_Blink_Storm_Fast_JASS_Actions takes nothing returns nothing
    local unit Caster = GetTriggerUnit()
    local integer i = 0
    local group UnitGroup
    local unit TargetRandom
    local unit Target = GetSpellTargetUnit()
    local effect Phoenix    
    local location R
    local real Damage = GetRandomReal(75.00, 97.00) + ( I2R(GetHeroLevel(Caster)) * 2.00 )
    local integer Amount = 2 + ( GetUnitAbilityLevelSwapped('A006', Caster) * 4 )
    call TriggerSleepAction( 0.20 )
    call SelectUnitRemove( Caster )
    call SetUnitVertexColor( Caster, 150, 150, 150, 150 )
    call SetUnitInvulnerable( Caster, true )    
    set Phoenix = AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl",Caster,"weapon" )
    call DestroyEffect(AddSpecialEffectTarget( "Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl", Caster, "chest" ))
    call SetUnitPositionLocFacingBJ( Caster, PolarProjectionBJ(GetUnitLoc(Target), 50.00, GetRandomDirectionDeg()), AngleBetweenPoints(GetUnitLoc(Caster), GetUnitLoc(Target)) )
    call UnitDamageTarget( Caster, Target, Damage, false, true, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_AXE_MEDIUM_CHOP )
    call SetUnitAnimation( Caster, "attack" )
    call TriggerSleepAction( 0.20 )
    call SelectUnitRemove( Caster )    
    loop
        set i = i + 1        
        exitwhen i > Amount 
            set UnitGroup = GetUnitsInRangeOfLocMatching(600.00, GetUnitLoc(Caster), Condition(function Unit_Group))
            if ( IsUnitGroupEmptyBJ(UnitGroup) == false ) then
                set TargetRandom = GroupPickRandomUnit(UnitGroup)
                set R = GetUnitLoc(TargetRandom)
                call DestroyEffect(AddSpecialEffectTarget( "Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl", Caster, "chest" ))
                call SetUnitPositionLocFacingBJ( Caster, PolarProjectionBJ(R, 50.00, GetRandomDirectionDeg()), AngleBetweenPoints(GetUnitLoc(Caster), GetUnitLoc(TargetRandom)) )
                call UnitDamageTarget( Caster, TargetRandom, Damage, false, true, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_AXE_MEDIUM_CHOP )
                call SetUnitAnimation( Caster, "attack" )
                call RemoveLocation ( R )
                call TriggerSleepAction( 0.20 )
                call SelectUnitRemove( Caster )                
            else
            endif 
            call DestroyGroup(UnitGroup)           
        endloop    
    call SelectUnitForPlayerSingle( Caster, GetTriggerPlayer() )
    call SetUnitInvulnerable( Caster, false )
    call SetUnitVertexColor( Caster, 255, 255, 255, 255 )
    call DestroyEffect( Phoenix )  
    set Phoenix = null    
    set Caster = null     
    set UnitGroup = null
    set TargetRandom = null
    set Target = null    
    set Amount = 0
    set R = null
    set Damage = 0
endfunction

//===========================================================================
function InitTrig_Blink_Storm_Fast_JASS takes nothing returns nothing
    set gg_trg_Blink_Storm_Fast_JASS = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Blink_Storm_Fast_JASS, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Blink_Storm_Fast_JASS, Condition( function Trig_Blink_Storm_Fast_JASS_Conditions ) )
    call TriggerAddAction( gg_trg_Blink_Storm_Fast_JASS, function Trig_Blink_Storm_Fast_JASS_Actions )
endfunction

lots of leaks and bjs, but it works
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top