Добавлен
Подскажите плз, как сделать на 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
Ок, тогда я начинаю с нуля писать карту...чтоб эта моя абилка в одном триггере уместилась
Постепенно улучшать почти всегда лучше, чем снести и построить заново. Да и в чём проблема, что требуется больше одного триггера для чего-то? Триггер — почти самый лёгкий не-нативный объект в игре (второе место после таймера), нет смысла их экономить.
хотя, конечно, существуют особые извращённые техники, позволяющие делать на одном триггере всю карту, но на практике это всегда неоправданно
18
структурировать надо код всегда
и по возможности на каждый вид события один триггер
иначе при дальнейших модификациях карты будет получаться всё более жесткое месиво из кода
и в один день настанет момент когда уже нереально будет контроллировать ~10к строк перемешанного кода, всплывет вопрос об оптимизации
любой человек без склонностей к мазохизму придет к выводу что надо переписывать с нуля всё
хотяяяя, оно тоже мазохизм, но меньший)))
30
и по возможности на каждый вид события один триггер
Пишешь ты такой систему движения на WASD (то бишь на касте абилок) и какие-нибудь абилки, и для всех нужно одно событие. Красиво будет выглядеть такая "оптимизация"? Легко ли поддерживать такой код?

Тут у тебя ещё замечание про 1000 потоков было, ты его удалил, но я замечу, что вар вообще однопоточный.

иначе при дальнейших модификациях карты будет получаться всё более жесткое месиво из кода
Карта с одной из самых сильных модификаций игрового процесса, которые я знаю (tcx aside), называвшаяся Combat Zone, имела в своём коде меньше тысячи строк просто потому что писал её скиловый программист. Месиво из кода всегда характеризует не столько платформу, сколько её пользователя (/разработчика на ней).

Ну и даже если у тебя 10к+ строк кода, этот код же можно нормально структурировать, а не тупо приписывать в Map Custom Script каждый раз внизу.


Алсо оффтоп, закругляемся.
18
про 1000 потоков было
да просто почти все карты на гуи имеют на одно и тоже событие (например юнит атакован) около 50 триггеров
а во всяких петробалансах вообще лютейшая дичь, тупо событие на вход в регион имеет около двухста триггеров

Ну и даже если у тебя 10к+ строк кода, этот код же можно нормально структурировать, а не тупо приписывать в Map Custom Script каждый раз внизу.
так я и не говорил что нельзя переписывать)
я прямо так и подчеркнул что с нуля
хотяяяя, оно тоже мазохизм, но меньший)))

Алсо оффтоп, закругляемся.
ладно, пойду посплю
30
так я и не говорил что нельзя переписывать)
Структуризация кода подразумевает его перемещение, но не пересоздание, насколько я могу помнить.
18
Clamp, ну и то и другое, кое где надо переписать натыкать пробелов название поменять, кое где переместить

ладно всё, я ушёл
11
действия — скрыть кастера, создать таймер, сохранить на этот таймер кастера и целевые координаты применённой способности, затем запустить его с задержкой 1.5 секунды на функцию, в которой из таймера будут выгружены координаты с юнитом, юнит будет в них перемещён (кстати, перемещать ничто не мешает сразу, разницы в игре не будет, а данных меньше таскать/хранить) и раскрыть кастера.
Да, так меньше данных сохранять придётся, спасибо за совет) так и сделаю щас
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.