Naga'sShadow
Ultra Cool Member
- Reaction score
- 49
I'm very new to structs, so my issue may just be one of a basic error on my part.
In this trigger the unit gets an ability, ghost, as long as it casts channel. I wanted to have it check if the unit has moved as well as if it has changed orders. But currently I'm not able to pass the data between functions via structs. A debug message already informed me the "cast" in Meld_Loop was staying null. I've worked around it using GetTriggerUnit() but that won't give me the X and the Y of the unit to compare with the X and the Y on cast.
1.) Can anyone point out how I would fix that?
2.) Is there a simpler way of setting this type of trigger up?
Thanks.
JASS:
scope Meld initializer Init
globals
private integer SpellID = 039;A0AU039; //Spells Rawcode
private integer AbilID = 039;A0AV039; //Ability Rawcode
private constant string SFX = "Abilities\\Spells\\Orc\\EtherealForm\\SpiritWalkerChange.mdl" //SFX
endglobals
struct meld
unit u
real X
real Y
endstruct
private function Meld_Conditions takes nothing returns boolean
return GetSpellAbilityId() == SpellID
endfunction
private function Meld_Loop takes nothing returns boolean
local meld Data = meld.create()
local unit cast = Data.u
local real castX = Data.X
local real castY = Data.Y
return GetUnitCurrentOrder(GetTriggerUnit()) != String2OrderIdBJ("channel")
endfunction
private function Meld_Actions takes nothing returns nothing
local unit cast = GetTriggerUnit()
local real castX = GetLocationX(GetUnitLoc(cast))
local real castY = GetLocationY(GetUnitLoc(cast))
local meld Data = meld.create()
set Data.u = cast
set Data.X = castX
set Data.Y = castY
call AddSpecialEffect( SFX, castX, castY)
call UnitAddAbility(cast, AbilID)
loop
exitwhen( Meld_Loop())
call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.50))
endloop
call UnitRemoveAbility(cast, AbilID)
set cast = null
endfunction
//===========================================================================
function Init takes nothing returns nothing
local trigger trg = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( trg, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( trg, Condition(function Meld_Conditions))
call TriggerAddAction( trg, function Meld_Actions )
set trg = null
endfunction
endscope
In this trigger the unit gets an ability, ghost, as long as it casts channel. I wanted to have it check if the unit has moved as well as if it has changed orders. But currently I'm not able to pass the data between functions via structs. A debug message already informed me the "cast" in Meld_Loop was staying null. I've worked around it using GetTriggerUnit() but that won't give me the X and the Y of the unit to compare with the X and the Y on cast.
1.) Can anyone point out how I would fix that?
2.) Is there a simpler way of setting this type of trigger up?
Thanks.