Здесь мы рассмотрим как сделать так чтобы какая-то определенная группа юнитов противника постоянно искала войск игроков для их уничтожения.
В конечном итоге получится что-то вроде нескончаемых волн, когда противники постоянно атакуют.
В конечном итоге получится что-то вроде нескончаемых волн, когда противники постоянно атакуют.
Данная система лишь тестовый вариант и от проекта в проект может изменятся под нужды конкретного проекта
Для данной системы нам понадобится:
Константы:
PLAYER_2_ZERGLINGS = 2 <Integer (Constant)> // Игрок которому принадлежат атакующие юниты
TIMER_SPAWN = 2.5 <Real (Constant)>
COUNT_ZERGLINGS = 10 <Integer (Constant)>
Переменные:
Zerglings = (Empty unit group) <Unit Group>
Timer Spawn Zerglings = (New timer) <Timer>
Триггеры:
Start Timer
Unburrow Zerglings
Attack Zerglings
Система
Триггер - Start Timer
В триггере Start Timer, добавьте событие Map Initialization и действие Start Timer. Укажите таймер как переменную Timer Spawn Zerglings
Start Timer
Events
Game -Map initialization
Local Variables
Conditions
Actions
Timer -Start Timer Spawn Zerglings as a Repeating timer that will expire in TIMER_SPAWN Real Time seconds
Триггер - Unburrow Zerglings
В этом триггере добавьте событие Timer Expires и в качестве параметра укажите таймер из переменной Timer Spawn Zerglings.
Затем добавьте действие Pick Each Integer, укажите для него параметры 1 и константу COUNT_ZERGLINGS.
Внутри этого цикла добавьте действие Create Units Facing Angle, в котором укажите количество юнита как 1, тип единицы выберете тот, кого вы хотите сделать преследователями (В данном примере Зерглинги (закопанные)), укажите вражеского игрока из константы PLAYER_2_ZERGLINGS а также укажите точку где будут спавнится юниты (укажу рандомную точку на всем игровом пространстве) ну и можно указать рандомный угол разворота
Следующим действием, так как в данном примере закопанные зерглинги, добавить Issue Order для Последнего созданного юнита и отдать приказ Zergling - Unburrow. Так красивее будут появляться зерглинги. А последний параметр отвечает за то, заменит ли этот приказ все другие приказы юнита или в очередь добавиться? Укажем что заменит.
Следующим действием добавим Последнего созданного юнита в группу Zerglings
После цикла (НЕ ВНУТРИ ЦИКЛА) добавим действие Run Trigger с запуском триггера Attack Zerglings
Unburrow Zerglings
Events
Timer -Timer Spawn Zerglings expires
Local Variables
Conditions
Actions
General -Pick each integer from 1 to COUNT_ZERGLINGS, and do (Actions)
Actions
Unit -Create 1 Zergling (Burrowed) for player PLAYER_2_ZERGLINGS at (Random point in (Playable map area)) facing (Random angle) degrees (No Options)
Unit -Order (Last created unit) to (Zergling - Unburrow) (Replace Existing Orders)
Unit Group -Add (Last created unit) to Zerglings
Trigger -Run Attack Zerglings (Check Conditions, Don't Wait until it finishes)
Триггер - Attack Zerglings
Здесь добавим Локальную переменную _target, типом Unit. В ней будет записываться ближайшая цель для каждого зерглинга.
В действиях добавим цикл Pick Each Unit In Unit Group, внутри которого добавим действие Set Variable. В качестве переменной для этого действия укажем _target, а в качестве значения укажем функцию Closest Unit To Point, для которого точку выберем как позиция юнита (функция Position Of Unit) с указанным юнитом Picked Unit (Picked Unit - это также функция, которая отдаёт текущего перебираемого юнита циклом Pick Each Unit In Unit Group). А в качестве Группы единиц укажем функцию Units In Region With Alliance To Player, Где игрока укажем как константу PLAYER_2_Zerglings
Следующим действием в цикле добавим Issue Order, В котором в качестве единицы укажем функцию Picked Unit, а в качестве приказа выберем функцию Order Targeting Point, в которой укажем способность Attack, а точку как Position Of Unit с указанным юнитом из локальной переменной _target (В эту переменную мы ранее записали самого ближнего вражеского юнита для единицы Picked Unit)
Events
Local Variables
_target = No Unit <Unit>
Conditions
Actions
Unit Group -Pick each unit in Zerglings and do (Actions)
Actions
Variable -Set _target = (Closest unit to (Position of (Picked unit)) in (Units in (Entire map) having alliance Enemy with player PLAYER_2_ZERGLINGS matching Excluded: Air, Missile, Dead, Hidden, with at most Any Amount))
Unit -Order (Picked unit) to ( Attack targeting (Position of _target)) (Replace Existing Orders)