Делал я в своей мапе систему снарядов и обнаружил что, непонятно от куда появляются утечки. Всё кучу раз перепроверил, так и не понял. Убирая лишний код, оставил лишь создание юнита в вызываемой функции и его передачу.
В общем потестив я выявил следующие
Хэндлы отжираемые этим кодом
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
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
Во втором случаи неудивительно, не обнуленная локлка осталась висеть в функции, пробуй юзать глобалки либо делай так:
function CreateUnitBj takes uniut u returns unit 
set u = CreateUnit( Player(0), 'hpea', 0.00, 0.00, 0.00 )
return u
endfunction
Принятый ответ
28
quq_CCCP,
ну так она же обнуляется в триггере куда передана не?
А ну видимо нет не обнуляется.
Ну в общем всё ясно. Я просто переписывал систему c векторами Elimination Tournament на 1.24+, чтобы себе в карту пихнуть, а там они делали через локалки.
Загруженные файлы
32
Увы но локалки не обнуляются при выходе из функции сами, исключение это локалка аргумент функции...
Я недавно тоже тестил создание 100500 юнитов и смотрел что к чему, с юнитами не все так просто...
как выяснилось ивенты повешенные на конкретного юнита никуда не пропадают даже после удаления триггера и юнита .
20
как выяснилось ивенты повешенные на конкретного юнита никуда не пропадают даже после удаления триггера и юнита .
Как проверял?
28
ещё вроде можно сделать так
function CreateProjectile takes nothing returns unit
return CreateUnit(Player(0),'hpea',0,0,0)
endfunction
28
nvc123,
ну там действия ещё проводятся с созданным юнитом. Я сделал как на скрине, что я выложил.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.