public MainForm() { InitializeComponent(); Generator = new MissionGenerator(); Template = new MissionTemplate(BRPaths.ROOT + "Default.brt"); }
public MainForm() { InitializeComponent(); Generator = new MissionGenerator(); Template = new MissionTemplate(); }
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); }
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())); }
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())); }
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; }
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())); }
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)); } } })); }); }
/// <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 } }
/// <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); }
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); }
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); } }
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); }
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(); }
private void MainMethod() { var sekerMission = new MissionGenerator(new Skarim()); sekerMission.StartMission(); }
public async Task <DCSMission> GenerateMissionAsync(MissionTemplate template, bool useObjectivePresets = false) { return(await MissionGenerator.GenerateRetryableAsync(template, useObjectivePresets)); }
public async Task <DCSMission> GenerateMissionAsync(string templateFilePath, bool useObjectivePresets = false) { return(await MissionGenerator.GenerateRetryableAsync(new MissionTemplate(templateFilePath), useObjectivePresets)); }
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); }
public static void InitializeSelectableMissions() { CampaignMapState.MissionsActive = MissionGenerator.GenerateAllMissionsForRegion(); }
static void CreateMission() { _mission = MissionGenerator.GetRandom(); GlobalEvents.Raise(GlobalEvent.MissionAdded, _mission); }