コード例 #1
0
        public MainForm()
        {
            InitializeComponent();

            Generator = new MissionGenerator();
            Template  = new MissionTemplate(BRPaths.ROOT + "Default.brt");
        }
コード例 #2
0
        public MainForm()
        {
            InitializeComponent();

            Generator = new MissionGenerator();
            Template  = new MissionTemplate();
        }
コード例 #3
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);
        }
コード例 #4
0
        public void can_generate_mission()
        {
            var sut    = new MissionGenerator();
            var result = sut.Generate(3, 4, 7, 5);

            Assert.Equal(5, result.Answer.Count);
            Assert.Equal(4, result.Rotors.Count);
            Assert.True(sut.CheckAnswer(result, result.Answer.ToArray()));
        }
コード例 #5
0
        public void can_generate_at_maximum()
        {
            var sut    = new MissionGenerator();
            var result = sut.Generate(12, 12, 132, 10);

            Assert.Equal(10, result.Answer.Count);
            Assert.Equal(12, result.Rotors.Count);
            Assert.True(result.Rotors.TrueForAll(x => x.CurrentState == 2));
            Assert.True(sut.CheckAnswer(result, result.Answer.ToArray()));
        }
コード例 #6
0
        public MainForm()
        {
            InitializeComponent();

            GUITools.LoadIcons();
            IMAGE_ERROR   = GUITools.IconsList16.Images["error"];
            IMAGE_INFO    = GUITools.IconsList16.Images["info"];
            IMAGE_WARNING = GUITools.IconsList16.Images["warning"];

            Generator      = new MissionGenerator();
            Template       = new MissionTemplate(BRPaths.ROOT + "Default.brt");
            TreeViewEditor = new TreeViewPropertyEditor <MissionTemplate>(TemplateTreeView, Template);
            TreeViewEditor.OnPropertyValueChanged += OnTreeViewEditorPropertyValueChanged;
        }
コード例 #7
0
        public void can_generate_at_small(int sublevel)
        {
            var level       = 1;
            var difficulty  = ((level - 1) * 5 + sublevel) + 1;
            var numTick     = level + 1;
            var numRotor    = sublevel + 1;
            var numMove     = Math.Max(4, difficulty / 3);
            var numRelation = Math.Max(numRotor - 1, Convert.ToInt32(Math.Floor(numRotor * (numRotor - 1) * Math.Min(1.0, (double)difficulty / 25) * 0.6)));

            var sut    = new MissionGenerator();
            var result = sut.Generate(numTick, numRotor, numRelation, numMove);

            Assert.True(sut.CheckAnswer(result, result.Answer.ToArray()));
        }
コード例 #8
0
        internal static void FixMissionLoadTimes(ILContext il)
        {
            ILCursor c = new ILCursor(il);

            c.GotoNext(MoveType.Before,
                       x => x.MatchLdarg(0),
                       x => x.MatchLdfld(AccessTools.Field(typeof(MissionListingServer), nameof(MissionListingServer.CustomFolderLoadPath)))
                       );

            c.Index += 1;
            var start = c.MarkLabel();

            c.GotoNext(MoveType.Before,
                       x => x.MatchNop(),
                       x => x.MatchNop(),
                       x => x.MatchBr(out _),
                       x => x.MatchLdarg(0),
                       x => x.MatchLdfld(AccessTools.Field(typeof(MissionListingServer), nameof(MissionListingServer.groupName)))
                       );

            var end = c.Index;

            c.GotoLabel(start);

            c.RemoveRange(end - c.Index);

            c.Emit(OpCodes.Ldloc_1);
            c.EmitDelegate <Action <MissionListingServer, bool> >((listingDaemon, shouldGen) =>
            {
                ComputerLoader.postAllLoadedActions = (System.Action)Delegate.Combine(ComputerLoader.postAllLoadedActions, (System.Action)(
                                                                                          () =>
                {
                    foreach (var file in Directory.GetFiles(listingDaemon.CustomFolderLoadPath, "*.xml"))
                    {
                        OS.currentInstance.branchMissions = new List <ActiveMission>();
                        listingDaemon.addMisison(MissionLoader.LoadContentMission(file));
                    }

                    if (shouldGen)
                    {
                        for (int i = 0; i < 2; i++)
                        {
                            OS.currentInstance.branchMissions = new List <ActiveMission>();
                            listingDaemon.addMisison((ActiveMission)MissionGenerator.generate(2));
                        }
                    }
                }));
            });
        }
