Точное название функций мог перепутать) Суть проблемы такая есть абила свыбором цели которая кастуется на область и ресает случайного героя. В этой области при помощи GetUnitsInRange ( условие которая принимает функция чуть ниже ) я добовляю в группу откуда потом беру случайного героя. Но группа остается пустой. Способность воскрешает героя только во время анимации его смерти а если он уже так сказать полежал то условие не видит его.
Есть какой-нибудь способ все таки ловить мертвых героев или что я делаю не так помоги пожалуйста.
Условие.
p.s: за синтаксис не ручаюсь так как писал в посте а не копировал с мапы
function SoulLantern takes nothing returns boolean
	return ( IsUnitType ( GetFilterUnit (), UNIT_TYPE_HERO ) and  IsUnitType ( GetFilterUnit (), UNIT_TYPE_DEAD )  )
endfunction

Ну как сказать, юнит является юнитом секунды 3 после смети (или сколько там установлено время смерти), потом его уже нету на карте, поэтому можно и не искать, но герои сидят в памяти пока их не удалят, в отличии от обычных юнитов, но всеравно их уже не существует в понимании движка на уровне бегающих и дерущихся юнитов.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
21
абила с выбором цели которая кастуется на область
Мог бы перефразировать?
12
GF RaiseD:
абила с выбором цели которая кастуется на область
Мог бы перефразировать?
Способность на базе "Канала" с типом наведения "цель - точка".
27
EvilPenguin, если действительно так не работает, не пробовал сохранять координаты при смерти героев, а потом проверить не попадают ли эти координаты в область и ресаем?
21
С мертвыми героями в варе вообще странности (если кто, кстати, не знает, при массовых смертях и мб не только герой вообще может просто исчезнуть и последняя известная информация о нём опустошиться, так что всем советую на такой случай впиливать костыль пересоздания с запоминанием важнейших данных на момент смерти).
18
Так что я просто пробегаюсь по нему и если герой мертв и расстояние от него до точки каста < 100, то долбавляю его в группу на респ. Потом из группы выбираю рандомного и ресаю.
Так то умершый герой не имеет координатов. При смерти героя записуешь координаты и при касте цыклом сверяешь растояние координатов.
12
Не знаю но у меня GetUnitX и GetUnitY без проблем ловят координаты мертвых героев.
15
Так в чем проблема сделать так, как я сказал. А случайность юнита из группы определять через while и exitwhen GetRandomInt(1, кол-во героев в группе) ==1
12
EnergyFrost:
Так в чем проблема сделать так, как я сказал. А случайность юнита из группы определять через while и exitwhen GetRandomInt(1, кол-во героев в группе) ==1
Да я уже все сделал как бы. Просто не могу понять почем GroupEnumUnitsInRange( gr, x, y, rng, filter ) не ловит дохлых геров)
Вот как я сделал респаун и GetUnitX и GetUnitY нормально ловят координаты дохлого героя.
p.s: в коде много функций из моей либы и не только так что не пугайтесь
function Trig_SoulLantern_Conditions takes nothing returns boolean
    return msc_check_item_for_id ( GetTriggerUnit (), GetIssuedOrderId (), 'Pr1L' )
endfunction

function Trig_SoulLantern_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit ()
    local real x1 = GetOrderPointX ()
    local real y1 = GetOrderPointY ()
    local unit trg 
    local item it = msc_get_item_by_o_id ( u, GetIssuedOrderId () )
    local group gr = CreateGroup ()
    local real x2
    local real y2
    local real dist
    local integer i = 0
    loop
        set x2 = GetUnitX ( msc_Players.msc_player[i].hero )
        set y2 = GetUnitY ( msc_Players.msc_player[i].hero )
        set dist = msc_dist_between ( x1, x2, y1, y2 )
        if ( dist < 300.0 ) and ( IsUnitType ( msc_Players.msc_player[i].hero , UNIT_TYPE_DEAD ) ) then
            call GroupAddUnit ( gr, msc_Players.msc_player[i].hero )
        endif
        set i = i + 1
        exitwhen ( i == msc_Players.player_count )
    endloop
        
    set trg = GroupPickRandomUnit ( gr )
    
    if ( trg != null ) and ( GetItemCharges ( it ) > 0 ) then
        call CrossRespawn.respawn ( trg, 50.0, 50.0, GetUnitX ( trg ), GetUnitY ( trg ) )
    else
        if ( trg == null ) then
            call SimError ( GetOwningPlayer ( u ), "Можно применять только на могилы" )
        endif
        if ( GetItemCharges ( it ) == 0 ) then
            call SimError ( GetOwningPlayer ( u ), "Зарядите Фонарь при помощи Крестов" )
        endif
        call SetItemPosition ( it, 0, 0 )
        call msc_give_item_delay ( u, it, 0.00 )
    endif
    
    call DestroyGroup ( gr )
    set u = null
    set trg = null
    set it = null
    set gr = null
endfunction

//===========================================================================
function InitTrig_SoulLantern takes nothing returns nothing
    set gg_trg_SoulLantern = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_SoulLantern, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerAddCondition( gg_trg_SoulLantern, Condition( function Trig_SoulLantern_Conditions ) )
    call TriggerAddAction( gg_trg_SoulLantern, function Trig_SoulLantern_Actions )
endfunction
32
Ну как сказать, юнит является юнитом секунды 3 после смети (или сколько там установлено время смерти), потом его уже нету на карте, поэтому можно и не искать, но герои сидят в памяти пока их не удалят, в отличии от обычных юнитов, но всеравно их уже не существует в понимании движка на уровне бегающих и дерущихся юнитов.
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.