I have 2 spells - first one is chanelling heal.
and second is spell that make all hero evade every attack. (not channeling)
If I cast first spell while second spell is already active, it will cause the effect of second spell again. How can I fixed it?
JASS:
function Trig_Ritual_of_Souls_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 039;A03G039;
endfunction
function Trig_Ritual_of_Souls_Target takes nothing returns boolean
if ( not ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true ) ) then
return false
elseif GetFilterUnit() == GetSpellAbilityUnit() then
return false
elseif (not ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) ) ) then
return false
endif
return true
endfunction
function Trig_Ritual_End takes nothing returns nothing
local unit w
call DestroyEffect(udg_Ritual)
loop
set w = FirstOfGroup(udg_SoulRitual)
exitwhen w == null
call GroupRemoveUnit(udg_SoulRitual,w)
call KillUnit(w)
endloop
endfunction
function Trig_Ritual_of_Souls_Actions takes nothing returns nothing
local unit u = GetSpellAbilityUnit()
local location l = GetUnitLoc(u)
local trigger t
local unit w
local unit n
local group g = GetUnitsInRangeOfLocMatching(600 ,l ,Filter(function Trig_Ritual_of_Souls_Target) )
loop
set w = FirstOfGroup(g)
exitwhen w == null
call GroupRemoveUnit(g,w)
set n = CreateUnit (Player(bj_PLAYER_NEUTRAL_VICTIM), 039;h001039;, GetUnitX(u), GetUnitY(u), GetUnitFacing(w) )
call GroupAddUnit(udg_SoulRitual, n)
call UnitAddAbility(n, 039;A03H039;)
call SetUnitAbilityLevel( n, 039;A03H039;, GetUnitAbilityLevel(u, 039;A03G039;))
call IssueTargetOrder( n, "drain", w )
endloop
call AddSpecialEffectTargetUnitBJ( "overhead", u, "Abilities\\Spells\\Undead\\AntiMagicShell\\AntiMagicShell.mdl" )
set udg_Ritual = GetLastCreatedEffectBJ()
set t=CreateTrigger()
call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_SPELL_ENDCAST)
call TriggerAddAction(t,function Trig_Ritual_End)
call RemoveLocation(l)
call DestroyGroup(g)
endfunction
//===========================================================================
function InitTrig_Ritual_of_Souls takes nothing returns nothing
set gg_trg_Ritual_of_Souls = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( gg_trg_Ritual_of_Souls, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Ritual_of_Souls, Condition( function Trig_Ritual_of_Souls_Conditions ) )
call TriggerAddAction( gg_trg_Ritual_of_Souls, function Trig_Ritual_of_Souls_Actions )
endfunction
and second is spell that make all hero evade every attack. (not channeling)
JASS:
function Wraith_Touch_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 039;A03N039;
endfunction
function Wraith_Touch_Filter takes nothing returns boolean
return IsUnitType(GetFilterUnit(),UNIT_TYPE_HERO) and IsUnitAlly(GetFilterUnit(),GetOwningPlayer(GetTriggerUnit()))
endfunction
function Wraith_Touch_Buff takes nothing returns boolean
return UnitHasBuffBJ(GetFilterUnit(), 039;B00K039;) == false
endfunction
function Wraith_Touch_Debuff takes nothing returns nothing
call UnitRemoveAbility( GetEnumUnit(), 039;A03L039; )
call SetUnitVertexColorBJ( GetEnumUnit(), 255, 255, 255, .0 )
call SetUnitPathing( GetEnumUnit(), true )
endfunction
function Wraith_Touch_End takes nothing returns nothing
local rect l = GetPlayableMapRect()
local group g = GetUnitsInRectMatching( l, Filter(function Wraith_Touch_Filter))
call GroupEnumUnitsInRect(g, l, Filter(function Wraith_Touch_Buff))
call ForGroup(g, function Wraith_Touch_Debuff)
endfunction
function Wraith_Touch_Actions takes nothing returns nothing
local unit c = GetTriggerUnit()
local group g = GetUnitsInRectMatching( GetPlayableMapRect(), Filter(function Wraith_Touch_Filter))
local trigger t
local unit u
local unit n
loop
set u = FirstOfGroup(g)
exitwhen u == null
call GroupRemoveUnit(g,u)
set n = CreateUnit(GetOwningPlayer(c),039;h001039;,GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
call UnitAddAbility(n, 039;A03O039;)
call SetUnitAbilityLevel(n, 039;A03O039;, GetUnitAbilityLevel(c ,039;A03N039;))
call IssueTargetOrder(n, "bloodlust", u)
call UnitApplyTimedLife(n, 039;BTLF039;, 0.5)
call SetUnitVertexColorBJ(u, 255, 255, 255, 40.0)
call SetUnitPathing(u, false)
call UnitAddAbility(u, 039;A03L039;)
endloop
call DestroyGroup(g)
set t = CreateTrigger()
call TriggerRegisterTimerEventPeriodic(t, 1.0)
call TriggerAddAction(t,function Wraith_Touch_End)
endfunction
//===========================================================================
function InitTrig_Wraith_Touch takes nothing returns nothing
set gg_trg_Wraith_Touch = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Wraith_Touch,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_Wraith_Touch, Condition(function Wraith_Touch_Conditions))
call TriggerAddAction(gg_trg_Wraith_Touch,function Wraith_Touch_Actions)
endfunction
If I cast first spell while second spell is already active, it will cause the effect of second spell again. How can I fixed it?