Делаю проект для мультиплеера, но столкнулся с такой проблемой:
  • Как сделать нормальное воскрешение героев после смерти?
Я пробовал разные способы, но работает только один и этот способ будет баговать при игре с игроками.
Просьба давать советы на GUI. С Jass не дружу.

Очень просто)

События:
Юнит Умирает
Условия:
(Diying unit) равно Герой
Owner of (Diying unit) не равно Нейтрально-враждебный
Действия:
Wait 10 секунд
Воскресить (Diying unit)

В этом триггере (Diying unit) не будет меняться с каждой новой смертью, она как локалка.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
12
8gabriel8:
Sergarr, проверь. Мне тоже так казалось раньше)
Проверил. Действительно, работает. Прям как то неожиданно даже - нативная поддержка МУИ? В варике?
26
Игре уж много лет, а она всё удивляет и удивляет
18
Sergarr:
Я 100% уверен, что это ложь и провокация.
GetTriggeringUnit() и прочее - хранятся в самом потоке, а поток создается каждый раз при срабатывании триггера
И лучше не использовать PolledWait, можно сразу TriggerSleepAction
И кто бы ни говорил, TriggerSleepAction не продолжает отсчет при паузе в одиночной игре и в мультиплеере.
18
близзарды походу давно починили это в каком то патче, но этого никто не узнал
26
И лучше не использовать PolledWait, можно сразу TriggerSleepAction
А что так?
18
8gabriel8:
И лучше не использовать PolledWait, можно сразу TriggerSleepAction
А что так?
Ну в PolledWait не очищается переменная указывающая на таймер
Да и вообще PolledWait это смесь TriggerSleepAction и таймера (типа отсчет игрового времени)
В данное время не актуально, т.к я лично проверял TriggerSleepAction в одиночной игре при паузе и в мультиплеере так же, никуда время не утекало.
22
8gabriel8, PolledWait это бж функция внутри которой жуть что делается
спс жнгп за Function list
function PolledWait takes real duration returns nothing
    local timer t
    local real  timeRemaining

    if (duration > 0) then
        set t = CreateTimer()
        call TimerStart(t, duration, false, null)
        loop
            set timeRemaining = TimerGetRemaining(t)
            exitwhen timeRemaining <= 0

            // If we have a bit of time left, skip past 10% of the remaining
            // duration instead of checking every interval, to minimize the
            // polling on long waits.
            if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                call TriggerSleepAction(0.1 * timeRemaining)
            else
                call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
            endif
        endloop
        call DestroyTimer(t)
    endif
endfunction
18
biridius, судя по тому что в BJ есть много туповатых функций и ещё некоторые функции должны быть в движке - могу предположить что программисты написали движок с нативками, отдали игру гейм-дизайнерам и послали их подальше
26
Ну в PolledWait не очищается переменная указывающая на таймер
Чего-то не пойму, вон есть же DestroyTimer(t), нужно ещё как-то очищать?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.