Добавлен DopaMine
У меня есть луп, который ожидает условия. В функции для этого лупа необходимо загружать данные из основной функции. Как я понял,
local unit u = GetTrigerUnit()
local integer h = GetHandleId(u)
Не сработает...А как ещё - не знаю, это же не таймер. Подскажите, что делать.
function WaitForAttack takes nothing returns boolean
local unit u = GetTriggerUnit()
local integer h = GetHandleId(u)
local real i = LoadReal(udg_hash,h,StringHash("stop"))
if (i < 1) then
return LoadBoolean(udg_hash,h,StringHash("attackedUnit")) == true
call SaveReal(udg_hash,h,StringHash("stop"),i + 0.10)
else
call SaveBoolean(udg_hash,h,StringHash("attackedUnit"), false)
call DisplayTimedTextToForce( GetPlayersAll(), 30, "фолс")
set u = null
return false
endif
endfunction
И вот тот луп:
loop
exitwhen ( WaitForAttack() )
call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.1))
endloop
Принятый ответ
DopaMine, создаёшь таймер
сохраняешь на этот таймер всю необходимую информацию (юнита и прочее)
запускаешь таймер
всё
примеров того как это сделать в статьях куча
открываем и читаем
сохраняешь на этот таймер всю необходимую информацию (юнита и прочее)
запускаешь таймер
всё
примеров того как это сделать в статьях куча
открываем и читаем
можешь начать с этой
вообще есть куча статей и готовых систем
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Потом откуда у тебя возьмутся GetTriggerUnit()? Оно работает до вейта, после вейта уже нет, нельзя так делать,
Создаешь таймер и запускаешь его, указанный интервал, когда условие выполнится - останавливаешь таймер.
Информации море ссылка
Я четвёртый день пробую на джассе. До этого не знал, что это.
quq_CCCP:
грохнутый поток в фильтрах и кондишенах
неточный отсчет времени при каждом запуске функции
а в сингле еще и его отсчет при паузах
Отредактирован PT153
Отредактирован biridius
абилки делайте через таймеры
на таймер как раз можно и сохранять данные в хеш, а не на какого то TriggeringUnit
Если я вызову функцию из таймера, то в ней опять нельзя будет использовать GetTriggerUnit(), а у меня в этой функции объявлен старт ещё одного таймера...
Как тогда быть, нихрена не понимаю.
biridius: Мне нужно отловить момент одной абилки при нажании на другую(проверка длится 1 секунду). Через зацикленный таймер не работает. При том, что я в нём каждые 0.05 секунд загружаю булин. А в основной функции написано, что если этот булин тру, то делать дальше.
А когда булин у меня становится тру, функция сразу не срабатывает. Она срабатывает при следующем нажатии на абилку, которая зависит от этого тру
Логика в том, что если в функции события триггера написано "юнит атакован", то это событие проверяется постоянно. А у меня событие "ЖМЁТСЯ КНОПКА"(проверка булина другой абилки). И типо на момент нажатия кнопки проверяется булин другой абилки. А мне надо, чтоб в течение секунды проверялся булин и если он за эту секунду становится тру, то выполнить дальше. А этот булин становится трушным, но так как абилка-проверка работает по нажатии на эту абилку, то в момент изменения булина с фолс на тру ничего не происходит, если это таймер, а не ЛУП.
Из другого тригера по хэндлу юнита
РЕБЯТА, ВСЁ ЗАРАБОТАЛО! Оказывается, из этого таймера, как только становится булин == тру, можно было вызвать старт ещё одного таймера. Щас буду всё писать с нуля, оптимизируя.
PT153:
Вот это разве не обнуление ради устранения утечек?
Отредактирован MpW
см. в теме 7 сообщение тебе уж объясняли в этой теме
см в теме 16 сообщение и скачай текстовый файл
ты же сам хранишь этот параметр "True/False" в хэше. И изменяешь в зависимости от срабатывания события вроде юза абилити, таймера истек GetExpiredTimer(). Зачем тебе создавать лишний таймер, и периодически проверять => лишняя работа. Можно напрямую узнать в хэше. Если значение изменится, ты сам узнаешь через сработки события юза абилити или завершения таймера
Отредактирован DopaMine
Скилл первый - ударить. Работает так: в области перед кастером выбирается отряд, в нём выбирается(pick) ближайший юнит к кастеру, у кастера проигрывается анимация удара со скоростью, зависящей от ловкости кастера, и через время анимации цели наносится урон, зависящий от силы кастера.
Скилл второй - уворот от первого скилла.(из наруто - каварими но дзюцу. Уже описывал подобное в другом вопросе, но там я делал уворот от автоатак, а щас делаю от "Ударить").
Он работает так: кастер жмёт кнопку(каварими но дзюцу)(направленная на точку) - и если в течение секунды после нажатия кастер становится (pick)-юнитом( из предыдущей способности), то кастер мгновенно(в момент становления PICK-юнитом из первой абилки) прячется(hide), и через 1.5 секунды появляется в точке - цель заклинания. Если же кастер просто нажал абилку и так и не стал выбранным юнитом предыдущей абилки, то просто пойдёт кулдаун. Это для того, чтоб надо было микрить и доджить, успевать нажать за время анимации врага. А если тот прокачен и у него анимация 0.2 секунды, то типо не поможет навык микроконтроля, так как враг КРУТОй НИНДЯ)))))))))))))))))))0
Второе я сделал. Правда, корявенько, надо переписывать, чтоб устранить все утечки(предварительно найдя, как именно это делается, а то мне писали здесь, что я обнуляю переменную после возврата из функции).
А вот с первой абилкой беда - пока у меня урон наносится сразу после того, как определилась цель(pick) и со скоростью анимации я не работал и не знаю даже, можно ли влиять на скорость проигрывания анимации. Если узнаю, что нельзя - я удалю варкрафт.)
Steal nerves:
DopaMine:
DopaMine:
Отредактирован PT153
сохраняешь на этот таймер всю необходимую информацию (юнита и прочее)
запускаешь таймер
всё
примеров того как это сделать в статьях куча
открываем и читаем
PT153: