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

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

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

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

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

Вообще чуть не забыл сказать, что идея конкретной механики этой абилки просто отличная.
Я просто в детстве наруто смотрел. Верил, что в жизни тоже есть такие ниндзя и умеют такие техники, поэтому я просто спёр оттуда.)
И странно, почему в картах наруто я такой механики не видел. Обычно просто невидимые становятся применяющие.
Спасибо! У меня ещё куча нестандартных(для карт варкрафт) механик на основе наруто в голове:D
Clamp:
DopaMine, просто попробуй их сделать тупо по тексту, там на самом деле строк 20-30 от силы получится.
Главный вопрос, кстати тогда: это всё можно засунуть в один триггер? Удобнее, когда на одну абилку 1 триггер. В конструкторе триггеров не получилось. А на джассе? Если к тому же можно несколько событий в один триггер пихать.
0
30
0
Или типо так как муи, то сложнее в разы?
Не в разы, просто приходится осмотрительнее/аккуратнее обращаться с хранимыми данными, чтобы они не терялись и не путались.

Я думаю, может просто много оперативки жрать карта, где на каждую абилку куча проверок кучи юнитов. Но я не имею представления, как сильно это влияет, сколько обычно операций в секунду на карте и каких именно, сколько это памяти.
Не знаю как рефорджед будет себя вести, но сейчас варкрафт физически не может потреблять больше 2 Gb RAM. Можешь посмотреть вот эту карту, чтобы понять, вещи какого уровня возможно нормально реализовывать в редакторе.

Без глобальных сложнее, конечно))) Но по-моему, только тем, что можно запутаться, ибо слишком много проверок, но логика-то та же, а это главное)
Да, плюс-минус так и есть.

может, на луа перейду
Настоятельно советовал бы так и сделать при первой же возможности. LUA, в отличии от JASS2, используется далеко не только в проприетарном редакторе одной-единственной игры.

Главный вопрос, кстати тогда: это всё можно засунуть в один триггер? Удобнее, когда на одну абилку 1 триггер. В конструкторе триггеров не получилось. А на джассе? Если к тому же можно несколько событий в один триггер пихать.
Триггер в редакторе триггеров и реальный объект "триггер" в движке не имеют между собой ничего общего.
Можно написать вот так
integer i = 0
loop
CreateTrigger()
i = i + 1
exitwhen (i > 8000)
endloop
и создать 8000 триггеров в пять строк.

В редакторе "триггер" это компонент UI, отдельное поле для ввода текста в списке триггеров. В движке "триггер" это объект, связывающий между собой события, условия и действия, причём всего этого у него может быть неограничено много (или ограничено, но всё равно много; не проверял).
0
11
0
Можешь посмотреть вот эту карту, чтобы понять, вещи какого уровня возможно нормально реализовывать в редакторе.
По скринам видно, что какая-то дичь(в хорошем смысле) сделана)) Хотя, думаю, даже скачать можно, только не понял, как. Жаль, что интерфейс пока нельзя менять:D
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.