tgonta
Pixelated Sora Coder
offline
Опыт:
3,160
Активность:
|
Причина торможения спелла
Я хочу поинтересоваться, какова причина торможения этого спелла, хотя вроде я его хорошо отоптимизировал.
» Триггер 1
function Trig_DrakonaiUltCast_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A01E'
endfunction
function Trig_DrakonaiUltCast_Actions takes nothing returns nothing
local integer i = 1
set udg_DrakonaiCaster = GetTriggerUnit()
call EnableTrigger(gg_trg_DrakonaiCreateFire)
loop
exitwhen i > 8
set udg_DrakonaiDummy[i] = CreateUnit(GetOwningPlayer(udg_DrakonaiCaster),'h00I',GetUnitX(udg_DrakonaiCaster),GetUnitY(udg_DrakonaiCaster),45 * i)
call SetUnitAbilityLevel(udg_DrakonaiDummy[i],'A01H',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbilityId()))
call SetUnitAbilityLevel(udg_DrakonaiDummy[i],'A01G',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbilityId()))
set i = i + 1
endloop
call EnableTrigger(gg_trg_PeriodicUltDrakonai)
call TriggerSleepAction(.9)
call DisableTrigger(gg_trg_PeriodicUltDrakonai)
call DisableTrigger(gg_trg_DrakonaiCreateFire)
set i = 1
loop
exitwhen i > 8
call IssueImmediateOrder(udg_DrakonaiDummy[i], "stomp")
set i = i + 1
endloop
call TriggerSleepAction(.4)
set i = 1
loop
exitwhen i > 8
call RemoveUnit(udg_DrakonaiDummy[i])
set udg_DrakonaiDummy[i] = null
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_DrakonaiUltCast takes nothing returns nothing
set gg_trg_DrakonaiUltCast = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_DrakonaiUltCast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_DrakonaiUltCast, Condition( function Trig_DrakonaiUltCast_Conditions ) )
call TriggerAddAction( gg_trg_DrakonaiUltCast, function Trig_DrakonaiUltCast_Actions )
endfunction
» Триггер 2
function Trig_DrakonaiDeleteFire_Conditions takes nothing returns boolean
return GetUnitTypeId(GetDyingUnit()) == 'h00J'
endfunction
function Trig_DrakonaiDeleteFire_Actions takes nothing returns nothing
call RemoveUnit( GetDyingUnit() )
endfunction
//===========================================================================
function InitTrig_DrakonaiDeleteFire takes nothing returns nothing
set gg_trg_DrakonaiDeleteFire = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_DrakonaiDeleteFire, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_DrakonaiDeleteFire, Condition( function Trig_DrakonaiDeleteFire_Conditions ) )
call TriggerAddAction( gg_trg_DrakonaiDeleteFire, function Trig_DrakonaiDeleteFire_Actions )
endfunction
» Триггер 3
function FireCreate takes nothing returns nothing
local unit array u
local integer i = 1
loop
exitwhen i > 8
set u[i] = CreateUnit(GetOwningPlayer(udg_DrakonaiCaster),'h00J',GetUnitX(udg_DrakonaiDummy[i]),GetUnitY(udg_DrakonaiDummy[i]),270.)
call SetUnitAbilityLevel(u[i],'A01F',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbilityId()))
call SetUnitAbilityLevel(u[i],'A01I',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbilityId()))
set u[i] = null
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_DrakonaiCreateFire takes nothing returns nothing
local trigger firecreate = CreateTrigger()
call TriggerRegisterTimerEventPeriodic(firecreate,.15)
call TriggerAddAction(firecreate, function FireCreate)
set firecreate = null
endfunction
» Триггер 4
function Trig_PeriodicUltDrakonai_Actions takes nothing returns nothing
local location p = GetUnitLoc(udg_DrakonaiCaster)
local real array a
local integer i = 1
loop
exitwhen i > 8
set a[i] = 45 * i
call SetUnitX(udg_DrakonaiDummy[i],GetUnitX(udg_DrakonaiDummy[i]) + 30 * Cos(a[i] * .0174532))
call SetUnitY(udg_DrakonaiDummy[i],GetUnitY(udg_DrakonaiDummy[i]) + 30 * Sin(a[i] * .0174532))
set i = i + 1
endloop
call RemoveLocation(p)
set p = null
endfunction
//===========================================================================
function InitTrig_PeriodicUltDrakonai takes nothing returns nothing
local trigger drakultperiodic = CreateTrigger()
call TriggerRegisterTimerEventPeriodic(drakultperiodic,.05)
call TriggerAddAction(drakultperiodic, function Trig_PeriodicUltDrakonai_Actions )
set drakultperiodic = null
endfunction
Этот спелл пускает в разные стороны огненные шары, но после удаления их он жутко тормозит.
|