예제 #1
0
 /// <summary>
 /// Resets all settings to their default values.
 /// </summary>
 private void Clear()
 {
     AircraftType = TemplateTools.CheckValuePlayerAircraft(Database.Instance.Common.DefaultPlayerAircraft);
     Carrier      = "";
     Count        = 2;
     Task         = MissionTemplateMPFlightGroupTask.Objectives;
 }
예제 #2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="ini">The .ini file to load from</param>
        /// <param name="section">The ini section to load from</param>
        /// <param name="key">The ini key to load from</param>
        public MissionTemplateMPFlightGroup(INIFile ini, string section, string key)
        {
            Clear();

            AircraftType = TemplateTools.CheckValuePlayerAircraft(ini.GetValue(section, $"{key}.AircraftType", AircraftType));
            Carrier      = ini.GetValue(section, $"{key}.Carrier", Carrier);
            Count        = ini.GetValue(section, $"{key}.Count", Count);
            Task         = ini.GetValue(section, $"{key}.Task", Task);
        }
예제 #3
0
        /// <summary>
        /// Returns the proper payload type for a given task.
        /// </summary>
        /// <param name="task">Task assigned to this flight group in the mission package</param>
        /// <param name="objectiveDB">(optional) Mission objective database entry</param>
        /// <returns>A payload</returns>
        private UnitTaskPayload GetPayloadByTask(MissionTemplateMPFlightGroupTask task, DBEntryObjective objectiveDB = null)
        {
            switch (task)
            {
            default:     // case MissionTemplateMPFlightGroupTask.Objectives
                if (objectiveDB == null)
                {
                    return(UnitTaskPayload.Default);
                }
                return(objectiveDB.Payload);

            case MissionTemplateMPFlightGroupTask.SupportCAP:
                return(UnitTaskPayload.AirToAir);

            case MissionTemplateMPFlightGroupTask.SupportSEAD:
                return(UnitTaskPayload.SEAD);
            }
        }
예제 #4
0
        /// <summary>
        /// Return a string describing the task of a player flight group, to display in the flight group table part of the briefing.
        /// </summary>
        /// <param name="task">Task assigned to this flight group in the mission package</param>
        /// <param name="objectiveDB">(optional) Mission objective database entry</param>
        /// <returns>Name of task as it will appear in the flight group table</returns>
        private string GetTaskingDescription(MissionTemplateMPFlightGroupTask task, DBEntryObjective objectiveDB)
        {
            switch (task)
            {
            default:     // case MissionTemplateMPFlightGroupTask.Objectives
                if (objectiveDB == null)
                {
                    return("Mission objectives");
                }
                return(objectiveDB.BriefingTaskFlightGroup);

            case MissionTemplateMPFlightGroupTask.SupportCAP:
                return("CAP escort");

            case MissionTemplateMPFlightGroupTask.SupportSEAD:
                return("SEAD escort");
            }
        }
예제 #5
0
        /// <summary>
        /// Creates an AI escort flight group in a single-player mission.
        /// </summary>
        /// <param name="mission">Mission to which generated units should be added</param>
        /// <param name="template">Mission template to use</param>
        /// <param name="count">Number of aircraft in the flight group</param>
        /// <param name="task">Escort task the flight group will be assigned with</param>
        /// <param name="playerCoalitionDB">Player coalition database entry</param>
        /// <returns>A <see cref="UnitFlightGroupBriefingDescription"/> describing the flight group, to be used in the briefing</returns>
        private UnitFlightGroupBriefingDescription?GenerateAIEscort(DCSMission mission, MissionTemplate template, int count, MissionTemplateMPFlightGroupTask task, DBEntryCoalition playerCoalitionDB)
        {
            if (count < 1)
            {
                return(null);           // No aircraft, nothing to generate.
            }
            // Select proper payload for the flight group according to its tasking
            UnitTaskPayload payload = GetPayloadByTask(task, null);

            string groupLua;

            string[] aircraft;

            switch (task)
            {
            default: return(null);    // Should never happen

            case MissionTemplateMPFlightGroupTask.SupportCAP:
                //groupLua = (template.GetMissionType() == MissionType.SinglePlayer) ? "GroupAircraftPlayerEscortCAP" : "GroupAircraftCAP";
                groupLua = "GroupAircraftCAP";
                aircraft = playerCoalitionDB.GetRandomUnits(UnitFamily.PlaneFighter, mission.DateTime.Decade, count, template.OptionsUnitMods);
                break;

            case MissionTemplateMPFlightGroupTask.SupportSEAD:
                //groupLua = (template.GetMissionType() == MissionType.SinglePlayer) ? "GroupAircraftPlayerEscortSEAD" : "GroupAircraftSEAD";
                groupLua = "GroupAircraftSEAD";
                aircraft = playerCoalitionDB.GetRandomUnits(UnitFamily.PlaneSEAD, mission.DateTime.Decade, count, template.OptionsUnitMods);
                break;
            }

            Coordinates position = mission.InitialPosition;

            // Player starts on runway, so escort starts in the air above the airfield (so player doesn't have to wait for them to take off)
            // OR mission is MP, so escorts start in air (but won't be spawned until at least one player takes off)
            // Add a random distance so they don't crash into each other.
            if ((template.PlayerStartLocation == PlayerStartLocation.Runway) ||
                (template.GetMissionType() != MissionType.SinglePlayer))
            {
                position += Coordinates.CreateRandom(2, 4) * Toolbox.NM_TO_METERS;
            }

            DCSMissionUnitGroup group;

            //if (template.GetMissionType() == MissionType.SinglePlayer)
            //    group = UnitMaker.AddUnitGroup(
            //        mission, aircraft,
            //        Side.Ally, position,
            //        groupLua, "UnitAircraft",
            //        Toolbox.BRSkillLevelToDCSSkillLevel(template.PlayerAISkillLevel), 0,
            //        payload, null, mission.InitialAirbaseID, true);
            //else
            group = UnitMaker.AddUnitGroup(
                mission, aircraft,
                Side.Ally, position,
                groupLua, "UnitAircraft",
                Toolbox.BRSkillLevelToDCSSkillLevel(template.PlayerAISkillLevel), 0,
                payload, mission.ObjectivesCenter);

            if (group == null)
            {
                DebugLog.Instance.WriteLine($"Failed to create AI escort flight group tasked with {task} with aircraft of type \"{aircraft[0]}\".", 1, DebugLogMessageErrorLevel.Warning);
                return(null);
            }

            switch (task)
            {
            default: return(null);    // Should never happen

            case MissionTemplateMPFlightGroupTask.SupportCAP:
                mission.EscortCAPGroupId = group.GroupID;
                break;

            case MissionTemplateMPFlightGroupTask.SupportSEAD:
                mission.EscortSEADGroupId = group.GroupID;
                break;
            }

            return
                (new UnitFlightGroupBriefingDescription(
                     group.Name, group.Units.Length, aircraft[0],
                     GetTaskingDescription(task, null),
                     Database.Instance.GetEntry <DBEntryUnit>(aircraft[0]).AircraftData.GetRadioAsString()));
        }