Объясните, как одновременно выбрать только юнитов определённого типа у определённого игрока в обределенной области?
Я делаю так:
Отряд выбрать юнитов типа() принадлежащих игроку 6 и делать множество действий.
Отряд выбрать юнитов в области() и делать то, но у меня выбираются все юниты в этой области. Что делать? Как это исправить?

function groupCondition takes nothing returns boolean
    return true == true //Здесь пишешь условия используя and или or и сюда передается юнит GetFilterUnit()
endfunction

//Эти действия вставляешь в любую нужную тебе функцию
    local group    g  = CreateGroup()
    local boolexpr bE = Condition( function groupCondition )
    local unit     u
    //Где x и y - это координаты
    //Где r - это радиус
    call GroupEnumUnitsInRange( g, x, y, r, bE )
    call DestroyBoolExpr( bE )
    loop
    set u = FirstOfGroup( g )
    exitwhen u == null
        //Действия над группой
        call BJDebugMsg( GetUnitName( u ) )
        //Конец
        call GroupRemoveUnit( g, u )
        set u = null
    endloop
    call GroupClear( g )
    call DestroyGroup( g )
    
    set g  = null
    set bE = null
    set u  = null
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
12
Спасибо, а если мне допустим нужно в области, которая центрировано вокруг юнита на током радиусе?
38
Стас Орлов, берёшь у юнита координаты и помещаешь в x, y
Если надо относительно юнита, смести их на угол полярными координаами
22
UrsaBoss, зачем ты обнуляещ boolexp омг его нет нужды обнулять
32
pro100master, от глупости, болекспры не утекают никуда, как и геймкешь и кондишены триггеров, каждый новый вызов Condition( function name) будет возвращать один и тот же обьект.
22
quq_CCCP, верно я бы его перенес в инициализация и спокойно проверять
18
quq_CCCP
я не находил статьи которая объясняла бы что нужно и что не нужно обнулять
quq_CCCP
хотя пришлось порыться, вроде нашел
32
Объясните, как одновременно выбрать только юнитов определённого типа у определённого игрока в обределенной области?
Это же банально на гуе делается через matching condition. Элементарно я бы даже сказал.
25
Я бы вот так посоветовал сделать:
function UnitFilter takes nothing returns boolean
    //здесь условия фильтрации
    return (GetUnitTypeId(GetFilterUnit())=='hpea' and GetOwningPlayer(GetFilterUnit())==Player(5))
endfunction

function UnitActions takes nothing returns nothing
    //здесь действия с выбранными юнитами
    call KillUnit(GetEnumUnit())
endfunction

function GetUnitsAroundOfUnit takes unit u, real range returns nothing
    local group g = CreateGroup()
    call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), range, Condition(function UnitFilter))
    call ForGroup(g, function UnitActions)
    call GroupClear(g)
    call DestroyGroup(g)
    set g = null
endfunction
И можно еще оптимальнее сделать через vJass.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.