Пример #1
0
        public void Generate(CampaignTemplate campaignTemplate, string campaignFilePath)
        {
            string campaignName      = Path.GetFileNameWithoutExtension(campaignFilePath);
            string campaignDirectory = Path.GetDirectoryName(campaignFilePath);

            DCSMissionDateTime date = GenerateCampaignDate(campaignTemplate);

            using (MissionGenerator generator = new MissionGenerator())
            {
                for (int i = 0; i < campaignTemplate.MissionsCount; i++)
                {
                    // Increment the date by a few days for each mission after the first
                    if (i > 0)
                    {
                        IncrementDate(ref date);
                    }

                    MissionTemplate template = CreateMissionTemplate(campaignTemplate, i);

                    DCSMission mission = generator.Generate(template);
                    mission.MissionName  = $"{campaignName}, phase {i + 1}";
                    mission.DateTime.Day = date.Day; mission.DateTime.Month = date.Month; mission.DateTime.Year = date.Year;

                    MizFile miz = mission.ExportToMiz();
                    miz.SaveToFile(Path.Combine(campaignDirectory, $"{campaignName}{i + 1:00}.miz"));
                }
            }

            CreateImageFiles(campaignTemplate, campaignFilePath);
            CreateCMPFile(campaignTemplate, campaignFilePath);
        }
Пример #2
0
        private DCSMissionDateTime GenerateCampaignDate(CampaignTemplate campaignTemplate)
        {
            DCSMissionDateTime date = new DCSMissionDateTime
            {
                Year  = Toolbox.GetRandomYearFromDecade(campaignTemplate.ContextDecade),
                Month = Toolbox.RandomFrom(Toolbox.GetEnumValues <Month>())
            };

            date.Day = Toolbox.RandomMinMax(1, Toolbox.GetDaysPerMonth(date.Month, date.Year));
            return(date);
        }
Пример #3
0
 private void IncrementDate(ref DCSMissionDateTime date)
 {
     date.Day += Toolbox.RandomMinMax(1, 3);
     if (date.Day > Toolbox.GetDaysPerMonth(date.Month, date.Year))
     {
         if (date.Month == Month.December)
         {
             date.Month = Month.January;
             date.Year++;
         }
         else
         {
             date.Month++;
         }
     }
 }
Пример #4
0
        public void Generate(CampaignTemplate campaignTemplate, string campaignFilePath)
        {
            string campaignName      = Path.GetFileNameWithoutExtension(campaignFilePath);
            string campaignDirectory = Path.GetDirectoryName(campaignFilePath);

            DCSMissionDateTime date = GenerateCampaignDate(campaignTemplate);

            using (MissionGenerator generator = new MissionGenerator())
            {
                for (int i = 0; i < campaignTemplate.MissionsCount; i++)
                {
                    MissionTemplate template = CreateMissionTemplate(campaignTemplate, i, campaignName, ref date);

                    DCSMission mission = generator.Generate(template);
                    MizFile    miz     = mission.ExportToMiz();
                    miz.SaveToFile(Path.Combine(campaignDirectory, $"{campaignName}{i + 1:00}.miz"));
                }
            }

            CreateImageFiles(campaignTemplate, campaignFilePath);
            CreateCMPFile(campaignTemplate, campaignFilePath);
        }
Пример #5
0
        private MissionTemplate CreateMissionTemplate(CampaignTemplate campaignTemplate, int index, string campaignName, ref DCSMissionDateTime currentDate)
        {
            // Increment the date by a few days for each mission after the first
            if (index > 0)
            {
                currentDate = IncrementDate(currentDate);
            }

            MissionTemplate template = new MissionTemplate();

            template.BriefingDate.Enabled = true;
            template.BriefingDate.Day     = currentDate.Day;
            template.BriefingDate.Month   = currentDate.Month;
            template.BriefingDate.Year    = currentDate.Year;
            template.BriefingDescription  = "";
            template.BriefingName         = $"{campaignName}, phase {index + 1}";

            template.ContextCoalitionBlue   = campaignTemplate.ContextCoalitionsBlue;
            template.ContextCoalitionPlayer = campaignTemplate.PlayerCoalition;
            template.ContextCoalitionRed    = campaignTemplate.ContextCoalitionsRed;

            template.EnvironmentTimeOfDay = GetTimeOfDayForMission(campaignTemplate.EnvironmentNightMissionChance);
            template.EnvironmentWeather   = GetWeatherForMission(campaignTemplate.EnvironmentBadWeatherChance);
            template.EnvironmentWind      = Wind.Auto;

            template.ObjectiveCount      = GetObjectiveCountForMission(campaignTemplate.MissionsObjectiveCount);
            template.ObjectiveDistanceNM = Database.Instance.Common.DistanceFromTakeOffLocation[(int)campaignTemplate.MissionsObjectiveDistance];
            template.ObjectiveType       = Toolbox.RandomFrom(campaignTemplate.MissionsTypes);

            template.OppositionAirDefense       = GetPowerLevel(campaignTemplate.SituationEnemyAirDefense, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount);
            template.OppositionAirForce         = GetPowerLevel(campaignTemplate.SituationEnemyAirForce, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount);
            template.OppositionSkillLevelAir    = GetSkillLevel(campaignTemplate.SituationEnemyAirForce, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount);
            template.OppositionSkillLevelGround = GetSkillLevel(campaignTemplate.SituationEnemyAirDefense, campaignTemplate.SituationVariation, index, campaignTemplate.MissionsCount);
            template.OppositionUnitsLocation    = SpawnPointPreferredCoalition.Any;

            template.OptionsCivilianTraffic  = campaignTemplate.OptionsCivilianTraffic;
            template.OptionsEndMode          = MissionEndMode.NoEnd;
            template.OptionsPreferences      = campaignTemplate.OptionsPreferences.ToArray();
            template.OptionsRealism          = campaignTemplate.OptionsRealism.ToArray();
            template.OptionsScriptExtensions = new string[0];
            template.OptionsUnitMods         = campaignTemplate.OptionsUnitMods;

            template.PlayerAISkillLevel   = GetSkillLevel(campaignTemplate.SituationFriendlyAirForce, CampaignDifficultyVariation.Steady, 0, 0);
            template.PlayerEscortCAP      = Toolbox.RandomFrom(2, 2, 2, 2, 3, 4, 4);
            template.PlayerEscortSEAD     = Toolbox.RandomFrom(2, 2, 2, 2, 3, 4, 4);
            template.PlayerMPFlightGroups = new MissionTemplateMPFlightGroup[0];
            template.PlayerSPAircraft     = campaignTemplate.PlayerAircraft;
            template.PlayerSPWingmen      = Toolbox.RandomFrom(1, 1, 1, 1, 2, 3, 3);
            template.PlayerStartLocation  = campaignTemplate.PlayerStartLocation;
            template.PlayerSPCarrier      = campaignTemplate.PlayerStartingCarrier;

            template.TheaterID = campaignTemplate.ContextTheaterID;
            template.TheaterRegionsCoalitions = campaignTemplate.ContextTheaterRegionsCoalitions;
            template.TheaterStartingAirbase   = campaignTemplate.PlayerStartingAirbase;

            return(template);
        }