Как заставить работать родной радар, я не разобрался, так что попробовал реализовать свой.
Вот таким вот "коротенько, минут на сорок" (С), образом можно реализовать собственный "радар".
Это только "базовая реализация". Само собой, можно усложнять/совершенствовать.. Например вспомнив стереометрию, можно реализовать областью прослушивания не сферу, как выше, а например конус, и крутить его по сторонам...; ввести ограничения по высоте... Можно определять типы самолетов; сравнив координаты целей между двумя проходами, можно посчитать направление и скорость, поднять на перехват истребители или.. или... или.. Имея точную карту высот, реализовать мертвые зоны за возвышенностями и т.д. Варьировать точность определения количества самолетов и их типов от расстояния до "радара"... Выводить сообщения игрокам о целях выборочно, команде или всем сразу... Или вообще сделать радар передвижным.Код:using System; using maddox.game; using maddox.game.world; using System.Collections.Generic; using maddox.GP; public class Mission : maddox.game.AMission { private const double RADAR_X = 170291.06; // положение радара по X; private const double RADAR_Y = 188786.78; // положение радара по Y; private const double RADAR_Z = -60; // положение радара по Z; private const double RADIUS = 20000; // радиус радара, метры; private const int CHECK_PERIOD = 10; // частота обновления радара, секунды; private const int ARMY = 2; // чьи самолеты отслеживать (1 - красные, 2 - синие); private Point3d radarPoint; // местоположение радара в понятном игре виде; private bool radarDestroyed = false; // признак уничтожения радара; private void serverMessage(string msg) { Player pl = GamePlay.gpPlayer(); Player[] players = { pl }; object[] args = { msg }; GamePlay.gpLogServer(players, msg, args); } public override void OnBattleStarted() { base.OnBattleStarted(); radarPoint = new Point3d(RADAR_X, RADAR_Y, RADAR_Z); } public override void OnTickGame() { base.OnTickGame(); if (!radarDestroyed) { if (Time.tickCounter() % (CHECK_PERIOD * 30) == 0) { lockTargets(); } } } public override void OnTrigger(int missionNumber, string shortName, bool active) { base.OnTrigger(missionNumber, shortName, active); if ("radarDestroyedTrigger".Equals(shortName) && active) { radarDestroyed = true; GamePlay.gpGetTrigger("radarDestroyedTrigger").Enable = false; serverMessage("Радар: скоропостижно скончался..."); } } private void lockTargets() { bool hasTargets = false; foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(ARMY)) { Dictionary<AiAirGroup, int> groupsCounter = new Dictionary<AiAirGroup, int>(); foreach (AiActor groupMember in airGroup.GetItems()) { if (groupMember is AiAircraft) { hasTargets = true; if (RADIUS > groupMember.Pos().distance(ref radarPoint)) { string msg = String.Format("Радар: Самолет в квадрате {0}", GamePlay.gpSectorName(groupMember.Pos().x, groupMember.Pos().y)); serverMessage(msg); } } } } if (!hasTargets) { serverMessage("Радар: цели не обнаружены"); } serverMessage("Радар: пииик-пик!"); } }В общем дофига всего.
Реализованная миссия в аттаче.
Стоит радар, летят две группы хенкелей. раз в 10 секунд "радар" "сканирует" местность радиусом в 20 км.. Как только в радиус заходят синие самолеты, их координаты светятся в окне сообщений. Красные самолеты игнорируются. Первая группа хенкелей отрабатывает по радару. Если он уничтожается, сообщения прекращаются.




В общем дофига всего.
Ответить с цитированием
