Добавлен
Подскажите плз, как сделать на 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
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
Если это то, о чём идёт речь, то я бы делал так:
Не совсем правильно я описал. Юнит может применить способность в любой момент. Но если он применил и после этого в течение секунды атакован, то сработает обмен. А если он применил и не атакован, то идёт кулдаун и чакра потрачена впустую)
0
18
5 лет назад
Отредактирован Hodor
0
1
Регистрируется событие на "Горного короля" когда он начинает применять способность
Так же записываются условия и действия
Далее я жму любую из его способностей
Срабатывает событие
Вызывается первая функция-условие Condition1, она возвращает true - значит всё нормально
так же у Condition2
Далее на экран выводится текст:
text1
text2
Т.е сработали функции Action1 и Action2
function Action1 takes nothing returns nothing
    call BJDebugMsg("text1")
endfunction
function Action2 takes nothing returns nothing
    call BJDebugMsg("text2")
endfunction

function Condition1 takes nothing returns boolean
    return true
endfunction
function Condition2 takes nothing returns boolean
    return true
endfunction

function InitTrig_s takes nothing returns nothing
    local trigger trg = CreateTrigger(  )

    call TriggerRegisterUnitEvent(trg, gg_unit_Hmkg_0001, EVENT_UNIT_SPELL_CHANNEL )
    
    call TriggerAddCondition(trg, Condition(function Condition1))
    call TriggerAddCondition(trg, Condition(function Condition2))
    
    call TriggerAddAction(trg, function Action1)
    call TriggerAddAction(trg, function Action2)
endfunction
2
я жму любую из его способностей
Срабатывает событие
Вызывается первая функция-условие Condition1, она возвращает true - значит всё нормально
а вот Condition2 возвращает false - значит действия триггера не будут выполняться и на экран ничего не выведется
function Action1 takes nothing returns nothing
    call BJDebugMsg("text1")
endfunction
function Action2 takes nothing returns nothing
    call BJDebugMsg("text2")
endfunction

function Condition1 takes nothing returns boolean
    return true
endfunction
function Condition2 takes nothing returns boolean
    return false
endfunction

function InitTrig_s takes nothing returns nothing
    local trigger trg = CreateTrigger(  )

    call TriggerRegisterUnitEvent(trg, gg_unit_Hmkg_0001, EVENT_UNIT_SPELL_CHANNEL )
    
    call TriggerAddCondition(trg, Condition(function Condition1))
    call TriggerAddCondition(trg, Condition(function Condition2))
    
    call TriggerAddAction(trg, function Action1)
    call TriggerAddAction(trg, function Action2)
endfunction
3
тоже самое как в первом примере
function Action1 takes nothing returns nothing
    call BJDebugMsg("text1")
endfunction

function Condition1 takes nothing returns boolean
    return true
endfunction

function InitTrig_s takes nothing returns nothing
    local trigger trg = CreateTrigger(  )

    call TriggerRegisterUnitEvent(trg, gg_unit_Hmkg_0001, EVENT_UNIT_SPELL_CHANNEL )
    
    call TriggerAddCondition(trg, Condition(function Condition1))
    
    call TriggerAddAction(trg, function Action1)
endfunction
0
30
5 лет назад
0
DopaMine, ну да, это поведение и будет иметь место при описанной мной реализации. Нет флага "сейчас можно применить Каварими но Дзюцу"? Никто никуда не перемещается и ниоткуда не скрывается, триггер просто не сработает, так как условие заблокирует срабатывание.
0
11
5 лет назад
0
(то есть был отдан приказ атаки с этим юнитом в качестве цели и он находится в пределах дальности атаки атакующего)
И да, здесь что, надо расписывать, что именно значит "юнит атакован"? Я вообще буду потом сложнее делать, чтоб автоатаки не было, а был скилл у всех с кулдауном, который наносит урон ближайшему юниту в области перед применившим(это видимо через угол поворота юнита и косинус для Y и синус для X этого угла надо будет использовать). Но пока сделал просто при срабатывании от автоатаки, а не от урона и не от абилок. Так как абилки я хочу делать направленными не на юнита, а на область или ненаправленные.
1
30
5 лет назад
1

Вообще чуть не забыл сказать, что идея конкретной механики этой абилки просто отличная.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.