???
Математика на уровне МГУ

Показано с 1 по 25 из 3198

Тема: Сервер Repka

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Сервер Repka

    Цитата Сообщение от 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(); }
                }
                        );
        }
        ****/
    }
    Крайний раз редактировалось -atas-; 20.05.2011 в 15:43.
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •