
 Сообщение от 
cFobos
					
				 
				На Репке_1 обнаружил баг - по карте разбросаны  отряды статичных бронемашин Британии и Германии. Стоят, не  стреляют...
			
		 
	 
 Это ПВО. У них можно включить галочку NPC, выбрать скрипт baseairdefence в менюшке и назначить цель - свой респ. они тогда вокруг филда распределяются, но эта настройка слетает периодически у меня.
	
		
			
			
				
					
 Сообщение от 
cFobos
					
				 
				А на которой их Репок моя миссия с наземкой сейчас в ротации? :-)
			
		 
	 
 Болею, в ближайшее время заняться тестированием и отладкой не смогу. Вот здесь бери миссию текущую. BoF1_1_7_04e.zip
Там рандомайзер выбирает 1 из 3х подмиссий:
case 1
case 2
case 3
Добавишь свою готовую как case 4 и вот в этой строчке поменяй с 4 на 5 (количество подмиссий +1). 
	Код:
	do                
 {                 
CurrentMissionSelected = RandomIncident.Next(1, 4);                
 }
 Потом аналогично добавишь 5 и 6, когда будут готовы. Для тестирования  другой скрипт выложу. Скрипты открывай Visual Studio C# Express она  бесплатная.
Самолеты пусть взлетают и садятся так же как в других подмиссиях, посмотри. Старт не со стоянок, иначе взорвется половина. 1й вейпойнт после взлета и крайний перед посадкой ставь рядом с аэродромом на высоте метров 700-1000, чтобы резко высоту набрали, иначе об ландшафт разобъются.
Протестируешь у себя, потом BigRepa зальет на #2 или #3 для теста.
Подмиссии small01 и 02 созданы для воссоздания уничтоженной артиллерии и еще чего-то. они не рандомизируются,  а накладываются во времени на основные. Сейчас артиллерии рождается многовато кажется, можно из 1й из них убрать, тогда возрождение будет не каждый час, а раз в 2 часа. Тайминги в скрипте расписаны, посмотри. Свои миссию назови ...land01, 02 и 03 по шаблону.  В миссии sea01 как всегда проблемы с потоплением кораблей, они то топятся, то не топятся, сталкиваются в последнем вейпойнте. См. в багрепортах в галерее. Нужно будет что-то экспериментировать после отладки танков.
Скрипт всю наземку кроме арты дестроит через 55 минут после создания (т.к. раз в час загружается миссия small и возрождает кое-то).
Корабли кстати, похоже не дестроятся, нужно будет спецов по С# спросить, почему не работает. Там посмотрим. я на форуме, подскажу еще.
--------------------------------
Для первоначального тестирования в оффлайне тот же скрипт, но без рандомайзера. Т.е. ставишь свою миссию первой и уменьшаешь тайминг загрузки до 1-3 минут. В 1 секунде примерно 30 ticks. минута - 1800.
текст после // - это комментарии не исполняемые программой. так можно любой код времменно убирать. 
	Код:
	// v.1_17_04. script by oreva, zaltys, small_bee
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() % 162000 == 9000) // 162000=90 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 += 600, () =>
      {
          GamePlay.gpHUDLogCenter("Attention! Help is needed at E3/D4!");
      });
   }
     if (Time.tickCounter() % 162000 == 63000) //  ; 162000=90 min repeat, 63000 - 35 min delay. 
    {
      GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_sea01.mis");
      // GamePlay.gpHUDLogCenter("mis2 loaded"); 
      double initTime = 0.0;
      Timeout(initTime += 500, () =>
       {
           GamePlay.gpHUDLogCenter("Attention! Cover your shipping at C4!");
       });
            
      Timeout(initTime += 300, () =>
         {
             GamePlay.gpHUDLogCenter("Attention! Friendly ships are under attack at C4!");
         });
    }
     if (Time.tickCounter() % 162000 == 117000) // 162000 == 117000 = 90 min repeat, 65 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! All airgroups please proceed to E2/D3!");
           });
       }
    //loads small missions w/o messages
     ///////////////////////
     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");
     }
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// destroys aircraft abandoned by a player.
    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);
        int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
        for (int i = 0; i < iNumOfEngines; i++)
        {
            aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure"));
        }
        /***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); }
            );
    }
    
    
//////////////////////////////////////////////////////////////////////////////////////////////////
    //Listen to events of every mission
    public override void Init(maddox.game.ABattle battle, int missionNumber)
    {
        base.Init(battle, missionNumber);
        MissionNumberListener = -1; //Listen to events of every mission
    }
 //////////////////////////////////////////////////////////////////////////////////////////////////
    //Ground objects (except AA Guns) will die after 55 min when counted from their birth
    public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
    {
        base.OnActorCreated(missionNumber, shortName, actor);
        //Ground objects (except AA Guns) will die after 55 min when counted from their birth
        if (actor is AiGroundActor)
            if ((actor as AiGroundActor).Type() != maddox.game.world.AiGroundActorType.AAGun)
                Timeout(3300, () =>
                {
                    if (actor != null)
                    { (actor as AiGroundActor).Destroy(); }
                }
                        );
    }
    /****
    //Ground objects will die after 55 min when counted from their birth
    
    public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
    {
        base.OnActorCreated(missionNumber, shortName, actor);
        //Ground objects will die after 55 min when counted from their birth
        if (actor is AiGroundActor)
            Timeout(3300, () =>
            {
                if (actor != null)
                { (actor as AiGroundActor).Destroy(); }
            }
                    );
    }
    ****/
}