Добавлен 16GB
Делал я в своей мапе систему снарядов и обнаружил что, непонятно от куда появляются утечки. Всё кучу раз перепроверил, так и не понял. Убирая лишний код, оставил лишь создание юнита в вызываемой функции и его передачу.
В общем потестив я выявил следующие
В общем потестив я выявил следующие
Хэндлы отжираемые этим кодом
function Trig_eve_Actions takes nothing returns nothing
local integer i = 0
local unit u
loop
exitwhen i > 300
set u = CreateUnit(Player(0),'hpea',0,0,0)
call UnitApplyTimedLife(u,'BTLF',1.)
set u = null
set i = i+1
endloop
endfunction
//===========================================================================
function InitTrig_Clear takes nothing returns nothing
set gg_trg_Clear = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Clear, 2. )
call TriggerAddAction( gg_trg_Clear, function Trig_eve_Actions )
endfunction
А если вызывать через функцию
function CreateProjectile takes nothing returns unit
local unit u = CreateUnit(Player(0),'hpea',0,0,0)
return u
endfunction
function Trig_eve_Actions takes nothing returns nothing
local integer i = 0
local unit u
loop
exitwhen i > 300
set u = CreateProjectile()
call UnitApplyTimedLife(u,'BTLF',1.)
set u = null
set i = i+1
endloop
set u = null
endfunction
//===========================================================================
function InitTrig_Func takes nothing returns nothing
set gg_trg_Func = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Func, 2. )
call TriggerAddAction( gg_trg_Func, function Trig_eve_Actions )
endfunction
то выходит вот столько
хэндлов по сути в 5 раз больше
Кто сталкивался? как фиксили?
Ясное дело можно делать создание юнита и все действия с ним напрямую в одном триггере без функций, но хотелось бы, всё же раз бивать код на части.
Кто сталкивался? как фиксили?
Ясное дело можно делать создание юнита и все действия с ним напрямую в одном триггере без функций, но хотелось бы, всё же раз бивать код на части.
Тестовая карта xgm.guru/files/100/173044/45.w3x
Принятый ответ
Во втором случаи неудивительно, не обнуленная локлка осталась висеть в функции, пробуй юзать глобалки либо делай так:
function CreateUnitBj takes uniut u returns unit
set u = CreateUnit( Player(0), 'hpea', 0.00, 0.00, 0.00 )
return u
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
ну так она же обнуляется в триггере куда передана не?
А ну видимо нет не обнуляется.
Я недавно тоже тестил создание 100500 юнитов и смотрел что к чему, с юнитами не все так просто...
как выяснилось ивенты повешенные на конкретного юнита никуда не пропадают даже после удаления триггера и юнита .
ну там действия ещё проводятся с созданным юнитом. Я сделал как на скрине, что я выложил.