Example #1
0
        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();
                }
            }
        }
Example #2
0
        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;
        }
Example #3
0
        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
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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;
            }
        }
Example #6
0
        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;
        }
Example #8
0
        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();
 }
Example #10
0
        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);
        }
Example #11
0
        /// <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
        }