/// <summary> /// Disables a mod loader entry by manually modifying the listview item and properties of the entry. /// </summary> /// <param name="Mod_Loader_Entry"></param> private Mod_Loader_Mod_INI_Entry Toggle_Mod(Mod_Loader_Mod_INI_Entry Mod_Loader_Entry) { if (Mod_Loader_Entry.Mod_Enabled) { Mod_Loader_Entry.Mod_Enabled = false; ListView_Mod_List.SelectedItems[0].SubItems[0].Text = "☐"; Mod_Loader_Entry.Heroes_Mod_Listview_Item.ForeColor = Color.Gray; } else { Mod_Loader_Entry.Mod_Enabled = true; ListView_Mod_List.SelectedItems[0].SubItems[0].Text = "☑"; Mod_Loader_Entry.Heroes_Mod_Listview_Item.ForeColor = Color.LightGray; } return(Mod_Loader_Entry); }
/// <summary> /// Disables a mod obtained from the currently selected listview item. /// </summary> private void ListView_Toggle_Mod() { // Find the mod we are looking for for (int x = 0; x < Mod_Loader_Entries.Count; x++) { // Get current entry for the mod loader. Mod_Loader_Mod_INI_Entry Mod_Loader_Entry = Mod_Loader_Entries[x]; // If the mod name and version matches a known mod, enable or disable the specific mod. if ((Mod_Loader_Entry.Mod_Name == ListView_Mod_List.SelectedItems[0].SubItems[1].Text) && (Mod_Loader_Entry.Mod_Version == ListView_Mod_List.SelectedItems[0].SubItems[2].Text)) { Mod_Loader_Entry = Toggle_Mod(Mod_Loader_Entry); } // Replace old mod loader entry. Mod_Loader_Entries[x] = Mod_Loader_Entry; } }
/// <summary> /// Parses and reads the Mod.ini file for an individual mod loader mod. /// </summary> /// <param name="Mod_Loader_INI_Path"></param> /// <returns></returns> private Mod_Loader_Mod_INI_Entry Parse_Mod_Loader_INI_Entry(string Mod_Loader_INI_Path) { Mod_Loader_Mod_INI_Entry Mod_Loader_Entry = new Mod_Loader_Mod_INI_Entry(); Mod_Loader_Entry.Mod_Directory = Path.GetDirectoryName(Mod_Loader_INI_Path); // Read the file line by line. string Current_Line; System.IO.StreamReader Mod_Loader_INI_File = new System.IO.StreamReader(Mod_Loader_INI_Path); while ((Current_Line = Mod_Loader_INI_File.ReadLine()) != null) { if (Current_Line.StartsWith("Name")) { Mod_Loader_Entry.Mod_Name = Current_Line.Substring(Current_Line.IndexOf("=") + 1); } else if (Current_Line.StartsWith("Version")) { Mod_Loader_Entry.Mod_Version = Current_Line.Substring(Current_Line.IndexOf("=") + 1); } else if (Current_Line.StartsWith("Description")) { Mod_Loader_Entry.Mod_Description = Current_Line.Substring(Current_Line.IndexOf("=") + 1); } else if (Current_Line.StartsWith("Author")) { Mod_Loader_Entry.Mod_Author = Current_Line.Substring(Current_Line.IndexOf("=") + 1); } else if (Current_Line.StartsWith("Options")) { Mod_Loader_Entry.Options_ExecutableName = Current_Line.Substring(Current_Line.IndexOf("=") + 1); } } Mod_Loader_INI_File.Close(); return(Mod_Loader_Entry); }
/// <summary> /// When the form is loaded for the first time. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainScreen_Load(object sender, EventArgs e) { ListView_Mod_List.Items.Clear(); // Dumps a list of enabled mods. string[] Enabled_Mods_List = File.ReadAllLines(Environment.CurrentDirectory + "\\Mod-Loader-Config\\Enabled_Mods.txt"); string Mod_Loader_Mods_Location = AppDomain.CurrentDomain.BaseDirectory + "Mod-Loader-Mods"; // Enabled mod list. // Add the enabled mods first. for (int x = 0; x < Enabled_Mods_List.Length; x++) { // Load our mod loader entry :) Mod_Loader_Mod_INI_Entry Mod_Loader_Entry = Parse_Mod_Loader_INI_Entry(Mod_Loader_Mods_Location + "\\" + Enabled_Mods_List[x] + @"\Mod.ini"); // Generate ListViewItem for mod. ListViewItem Heroes_Mod_Item = new ListViewItem(); Heroes_Mod_Item.Font = Program.xFonts.Hex_ComboBox_TinyUI; // Select colour based on enabled/disabled. ☑ ☐ Heroes_Mod_Item.Text = "☑"; Mod_Loader_Entry.Mod_Enabled = true; Heroes_Mod_Item.ForeColor = System.Drawing.Color.LightGray; // Add subitems Heroes_Mod_Item.UseItemStyleForSubItems = true; Heroes_Mod_Item.SubItems.Add(new ListViewItem.ListViewSubItem(Heroes_Mod_Item, Mod_Loader_Entry.Mod_Name)); Heroes_Mod_Item.SubItems.Add(new ListViewItem.ListViewSubItem(Heroes_Mod_Item, Mod_Loader_Entry.Mod_Version)); // Assign to the mod loader entry Mod_Loader_Entry.Heroes_Mod_Listview_Item = Heroes_Mod_Item; // Add the item :3 Mod_Loader_Entries.Add(Mod_Loader_Entry); ListView_Mod_List.Items.Add(Heroes_Mod_Item); } // Get all mod directories. Mod_Directories = Directory.GetDirectories(Mod_Loader_Mods_Location).ToList(); // Remove all directories of already existing loaded mods from the directory list such that they do not become loaded once again. for (int x = 0; x < Mod_Directories.Count; x++) { string Mod_Directory_Name = Mod_Directories[x].Substring(Mod_Directories[x].LastIndexOf("\\") + 1); for (int z = 0; z < Enabled_Mods_List.Length; z++) { if (Mod_Directory_Name == Enabled_Mods_List[z]) { Mod_Directories.RemoveAt(x); x--; // Decrement the index by 1 because the current index was removed. } } } // Strip the path to the mod loader // Add each mod onto the selection. for (int x = 0; x < Mod_Directories.Count; x++) { // Load our mod loader entry :) Mod_Loader_Mod_INI_Entry Mod_Loader_Entry = Parse_Mod_Loader_INI_Entry(Mod_Directories[x] + @"\Mod.ini"); // Generate ListViewItem for mod. ListViewItem Heroes_Mod_Item = new ListViewItem(); Heroes_Mod_Item.Font = Program.xFonts.Hex_ComboBox_TinyUI; // Select colour based on enabled/disabled. ☑ ☐ Heroes_Mod_Item.Text = "☐"; Mod_Loader_Entry.Mod_Enabled = false; Heroes_Mod_Item.ForeColor = System.Drawing.Color.Gray; // Add subitems Heroes_Mod_Item.UseItemStyleForSubItems = true; Heroes_Mod_Item.SubItems.Add(new ListViewItem.ListViewSubItem(Heroes_Mod_Item, Mod_Loader_Entry.Mod_Name)); Heroes_Mod_Item.SubItems.Add(new ListViewItem.ListViewSubItem(Heroes_Mod_Item, Mod_Loader_Entry.Mod_Version)); // Assign to the mod loader entry Mod_Loader_Entry.Heroes_Mod_Listview_Item = Heroes_Mod_Item; // Add the item :3 Mod_Loader_Entries.Add(Mod_Loader_Entry); ListView_Mod_List.Items.Add(Heroes_Mod_Item); } }