На сервере Repka №1 возникла проблема: бомбардировщики после посадки на аэродроме очень долго не исчезают (или часто виден экипаж без самолета), размер миссии постоянно растет, и время ее загрузки вырастает до неприемлемых 2-3 минут. Также через 3-4 часа работы возникают микрофризы, лаги, фпс падает (см. http://www.sukhoi.ru/forum/showthrea...=1#post1619325 )
Скрипт прекрасно уничтожает ботов в покинутых самолетах, но не уничтожает успешно севших на аэродромах. Также есть сомнения, что работает с самолетами на вынужденной (наблюдал вращающийся на брюхе Ю-88). Внизу часть кода выделена красным. 
	Код:
	 // v.1_17_00. bot-destroying script based on one by oreva
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
 
// loading sub-missions
public override void OnTickGame()
{
    if (Time.tickCounter() % 216000 == 108000) // 216000=120 min repeat. 108000=60 min delay. 
    {
        GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small01.mis");
    }
    if (Time.tickCounter() % 216000 == 215999) // 216000=120 min repeat. 215999=120 min delay. 
    {
        GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small02.mis");
    }
    /////////////////////////////////////////////////////////////////////////////////////
     if (Time.tickCounter() % 135000 == 9000) // 135000=75 min repeat. 9000=5 min delay. 
  {
      GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air01.mis");
      // GamePlay.gpHUDLogCenter("mis1 loaded!");
      double initTime = 0.0;
      Timeout(initTime += 600, () =>
      {
          GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E3!");
      });
      Timeout(initTime += 300, () =>
      {
          GamePlay.gpHUDLogCenter("Attention! Help is needed at D4!");
      });
   }
     if (Time.tickCounter() % 135000 == 54000) //  ; 135000=75 min repeat, 54000 - 30 min delay. 
    {
      GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_ground01.mis");
      // GamePlay.gpHUDLogCenter("mis2 loaded"); 
      double initTime = 0.0;
      Timeout(initTime += 600, () =>
       {
           GamePlay.gpHUDLogCenter("Attention! Cover your shipping at C4!");
       });
            
      Timeout(initTime += 300, () =>
         {
           GamePlay.gpHUDLogCenter("Attention! All airgroups please proceed to C4!");
         });
    }
     if (Time.tickCounter() % 135000 == 99000) // 135000 == 99000 = 75 min repeat, 55 min delay 
       {
           GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air02.mis");
           // GamePlay.gpHUDLogCenter("mis3 loaded!");
           double initTime = 0.0;
           Timeout(initTime += 600, () =>
           {
               GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E2!");
           });
           Timeout(initTime += 300, () =>
           {
               GamePlay.gpHUDLogCenter("Attention! Friendly aircrafts are under attack at D2!");
           });
       }
}
// destroys aircraft abandoned by a player. script by oreva
    private bool isAiControlledPlane (AiAircraft aircraft) 
    {
        if (aircraft == null) 
        { 
            return false;
        }
        Player [] players = GamePlay.gpRemotePlayers ();
        foreach (Player p in players) 
        {    
            if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft)
            { 
                return false;
            }
        }
        return true;
    }
    private void destroyPlane (AiAircraft aircraft) {
        if (aircraft != null) { 
            aircraft.Destroy ();
        }
    }
    private void explodeFuelTank (AiAircraft aircraft) 
    {
        if (aircraft != null) 
        { 
            aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded);
        }
    }
    private void destroyAiControlledPlane (AiAircraft aircraft) {
        if (isAiControlledPlane (aircraft)) {
            destroyPlane (aircraft);
        }
    }
    private void damageAiControlledPlane (AiActor actor) {
        if (actor == null || !(actor is AiAircraft)) { 
            return;
        }
        AiAircraft aircraft = (actor as AiAircraft);
        if (!isAiControlledPlane (aircraft)) {
            return;
        }
        if (aircraft == null) { 
            return;
        }
        aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled);
        aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled);
        aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled);
        aircraft.hitNamed (part.NamedDamageTypes.FuelPumpFailure);
        aircraft.hitNamed (part.NamedDamageTypes.Eng0TotalFailure);
        aircraft.hitNamed (part.NamedDamageTypes.Eng1TotalFailure);
        /***Timeout (240, () =>
                {explodeFuelTank (aircraft);}
            );
         * ***/
        Timeout (300, () =>
                {destroyPlane (aircraft);}
            );
    }
//////////////////////////////////////////////////////////////////////////////////////////////////
    public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex) 
    {
        base.OnPlaceLeave (player, actor, placeIndex);
        Timeout (1, () =>
                {damageAiControlledPlane (actor);}
            );
    }
    public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft) 
    {
        base.OnAircraftCrashLanded (missionNumber, shortName, aircraft);
        Timeout (300, () =>
            { destroyPlane(aircraft); }
            );
    }
    public override void OnAircraftLanded (int missionNumber, string shortName, AiAircraft aircraft) 
    {
        base.OnAircraftLanded(missionNumber, shortName, aircraft);
        Timeout(300, () =>
            { destroyPlane(aircraft); }
            );
    }
}
 Как изменить скрипт, чтобы он уничтожал и приземлившиеся самолеты через 5 минут?
Аналогичная проблема существует так же с танкерами, танками, дымами.
Можно было бы для танкеров, танков и дымов использовать аналогичный скрипт(см. ниже), но исполняемый только минут через 50 после подгрузки подмиссии? Как он будет выглядеть? Можно его включить в основной скрипт или придется плодить скрипты для каждой подмиссии (чего не хотелось бы)?
	Код:
	foreach (int army in GamePlay.gpArmies())
            {
                foreach (AiAirGroup group in GamePlay.gpAirGroups(army))
                {
                    if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber))
                    {
                        AiActor[] members = group.GetItems();
                        for (int i = members.Length - 1; i > -1; i--)
                        {
                            (members[i] as AiAircraft).Destroy();
                        }
                    }
                }
                foreach (AiGroundGroup group in GamePlay.gpGroundGroups(army))
                {
                    if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber))
                    {
                        AiActor[] members = group.GetItems();
                        for (int i = members.Length - 1; i > -1; i--)
                        {
                            (members[i] as AiGroundActor).Destroy();
                        }
                    }
                }
            }
 Спасибо за помощь.