wellwish3r
wishes wells.
- Reaction score
- 52
Solved. (After 3 hours of staring at it >.>)
EDIT: Okay thats how it is now:
the issue was that the was not an array, and it was destroyed in the loop, so whenever the loop ran more than once, there was no group anymore, and so the whole thing messed up. I Just made the group part of the struct now.
EDIT: Okay thats how it is now:
JASS:
scope HealWave
struct HealingWave
unit caster
unit targ
real aoe
real amount
real bounce
real reducer
player owner
boolean healmech
boolean end
boolean mult
group multgrp = CreateGroup()
location loc
group grp
texttag txt = CreateTextTag()
effect sfx
method onDestroy takes nothing returns nothing
call DestroyGroup(.multgrp)
endmethod
endstruct
globals
private integer Total = 0
private HealingWave array D
private timer T=CreateTimer()
private boolean mechanical
private player owningPlayer
private integer index = 0
private boolean multiple
endglobals
private function MatchPlayerType takes nothing returns boolean
local unit u = GetFilterUnit()
if (IsUnitInGroup(u,D[index].multgrp) == D[index].mult == true) or (IsUnitInGroup(u,D[index].multgrp) == false) then
if IsUnitAlly(u,owningPlayer) == true and IsUnitType(u,UNIT_TYPE_STRUCTURE) == false and GetFilterUnit() != D[index].caster and GetPlayerController(GetOwningPlayer(u)) == MAP_CONTROL_USER then
if mechanical == false and IsUnitType(u,UNIT_TYPE_MECHANICAL) then
set u = null
return false
endif
set u =null
return true
endif
endif
return false
endfunction
private function LoopActions takes nothing returns nothing
local integer i = 0
local unit u
loop
exitwhen i>=Total
if D<i>.end then
call D<i>.destroy()
set Total=Total-1
if Total > 0 then
set D<i>=D[Total]
set i=i-1
else
call PauseTimer(T)
endif
else
set D<i>.grp = CreateGroup()
set D<i>.txt = CreateTextTag()
set D<i>.loc = GetUnitLoc(D<i>.targ)
call TL_Unit ("HWPB", D<i>.caster, D<i>.targ,.7, true, 1, 0)
set D<i>.sfx = AddSpecialEffectTarget("Abilities\\Spells\\Orc\\HealingWave\\HealingWaveTarget.mdl",D<i>.targ,"origin")
call SetUnitState(D<i>.targ,UNIT_STATE_LIFE,(GetUnitState(D<i>.targ,UNIT_STATE_LIFE)+D<i>.amount))
call SetTextTagText(D<i>.txt,I2S(R2I(D<i>.amount)),TextTagSize2Height(8.00))
call SetTextTagPos(D<i>.txt,GetLocationX(D<i>.loc),GetLocationY(D<i>.loc),150)
call SetTextTagColor(D<i>.txt,51,255,0,255)
call SetTextTagPermanent(D<i>.txt,false)
call SetTextTagLifespan(D<i>.txt, .67)
call SetTextTagFadepoint(D<i>.txt, 0.47)
call SetTextTagVelocityBJ( D<i>.txt, 250.00, 90 )
set u = D<i>.targ
set D<i>.amount = (D<i>.amount)*(1-D<i>.reducer)
set D<i>.caster = D<i>.targ
set mechanical = D<i>.healmech
set owningPlayer = D<i>.owner
set index = i
if D<i>.mult == false then
call GroupAddUnit(D<i>.multgrp,u)
set u =null
else
set multiple = true
endif
call GroupEnumUnitsInRangeOfLoc(D<i>.grp,D<i>.loc,D<i>.aoe,Condition(function MatchPlayerType))
call BJDebugMsg("Loop "+I2S(i)+" has "+I2S(CountUnitsInGroup(D<i>.grp))+" in the Group and the count is "+R2S(D<i>.bounce))
call RemoveLocation(D<i>.loc)
set D<i>.targ = GroupPickRandomUnit(D<i>.grp)
set D<i>.bounce = (D<i>.bounce) - 1
if D<i>.bounce == 0 or CountUnitsInGroup(D<i>.grp) == 0 then
set D<i>.end = true
endif
call DestroyGroup(D<i>.grp)
endif
set i = i+1
endloop
endfunction
function HealWave takes unit c, unit t, real ae, real am, real bo, real red, player own, boolean mech, boolean m returns nothing
local HealingWave LWave = HealingWave.create()
set LWave.caster = c
set LWave.targ = t
set LWave.aoe = ae
set LWave.amount = am
set LWave.bounce = bo
set LWave.reducer = red
set LWave.owner = own
set LWave.healmech = mech
set LWave.end = false
set LWave.mult = m
if Total == 0 then
call TimerStart(T,0.3,true,function LoopActions)
endif
set D[Total] = LWave
set Total = Total+1
endfunction
endscope
</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>
the issue was that the
JASS:
group grp