Скрипт "Антивулч" для Репок
Можно пока потестить на существующих картах.
Звено стодесятых на проверке эпично шмякнулось об землю при попытке атаковать взлетающие самолеты.Код:using System.Collections.Generic; using maddox.game; using maddox.game.world; using maddox.GP; public class Mission : AMission { List<AvZone> av_points = new List<AvZone>(); public override void OnBattleStarted() { base.OnBattleStarted(); av_points.Add(new AvZone(52615, 52732, 9, 900, 500)); // добавляем зону антивулча (координаты по трем осям, радиус, ограничение по высоте) } public override void OnAircraftDamaged(int missionNumber, string shortName, AiAircraft aircraft, AiDamageInitiator initiator, part.NamedDamageTypes damageType) { base.OnAircraftDamaged(missionNumber, shortName, aircraft, initiator, damageType); if (initiator.Actor is AiAircraft && initiator.Tool.Type == AiDamageToolType.Cannon) // если атакующий - самолет и стрелял пушками/пулеметами { AiAircraft attacker = (AiAircraft)initiator.Actor; if (InAvZone(aircraft)) // проверяем, находится ли жертва в пределах антивулча { attacker.cutLimb(part.LimbNames.WingL0); // цинично ломаем редиске левое крыло... attacker.cutLimb(part.LimbNames.WingR0); // и не менее цинично, правое. } } } public bool InAvZone(AiAircraft attacker) { foreach (AvZone zone in av_points) { Point3d point = attacker.Pos(); if (zone.Has(point)) { return true; } } return false; } } public struct AvZone { Point3d point; double radius; double zMax; public AvZone(double x, double y, double z, double radius, double zMax) { point = new Point3d(x, y, z); this.radius = radius; this.zMax = zMax; } public bool Has(Point3d pos) { if (pos.z - point.z > zMax) return false; if (pos.distance(ref point) > radius) { return false; } else { return true; } } }![]()




Ответить с цитированием