Добавлен
Подскажите плз, как сделать на 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
Clamp:

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

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

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

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

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

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

В редакторе "триггер" это компонент UI, отдельное поле для ввода текста в списке триггеров. В движке "триггер" это объект, связывающий между собой события, условия и действия, причём всего этого у него может быть неограничено много (или ограничено, но всё равно много; не проверял).
0
11
5 лет назад
0
Можешь посмотреть вот эту карту, чтобы понять, вещи какого уровня возможно нормально реализовывать в редакторе.
По скринам видно, что какая-то дичь(в хорошем смысле) сделана)) Хотя, думаю, даже скачать можно, только не понял, как. Жаль, что интерфейс пока нельзя менять:D
0
30
5 лет назад
0
0
11
5 лет назад
0
integer i = 0
loop
CreateTrigger()
exitwhen (i > 8000)
endloop
Ок, тогда я начинаю с нуля писать карту...чтоб эта моя абилка в одном триггере уместилась
Clamp:
Настоятельно советовал бы так и сделать при первой же возможности. LUA, в отличии от JASS2, используется далеко не только в проприетарном редакторе одной-единственной игры.
Слышал об этом) а в новом редакторе точно будет LUA? Или никто не знает/слухи?
Или луа только в jass new gen pack есть:D
Clamp:
не понял, как
Пасиб))
0
18
5 лет назад
0
DopaMine, луа начинается с версии варкрафта 1.31 и в рефордже 100% будет
0
30
5 лет назад
0
Ок, тогда я начинаю с нуля писать карту...чтоб эта моя абилка в одном триггере уместилась
Постепенно улучшать почти всегда лучше, чем снести и построить заново. Да и в чём проблема, что требуется больше одного триггера для чего-то? Триггер — почти самый лёгкий не-нативный объект в игре (второе место после таймера), нет смысла их экономить.
хотя, конечно, существуют особые извращённые техники, позволяющие делать на одном триггере всю карту, но на практике это всегда неоправданно
0
11
5 лет назад
0
Ахах. Ну и мощь. Не сразу понял, что стрелками бегать:DDD
0
18
5 лет назад
Отредактирован Hodor
0
структурировать надо код всегда
и по возможности на каждый вид события один триггер
иначе при дальнейших модификациях карты будет получаться всё более жесткое месиво из кода
и в один день настанет момент когда уже нереально будет контроллировать ~10к строк перемешанного кода, всплывет вопрос об оптимизации
любой человек без склонностей к мазохизму придет к выводу что надо переписывать с нуля всё
хотяяяя, оно тоже мазохизм, но меньший)))
1
30
5 лет назад
1
и по возможности на каждый вид события один триггер
Пишешь ты такой систему движения на WASD (то бишь на касте абилок) и какие-нибудь абилки, и для всех нужно одно событие. Красиво будет выглядеть такая "оптимизация"? Легко ли поддерживать такой код?

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

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

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


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

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

Алсо оффтоп, закругляемся.
ладно, пойду посплю
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.