Выявление утечек в коде.
Привет всем, помогите пожалуйста найти утечки в коде спавна двух типов мобов у 4х фракций. Все по гайдам, но начинает лагать со временем. Заранее спасибо.
function Trig_CreepsCenter1_Actions takes nothing returns nothing
local group deter1
local group insp1
local group absorb1
local group destr1
call CreateNUnitsAtLoc( 5, 'o000', Player(0), Location(0.00, 5300.00), 0.00 )
set deter1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'o001', Player(0), Location(0.00, 5300.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), deter1 )
call GroupPointOrderLocBJ( deter1, "attack", Location(0.00, -5300.00) )
call DestroyGroup (deter1)
call CreateNUnitsAtLoc( 5, 'h000', Player(1), Location(-5300.00, 0.00), 0.00 )
set insp1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'h001', Player(1), Location(-5300.00, 0.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), insp1 )
call GroupPointOrderLocBJ( insp1, "attack", Location(5300.00, 0.00) )
call DestroyGroup (insp1)
call CreateNUnitsAtLoc( 5, 'n000', Player(3), Location(0.00, -5300.00), 0.00 )
set absorb1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'n001', Player(3), Location(0.00, -5300.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), absorb1 )
call GroupPointOrderLocBJ( absorb1, "attack", Location(0.00, 5300.00) )
call DestroyGroup (absorb1)
call CreateNUnitsAtLoc( 5, 'u000', Player(6), Location(5300.00, 0.00), 0.00 )
set destr1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'u001', Player(6), Location(5300.00, 0.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), destr1 )
call GroupPointOrderLocBJ( destr1, "attack", Location(-5300.00, 0.00) )
call DestroyGroup (destr1)
endfunction
local group deter1
local group insp1
local group absorb1
local group destr1
call CreateNUnitsAtLoc( 5, 'o000', Player(0), Location(0.00, 5300.00), 0.00 )
set deter1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'o001', Player(0), Location(0.00, 5300.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), deter1 )
call GroupPointOrderLocBJ( deter1, "attack", Location(0.00, -5300.00) )
call DestroyGroup (deter1)
call CreateNUnitsAtLoc( 5, 'h000', Player(1), Location(-5300.00, 0.00), 0.00 )
set insp1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'h001', Player(1), Location(-5300.00, 0.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), insp1 )
call GroupPointOrderLocBJ( insp1, "attack", Location(5300.00, 0.00) )
call DestroyGroup (insp1)
call CreateNUnitsAtLoc( 5, 'n000', Player(3), Location(0.00, -5300.00), 0.00 )
set absorb1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'n001', Player(3), Location(0.00, -5300.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), absorb1 )
call GroupPointOrderLocBJ( absorb1, "attack", Location(0.00, 5300.00) )
call DestroyGroup (absorb1)
call CreateNUnitsAtLoc( 5, 'u000', Player(6), Location(5300.00, 0.00), 0.00 )
set destr1 = GetLastCreatedGroup()
call CreateNUnitsAtLoc( 2, 'u001', Player(6), Location(5300.00, 0.00), 0.00 )
call GroupAddGroup( GetLastCreatedGroup(), destr1 )
call GroupPointOrderLocBJ( destr1, "attack", Location(-5300.00, 0.00) )
call DestroyGroup (destr1)
endfunction
===========================================================================
function InitTrig_CreepsCenter1 takes nothing returns nothing
set gg_trg_CreepsCenter1 = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_CreepsCenter1, 10.00 )
call TriggerAddAction( gg_trg_CreepsCenter1, function Trig_CreepsCenter1_Actions )
endfunction
function InitTrig_CreepsCenter1 takes nothing returns nothing
set gg_trg_CreepsCenter1 = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_CreepsCenter1, 10.00 )
call TriggerAddAction( gg_trg_CreepsCenter1, function Trig_CreepsCenter1_Actions )
endfunction
Принятый ответ
nvc123, внутри GetRectCenter нет утечки
// blizzard.j:1772
function GetRectCenter takes rect whichRect returns location
return Location(GetRectCenterX(whichRect), GetRectCenterY(whichRect))
endfunction
а эвент регистрируется 1 раз, так что можно забить
// blizzard.j:7959
function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, r)
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
Другое дело, что у order есть утечка, но это нативно, она минимальная и это никак не исправляется.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
делаешь в карте области
set g = units within XXX of tpoint удовл. нужным тебе условиям
custom script call RemoveLocation (udg_tpoint)
set tpoint - центр уже другой нужной тебе области
pick every unit in g и идти нападая на врагов в tpoint
custom script call RemoveLocation (udg_tpoint)
custom script call DestroyGroup (udg_g)
если что поправьте на гуи давно не
Отредактирован LordDracula
Добавь себе эту функцию и используй ее
а где тут утечки вообще?
ты говоришь что утечки все-таки есть, хотя и мало - где?
правда они настолько не значительны что не влияют ни на что
VVelikolepniy, функция Location создаёт точку
если точка была создана то её надо удалить
чего ты не делаешь
лучше не использовать точки а напрямую работать с координатами
а юнитов создавать циклом
так и группы удалять не придётся
и да
все локальные переменные после удаления объекта надо очищать
вот пример цикла
Отредактирован ScorpioT1000
я не про скрин а про карту
и я и говорю что на них можно забить
Отредактирован nvc123
она просто циклом создаёт юнитов и добавляет их в группу
группа это просто набор юнитов
она не имеет никакого отношения к тому как идут юниты и прочему
Отредактирован MpW