- Joined
- Jul 20, 2009
- Messages
- 835
How can I do this code MUI and leakless?
The local triggers are confusing me...
JASS:
function WaterHealingSpirit_Group takes nothing returns nothing
if IsUnitAlly(GetEnumUnit(),GetOwningPlayer(udg_WaterFurySpirit[4])) then
call SetUnitState(GetEnumUnit(),ConvertUnitState(2),GetUnitState(GetEnumUnit(),ConvertUnitState(2))+15*GetUnitAbilityLevel(LoadUnitHandle(udg_Hashtable,1,24),0x41303156))
endif
endfunction
function HealSharick_Conditions takes nothing returns boolean
return GetUnitState(udg_WaterFurySpirit[4],UNIT_STATE_LIFE )>0.00
endfunction
function HealSharick_Actions takes nothing returns nothing
local location l=GetUnitLoc(udg_WaterFurySpirit[4])
local group g=GetUnitsInRangeOfLocAll(500.,l)
call RemoveLocation(l)
set l=null
call ForGroup(g,function WaterHealingSpirit_Group)
call DestroyGroup(g)
set g=null
call SetUnitAnimation(udg_WaterFurySpirit[4],"attack")
call IssueImmediateOrderById(udg_WaterFurySpirit[5],852526)
endfunction
function WaterHealingSpirit_Conditions takes nothing returns boolean
return GetSpellAbilityId()==0x41303156
endfunction
function WaterHealingSpirit_Actions takes nothing returns nothing
local real x=GetLocationX(GetSpellTargetLoc())
local real y=GetLocationY(GetSpellTargetLoc())
local unit healcaster=GetSpellAbilityUnit()
local real s=.2*(GetUnitAbilityLevel(healcaster,0x41303156))+.6
local trigger HealSharick=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(HealSharick,3)
call TriggerAddCondition(HealSharick,Condition(function HealSharick_Conditions))
call TriggerAddAction(HealSharick,function HealSharick_Actions)
call EnableTrigger(HealSharick)
call SaveUnitHandle(udg_Hashtable,1,24,healcaster)
set udg_WaterFurySpirit[5]=CreateUnit(GetOwningPlayer(healcaster),0x6E303051,x,y,GetUnitFacing(healcaster))
set udg_WaterFurySpirit[4]=CreateUnit(GetOwningPlayer(healcaster),0x6E303050,x,y,GetUnitFacing(healcaster))
call SetUnitAnimation(udg_WaterFurySpirit[4],"birth" )
call QueueUnitAnimation(udg_WaterFurySpirit[4],"stand")
call SetUnitScale(udg_WaterFurySpirit[4],s,s,s)
call SetUnitVertexColor(udg_WaterFurySpirit[4], 100, 100, 100, 90)
call IssueTargetOrderById(udg_WaterFurySpirit[5],852486,udg_WaterFurySpirit[4])
call SetUnitInvulnerable(udg_WaterFurySpirit[4],true)
call TriggerSleepAction(0.50)
call SetUnitInvulnerable(udg_WaterFurySpirit[4],false )
call SetUnitAbilityLevel(udg_WaterFurySpirit[5],0x4130314E,GetUnitAbilityLevel(healcaster,0x41303156))
//call SetUnitAbilityLevel(udg_WaterFurySpirit[4],0x4130314D,GetUnitAbilityLevel(healcaster,0x41303156))
if udg_WaterSpiritsMight==true then
if GetUnitAbilityLevel(healcaster,0x41303154)==1 then
call UnitAddAbility(udg_WaterFurySpirit[4],0x41303150)
elseif GetUnitAbilityLevel(healcaster,0x41303154)==2 then
call UnitAddAbility(udg_WaterFurySpirit[4],0x41303151)
elseif GetUnitAbilityLevel(healcaster,0x41303154)==3 then
call UnitAddAbility(udg_WaterFurySpirit[4],0x41303153)
else
call UnitAddAbility(udg_WaterFurySpirit[4],0x41303152)
endif
endif
call TriggerSleepAction(14.5)
call SetUnitInvulnerable(udg_WaterFurySpirit[4],true )
call SetUnitAnimation(udg_WaterFurySpirit[4],"death")
call RemoveUnit(udg_WaterFurySpirit[5])
call DestroyTrigger(HealSharick)
set HealSharick=null
call UnitRemoveAbility(udg_WaterFurySpirit[4],0x4130314D)
call TriggerSleepAction(1.5)
call RemoveUnit(udg_WaterFurySpirit[4])
endfunction
//===========================================================================
function InitTrig_WaterHealingSpirit takes nothing returns nothing
local trigger WaterHealingSpirit = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(WaterHealingSpirit,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(WaterHealingSpirit,Condition( function WaterHealingSpirit_Conditions))
call TriggerAddAction(WaterHealingSpirit,function WaterHealingSpirit_Actions)
set WaterHealingSpirit=null
endfunction
