Добавлен DopaMine
Подскажите плз, как сделать на JASS такой таймер, чтоб он не периодически что-то выполнял, а чтоб просто обратный отчёт начинался. Чтоб перед его началом я смог написать local boolean check = true. Дальше типо стартует таймер, и когда таймер истечёт( GetExpiredTimer(), как я понял ), чтоб я смог написать local boolean = false. И чтоб это правильно работало.
у меня функции такие:
у меня функции такие:
function CheckTimer takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local integer h = GetHandleId(caster)
local timer t = GetExpiredTimer()
local location point = LoadLocationHandle(udg_hash,h,StringHash("point"))
local boolean check = LoadBoolean(udg_hash,h,StringHash("check"))
call LoadUnitHandle(udg_hash,h,StringHash("caster"))
call SaveInteger(udg_hash,h,StringHash("h"), h )
call SaveBoolean(udg_hash,h,StringHash("check"), false)
set caster = null
set point = null
set t = null
endfunction
function Attack takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local location point = GetSpellTargetLoc()
local timer t = CreateTimer() //Создаём таймер
local integer h = GetHandleId(caster)
local boolean check = true
call SaveUnitHandle(udg_hash,h,StringHash("caster"),caster)
call SaveLocationHandle(udg_hash,h,StringHash("point"),point)
call SaveBoolean(udg_hash,h,StringHash("check"),check)
call TimerStart(t, 1, false, function CheckTimer) //Стартуем таймер (fasle - так как не цикличен, если я правильно понял)
set caster = null
set point = null
set t = null
endfunction
Когда я убираю этот таймер вообще, у меня работает, как надо всё. А мне надо, чтоб у меня включался таймер на секунду и за это время работала верхняя функция.
Принятый ответ
Если это то, о чём идёт речь, то я бы делал так:если юнита бьют, он может нажать кнопку и заменит себя на бревно, исчезнет(hide), появится бревно, эффекты и звук, и через 1.5 секунды появится(unhide) в точке, которая указана, как цель заклинания. А если не бьют, то ничего не произоидёт. Так же эффект работает всего 1 секунду(то есть применять типо надо прям перед ударом)
- Создаётся триггер
событие — юнит атакован (то есть был отдан приказ атаки с этим юнитом в качестве цели и он находится в пределах дальности атаки атакующего)
условие — атакованный юнит имеет эту абилку
действия — сохранить на юнита-цель флаг "сейчас можно применить Каварими но Дзюцу" (как я понимаю, это ты и делаешь в коде в посте), затем создать таймер и запустить его на функцию, в которой этот флаг поменяется на обратное значение/удалится (больше ничего). - Создаётся ещё один триггер
событие — юнит применяет способность Каварими но Дзюцу
условие — для применяющего юнита сохранён флаг "сейчас можно применить Каварими но Дзюцу"
действия — скрыть кастера, создать таймер, сохранить на этот таймер кастера и целевые координаты применённой способности, затем запустить его с задержкой 1.5 секунды на функцию, в которой из таймера будут выгружены координаты с юнитом, юнит будет в них перемещён (кстати, перемещать ничто не мешает сразу, разницы в игре не будет, а данных меньше таскать/хранить) и раскрыть кастера.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Hodor
и по возможности на каждый вид события один триггер
иначе при дальнейших модификациях карты будет получаться всё более жесткое месиво из кода
и в один день настанет момент когда уже нереально будет контроллировать ~10к строк перемешанного кода, всплывет вопрос об оптимизации
любой человек без склонностей к мазохизму придет к выводу что надо переписывать с нуля всё
хотяяяя, оно тоже мазохизм, но меньший)))
Отредактирован Hodor
а во всяких петробалансах вообще лютейшая дичь, тупо событие на вход в регион имеет около двухста триггеров
я прямо так и подчеркнул что с нуля
ладно, пойду посплю
ладно всё, я ушёл