Исправлено с учетом парашютировавшихся
Код:using System; using maddox.game; using maddox.game.world; using System.Collections.Generic; public class Mission : AMission { const int TotalArrestTime = 30; // Time in seconds public class prisonCell { public Player Prisoner { get; set; } public DateTime JailTime { get; set; } public bool Removable { get; set; } } public List<prisonCell> PrisonCamp = new List<prisonCell>(); public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex) { base.OnPlaceEnter(player, actor, placeIndex); if (actor == null) // if player bailed out the actor is null so remove him from prison { if (PrisonCamp.Count != 0) { foreach (prisonCell pri in PrisonCamp) { if (pri.Prisoner == player) { pri.Removable = true; } } PrisonCamp.RemoveAll(item => item.Removable == true); } } if (PrisonCamp.Count != 0) { foreach (prisonCell pri in PrisonCamp) { if (pri.Prisoner == player) { TimeSpan ArrestTime = DateTime.Now.Subtract(pri.JailTime); if (ArrestTime.TotalSeconds < TotalArrestTime) { GamePlay.gpLogServer(null, "Player: {0} get a {1} sec. penalty for leaving Airplane in flight\n", new object[] { player.Name(), TotalArrestTime }); GamePlay.gpHUDLogCenter(new Player[] { player }, "{0} you are under Arrest!", new object[] { player.Name() }); (actor as AiAircraft).hitNamed(part.NamedDamageTypes.FuelPumpFailure); } else { pri.Removable = true; } } } PrisonCamp.RemoveAll(item => item.Removable == true); } } public override void OnPlaceLeave(Player player, AiActor actor, int placeIndex) { base.OnPlaceLeave(player, actor, placeIndex); if ((actor as AiAircraft).IsAirborne()) { prisonCell NewPrisoner = new prisonCell(); NewPrisoner.Prisoner = player; NewPrisoner.JailTime = DateTime.Now; PrisonCamp.Add(NewPrisoner); } } }




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