コード例 #9
0
        /// <summary>
        /// Constructor. Creates all required sub-classes and starts the application.
        /// </summary>
        public HQ4DCS()
        {
            if (!Library.Instance.LoadAll())
            {
                // If failed to load the definitions library, abort and exit.
                return;
            }

            Generator = new MissionGenerator();

            using (Form = new FormMain(this))
            {
                Application.Run(Form); // Show the main form
            }
        }
コード例 #10
0
        /// <summary>
        /// Generates mission(s) from command line arguments.
        /// </summary>
        /// <param name="args">Command line arguments</param>
        /// <returns>True if everything when wrong, false otherwise</returns>
        public bool DoCommandLine(params string[] args)
        {
            ParseCommandLineArguments(args, out string[] templateFiles, out int missionCount);

            if (templateFiles.Length == 0)
            {
                DebugLog.Instance.WriteLine("No mission template files provided", DebugLogMessageErrorLevel.Error);
                return(false);
            }

            using (MissionGenerator generator = new MissionGenerator())
            {
                foreach (string t in templateFiles)
                {
                    using (MissionTemplate template = new MissionTemplate(t))
                    {
                        for (int i = 0; i < missionCount; i++)
                        {
                            DCSMission mission = generator.Generate(template);
                            if (mission == null)
                            {
                                DebugLog.Instance.WriteLine($"Failed to generate a mission from template {Path.GetFileName(t)}", DebugLogMessageErrorLevel.Warning);
                                continue;
                            }

                            string mizFileName = Path.Combine(Application.StartupPath, Path.GetFileNameWithoutExtension(t) + ".miz");
                            mizFileName = GetUnusedFileName(mizFileName);

                            MizFile miz = mission.ExportToMiz();
                            if ((miz == null) || !miz.SaveToFile(mizFileName))
                            {
                                DebugLog.Instance.WriteLine($"Failed to export .miz file from template {Path.GetFileName(t)}", DebugLogMessageErrorLevel.Warning);
                                continue;
                            }
                            else
                            {
                                DebugLog.Instance.WriteLine($"Mission {Path.GetFileName(mizFileName)} exported to .miz file from template {Path.GetFileName(t)}");
                            }
                        }
                    }
                }
            }

            return(true);
        }
コード例 #11
0
        internal static async Task <DCSCampaign> GenerateAsync(CampaignTemplate campaignTemplate)
        {
            DCSCampaign campaign = new();

            campaign.Name = GeneratorTools.GenerateMissionName(campaignTemplate.BriefingCampaignName);;
            string baseFileName = Toolbox.RemoveInvalidPathCharacters(campaign.Name);

            DateTime date = GenerateCampaignDate(campaignTemplate);

            campaignTemplate.Player.AIWingmen = true; //Make sure wingmen is always true for campaign

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

                MissionTemplateRecord template = CreateMissionTemplate(campaignTemplate, campaign.Name, i, (int)campaignTemplate.MissionsObjectiveCount);

                DCSMission mission = await MissionGenerator.GenerateAsync(template, true);

                // TODO: mission.DateTime.Day = date.Day; mission.DateTime.Month = date.Month; mission.DateTime.Year = date.Year;
                if (mission == null)
                {
                    BriefingRoom.PrintToLog($"Failed to generate mission {i + 1} in the campaign.", LogMessageErrorLevel.Warning);
                    continue;
                }

                campaign.AddMission(mission);
            }

            if (campaign.MissionCount < 1) // No missions generated, something went very wrong.
            {
                throw new BriefingRoomException($"Campaign has no valid mission.");
            }


            CreateImageFiles(campaignTemplate, campaign, baseFileName);

            campaign.CMPFile = GetCMPFile(campaignTemplate, campaign.Name);

            return(campaign);
        }
コード例 #12
0
    public static void RotateMissions()
    {
        foreach (var mission in CampaignMapState.MissionsActive)
        {
            mission.DaysUntilExpiration--;
            if (mission.DaysUntilExpiration == 0)
            {
                mission.OnFailed();
            }
        }

        //now remove them from the active missions list.
        CampaignMapState.MissionsActive.RemoveAll(item => item.DaysUntilExpiration <= 0);

        if (CampaignMapState.MissionsActive.IsEmpty())
        {
            var newMissions = MissionGenerator.GenerateAllMissionsForRegion();
            CampaignMapState.MissionsActive.AddRange(newMissions);
        }
    }
