Эта система позволит сделать так, чтобы войска противника "искали" игрока всегда, без простаивания.
Глобальные переменные
Units = (Empty unit group) <Unit Group>
Сам триггер
Attack Nearby Enemy for Units
Events
Timer -Every 1.0 seconds of Game Time
Local Variables
_targetPlayer = 1 <Integer>
Conditions
Actions
Unit Group -Pick each unit in Units and do (Actions)
Actions
Unit -Order (Picked unit) to ( Attack targeting (Position of (Closest unit to (Position of (Picked unit)) in (Any units in (Entire map) owned by player _targetPlayer matching Excluded: Missile, Dead, Hidden, with at most Any Amount)))) (Replace Existing Orders)
Пояснение к коду
- Для начала нам нужен отдельный триггер, который будет заниматься поиском ближайших целей для каждой единицы в группе.
- На этот триггер добавляется периодическое событие Periodic Event. Вообще лучше бы завести свой отдельный таймер с переменной для него, так вы сможете динамично изменять частоту обновления приказов, но для примера пойдет и обычное периодическое событие.
- Возможно понадобится одна локальная переменная для атакуемого игрока. Почему возможно? Да в целом потому, что обычно принято хранить номера активных игроков в отдельных глобальных константах, которые уже всюду во все системы триггеров и подставляются
- Также нам понадобится одна глобальная переменная такая как Units, в ней будут все единицы которые должны будут искать своих врагов
- Сразу же, мы начинаем перебор всех единиц из группы Units
- Каждой единицы из группы отдаём приказ "Attack" с помощью действия issue order, только отдаём мы этот приказ как "приказ направленный на точку" (Order Targeting Point, а не Order With No Target). Именно на точку нужно, чтобы приказ атаки отдавался не как "фокус единицы", а скорее как "в направлении единицы", ведь если указывать на конкретно единицу, то наша атакующая единица пойдёт целенаправленно атаковать указанную единицу, а если указывать на точку, то атакующая единица пойдет в направлении цели, параллельно атакуя всех кто встретится на пути
- В качестве точки выбираем функцию Position Of Unit. Это вернёт позицию указанного в параметр юнита.
- А в параметр мы передадим функцию Closest Unit To Point. Она принимает группу единиц и точку, а отдаёт единицу из этой группы, которая расположена ближе всех остальных к переданной точке
- Точку укажем как Position Of Unit с указанным в ней текущим Picked Unit юнитом. Это для того чтобы определить ближайшую цель к нашей перебираемой в цикле атакующей единицей
- А в качестве группы единиц укажем функцию Units In Region Matching Condition с переданным в параметром игрока как наша локальная переменная _targetPlayer, а регионом как Entire Map. Этим мы получим всех единиц целевого атакуемого игрока, которых будут атаковать наши атакующие единицы