function Trig_Toss_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A004'
endfunction
function Toss_Unit_Group takes nothing returns boolean
if ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_ANCIENT) == true ) then
return false
endif
if IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) then
return false
elseif IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING) then
return false
elseif GetFilterUnit() == GetSpellAbilityUnit() then
return false
elseif IsUnitDeadBJ(GetFilterUnit()) then
return false
endif
return true
endfunction
function Toss_Destroy_Trees takes nothing returns nothing
call KillDestructable( GetEnumDestructable() )
endfunction
function TossFX takes nothing returns nothing
local effect f= bj_lastCreatedEffect
call TriggerSleepAction(0.4)
call DestroyEffect(f)
set f=null
endfunction
function Toss_Movement takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u=GetHandleUnit(t,"t")
local real b=GetHandleReal(t,"r")
local real n=GetHandleReal(t,"n")
local real d=GetHandleReal(t,"d")
local location l=GetHandleLocation(t,"l")
local real x=-d+(d*(b/50))
local location m=PolarProjectionBJ(l,x,n)
local real y=((b-25)*(b-25))
call SetUnitPositionLoc(u,m)
call SetUnitFlyHeight( u, ( 775-y ) , 10000.00 )
if GetRandomInt(1,4)==2 then
call AddSpecialEffectTargetUnitBJ( "origin", u, "Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl" )
call TriggerExecute(gg_trg_DestroyFX)
endif
set b=b+1
call SetHandleReal(t,"r",b)
set t=null
set u=null
set b=0
set n=0
set d=0
set l=null
set x=0
call RemoveLocation(m)
set m=null
set y=0
endfunction
function Trig_Toss_Actions takes nothing returns nothing
local group g=CreateGroup()
local unit c=GetTriggerUnit()
local unit a=null
local location l=GetSpellTargetLoc()
local timer t=null
local real b=1
local real d=0
local real n=0
call GroupEnumUnitsInRange(g,GetUnitX(c),GetUnitY(c),275,Condition(function Toss_Unit_Group))
set a=GroupPickRandomUnit(g)
call GroupClear(g)
if a!=null then
call SetUnitAnimationByIndex(c,4)
call PauseUnitBJ( true, a )
call SetUnitPathing( a, false )
call SetUnitFacingToFaceLocTimed( a, l, 0 )
call UnitAddAbilityBJ( 'A002', a )
call UnitRemoveAbilityBJ( 'A002', a )
set t=CreateTimer()
call SetHandleHandle(t,"t",a)
call SetHandleReal(t,"r",b)
set d = DistanceBetweenPoints(GetUnitLoc(c), l)
set n= AngleBetweenPoints(GetUnitLoc(c), l)
call SetHandleReal(t,"d",d)
call SetHandleReal(t,"n",n)
call SetHandleHandle(t,"l",l)
call TimerStart(t,0.02,true,function Toss_Movement)
call TriggerSleepAction(1.0)
call RemoveLocation(l)
set l=GetHandleLocation(t,"l")
call RemoveLocation(l)
call FlushHandleLocals(t)
call PauseTimer(t)
call DestroyTimer(t)
call SetUnitFlyHeightBJ( a, GetUnitDefaultFlyHeight(a), 10000.00 )
call PauseUnitBJ( false, a )
call SetUnitPathing( a, true )
set l=GetUnitLoc(a)
call DestroyEffect(AddSpellEffectByIdLoc('A0BZ', EFFECT_TYPE_TARGET, l))
call TerrainDeformationRippleBJ( 0.2, true, l, 1.00, 300.00, 96.00, 1, 64.00 )
call UnitDamageTargetBJ( c, a, 38.00 * I2R(GetUnitAbilityLevelSwapped('A004', c)) , ATTACK_TYPE_NORMAL, DAMAGE_TYPE_DEMOLITION )
set g = GetUnitsInRangeOfLocAll(300.00, l)
loop
set a = FirstOfGroup(g)
exitwhen a == null
call GroupRemoveUnit(g,a)
call UnitDamageTargetBJ( c, a, 75.00 * I2R(GetUnitAbilityLevelSwapped('A004', c)) , ATTACK_TYPE_NORMAL, DAMAGE_TYPE_DEMOLITION )
endloop
call EnumDestructablesInCircleBJ( 300,l , function Toss_Destroy_Trees )
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetLocationX(l),GetLocationY(l)))
endif
call DestroyGroup(g)
set g=null
set c=null
set a=null
call RemoveLocation(l)
set l=null
set t=null
set b=0
set n=0
set d=0
endfunction
//===========================================================================
function InitTrig_Toss takes nothing returns nothing
set gg_trg_Toss = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Toss, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Toss, Condition( function Trig_Toss_Conditions ) )
call TriggerAddAction( gg_trg_Toss, function Trig_Toss_Actions )
endfunction