コード例 #13
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);
        }
コード例 #14
0
        public RawControls(MissionGenerator mg, int yPosition)
        {
            this.yPosition   = yPosition;
            MissionGenerator = mg;

            NumOfMission = mg.NumOfMission;

            CheckBox = new CheckBox()
            {
                Location = new Point(25, yPosition),
                Checked  = false,
                Font     = new Font(new FontFamily("Arial"), 16, FontStyle.Regular, GraphicsUnit.Pixel),
                Text     = $"{mg.MissionName}",
                AutoSize = true
            };
#if DEBUG
            this.CheckBox.Text = $"{NumOfMission}. {this.CheckBox.Text}";
#endif
            Numeric = new NumericUpDown()
            {
                Location = new Point(CheckBox.Location.X + 500, CheckBox.Location.Y),
                Maximum  = mg.MaxNumInTest,
                Value    = 1,
                Width    = 50,
                Enabled  = false
            };
            OfMax = new Label()
            {
                Location = new Point(CheckBox.Location.X + 500, CheckBox.Location.Y),
                Text     = $"из {mg.MaxNumInTest}",
                Visible  = true
            };
            string timeToSolve = ((double)mg.TimeToSolveMission / 60.0).ToString("0.#") + " мин";
            TimeToSolve = new Label()
            {
                Location = new Point(CheckBox.Location.X + 600, yPosition),
                Text     = timeToSolve,
                Font     = new Font(new FontFamily("Arial"), 12, FontStyle.Regular, GraphicsUnit.Pixel),
                AutoSize = false
            };
            MissionType = new Label()
            {
                Location = new Point(CheckBox.Location.X + 700, yPosition),
                Text     = GlobalExtentions.GetStringMissionType(mg.TypeOfMission),
                Font     = new Font(new FontFamily("Arial"), 12, FontStyle.Regular, GraphicsUnit.Pixel),
                AutoSize = false
            };
            Preview = new Button()
            {
                //Text = "Предпросмотр",
                Location              = new Point(CheckBox.Location.X + 800, CheckBox.Location.Y),
                Width                 = 30,
                Height                = 15,
                BackgroundImage       = Properties.Resources.view,
                BackgroundImageLayout = ImageLayout.Stretch
            };

            Preview.Click += (s, e) =>
            {
                TabPage tab         = mg.Generate().GetTabPage(true);
                Form    previewForm = new Form()
                {
                    Width         = 900,
                    Height        = 550,
                    Icon          = Properties.Resources.icon,
                    Text          = $"Предпросмотр задания {NumOfMission} \"{mg.MissionName}\"",
                    StartPosition = FormStartPosition.CenterScreen
                };

                TabControl tc = new TabControl()
                {
                    Dock = DockStyle.Fill
                };
                tc.Controls.Add(tab);

                previewForm.Controls.Add(tc);

                StyleApply.ForForm(previewForm, changeHeader: false);

                previewForm.ShowDialog();
            };
            RegisterEventsToControls();
        }
コード例 #15
0
    private void MainMethod()
    {
        var sekerMission = new MissionGenerator(new Skarim());

        sekerMission.StartMission();
    }
コード例 #16
0
 public async Task <DCSMission> GenerateMissionAsync(MissionTemplate template, bool useObjectivePresets = false)
 {
     return(await MissionGenerator.GenerateRetryableAsync(template, useObjectivePresets));
 }
コード例 #17
0
 public async Task <DCSMission> GenerateMissionAsync(string templateFilePath, bool useObjectivePresets = false)
 {
     return(await MissionGenerator.GenerateRetryableAsync(new MissionTemplate(templateFilePath), useObjectivePresets));
 }
