Есть неуязвимое нейтральное здание в тумане войны.
Выбран какой нибудь юнит. При нажатии на здание в тумане правой кнопкой, юнит от игры получает приказ smart идти в точку здания.
Так вот. Пока юнит туда дошел, если у здания сменился владелец на игрока-противника, то вместо того чтобы как пологается продолжать свой путь в точку приказа, мой юнит останавливается как только здание вышло из тумана войны.
Выбран какой нибудь юнит. При нажатии на здание в тумане правой кнопкой, юнит от игры получает приказ smart идти в точку здания.
Так вот. Пока юнит туда дошел, если у здания сменился владелец на игрока-противника, то вместо того чтобы как пологается продолжать свой путь в точку приказа, мой юнит останавливается как только здание вышло из тумана войны.
Вопрос
Как сделать чтобы юнит продолжал идти к зданию, а не останавливался завидев что оно стало вражеским?
Либо, как отследить что был отдан вот такой приказ в нейтральное здание, чтобы его подменить.
Я ловил GetOrderTarget(), он оказался ==null то есть приказ идет именно в точку а не в юнита-здание насколько я понял.
Как сделать чтобы юнит продолжал идти к зданию, а не останавливался завидев что оно стало вражеским?
Либо, как отследить что был отдан вот такой приказ в нейтральное здание, чтобы его подменить.
Я ловил GetOrderTarget(), он оказался ==null то есть приказ идет именно в точку а не в юнита-здание насколько я понял.
(Контекст, в моей карте есть точки которые захватываются и они вот такие здания, и юниты отправленные отжимать точку тупят завидев ее, не доходят и стоят как истуканы вне радиуса захвата точки, на пределе своей видимости...)
Что интересно, если здание уже было заведомо вражеским, то баг не повторяется, только если оно сперва было нейтральным а оказалось вражеским по выходу из тумана.
Принятый ответ
можно костылями попробовать вставить затычку, если точка приказа находится в тумане войны - выбрать юнитов в радиусе, таким образом ты сможешь получить GetOrderTarget
>>
function Trig_Melee_Initialization_Actions takes nothing returns nothing
    local group g = CreateGroup( )
    local unit u
    local real x = GetOrderPointX( )
    local real y = GetOrderPointY( )
    
    call BJDebugMsg( "order: " + OrderId2String( GetIssuedOrderId( ) ) )
    call BJDebugMsg( "unit: " + GetUnitName( GetOrderTargetUnit( ) ) )
    
    if GetOrderTargetUnit( ) == null and not IsVisibleToPlayer( x, y, GetOwningPlayer( GetTriggerUnit( ) ) ) then
        call GroupEnumUnitsInRange( g, x, y, 200.00, null )
        
        loop
            set u = FirstOfGroup( g )
            exitwhen u == null
            call GroupRemoveUnit( g, u )
            
            if IsUnitType( u, UNIT_TYPE_STRUCTURE ) and IsUnitInRangeXY( u, x, y, 0.00 ) then
                call BJDebugMsg( "unit from loop: " + GetUnitName( u ) )
            endif
        endloop
    endif
    
    call DestroyGroup( g )
    
    set g = null
endfunction
//===========================================================================
function InitTrig_Melee_Initialization takes nothing returns nothing
    set gg_trg_Melee_Initialization = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Melee_Initialization, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Melee_Initialization, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    //call TriggerRegisterAnyUnitEventBJ( gg_trg_Melee_Initialization, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions )
endfunction
<<
можно и более тупым способом - отдать приказ smart в точку приказа, только триггер нужно отключить перед отдачей, чтобы не зациклился
 Загруженные файлы
        
    
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
            
                                WC3
                            



Ред. SсRealm
Когда отдается приказ просто записывай юнита в отряд и удаляй из отряда, когда это становится не нужно
Ред. biridius
И поэтому нет события по которому я мог бы узнать что вот пора отправлять вот этих юнитов на вот ту точку.
Ред. biridius
Уже сделал через костыль с перебором всех таких зданий и сравнением координат приказа = координат здания.