Вот 2 триггера, которые отвечают за защиту игроков на ранних стадиях игры от крипов:
function Trig_Beasts_NoStrongAttackers_Conditions takes nothing returns boolean
    set udg_map_fu=GetAttacker()
    set udg_map_u2=GetAttackedUnitBJ()
    if ( GetOwningPlayer(udg_map_fu)==udg_owner_creep and GetUnitLevel(udg_map_u2)<4 and udg_Player[GetConvertedPlayerId(GetOwningPlayer(udg_map_u2))]==udg_map_u2 and GetUnitTypeId(udg_map_u2)!='n00D' and m_creeptypefilter() ) then
        set udg_map_fu=null
        set udg_map_u2=null
        return true
    endif
    set udg_map_fu=null
    set udg_map_u2=null
    return false
endfunction

function Trig_Beasts_NoStrongAttackers_Actions takes nothing returns nothing
    local unit u=GetAttacker()
    local location una = GetUnitLoc(u)
    local real ang=GetRandomReal(0.0,359.9)
    call MoveLocation(una, GetLocationX(una)+500.0*CosBJ(ang),GetLocationY(una)+500.0*SinBJ(ang))
    call IssuePointOrderLocBJ( u, "move", una )
    set ang=0.0
    set u=null
    call PolledWait( 4.0 )
    call RemoveLocation( una )
    set una = null
endfunction

function Trig_Beasts_StrongAttackerAggry_Conditions takes nothing returns boolean
    set udg_map_fu=GetAttackedUnitBJ()
    set udg_map_u2=GetAttacker()
    if ( GetOwningPlayer(udg_map_fu)==udg_owner_creep and GetUnitLevel(udg_map_u2)<4 and udg_Player[GetConvertedPlayerId(GetOwningPlayer(udg_map_u2))]==udg_map_u2 and m_creeptypefilter() ) then
        set udg_map_fu=null
        set udg_map_u2=null
        return true
    endif
    set udg_map_fu=null
    set udg_map_u2=null
    return false
endfunction

function Trig_Beasts_StrongAttackerAggry_Actions takes nothing returns nothing
    local unit u=GetAttacker()
    local location una = GetUnitLoc(u)
    local real ang=GetUnitFacing(u)-180.0
    call DisplayTextToPlayer(GetOwningPlayer(u), 0, 0, "|cffffcc00Ваше существо не может напасть на это создание.|r")
    call MoveLocation(una, GetLocationX(una)+300.0*CosBJ(ang),GetLocationY(una)+300.0*SinBJ(ang))
    call IssuePointOrderLocBJ( u, "move", una )
    set u=null
    set ang=0.0
    call PolledWait( 2.5 )
    call RemoveLocation( una )
    set una = null
endfunction
Второй нужен чтобы игроки не злоупотребляли своим положением.
Итак триггеры однозначно работают, но только до момента получения приказа. Там они уже зависают (стоят в ступоре и ни на что не реагируют). Разбагать можно лишь, если будет вручную дан новый приказ игроком.
Также если перелопатить триггеры с события атаки на собитие каста, то юниты вполне выполняют приказ.
Можете посоветовать как обойти этот баг?
P.S. Вэйты я добавил, пытаясь найти решение проблемы методом "тыка".

Принятый ответ

В моей карте игроки вместе играют на острове "полном жизни". И если крипов по типу волка или медведя не будет на локации, то он окажется слишком уж пустым.
С координатной функцией юнит также завис.(
Решить проблему так и не смог, теперь просто тыкаю юнита-игрока в систему рывков, чтобы тот сбежал от крипа.
1
10
7 лет назад
1
А не продуктивнее было бы просто создать крипов тогда, когда этому приходит подходящее время? Или, допустим, дать им невидимость и застопить до определённого момента, или сделать их союзниками. Вариант, при котором приходится отдавать приказ, в надежде не допустить сражения - попытка плыть снизу вверх по водопаду. Т.е. достаточно грубый и ненадежный, особенно в свете того, что есть более простые и исчерпывающие методы разрешение данной проблемы(см. выше). И к чему бессмысленно создавать точки? Можно воспользоваться подобной реализацией.
local real x = GetUnitX(u)
local real y = GetUnitY(u)
IssuePointOrder(u,"move",x+500*CosBJ(ang),y+500*SinBJ(ang))
0
6
7 лет назад
0
В моей карте игроки вместе играют на острове "полном жизни". И если крипов по типу волка или медведя не будет на локации, то он окажется слишком уж пустым.
С координатной функцией юнит также завис.(
Решить проблему так и не смог, теперь просто тыкаю юнита-игрока в систему рывков, чтобы тот сбежал от крипа.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.