I need some help with my chain heal spell...The problem i have is that, it heals up to 16 units, but it doesn't show up the special effect for more than 3...Can any1 tell me how to fix that?
Here is the spell code:
If you have found any leaks or other bugs than i mentioned, pls tell me what are they and how to fix them...
Here is the spell code:
JASS:
function Cond takes nothing returns boolean
return GetSpellAbilityId() == 039;A002039;
endfunction
function ChainHeal takes nothing returns nothing
local unit cast = GetTriggerUnit()
local unit prevtarg
local unit targ = GetSpellTargetUnit()
local unit nexttarg
local location p = GetUnitLoc(targ)
local group postargets = GetUnitsInRangeOfLocAll( 500.00 , p)
local group donetargets = CreateGroup()
local integer noofdone = 0
local integer heroint = GetHeroStatBJ(bj_HEROSTAT_INT, cast, true)
local real x1 = GetUnitX(cast)
local real y1 = GetUnitY(cast)
local real x2 = GetUnitX(targ)
local real y2 = GetUnitY(targ)
local lightning lightA
local lightning lightB
if IsPlayerAlly(GetOwningPlayer(targ), GetOwningPlayer(cast)) == true and IsUnitInGroup( targ , donetargets ) == false then
set lightA = AddLightning("HWPB" , true , x1, y1 , x2 , y2 )
set lightB = AddLightning("HWSB" , true , x1, y1 , x2 , y2 )
call SetUnitLifeBJ(targ , ( GetUnitStateSwap(UNIT_STATE_LIFE, targ) + ( 3 * heroint)))
endif
set nexttarg = GroupPickRandomUnit(postargets)
call RemoveLocation(p)
set p = GetUnitLoc(nexttarg)
set postargets = GetUnitsInRangeOfLocAll(500.00, p)
call GroupAddUnitSimple( targ, donetargets )
call GroupRemoveGroup( donetargets, postargets )
set prevtarg = targ
set targ = nexttarg
set heroint = ( ( heroint * 3 ) / 4 )
set x1 = GetUnitX(prevtarg)
set y1 = GetUnitY(prevtarg)
set x2 = GetUnitX(targ)
set y2 = GetUnitY(targ)
call TriggerSleepAction(0.01)
if lightA != null then
call DestroyLightning ( lightA )
endif
if lightB != null then
call DestroyLightning ( lightB )
endif
set lightA = null
set lightB = null
loop
exitwhen noofdone == 16 or targ == null or heroint == 0
if IsPlayerAlly(GetOwningPlayer(targ), GetOwningPlayer(cast)) == true and IsUnitInGroup( targ , donetargets ) == false then
set lightA = AddLightning("HWPB" , true , x1, y1 , x2 , y2 )
set lightB = AddLightning("HWSB" , true , x1, y1 , x2 , y2 )
call SetUnitLifeBJ(targ , ( GetUnitStateSwap(UNIT_STATE_LIFE, targ) + ( 3 * heroint)))
endif
set nexttarg = GroupPickRandomUnit(postargets)
call RemoveLocation(p)
set p = GetUnitLoc(nexttarg)
set postargets = GetUnitsInRangeOfLocAll(500.00, p)
call GroupAddUnitSimple( targ, donetargets )
call GroupRemoveGroup( donetargets, postargets )
set prevtarg = targ
set targ = nexttarg
set heroint = ( ( heroint * 3 ) / 4 )
call TriggerSleepAction(0.01)
if lightA != null then
call DestroyLightning ( lightA )
endif
if lightB != null then
call DestroyLightning ( lightB )
endif
set lightA = null
set lightB = null
endloop
set cast = null
set targ = null
set prevtarg = null
set nexttarg = null
set p = null
set postargets = null
set donetargets = null
endfunction
function InitTrig_ChainHeal takes nothing returns nothing
set gg_trg_ChainHeal = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( gg_trg_ChainHeal, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_ChainHeal, Condition(function Cond))
call TriggerAddAction( gg_trg_ChainHeal, function ChainHeal)
endfunction
If you have found any leaks or other bugs than i mentioned, pls tell me what are they and how to fix them...