Добавлен Castiel
Собственно такой вопрос. Если сделать
GroupEnumUnitsInRange(group,500,500,500,Condition(function() )
то Condition удаляется или создает утечку ? или все таки лучше делать
b=Condition(function() )
GroupEnumUnitsInRange(group,500,500,500,b)
DestroyBoolexpr(b)
просто заметил, что внутри condition можно из первого примера использовать все локалки в триггере и это очень круто, что не скажешь про второй вариант, пытался давать функции обьекты и они не передавались а сама функция работала
b=Condition(function(object) )
GroupEnumUnitsInRange(group,500,500,500,b(object))
Или все таки лучше использовать глобалки и без них никак ? Просто волнует вопрос по поводу, что если одну глобалку использовать на группу для множества игроков, То не будет ли глобалка перебиваться вечно разными игроками и в конце концов будет ссылаться на других игроков, или там какая то шляпа, что такого не будет ? Вот что то типа этого. Просто хотелось бы создать кондишн 1 раз занести его в глобалку и использовать постоянно, но не будет ли вечено перебивать игроков ? Просто если даже создать локально то уже все локалки не могут быть использованы в групенум....
B=Condition(function())
P=GetFilter()
if P==PLAYER then
end
end)
function()
PLAYER=GetTriggerPlayer()
GroupEnumUnitsInRange(group,500,500,500,B)
end
Надеюсь понятно.
Принятый ответ
Чтоб не мучиться, обойдитесь вообще без фильтров:
GROUP = CreateGroup() -- Глобальная группа, чтоб не создавать каждый раз.
-- в самом триггере
GroupEnumUnitsInRange(GROUP, x, y, range, nil)
local target ---@type unit
while true do
target = FirstOfGroup(GROUP)
if target == nil then break end -- выходим из цикла при пустой группе
if UnitAlive(target) then -- условия для перебора
KillUnit(target) -- действия для перебора
end
GroupRemoveUnit(GROUP, target)
end
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован PT153
А так да, при занесении в глобалку фильтр пне может быть кложуром.
Можно так, но тут снова каждый раз будет создаваться новый объект.
Просто мне очень понравилось, что GroupEnumUnitsInRange(group,500,500,500,Condition(function() ) может использовать все локалки триггера, это очень круто и удобно, другими способами заносить лишь в глобалки игроков и другие нужные данные, которые будут использоваться на группе...
prog: По подробней про ненадобность хеш таблицы ? Можно глобалку сделать GLOBAL[GetHanldeId(T)] ? А если там номер ключ 5782857? ничего страшного ?
Циклом будет быстрее, удобнее и порой надёжнее, если операции внутри цикла короткие. Лично я фильтр использую там, где операции долгие, так как фильтр создаёт поток на каждого юнита.
Отредактирован prog