public static void LoadModContent() { foreach (var mod in OperationalMods) { if (mod.Value is Placeholder) { continue; } using (var _ = new CurrentModOverride(mod.Value)) { Logger.Verbose("Loading mod '{0}'s content", mod.Key); if (ModAttributeHandler.ModToCommandMethods.TryGetValue(CurrentMod.GetType(), out List <MethodInfo> infos)) { foreach (var i in infos) { var attrib = i.GetFirstAttribute <CommandAttribute>(); Command.Handler.RegisterCommand(attrib.Key ?? i.Name.RemoveLast("Command"), i.CreateDelegate <CommandFunc>(), attrib.Description, attrib.Autocomplete); } } mod.Value.LoadContent(); } } }
private void modinfo_config_FileSelectCueComboBox_SelectedIndexChanged(object sender, EventArgs e) { if (CurrentMod == null) { return; } // Invalid selection, somehow if (modinfo_config_FileSelectCueComboBox.SelectedIndex <= -1) { return; } string filePath = modinfo_config_FileSelectCueComboBox.Text; using (var sr = new StreamReader(CurrentMod.GetPathFull(filePath))) { modinfo_ConfigFCTB.Text = sr.ReadToEnd(); } // Check if this file has values saved, and enable/disable load button bool exists = CurrentMod.GetSetting(filePath) != null; modinfo_config_LoadButton.Enabled = exists; modinfo_config_RemoveButton.Enabled = exists; modinfo_config_CompareButton.Enabled = exists; }
private void UpdateModInfo(ModEntry m) { if (m == null) { // hide panel //horizontal_splitcontainer.Panel2Collapsed = true; return; } // show panel horizontal_splitcontainer.Panel2Collapsed = false; // Update data modinfo_info_TitleTextBox.Text = m.Name; modinfo_info_AuthorTextBox.Text = m.Author; modinfo_info_DateCreatedTextBox.Text = m.DateCreated?.ToString() ?? ""; modinfo_info_InstalledTextBox.Text = m.DateAdded?.ToString() ?? ""; modinfo_info_DescriptionRichTextBox.Font = DefaultFont; modinfo_info_DescriptionRichTextBox.Clear(); modinfo_info_DescriptionRichTextBox.Rtf = m.GetDescription(true); btnDescSave.Enabled = false; modinfo_readme_RichTextBox.Text = m.GetReadMe(); modinfo_image_picturebox.ImageLocation = m.Image; var sel_obj = m.GetProperty(); sel_obj.PropertyChanged += (sender, e) => { RefreshModList(); modinfo_inspect_propertygrid.Refresh(); }; modinfo_inspect_propertygrid.SelectedObject = sel_obj; #region Config // config files string[] configFiles = m.GetConfigFiles(); // clear modinfo_config_FileSelectCueComboBox.Items.Clear(); modinfo_ConfigFCTB.Text = ""; modinfo_config_LoadButton.Enabled = false; modinfo_config_RemoveButton.Enabled = false; if (configFiles.Length > 0) { foreach (var configFile in configFiles) { if (configFile != null) { modinfo_config_FileSelectCueComboBox.Items.Add(CurrentMod.GetPathRelative(configFile)); } } } #endregion }
private void modinfo_config_CompareButton_Click(object sender, EventArgs e) { string filepath = modinfo_config_FileSelectCueComboBox.Text; try { ConfigDiff.Instance.CompareStrings(CurrentMod.GetSetting(filepath).Contents, modinfo_ConfigFCTB.Text); ConfigDiff.Instance.Show(); } catch (Exception configerror) { FlexibleMessageBox.Show("An exception occured. See error.log for additional details."); File.WriteAllText("error.log", configerror.Message + "\r\nStack:\r\n" + configerror.StackTrace); } }
private void modinfo_config_RemoveButton_Click(object sender, EventArgs e) { // Get necessary data if (CurrentMod == null) { return; } if (CurrentMod.RemoveSetting(modinfo_config_FileSelectCueComboBox.Text)) { // For consistency enable the button modinfo_config_LoadButton.Enabled = false; modinfo_config_RemoveButton.Enabled = false; modinfo_config_CompareButton.Enabled = false; } }
private void modinfo_config_LoadButton_Click(object sender, EventArgs e) { // Get necessary data if (CurrentMod == null) { return; } // If data is not valid var setting = CurrentMod.GetSetting(modinfo_config_FileSelectCueComboBox.Text); if (setting == null) { return; } modinfo_ConfigFCTB.Text = setting.Contents; }
private void modinfo_config_FileSelectCueComboBox_SelectedIndexChanged(object sender, EventArgs e) { if (CurrentMod == null) { return; } // Invalid selection, somehow if (modinfo_config_FileSelectCueComboBox.SelectedIndex <= -1) { return; } string filePath = modinfo_config_FileSelectCueComboBox.Text; bool exists = false; try { using (var sr = new StreamReader(CurrentMod.GetPathFull(filePath))) { modinfo_ConfigFCTB.Text = sr.ReadToEnd(); } // Check if this file has values saved, and enable/disable load button exists = CurrentMod.GetSetting(filePath) != null; modinfo_ConfigFCTB.ReadOnly = false; } catch (Exception ex) { Log.Warn("Failed to read selected ini file", ex); modinfo_ConfigFCTB.Text = ex.Message; modinfo_ConfigFCTB.ReadOnly = true; } modinfo_config_LoadButton.Enabled = exists; modinfo_config_RemoveButton.Enabled = exists; modinfo_config_CompareButton.Enabled = exists; }
private void modinfo_config_SaveButton_Click(object sender, EventArgs e) { // Get necessary data if (CurrentMod == null) { return; } string contents = modinfo_ConfigFCTB.Text; // If the data is invalid, just do nothing if (string.IsNullOrEmpty(contents)) { return; } if (CurrentMod.AddSetting(modinfo_config_FileSelectCueComboBox.Text, contents)) { // For consistency enable the button modinfo_config_LoadButton.Enabled = true; modinfo_config_RemoveButton.Enabled = true; modinfo_config_CompareButton.Enabled = true; } }
public void SaveCurrentMod() { CurrentMod.ModConfig.ModDependencies = Dependencies.Where(x => x.Enabled).Select(x => x.Generic.ModId).ToArray(); CurrentMod.Save(); }
public static IMod LoadMod(IMod mod) { if (mod == null) { return(null); } var modType = mod.GetType(); var attrib = modType.GetFirstAttribute <ModInfoAttribute>(); var name = mod.GetCleanId(); if (attrib != null) { foreach (var pair in ModIdReliance.ToArray()) { var i = pair.Value.FindIndex(m => m.GetCleanId() == name); if (i != -1) { ModIdReliance[pair.Key][i] = mod; } } foreach (var id in attrib.BeforeIds) { if (!ModIdReliance.ContainsKey(id.GetCleanId())) { ModIdReliance.Add(id, new List <IMod>()); } if (!ModIdReliance[id].Contains(mod)) { ModIdReliance[id].Add(mod); } } foreach (var id in attrib.AfterIds) { if (!ModIdReliance.ContainsKey(name)) { ModIdReliance.Add(name, new List <IMod>()); } if (ModIdReliance[name].FindIndex(m => m.GetCleanId() == id.GetCleanId()) != -1) { ModIdReliance[name].Add(new Placeholder(id.GetCleanId())); } } if (attrib.BeforeIds.Count > 0) { return(mod); } } try { if (!Pathfinder.IsModIdentifierValid(name, true)) { return(null); // never reached due to throw } Logger.Info("Loading mod '{0}'", name); using (var _ = new CurrentModOverride(mod)) { if (ModAttributeHandler.ModToEventMethods.TryGetValue(CurrentMod.GetType(), out var infos)) { foreach (var i in infos) { var eventAttrib = i.GetFirstAttribute <EventAttribute>(); var paramType = i.GetParameters()[0].ParameterType; EventManager.RegisterListener(paramType, i.CreateDelegate <Action <PathfinderEvent> >(typeof(Action <>).MakeGenericType(paramType)), eventAttrib.Options); } } mod.Load(); UnloadedModIds.Remove(name); LoadedMods.Add(name, mod); GUI.ModOptions.Handler.LoadFor(mod); if (ModIdReliance.ContainsKey(name)) { foreach (var internalMod in ModIdReliance[name]) { LoadMod(internalMod); } } } } catch (Exception ex) { Logger.Error("Mod '{0}' of file '{1}' failed to load:\n\t{2}", modType.FullName, Path.GetFileName(modType.Assembly.Location), ex); UnloadMod(mod); UnloadedModIds.Remove(name); return(null); } return(mod); }
/// <summary> /// Update mod information panel with data from specified mod. /// </summary> /// <param name="m"></param> private void UpdateModInfo(ModEntry m) { if (m == null) { modinfo_info_TitleTextBox.Text = "No mod or multiple mods selected"; modinfo_info_AuthorTextBox.Clear(); modinfo_info_DateCreatedTextBox.Clear(); modinfo_info_InstalledTextBox.Clear(); modinfo_readme_RichTextBox.Clear(); modinfo_changelog_richtextbox.Clear(); UpdateModDescription(null); modinfo_image_picturebox.ImageLocation = null; modinfo_inspect_propertygrid.SelectedObject = null; modinfo_config_FileSelectCueComboBox.Items.Clear(); modinfo_config_LoadButton.Enabled = false; modinfo_config_RemoveButton.Enabled = false; modinfo_ConfigFCTB.Clear(); modinfo_ConfigFCTB.ReadOnly = true; olvRequiredMods.ClearObjects(); olvDependentMods.ClearObjects(); return; } // show panel horizontal_splitcontainer.Panel2Collapsed = false; // Update data modinfo_info_TitleTextBox.Text = m.Name; modinfo_info_AuthorTextBox.Text = m.Author; modinfo_info_DateCreatedTextBox.Text = m.DateCreated?.ToString() ?? ""; modinfo_info_InstalledTextBox.Text = m.DateAdded?.ToString() ?? ""; UpdateModDescription(m); UpdateModChangeLog(m); modinfo_readme_RichTextBox.Text = m.GetReadMe(); modinfo_image_picturebox.ImageLocation = m.Image; UpdateDependencyInformation(m); // Init handler for property changes var sel_obj = m.GetProperty(); sel_obj.PropertyChanged += (sender, e) => { RefreshModList(); modinfo_inspect_propertygrid.Refresh(); }; modinfo_inspect_propertygrid.SelectedObject = sel_obj; #region Config // config files string[] configFiles = m.GetConfigFiles(); // clear modinfo_config_FileSelectCueComboBox.Items.Clear(); modinfo_ConfigFCTB.Text = ""; modinfo_config_LoadButton.Enabled = false; modinfo_config_RemoveButton.Enabled = false; if (configFiles.Length > 0) { foreach (var configFile in configFiles) { if (configFile != null) { modinfo_config_FileSelectCueComboBox.Items.Add(CurrentMod.GetPathRelative(configFile)); } } } #endregion }