Проблема возможно стара, но я пока не нашёл нормального решения.
По дефолту существует способность, заставляющая любую боевую единицу иногда менять свою текущую позицию на местности. Типа симуляция того, что она просто так бродит по округе. Она же «бродячий (нейтральный)». Обычно имеется у всякой нейтральной мишуры, типа овец и сцинков. Однако если эту способность поставить на враждебного юнита, его поведение станет более ненормальным. Он будет постоянно убегать, с огромной неохотой вступая в бой.
А вопрос заключается в том, можно ли как-то эту систему обхитрить? Я пробовал через триггеры блокировать эту способность при атаке этого юнита. Но при попадании по юниту заклинанием эффект не работает. Также была идея с отключением заклинания при приближении врага на определенное расстояние, но это опятьже не подходило, так как это работало даже когда враг находился за препятствующим обзору элементу декораций.
Вобщем вопрос такой - можно ли как-то по умному обойти эту систему? Или сделать аналог способности через триггеры или jass? Главное чтобы мобы двигались не одновременно, будто по команде...

Принятый ответ

Самый простейший гуи пример:
С - каждый 1-10 секунд игрового времени
Д - Выбрать всех юнитов, у которых есть способность пустышка "свой бродячий"
У - текущий приказ не равен "attack"
Д - Приказать выбраный юнит, перейти нападая на противников, в случайную точку, зона "игровая карта"

Пустышку "свой бродячий", делаем на основе чего угодно, например из ясновидения вертолётов, или грабежа с 0 харатеристиками
На jass / lua
Добавляем всех бродячих при создании в группу, на у внутри тоже самое, только без утечек

Для чего проверка на условие текущий приказ != "attack", ну чтобы юнит дошёл до цели изначальной, при малом периоде брожения, юнит может не дойти до точки и развернуться
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
32
4 года назад
3
Самый простейший гуи пример:
С - каждый 1-10 секунд игрового времени
Д - Выбрать всех юнитов, у которых есть способность пустышка "свой бродячий"
У - текущий приказ не равен "attack"
Д - Приказать выбраный юнит, перейти нападая на противников, в случайную точку, зона "игровая карта"

Пустышку "свой бродячий", делаем на основе чего угодно, например из ясновидения вертолётов, или грабежа с 0 харатеристиками
На jass / lua
Добавляем всех бродячих при создании в группу, на у внутри тоже самое, только без утечек

Для чего проверка на условие текущий приказ != "attack", ну чтобы юнит дошёл до цели изначальной, при малом периоде брожения, юнит может не дойти до точки и развернуться
Принятый ответ
0
23
4 года назад
0
Нельзя просто удалять способность при атаке?
0
9
4 года назад
0
случайную точку, зона "игровая карта"
Вероятно, зона должна быть не вся карта, а небольшая дистанция вокруг юнита.
0
16
4 года назад
0
Вариант с рандомным перемещением в периодическом течении времени я пропал, впринцыпе нормально, но минус в том, что все юниты реагируют на событие разом. В определенных случаях сильно бросается в глаза. Жаль нельзя рандомности добавить, чтобы вразнобой получали команды.
Кстати. А через какую команду идёт реакция на получение урона от заклинания?
1
21
4 года назад
Отредактирован scopterectus
1
Ronnie, можно еще добавить рандомности, если перемещать юнита не сразу же по истечению времени, а добавить условие ( GetRandomInt( 0, 3 ) < 2 ), если юнит не проходит проверку, то его не трограем. Так будут двигаться не все юниты одновременно, а лишь некоторые. А таймер можно сделать не периодическим, а запускать его повторно каждый тик, но уже с рандомным таймаутом.
0
32
4 года назад
0
Вероятно, зона должна быть не вся карта, а небольшая дистанция вокруг юнита.
там уже на усмотрение автора
Ronnie:
Жаль нельзя рандомности добавить, чтобы вразнобой получали команды.
можно, каждую секунду или чаще кидаем кости например от 1 до 5, и если 1, то приказ идти в случайную точку, а так же проверять на не идёт ли юнит... как я писал выше
Ronnie:
Кстати. А через какую команду идёт реакция на получение урона от заклинания?
Вот мы тут распинались, как ловить маг урон, но автор удалил вопрос, больше не хочу
0
25
4 года назад
0
Bergi_Bear
можно, каждую секунду или чаще кидаем кости например от 1 до 5, и если 1, то приказ идти в случайную точку, а так же проверять на не идёт ли юнит... как я писал выше
А лучше не в случайную, а оффсетом в направлении лица + угол
ModuloReal(GenUnitFacing(u)+ GetRandomReal(-50,50),360)
1
32
4 года назад
1
Просто нужно реализовать нормальную систему, я как то выкладывал карту где подобная система была, где юниты ходили на карте и искали противника, при обнаружении пытались преследовать и применяли способности. Код не очень сложный.
0
3
4 года назад
0
quq_CCCP, а можно ссылку на эту карту, пожалуйста? Очень хочется посмотреть с:
0
26
4 года назад
0
Ronnie, поставь бродячим крипам в РО Характеристики - Может бежать Нет. Только они чуточку будут тупить при нападении, могут вдруг в сторону отбежать, но главное, что не убегают при атаках.
0
32
4 года назад
0
у меня на комне не сохранилась...
0
12
4 года назад
0
Пропишите в константах бесконечный радиус отдаления от лагеря и преследования.
Создаем нужную зону "патруля". Добавляем юнитов в отряд, который можно привязать к зоне патруля.
В триггере делаем каждые N времени посылать юнита в атаку/патруль.
Из минусов данной реализации, если крипы сядут на хвост, они с него не слезут, но башни могут их спокойно "успокоить". И вся эта система проста на абузы.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.