Naga'sShadow
Ultra Cool Member
- Reaction score
- 49
I'm working on a chain spell and while I've got most of the spell to work, or at least not give errors, the secondary function used to select the next target is acting weird.
Here's the code.
While the built in syntax checker has a field day the VJASS Phraser only has an issue with the return of the function Retargeting. I'm not sure if the code will even work at this point so my main question is what should the return be, secondary questions include will this work? Are there any other glaring mistakes and is there a easier way to select units?
Thanks in advance.
Here's the code.
JASS:
function Mana_Drain_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 039;A00E039;
endfunction
function Retargeting takes group returns unit //This gets a unexpected returns error.
if IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL) == false and IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false and (GetUnitState(GetFilterUnit(), UNIT_STATE_MANA) < 0) and IsUnitInGroup(GetFilterUnit(), targetes) == false then
return GetFilterUnit()
endif
endfunction
function Mana_Drain_Actions takes nothing returns nothing
local unit Caster = GetTriggerUnit()
local unit target = GetSpellAbilityUnit()
local unit oldtarget = Caster
local location CasterP = GetUnitLoc(Caster)
local location targetP
local location oldtargetP = CasterP
local group targets
local integer level = GetUnitAbilityLevel(Caster, 039;A00E039;)
local real mana = (level * 40) + 100
local lightning array bluebolt
local integer bounces = level + 2
local integer N = 1
local string targetart = "Abilities\\Spells\\Other\\Drain\\ManaDrainTarget.mdl"
local real reduction
local real manadrained
local effect array art
loop
exitwhen N == bounces
set targetP = GetUnitLoc(target)
set oldtargetP = GetUnitLoc(oldtarget)
set reduction = mana * .15 * (N - 1)
call AddLightningLoc("DRAM", oldtargetP, targetP)
set bj_lastCreatedLightning = bluebolt[N]
call AddSpecialEffectLoc(targetart, targetP)
set bj_lastCreatedEffect = art[N]
call SetUnitState(target, UNIT_STATE_MANA, GetUnitState(target, UNIT_STATE_MANA) - (mana - reduction))
if GetUnitState(target, UNIT_STATE_MANA) <= mana - reduction then
set manadrained = GetUnitState(target, UNIT_STATE_MANA)
else
set manadrained = mana - reduction
endif
call SetUnitState(Caster, UNIT_STATE_MANA, GetUnitState(Caster, UNIT_STATE_MANA) + manadrained)
call GroupAddUnit(targets, target)
set oldtarget = target
set target = GroupPickRandomUnit(GetUnitsInRangeOfLocMatching(400, targetP, Condition( function Retargeting)))
set N = N + 1
set targetP = null
set oldtargetP = null
call PolledWait(.2)
endloop
set N = 1
loop
exitwhen N == bounces
call DestroyLightning(bluebolt[N])
call DestroyEffect(art[N])
call PolledWait(.2)
set N = N + 1
endloop
set Caster = null
set target = null
set oldtarget = null
set CasterP = null
set targetP = null
set oldtargetP = null
call DestroyGroup(targets)
endfunction
//==== Init Trigger Mana Drain ====
function InitTrig_Mana_Drain takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, Condition(function Mana_Drain_Conditions))
call TriggerAddAction(t, function Mana_Drain_Actions)
set t = null
endfunction
While the built in syntax checker has a field day the VJASS Phraser only has an issue with the return of the function Retargeting. I'm not sure if the code will even work at this point so my main question is what should the return be, secondary questions include will this work? Are there any other glaring mistakes and is there a easier way to select units?
Thanks in advance.