H
H5N1
Guest
I've created a slide spell for a Dire Mammoth model unit. I want the Mammoth to appear as though it is running during the spell. Is there a way I can get the model to play the Walk Fast animation during the spell? All it does right now is appear as though he is sliding on ice. Here is my spell so far:
Code:
function Trig_Icecrown_Snowplow_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A007'
endfunction
function GetAoe takes unit u returns real
if UnitHasBuffBJ( u, 'B000' ) == true then
return 175.00
else
return 125.00
endif
endfunction
function GetStep takes nothing returns real
return 20.00
endfunction
function Damage takes unit u returns real
return (20.00 * (GetUnitAbilityLevel(u, 'A007')*0.25+.50))
endfunction
function Snowplow takes nothing returns nothing
local timer snowplow = GetExpiredTimer()
local unit trig = H2U(GetHandleHandle( snowplow, "trig" ))
local real dist = GetHandleReal( snowplow, "dist" )
local real N = GetHandleReal( snowplow, "N" )
local real angle = GetHandleReal( snowplow, "angle" )
local real AoE = GetAoe(trig)
local real damage = Damage(trig)
local group g = CreateGroup()
local group g1 = CreateGroup()
local unit u
//add all units into group g
call GroupAddUnit( g, trig )
set g1 = GetUnitsInRangeOfLocAll( AoE, PolarProjectionBJ( GetUnitLoc(trig), 60, angle ) )
loop
set u = FirstOfGroup(g1)
exitwhen u == null
call GroupRemoveUnit( g1, u )
if IsUnitEnemy( u, GetOwningPlayer(trig) ) == true then
call GroupAddUnit( g, u )
endif
endloop
//move units
if ((N <= dist) and (not (IsUnitType(trig,UNIT_TYPE_DEAD)))) then
set N = N + GetStep()
call SetHandleReal (snowplow, "N", N)
loop
set u = FirstOfGroup(g)
exitwhen u == null
call GroupRemoveUnit( g, u )
call SetUnitPositionLoc( u, PolarProjectionBJ(GetUnitLoc(u), GetStep(), angle))
if u != trig then
call UnitDamageTargetBJ( trig, u, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
endif
endloop
else
call PauseTimer(snowplow)
call PauseUnit( trig, false )
call ResetUnitAnimation( trig )
call SetUnitPathing( trig, true )
set trig = null
call FlushHandleLocals(snowplow)
call DestroyTimer(snowplow)
endif
endfunction
function Trig_Icecrown_Snowplow_Actions takes nothing returns nothing
local unit trig = GetTriggerUnit()
local location p = GetSpellTargetLoc()
local real angle = AngleBetweenPoints( GetUnitLoc(trig), p )
local real dist = DistanceBetweenPoints( GetUnitLoc(trig), p)
local timer snowplow = CreateTimer()
call PauseUnit( trig, true )
call SetUnitAnimation( trig, "walk fast" )
call SetUnitPathing( trig, false )
call SetHandleHandle(snowplow, "trig", trig)
call SetHandleReal(snowplow, "angle", angle)
call SetHandleReal(snowplow, "dist", dist)
call TimerStart(snowplow, 0.05, true, function Snowplow)
endfunction
//===========================================================================
function InitTrig_Icecrown_Snowplow takes nothing returns nothing
set gg_trg_Icecrown_Snowplow = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Icecrown_Snowplow, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Icecrown_Snowplow, Condition( function Trig_Icecrown_Snowplow_Conditions ) )
call TriggerAddAction( gg_trg_Icecrown_Snowplow, function Trig_Icecrown_Snowplow_Actions )
endfunction