Добавлен
Подскажите плз, как сделать на 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. Создаётся триггер
    событие — юнит атакован (то есть был отдан приказ атаки с этим юнитом в качестве цели и он находится в пределах дальности атаки атакующего)
    условие — атакованный юнит имеет эту абилку
    действия — сохранить на юнита-цель флаг "сейчас можно применить Каварими но Дзюцу" (как я понимаю, это ты и делаешь в коде в посте), затем создать таймер и запустить его на функцию, в которой этот флаг поменяется на обратное значение/удалится (больше ничего).
  2. Создаётся ещё один триггер
    событие — юнит применяет способность Каварими но Дзюцу
    условие — для применяющего юнита сохранён флаг "сейчас можно применить Каварими но Дзюцу"
    действия — скрыть кастера, создать таймер, сохранить на этот таймер кастера и целевые координаты применённой способности, затем запустить его с задержкой 1.5 секунды на функцию, в которой из таймера будут выгружены координаты с юнитом, юнит будет в них перемещён (кстати, перемещать ничто не мешает сразу, разницы в игре не будет, а данных меньше таскать/хранить) и раскрыть кастера.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30

И да, здесь что, надо расписывать, что именно значит "юнит атакован"?
Игра знает о том, что значит "юнит атакован" получше нас, не переживай, это я просто воткнул пояснение зачем-то.

Я вообще буду потом сложнее делать, чтоб автоатаки не было, а был скилл у всех с кулдауном, который наносит урон ближайшему юниту в области перед применившим(это видимо через угол поворота юнита и косинус для Y и синус для X этого угла надо будет использовать).
Вот с этим будет реальный геморрой кстати.
11
событие — юнит атакован (то есть был отдан приказ атаки с этим юнитом в качестве цели и он находится в пределах дальности атаки атакующего)
Если юнит начал быть атакованным, то через 10 секунд после того, как его начали атаковать, всё ещё будет проверяться условие, что у атакованного есть абилка обмена?
30

Прямо с ходу в голову не пришло изящных решений насчёт триггера уклонения от абилок. Тебе придётся каждый раз чекать зону нанесения урона несколько раньше, чем фактически наносить в ней урон, чтобы для всех противников в ней переключить разрешающие применение флаги и дать игрокам время на отреагировать.
11
действия — сохранить на юнита-цель флаг "сейчас можно применить Каварими но Дзюцу" (как я понимаю, это ты и делаешь в коде в посте), затем создать таймер и запустить его на функцию, в которой этот флаг поменяется на обратное значение/удалится (больше ничего).
Так таймер должен запуститься, именно когда я нажал кнопку, а не когда я её могу нажать.
30
Если юнит начал быть атакованным, то через 10 секунд после того, как его начали атаковать, всё ещё будет проверяться условие, что у атакованного есть абилка обмена?
"Юнит атакован" в контексте игры означает exactly то, что я написал в скобочках выше. Учитывая, что это событие, оно будет срабатывать периодически, каждый раз, когда какой-нибудь юнит начинает замахиваться для атаки другого юнита (спам приказа "отставить", например, приводит к тому, что получающий эти приказы юнит будет замахиваться условно неограниченное количество раз в секунду). Причём атаки каких-то из нейтралов не будут учитываться из-за того, что у них нет инициирующего игрока-владельца. Там нормально так подводных камней =(
11
Clamp:

Прямо с ходу в голову не пришло изящных решений насчёт триггера уклонения от абилок. Тебе придётся каждый раз чекать зону нанесения урона несколько раньше, чем фактически наносить в ней урон, чтобы для всех противников в ней переключить разрешающие применение флаги и дать игрокам время на отреагировать.
Если есть анимация у скилла, то можно пикать всех юнитов в атакованной зоне не сразу, как юнит нажал, а через время анимации, к примеру. И обмен от этого будет работать так же: типо я жму обмен и дальше включается триггер: если я пикнут такой-то абилкой,(всем пикнутым задаётся какое-то значение прямо перед нанесением урона), то работает обмен и я типо исчезаю и доджу абилку.
30
Так таймер должен запуститься, именно когда я нажал кнопку, а не когда я её могу нажать.
Это второй описанный таймер. Первый таймер это эдакий "надзиратель", всё что он делает — это говорит, кто может применить способность, а кто не может. Кстати, нужно чтобы этот таймер был только один на юнита или иметь дополнительную логику проверки таймингов, чтобы не получилось подобной ситуации:
  • Юнита атакуют, на секунду ему разрешается применить уклонение
  • Через пол-секунды его ещё раз атакуют, ещё секунда на применение
  • Ещё через пол-секунды истекает таймер с первой атаки и юниту запрещают применять уклонение, хотя из-за второй атаки у него должно быть ещё 0.5 секунды
11
Там нормально так подводных камней =(
Ничего, я планирую вообще без автоатак сделать. А чтоб это была кнопка "нанести удар" и имела перезарядку, у всех разную. Условный сасуке имеет перезарядку удара - 0.3 сек, а наруто - 1 секунду. МИКРОКОНТРОЛЬ рулит)
Ещё думать буду. Всё решаемо, я думаю)
30

Если есть анимация у скилла, то можно пикать всех юнитов в атакованной зоне не сразу, как юнит нажал, а через время анимации, к примеру. И обмен от этого будет работать так же: типо я жму обмен и дальше включается триггер: если я пикнут такой-то абилкой,(всем пикнутым задаётся какое-то значение прямо перед нанесением урона), то работает обмен и я типо исчезаю и доджу абилку.
Пока это неактуально, как я понимаю, а когда станет актуально — ты и сам поймёшь, что не всё так просто =)
11
Кстати, нужно чтобы этот таймер был только один на юнита или иметь дополнительную логику проверки таймингов, чтобы не получилось подобной ситуации:
Так у меня планируется один таймер. Так разве не проще? Чтоб именно разрешалось уже телепортироваться, если бьют, а не получать тру на условие, из-за которого типо можно нажать, нельзя нажать, пол секунды прошло- бить начали и сразу перестали. Значит, что через 0.1 секунды уже нельзя применить обмен, как я понял. В общем, сложно вы описали. Два таймера...(
30
DopaMine, просто попробуй их сделать тупо по тексту, там на самом деле строк 20-30 от силы получится.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.