Есть Триггер. В теории должен работать нормально, но работает как обычно фиг знает как.
Местный прикол, игнорировать 10ти секундный таймер и воскрешать юнитов мгновенно:
call TimerStart(udg_t2[udg_i], 10, false, function tt2)
function tt2 takes nothing returns nothing
    call CreateNUnitsAtLoc( 1, GetUnitTypeId(GetDyingUnit()), Player(5), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING )
endfunction

function Trig_Screen2_Conditions takes nothing returns boolean 
    if ( not ( GetOwningPlayer(GetDyingUnit()) == Player(5) ) ) then
        return false
    endif
    return true
endfunction

function Trig_Screen2_Actions takes nothing returns nothing
	set udg_i = udg_i + 1
    call TimerStart(udg_t2[udg_i], 10, false, function tt2) 
endfunction

//===========================================================================
function InitTrig_Screen2 takes nothing returns nothing
    set gg_trg_Screen2 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Screen2, EVENT_PLAYER_UNIT_DEATH ) 
    call TriggerAddCondition( gg_trg_Screen2, Condition( function Trig_Screen2_Conditions ) ) 
    call TriggerAddAction( gg_trg_Screen2, function Trig_Screen2_Actions ) 
endfunction

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

PyCCKuu_4eJl, потому что таймер в миллисекундах. Для ожидания в 10 секунд нужно подать 10000.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
6 лет назад
0
0
20
6 лет назад
0
  1. вы создаете новых юнитов в центре карты. Используйте создание по координатам (в JNGP функции, подсвечиваемые красным цветом, являются наработками (зачастую кривыми) близов. Если желаете прогресса - для начала прекратите использовать их) (вероятно, "CreateUnit")
  2. Варкрафт перед запуском скриптов, реагирующих на событие, устанавливает какие-то свои переменные на нужные значения. Значения этих переменных получаются игроком через методы. Спустя 10 секунд после начала события никто не гарантирует что нужные значения останутся в системных переменных. Движок может использовать переменные для разных целей. Гарантируется лишь правильное поведение в предусмотренных разрабами случаями. Вам необходимо где-то сохранять умерших юнитов и использовать сохраненную информацию спустя 10 сек. Также, учитывайте что все массивы в вц3 имеют размер массива = 8192 ячейкам. Если вы намереваетесь просто сохранять в массив и использовать спустя 10 сек - позаботьтесь о переработке ячеек массива. Избыточно много значений тоже не стоит брать, поскольку игровые объекты не удаляются из памяти до тех пор, пока на них ссылается хотя бы одна переменная (за поштучными исключениями, движок правильность своей работы гарантирует, так что следите только за собой)
  3. Если вы хотите научиться использованию чистого жасса - лучше изъявите свое желание поучаствовать в проекте хоть немного шарящего человека. Сумеете лицезреть более-менее адекватный код и учиться. Учиться методом проб и ошибок эффективно, но долго. На форуме всегда найдут время указать на ваши косяки и ошибки, так что лучше обучайтесь жассу как естесственному языку - сперва учитесь говорить как окружающие, а потом учитесь говорить правильно.
0
17
6 лет назад
Отредактирован N1ghtSiren
0
Diaboliko, Вопрос был про косяк с тем, что юниты ресаются мгновенно, а не про получение ценных лекций о пользе чистого джазза и оптимизации.
Задачей этого скрипта было показать, как можно переделать обычный триггер с Wait на скрипт с использованием локалок.
Можно подключить хэш таблицу, чтобы сохранять тип юнита там, но в данный момент нам нужна простота, а не оптимизация.
Думаю что косяк с тем, что GetDyingUnit() проходит сквозь все временные промежутки и вызывается в момент смерти юнита.
0
20
6 лет назад
0
Переменная типа timer позволяет ссылаться на таймеры, но таймеры необходимо создавать отдельно. Вероятно, мгновенный рес связан с отсутствием таймера как такового.
0
1
6 лет назад
0
Твой таймер не знает кто такой умирающий юнит. Более интересный вопрос - откуда берётся тип юнита для создания?
0
26
6 лет назад
0
PyCCKuu_4eJl, потому что таймер в миллисекундах. Для ожидания в 10 секунд нужно подать 10000.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.