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

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

Тема: Вопросы.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Зашедший Аватар для zaltys
    Регистрация
    26.03.2011
    Адрес
    Литва
    Сообщений
    31

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Аналогичная проблема существует так же с танкерами, танками, дымами.
    Можно было бы для танкеров, танков и дымов использовать аналогичный скрипт(см. ниже), но исполняемый только минут через 50 после подгрузки подмиссии? Как он будет выглядеть?
    Если объекты создаются только во время загрузки миссий, мы можем уменьшить эту проблему до: объекты должны умереть после минут XXX от их создания. Тогда, мы можем использовать:
    Код:
        public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
        {
            base.OnActorCreated(missionNumber,shortName,actor);
    		
    		//Ground objects will die after 50 min when counted from their birth
    		if (actor is AiGroundActor)
    		Timeout (3000, () => 
    							{ if (actor != null)
    								{ (actor as AiGroundActor).Destroy(); }
    							}
    				);
        }


    --- Добавлено ---

    Цитата Сообщение от -atas- Посмотреть сообщение
    Вставлять MissionNumberListener=-1, как понимаю, лучше в начало файла?
    В методе Init (). Он выполняется, когда миссия начинается. Нет никакой разницы, в каком порядке методы определены в классе, так что вы можете поместить его в начале, конце или середине.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Out of bounds мы получали по-моему именно для 2х-моторных 110х емнип (и только для них). Но в любом случае исправим.
    Давайте брать пример. Игрок покидает Spitfire в воздухе, скрипт пытается сделать некоторые повреждения. Spitfire имеет только один двигатель, поэтому скрипт успешно убивает двигателя № 1. Тогда скрипт продолжается, и пытается убить двигатель № 2, которой не существует, и в результате появляется ошибка "Out of bounds".

    Я просто предложили такие изменения кода, что скрипт будет убивать не более двигателей, чем есть в самолете.

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

    Re: Вопросы.

    Цитата Сообщение от zaltys Посмотреть сообщение
    Если объекты создаются только во время загрузки миссий, мы можем уменьшить эту проблему до: объекты должны умереть после минут XXX от их создания. Тогда, мы можем использовать:
    Спасибо еще раз!!! Завтра будем внедрять.
    ...зелёные горят.
    ----------------------

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

  3. #3
    Зашедший Аватар для zaltys
    Регистрация
    26.03.2011
    Адрес
    Литва
    Сообщений
    31

    Re: Вопросы.

    Периодические загрузки миссии без использования TickCounter():

    Код:
    	//Runs once, when mission is loaded
    	public override void Init(maddox.game.ABattle battle, int missionNumber)
    	{
    		base.Init(battle,missionNumber);
    		//Planned missions
    		MissionLoader(30,10,"missions/Multi/Dogfight/bombers1.mis");  // 10s from main mission start and repeatedly every 30s
    		MissionLoader(100,60,"missions/Multi/Dogfight/bombers2.mis"); // 60s from main mission start and repeatedly every 100s
    	}
    	
    	public void MissionLoader(int period, int offset, string mission)
    	{
    		if (offset > 0)
    			Timeout(offset, () => {MissionLoader(period,0,mission);});
    		else
    			{
    				GamePlay.gpPostMissionLoad(mission);	
    				Timeout(period, () => {MissionLoader(period,0,mission);});		
    			}
    	}

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

    Re: Вопросы.

    Цитата Сообщение от zaltys Посмотреть сообщение
    Периодические загрузки миссии без использования TickCounter():
    Спасибо, а как туда отложенные по времени текстовые сообщения вставить как здесь:

    Код:
     // 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); }
                );
        }
    
    }
    Мне трудно что-то менять в коде. Лучше вставлять целый работающий кусок в готовый скрипт, если есть такая возможность.

    ps. Пока не было времени интегрировать предыдущие изменения, надеюсь займусь вечером.
    ...зелёные горят.
    ----------------------

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

Ваши права

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