Прошу совета в деле отлова лучницы и гиппогрифа при применении способности "Расседлать"('Adec')
Я отлавливаю приказ, получается отловить лучницу на гиппоргрифе, но как отловить лучницу и гиппогрифа по отдельности? В голову пока только пришло брать координаты лучницы на гиппогрифе и отлавливать юнитов в небольшом радиусе от этих координат сразу после выполнения приказа. Нет ли лучшего способа это сделать? Так же, прошу знающих подсказать, как работает этот механизм. Вот есть лучница и есть гиппогриф. Лучница седлает гиппогрифа. Что происходит после этого? Два исходных юнита удаляются игрой навсегда или прячутся, либо удаляются временно? После того как лучница слезет с гиппогрифа, игра создает двух новых юнитов, либо возвращает двух старых? Если старых, хранится ли где то эта информация и хранится ли где то информация о связке лучница и гиппогриф -> лучница на гиппогрифе? Мои наброски по отлову:
function Trig_HippogryphOrders_Conditions takes nothing returns boolean
    local integer orderId = GetIssuedOrderIdBJ()
    return orderId == String2OrderIdBJ("coupleinstant") or orderId == String2OrderIdBJ("coupletarget") or orderId == String2OrderIdBJ("decouple")
endfunction

function Trig_HippogryphOrders_Actions takes nothing returns nothing
    local unit unitExecutingOrder = GetOrderedUnit()
    local unit unitTargetOfOrder = GetOrderTargetUnit()
    local integer orderId = GetIssuedOrderIdBJ()
    local string orderName

    if (orderId == String2OrderIdBJ("coupleinstant")) then
        set orderName = "COUPLE INSTANT (MOUNT)"
    elseif (orderId == String2OrderIdBJ("coupletarget")) then
        set orderName = "COUPLE TARGET (MOUNT)"
    else
        set orderName = "DECOUPLE (DISMOUNT)"
    endif

    call PrintText("=== " + orderName + " DETECTED ===", COLOR_CYAN)

    if (unitExecutingOrder != null) then
        call PrintText("Executing Unit: " + I2S(GetUnitTypeId(unitExecutingOrder)), COLOR_CYAN)

        if (GetUnitTypeId(unitExecutingOrder) == 'ehpr') then
            call PrintText("-> HIPPO WITH ARCHER", COLOR_CYAN)
        elseif (GetUnitTypeId(unitExecutingOrder) == 'earc') then
            call PrintText("-> ARCHER", COLOR_CYAN)
        elseif (GetUnitTypeId(unitExecutingOrder) == 'ehip') then
            call PrintText("-> HIPPO", COLOR_CYAN)
        endif
    else
        call PrintText("Executing Unit: NULL", COLOR_CYAN)
    endif

    if (unitTargetOfOrder != null) then
        call PrintText("Target Unit: " + I2S(GetUnitTypeId(unitTargetOfOrder)), COLOR_CYAN)
    else
        call PrintText("Target Unit: NULL", COLOR_CYAN)
    endif

    set unitExecutingOrder = null
    set unitTargetOfOrder = null
endfunction

//===========================================================================
function InitTrig_HippogryphOrders takes nothing returns nothing
    set gg_trg_HippogryphOrders = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_HippogryphOrders, EVENT_PLAYER_UNIT_ISSUED_ORDER)
    call TriggerAddCondition(gg_trg_HippogryphOrders, Condition(function Trig_HippogryphOrders_Conditions))
    call TriggerAddAction(gg_trg_HippogryphOrders, function Trig_HippogryphOrders_Actions)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
15
OVOgenez, хм, даже в голову не приходило. Дикость) Но попробовать можно
18
Meddin, можно пробовать отлавливать событием входа в регион, оно по идее должно быть в 1 момент времени, так что интервал между событиями должен быть минимален, от этого играть.
Крч ждём тех кто с этой абилкой работал.
15
OVOgenez, разве что СССР что-то подскажет, он тут из старожилов много в jass шарит, да какой-нибудь назарпанк. Народу на сайте мало осталось...
26
Вот тебе рабочая наработка из 3 триггеров.
Когда юзают абилку - добавляем счетчик, что должны отловить спавн пару юнитов.
Когда нужные юниты спавнятся - сохраняем их в переменную (у меня это массив, а так-то можешь сделать просто 2 переменные юнита). И запускаем триггер проверки.
Если оба юнита сохранены - делаем что хотим с ними (я у себя их убиваю). Главное не вставлять никаких задержек, ибо после должны сразу же обнулить переменные.
Если нужно с ними много поработать - можешь добавить в локальные переменные (сохранить) и дальше уже работать.
Можно переделать систему на jass и оптимизировать. Я лишь реализовал идею, уже предложенную ранее. И она работает.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.