Добавлен
Подскажите плз, как сделать на 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
11
5 лет назад
0
Ну можно ещё записать функцию в события триггера (такие функции называются действиями триггера), тогда при срабатывании события триггер вызовет записанные в него функции
Тогда можно уточнить? События триггера это вообще что? Именно на джассе, а не на конструкторе триггеров. То есть, это просто перечисление выполняемых функций, которые подробно расписаны в действиях?
0
30
5 лет назад
Отредактирован Clamp
0
Или это речь всё ещё про Каварими но Дзюцу?
0
18
5 лет назад
0
DopaMine, чуть ошибся) Исправил
Ну можно ещё записать функцию в действия триггера, тогда при срабатывании события триггер вызовет эту функцию

События триггера это к примеру когда вы регистрируете событие ЮНИТ-АТАКОВАН
И при атаке вашего юнита - в триггере сработает событие и он вызовет функции из действий
0
11
5 лет назад
0
В верхнем методе у тебя caster всегда null будет, если он вызывается только таймером, потому что GetSpellAbilityUnit() возвращает реакцию на событие, а оно к моменту вызова уже целую секунду как прошло.
Не очень понял. Но то, что в действиях по истечении таймера нельзя писать ..GetUnit.. - понял.
Clamp:
Или это речь всё ещё про Каварими но Дзюцу?
ДА)
0
18
5 лет назад
0
И ещё такое понятие: условие триггера
В пищевой цепочке оно примерно так лежит
Событие => Условие => Действие

Условие тоже является функцией (на 3 скрине самая верхняя)
Если функция-условие вернет true - значит триггер начнет вызывать функции-действия
Если вернет false - значит не будет вызывать
0
11
5 лет назад
0
Иными словами, опиши что должно происходить при применении юнитом абилки с целью-точкой? В чём механика способности заключается-то?
Пока я до этого не дошёл. Я сначала на триггерах сделал - всё идеально работало. Потом понял, что работает только для одного кастера. И пока эффекты после применения способности и получения удара у меня на jasse не прописаны. Но там будет несколько таймеров, так как бревно появляется не сразу, спецефекты удаляются, но не сразу. Так что надеюсь, щас разберусь и без ошибок буду делать дальше с таймерами
0
18
5 лет назад
0
Так же добавлю:
функций условий может быть несколько
Ща примеры подгоню
0
11
5 лет назад
0
Условие тоже является функцией (на 3 скрине самая верхняя)
Если функция-условие вернет true - значит триггер начнет вызывать функции-действия
Если вернет false - значит не будет вызывать
Я правильно понимаю, что это TRUE из любой функции, которая возвращает тип булин, является глобальной для всего триггера. И если этот глобальный булин равен фолс, то вообще ни одна функция не сработает. То есть триггер сначала смотрит на условие и затем на протяжении всего триггера - на булевское значение всего триггера?
Hodor:
Ща примеры подгоню
Буду ждать. Но я вот, что хотел всегда понять ещё: несколько событий могут быть написаны на одного юнита? То есть, чтоб что-то сработало, когда юнит и атакованный, к примеру, и входящий в зону.
0
18
5 лет назад
0
DopaMine:
Но я вот, что хотел всегда понять ещё: несколько событий могут быть написаны на одного юнита? То есть, чтоб что-то сработало, когда юнит и атакованный, к примеру, и входящий в зону.
могут
0
30
5 лет назад
Отредактирован Clamp
0
если юнита бьют, он может нажать кнопку и заменит себя на бревно, исчезнет(hide), появится бревно, эффекты и звук, и через 1.5 секунды появится(unhide) в точке, которая указана, как цель заклинания. А если не бьют, то ничего не произоидёт. Так же эффект работает всего 1 секунду(то есть применять типо надо прям перед ударом)
Если это то, о чём идёт речь, то я бы делал так:
  1. Создаётся триггер
    событие — юнит атакован (то есть был отдан приказ атаки с этим юнитом в качестве цели и он находится в пределах дальности атаки атакующего)
    условие — атакованный юнит имеет эту абилку
    действия — сохранить на юнита-цель флаг "сейчас можно применить Каварими но Дзюцу" (как я понимаю, это ты и делаешь в коде в посте), затем создать таймер и запустить его на функцию, в которой этот флаг поменяется на обратное значение/удалится (больше ничего).
  2. Создаётся ещё один триггер
    событие — юнит применяет способность Каварими но Дзюцу
    условие — для применяющего юнита сохранён флаг "сейчас можно применить Каварими но Дзюцу"
    действия — скрыть кастера, создать таймер, сохранить на этот таймер кастера и целевые координаты применённой способности, затем запустить его с задержкой 1.5 секунды на функцию, в которой из таймера будут выгружены координаты с юнитом, юнит будет в них перемещён (кстати, перемещать ничто не мешает сразу, разницы в игре не будет, а данных меньше таскать/хранить) и раскрыть кастера.
Принятый ответ
0
11
5 лет назад
0
Если это то, о чём идёт речь, то я бы делал так:
Не совсем правильно я описал. Юнит может применить способность в любой момент. Но если он применил и после этого в течение секунды атакован, то сработает обмен. А если он применил и не атакован, то идёт кулдаун и чакра потрачена впустую)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.