wellwish3r
wishes wells.
- Reaction score
- 52
JASS:
set index = i
if D<i>.mult == false then
call GroupAddUnit(D<i>.multgrp,D<i>.targ)
else
set multiple = true
endif</i></i></i>
D.mult is false here, so the unit D.targ should get added to the D.multgrp group right?
So then later there is a GroupEnumUnitsInRangeOfLoc() Which has this as a condition (index is a global integer):
JASS:
if (IsUnitInGroup(u,D[index].multgrp) == D[index].mult == true) or (IsUnitInGroup(u,D[index].multgrp) == false) then
This if statement however seems to allways be true. I don't understand why...
Here is the whole thing if that helps (kinda lengthy)
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
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 location array loc2
local group array grp
local texttag array txt
local effect array sfx
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 grp<i> = CreateGroup()
set txt<i> = CreateTextTag()
set loc2<i> = GetUnitLoc(D<i>.targ)
call TL_Unit ("HWPB", D<i>.caster, D<i>.targ,.7, true, 1, 0)
set sfx<i> = 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(txt<i>,I2S(R2I(D<i>.amount)),TextTagSize2Height(8.00))
call SetTextTagPos(txt<i>,GetLocationX(loc2<i>),GetLocationY(loc2<i>),150)
call SetTextTagColor(txt<i>,51,255,0,255)
call SetTextTagPermanent(txt<i>,false)
call SetTextTagLifespan(txt<i>, .67)
call SetTextTagFadepoint(txt<i>, 0.47)
call SetTextTagVelocityBJ( txt<i>, 250.00, 90 )
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,D<i>.targ)
else
set multiple = true
endif
call GroupEnumUnitsInRangeOfLoc(grp<i>,loc2<i>,D<i>.aoe,Condition(function MatchPlayerType))
call RemoveLocation(loc2<i>)
set D<i>.targ = GroupPickRandomUnit(grp<i>)
call DestroyGroup(grp<i>)
set D<i>.bounce = (D<i>.bounce) - 1
if D<i>.bounce == 0 then
set D<i>.end = true
endif
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
call LWave.destroy()
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>