Наверное плохо понятно по названию. Короче, только сейчас дошло что такой простой триггер хрень для множественного срабатывания. Суть: пассивная способность у юнитов определенного типа, по умолчанию скорость атаки у них значительно повышена, но когда юнит получает урон, баф скорости атаки слетает на 15 сек. Проблема я думаю понятна. При нескольких срабатываниях триггера баф скорости атаки будет возвращен только последнему юниту. Как это можно решить максимально просто? Потому что у меня уже вторая подобная способка должна быть и я хз.
`
ОЖИДАНИЕ РЕКЛАМЫ...
26
Вариант 1 - самый типичный и правильный, но слегка неудобный для триггерщика - это записать юнита в локальную переменную по локальной переменной делать действия через время.
Вариант 2 - сложный замудренный, но как вариант для триггерщика. Вести массив таких юнитов, добавляя новых юнитов в конец и увеличивать счетчик массива. А кода нужно добавить способку через 15 секунд - добавляем первому юниту в массиве и сдвигаем весь массив на 1 элемент к началу, а счетчик уменьшаем на 1.
(работает, если время всегда будет одинаковое у этой способки. Если разное - надо еще добавлять контроль юнитов, через хэштаблицы или параллельный массив, где можно использовать еще таймеры, но это прямо сильно запарно думаю будет)

И да, по идее твой триггер работает нормально, ибо "триггерный юнит" уже является уникальной локальной переменной для каждого нового вызова триггера, и ничего менять в твоем текущем триггере не надо.
А вот в некоторых других случаях это может пригодится, когда переменная события является глобальной.
Ответы (10)
9
konvan5, триггер работает правильно если один юнит получает урон за эти 15 секунд, если же это время не прошло, но урон получали и другие грифоны, в конечном итоге способку вернет только последнему юниту триггера, а надо чтобы оно работало для каждого отдельного, и тут ваш второй вариант как раз кстати, но он действительно сложноват, если можете, попрошу вас показать такой триггер
13
Solar3584, Вообще изначально не правильно использовать через событие атакован, логичнее все это делать через события детекта урона, а если у тебя патч 1.26 это надо добавлять для начала систему отлова урона.
Затем создавать таймер с 15 сек. временем для первого применения, удалять абилку и обнулять таймер при каждом получении урона. Если в течении 15 сек. юнит не получил урона, добавлять абилку.
То что у тебя сейчас будет вызывать много багов, так как по логике твоего триггера может произойти следующее, если юнита 3 раза атакуют, ему 3 раза может добавится абилка подряд и если в один момент она удалится в этот же момент она может и добавится, от вейтов лучше отказаться.
26
Solar3584, скорее всего у тебя проблема в том, что ты можешь атаковать одного и того же юнита несколько раз подряд в течении 15 сек, и запустить этот триггер несколько раз на одного юнита. Может из-за этого способка некорректно потом добавляется.
Нужно бы добавить контроль юнитов под абилкой.
Тебе как надо, чтобы время обновлялось после последней атаки (15 сек после последней атаки) или чтобы в течении 15 секунд сколько бы не атаковали, все равно вернуть абилку на 15-той секунде даже если юнит был атакован секунду назад?
26
Solar3584, вот тебе пример контроля, чтобы триггер не срабатывал больше одного раза за 15 секунд после первого удара по юниту.
Создаем группу юнитов. Если при ударе юнит триггера не находится в группе - то убираем ему абилку, добавляем в группу, ждем 15 сек, добавляем абилку и удаляем из группы.
Пока идут 15 секунд - новые удары не запустят действия триггера.
Загруженные файлы
9
konvan5, я хз, может это недоработка версии 1.26, но проблема не только в этом, когда триггер сработает с другим юнитом за эти 15 сек, триггер тупо забудет про прошлого юнита, там 100% надо через массивы делать я думаю
26
Solar3584, я протестил на версии 1.26а и все работает отлично. А ты на чем тестишь?
26
Solar3584, сделай группу как на скрине. Скорее всего из-за этого у тебя как-то багало.
9
konvan5, а тут оно не будет так же работать? Всё-таки тут надо ссылаться не на юнита триггера
Загруженные файлы
26
Solar3584, в конце триггера (через 30 секунд) ты ссылаешься на переменную Lovch удаляя абилку. Кто именно у тебя будет в неё записан? - неизвестно, т.к. за эти 30 секунд триггер может сработать снова и переписать значение это переменной на новое.
9
Extremator, это еще давней пробы триггер, он же не сработает так же как и с грифонами? там суть еще в том что тут абилка добавляться, а не удаляется, и если тот же юнит убивает за эти 30 секунд, то ля него таймер должен обновится, типа как баф сработал снова, и да ваша карта у меня не открылась, но с тем триггером я разобрался
26
Ну по-идеи у тебя здесь должно всё работать, хоть и не совсем правильно. Триггер реагирует на того, кого атаковали, т.е. на грифона. Ты ему убираешь абилку, ждёшь 15 секунд (замени на "ждать игровое время"), и ему же возвращаешь её. В данном случае "юнит триггера" не будет теряться (не должен) и спустя 15 секунд манипуляции будут проводиться с ним как и должно быть. Единственная проблема - за эти 15 секунд его снова могут атаковать, и эта отсрочка не будет ничего учитывать. Через 15 секунд после каждой атаки грифон снова будет получать обратно свою абилку. Тут два варианта - либо обновлять эти истекающие 15 секунд, что бы продлевать длительность эффекта "потери бонуса", либо попросту не давать ему запускаться, если у грифона уже нет бонуса.

. . .

Естественно, есть вариант с более сложным решением - заводим триггер на "получение урона" (это более логично, хотя я не навязываю именно такой вариант), и каждый раз чекаем есть ли у грифона (у юнита получившего урон) дебафф на "ослабление". Если его нет - выдаём, отнимаем бонусное ускорение, заводим таймер на 15 секунд. Но если он есть - ищем таймер, обновляем время до 15 секунд. По завершению работы таймера - удаляем "дебафф", выдаём бонусное ускорение обратно. Готово.
Если сделать всё правильно, и пускай даже не MUI, то добавление буквально двух-трех переменных уже даёт состроить счётчик и сделать его полностью MUI'шным.
26
Вот пример. Не помню какой редактор более/менее актуален, поэтому сделал на том который первый под руку попал, возможно не откроется, надо проверять. Но работает.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.