Не могу понять как добавить в функции 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
`
ОЖИДАНИЕ РЕКЛАМЫ...
24
DracoL1ch, спасибо за подробный разбор. Значит ничего не поменялось за годы пока я не трогал вар и все потоки как были последовательными, так и остались.
А проблема перезаписи глобалок в такой ситуации должна решаться очень просто - записываем значение глобалки в локалку при срабатывании события и потом в конце обработчика события возвращаем глобалке старое значение. Насколько я знаю, невозможна ситуация, когда вклинившееся событие вернет управление в предыдущий поток не закончив свой обработчик (не считая вейтов).
16
интересный подход, должно сработать, но, как говорится, нахера козе баян? Своя сфера применимости и всё
28
Варкрафт строго линеен
Тогда выходит, что 2 события не могут одновременно произойти ни при каких условиях?
32
PT153, открыл Америку, все строго линейно. Возможно есть исключения в других потоках игры.
Именно по этой причине нужно юзать темповые глобалки с умом а не как это делают гуишники.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.