Не могу понять как добавить в функции GroupEnumUnitsInRange фильтр, который добавлял бы в группу только врагов кастера.
Пробовал делать функцию фильтр, которая фильтровала бы юнитов. (возвращает boolean) Для типов юнитов это работает, но как прописать в фильтр враждебность к игроку - понять затрудняюсь. (интерег игрока различается в зависимости от кастующего)
В общем, какими способами можно заставить добавлять в группу юнитов только врага другого юнита?
Принятый ответ
Обычно в группу собираю всех юнитов, перебирая их вручную через цикл
Вот только фильтры куда быстрее циклов (JASS плохо справляется с циклами), а внутри фильтров можно делать абсолютно все необходимые действия.
Ниже пример, когда группа вообще не заполняется, а нужна только для вызова фильтра, чтобы выполнить нужные действия.Не могу понять как добавить в функции GroupEnumUnitsInRange фильтр, который добавлял бы в группу только врагов кастера.
globals
player P
endglobals
function filter takes nothing returns boolean
if IsUnitEnemy(GetFilterUnit(), P) then
// твои действия
endif
return false
endfunction
function f takes integer i, real x, real, y, real range returns nothing
set P = Player(i)
call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, range, function filter)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
call GroupEnumUnitsInRange( g, x, y, range, filter )
Ред. PT153
Ред. GetLocalPlayer
Кстати говоря, фильтр, это boolexpr, то бишь handle
Насчет цикла с проверкой кто есть кто - бред, медленно и можно попасть в лимит операций.
Ред. PT153
PT153: