function Trig_Shinra_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A001'
endfunction
function shinragroup takes nothing returns nothing
local unit pickedd = GetEnumUnit ()
local unit shinra = LoadUnitHandle(udg_table,udg_h,1)
local group damaged = LoadGroupHandle(udg_table,udg_h,6)
local real sx = LoadReal(udg_table,udg_h,2)
local real sy = LoadReal(udg_table,udg_h,3)
local real gx = GetUnitX(pickedd)
local real gy = GetUnitY(pickedd)
local real angled = bj_RADTODEG * Atan2(gy - sy, gx - sx)
local real x = gx + 32 * Cos(angled * bj_DEGTORAD)
local real y = gy + 32 * Sin(angled * bj_DEGTORAD)
if IsUnitType(pickedd, UNIT_TYPE_STRUCTURE) == false and IsUnitAlly(pickedd, GetOwningPlayer(shinra)) == false then
call SetUnitPosition(pickedd,x,y)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",gx,gy))
endif
if IsUnitInGroup(pickedd, damaged) == false and IsUnitAlly(pickedd, GetOwningPlayer(shinra)) == false then
call GroupAddUnit(damaged,pickedd)
call UnitDamageTarget(shinra,pickedd,(125 * I2R(GetUnitAbilityLevel(shinra,'A001'))),true,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endif
set shinra = null
set pickedd = null
set damaged = null
endfunction
function shinradamage takes nothing returns boolean
return true
endfunction
function takenn takes nothing returns nothing
local timer n = GetExpiredTimer ()
local unit shinra = LoadUnitHandle(udg_table,GetHandleId(n),1)
local real sx = LoadReal(udg_table,GetHandleId(n),2)
local real sy = LoadReal(udg_table,GetHandleId(n),3)
local effect ss = LoadEffectHandle(udg_table,GetHandleId(n),4)
local real expire = LoadReal(udg_table,GetHandleId(n),5)
local group s
if expire <= 0 then
call SetUnitTimeScale(shinra, 100 * 0.01)
call PauseUnit(shinra,false)
call DestroyEffect(ss)
call DestroyGroup(LoadGroupHandle(udg_table,GetHandleId(n),6))
call FlushChildHashtable(udg_table,GetHandleId(n))
set n = null
set shinra = null
set ss = null
set s = null
call DestroyTimer(GetExpiredTimer())
else
call SaveReal(udg_table,GetHandleId(n),5,expire - 2.00)
set udg_h = GetHandleId(n)
set s = CreateGroup ()
call GroupEnumUnitsInRange(s,sx,sy,600,function shinradamage)
call ForGroup(s,function shinragroup)
call DestroyGroup(s)
set n = null
set shinra = null
set ss = null
set s = null
endif
endfunction
function Trig_Shinra_Actions takes nothing returns nothing
local timer n = CreateTimer ()
local unit shinra = GetTriggerUnit ()
local real sx = GetUnitX(shinra)
local real sy = GetUnitY(shinra)
local real expire = 34.00
local effect ss
local group damaged = CreateGroup ()
set ss = AddSpecialEffectTarget ("cronosphere.mdl",shinra,"origin" )
call PauseUnit(shinra,true)
call SetUnitTimeScale(shinra, 200 * 0.01)
call SetUnitAnimation( shinra, "Spell One" )
call SaveUnitHandle(udg_table,GetHandleId(n),1,shinra)
call SaveReal(udg_table,GetHandleId(n),2,sx)
call SaveReal(udg_table,GetHandleId(n),3,sy)
call SaveEffectHandle(udg_table,GetHandleId(n),4,ss)
call SaveReal(udg_table,GetHandleId(n),5,expire)
call SaveGroupHandle(udg_table,GetHandleId(n),6,damaged)
call TimerStart(n,0.02,true,function takenn)
set n = null
set shinra = null
set ss = null
endfunction
//===========================================================================
function InitTrig_Shinra takes nothing returns nothing
local trigger shinrar = CreateTrigger( )
call Preload("cronosphere.mdl")
call Preload("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl")
call TriggerRegisterAnyUnitEventBJ( shinrar , EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( shinrar , Condition( function Trig_Shinra_Conditions ) )
call TriggerAddAction( shinrar , function Trig_Shinra_Actions )
set shinrar = null
endfunction