コード例 #18
0
        static MissionLoader()
        {
            EventManager.onPluginUnload += OnPluginUnload;

            executor.RegisterExecutor("mission", (exec, info) =>
            {
                hasMissionTag       = true;
                mission.activeCheck = info.Attributes.GetBool("activeCheck");
                mission.ShouldIgnoreSenderVerification = info.Attributes.GetBool("shouldIgnoreSenderVerification");
            });
            executor.RegisterExecutor("mission.generationKeys", (exec, info) =>
            {
                if (!string.IsNullOrEmpty(info.Content))
                {
                    info.Attributes.Add("Data", info.Content);
                }
                MissionGenerator.setMissionGenerationKeys(info.Attributes);
                if (ComputerLoader.MissionPreLoadComplete != null)
                {
                    ComputerLoader.MissionPreLoadComplete();
                }
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.goals.goal", (exec, info) => mission.goals.Add(LoadGoal(info)), ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.missionStart", (exec, info) =>
            {
                var function = info.Content ?? throw new FormatException("missionStart with no mission function!");
                var val      = info.Attributes.GetInt("val", 1);
                if (info.Attributes.GetBool("suppress", Settings.IsInExtensionMode))
                {
                    mission.addStartFunction(val, function);
                }
                else
                {
                    MissionFunctions.runCommand(val, function);
                }
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.missionEnd", (exec, info) =>
            {
                mission.addEndFunction(info.Attributes.GetInt("val", 1), info.Content ?? throw new FormatException("missionEnd with no mission function!"));
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.nextMission", (exec, info) =>
            {
                mission.willSendEmail = !info.Attributes.GetBool("IsSilent", false);
                mission.nextMission   = info.Content ?? "NONE";
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.branchMissions.branch", (exec, info) =>
            {
                var filePrefix      = Settings.IsInExtensionMode ? ExtensionLoader.ActiveExtensionInfo.FolderPath + "/" : "Content/Missions/";
                var currentMission  = mission;
                var currentBranches = branches;
                mission             = null;
                branches            = null;
                exec.SaveState();
                currentBranches.Add(LoadContentMission(filePrefix + info.Content));
                exec.PopState();
                mission  = currentMission;
                branches = currentBranches;
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.branchMissions", (exec, info) => OS.currentInstance.branchMissions = branches, ParseOption.FireOnEnd);
            executor.RegisterExecutor("mission.posting", (exec, info) =>
            {
                mission.postingTitle = info.Attributes.GetString("title", "UNKNOWN").Filter();
                mission.postingBody  = info.Content ?? "UNKNOWN";
                mission.postingAcceptFlagRequirements = info.Attributes.GetString("reqs").Split(Utils.commaDelim, StringSplitOptions.RemoveEmptyEntries);
                mission.requiredRank = info.Attributes.GetInt("requiredRank");
                mission.difficulty   = info.Attributes.GetInt("difficulty");
                mission.client       = info.Attributes.GetString("client").Filter();
                mission.target       = info.Attributes.GetString("target").Filter();
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.email.sender", (exec, info) => mission.email.sender   = info.Content.Filter(), ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.email.subject", (exec, info) => mission.email.subject = info.Content.Filter(), ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.email.body", (exec, info) => mission.email.body       = info.Content.Filter(), ParseOption.ParseInterior);
            executor.RegisterExecutor("mission.email.attachments.link", (exec, info) =>
            {
                var comp = info.Attributes.GetComp("comp", SearchType.Id);
                if (comp != null)
                {
                    mission.email.attachments.Add($"link#%#{comp.name}#%#{comp.ip}");
                }
            });
            executor.RegisterExecutor("mission.email.attachments.account", (exec, info) =>
            {
                var comp = info.Attributes.GetComp("comp");
                mission.email.attachments.Add(
                    $"account#%#{comp.name}#%#{comp.ip}#%#{info.Attributes.GetString("user", "UNKNOWN").Filter()}#%#{info.Attributes.GetString("pass", "UNKNOWN").Filter()}"
                    );
            });
            executor.RegisterExecutor("mission.email.attachments.note", (exec, info) =>
            {
                mission.email.attachments.Add($"note#%#{info.Attributes.GetString("title", "Data").Filter()}#%#{info.Content.Filter()}");
            }, ParseOption.ParseInterior);
        }
コード例 #19
0
 public static void InitializeSelectableMissions()
 {
     CampaignMapState.MissionsActive = MissionGenerator.GenerateAllMissionsForRegion();
 }
コード例 #20
0
ファイル: GameManager.cs プロジェクト: AG4W/ChonkyChungus
    static void CreateMission()
    {
        _mission = MissionGenerator.GetRandom();

        GlobalEvents.Raise(GlobalEvent.MissionAdded, _mission);
    }