Уже второй день не могу устранить это. Изначально вместо локальной переменной группы стояла глобальная, утечек не возникало(по крайней мере минут 5 карта работала стабильно), затем сменил её, теперь больше 2.5 минут хватает, чтоб начались дикие лаги. Думал, что дело в "location" и "boolexpr", пробовал создавать локалки, потом их обнулять, но ничего не изменилось. Не знаю, может быть я просто не правильно обнуляю
группу, подскажите, что делать.
function R takes nothing returns boolean
local group g = CreateGroup()
call GroupEnumUnitsInRangeOfLoc(g, GetUnitLoc(gg_unit_n000_0021), 900, Condition(function M))
return ( CountUnitsInGroup(g) >= 1 )
call DestroyBoolExpr(Condition(function M))
call DestroyGroup(g)
call GroupClear(g)
set g = null
endfunction

Добавь локальную логическую, которая будет равна ( CountUnitsInGroup(g) >= 1 ) и возвращай эту локалку, после того, как всё обнулил.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
18
call DestroyBoolExpr(Condition(function M)) это лишнее
И после return ничего не выполняется
2
UrsaBoss:
И после return ничего не выполняется
Если после return ничего не выполняется, выходит локалку в этой функции вообще не обнулить?
18
KalaKoltes:
UrsaBoss:
И после return ничего не выполняется
Если после return ничего не выполняется, выходит локалку в этой функции вообще не обнулить?
всё кроме группы сможешь обнулить, т.к возвращаешь ты группу
Совет: группу лучше сделать глобальной.
Получится примерно так:
В данном случае g это уже глобальная группа
function R takes nothing returns boolean
    local location p = GetUnitLoc(gg_unit_n000_0021)

    call GroupClear( g )
    call GroupEnumUnitsInRangeOfLoc(g, p, 900, Condition(function M))
    call RemoveLocation( p )
    set p = null
    return ( CountUnitsInGroup(g) >= 1 )
endfunction
26
Добавь локальную логическую, которая будет равна ( CountUnitsInGroup(g) >= 1 ) и возвращай эту локалку, после того, как всё обнулил.
Принятый ответ
2
UrsaBoss:
KalaKoltes:
UrsaBoss:
И после return ничего не выполняется
Если после return ничего не выполняется, выходит локалку в этой функции вообще не обнулить?
всё кроме группы сможешь обнулить, т.к возвращаешь ты группу
Совет: группу лучше сделать глобальной.
Получится примерно так:
В данном случае g это уже глобальная группа
function R takes nothing returns boolean
    local location p = GetUnitLoc(gg_unit_n000_0021)

    call GroupClear( g )
    call GroupEnumUnitsInRangeOfLoc(g, p, 900, Condition(function M))
    call RemoveLocation( p )
    set p = null
    return ( CountUnitsInGroup(g) >= 1 )
endfunction
Раньше группа стояла глобальная, но триггер не работал, как нужно. Нужно ли в таком случае передавать ей значение этой переменной, чтобы её использовать?
18
KalaKoltes:
Раньше группа стояла глобальная, но триггер не работал, как нужно. Нужно ли в таком случае передавать ей значение этой переменной, чтобы её использовать?
А какая разница, просто объявляешь глобальную переменную g и создаешь группу, далее где угодно используй и утечки не будет. Это если нужно использовать группу моментально и забыть о ней
28
KalaKoltes, UrsaBoss, убер уже сказал как сделать правильно не создавая глобальных переменных
точка тут вообще нафиг не нужна
function R takes nothing returns boolean
	local boolean result=false
	local group g=CreateGroup()
    call GroupEnumUnitsInRange(g, GetUnitX(gg_unit_n000_0021), GetUnitY(gg_unit_n000_0021), 900, Condition(function M))
	set result = ( CountUnitsInGroup(g) >= 1 )
	call DestroyGroup(g)
	set g = null
    return result
endfunction
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.