diff --git a/Wabbajack.Common/GameMetaData.cs b/Wabbajack.Common/GameMetaData.cs index 9a1a6616..3744f62c 100644 --- a/Wabbajack.Common/GameMetaData.cs +++ b/Wabbajack.Common/GameMetaData.cs @@ -4,15 +4,12 @@ using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; -using Alphaleonis.Win32.Filesystem; -using Microsoft.Win32; using Wabbajack.Common.StoreHandlers; namespace Wabbajack.Common { public enum Game { - FalloutShelter, //MO2 GAMES Morrowind, Oblivion, @@ -29,28 +26,9 @@ namespace Wabbajack.Common Fallout4, [Description("Skyrim VR")] SkyrimVR, - //VORTEX GAMES - [Description("Darkest Dungeon")] - DarkestDungeon, - [Description("Divinity Original Sin 2")] - DivinityOriginalSin2, - [Description("Divinity Original Sin 2 Definitive Edition")] - DivinityOriginalSin2DE, //definitive edition has its own nexus page but same Steam/GOG ids - Starbound, - [Description("Star Wars: Knights of the Old Republic")] - SWKOTOR, - [Description("Star Wars: Knights of the Old Republic 2")] - SWKOTOR2, - Witcher, - [Description("Witcher 2")] - Witcher2, - [Description("Witcher 3")] - Witcher3, - [Description("Stardew Valley")] - StardewValley } - public static class GameExtentions + public static class GameExtensions { public static GameMetaData MetaData(this Game game) { @@ -60,33 +38,36 @@ namespace Wabbajack.Common public class GameMetaData { - public ModManager SupportedModManager { get; internal set; } - public string? MO2ArchiveName { get; internal set; } public Game Game { get; internal set; } + public ModManager SupportedModManager { get; internal set; } + + public string? MO2ArchiveName { get; internal set; } public string? NexusName { get; internal set; } // Nexus DB id for the game, used in some specific situations public long NexusGameId { get; internal set; } public string? MO2Name { get; internal set; } - public string HumanFriendlyGameName => Game.GetDescription(); - - public string? GameLocationRegistryKey { get; internal set; } // to get steam ids: https://steamdb.info public List? SteamIDs { get; internal set; } + // to get gog ids: https://www.gogdb.org public List? GOGIDs { get; internal set; } + + // to get BethNet IDs: check the registry public int BethNetID { get; internal set; } //for BethNet games only! public string RegString { get; internal set; } = string.Empty; - // these are additional folders when a game installs mods outside the game folder - public List? AdditionalFolders { get; internal set; } + // file to check if the game is present, useful when steamIds and gogIds dont help public List? RequiredFiles { get; internal set; } - public bool Disabled { get; internal set; } + + public string? MainExecutable { get; internal set; } // Games that this game are commonly confused with, for example Skyrim SE vs Skyrim LE public Game[] CommonlyConfusedWith { get; set; } = Array.Empty(); - + + public string HumanFriendlyGameName => Game.GetDescription(); + public string InstalledVersion { get @@ -102,8 +83,6 @@ namespace Wabbajack.Common public bool IsInstalled => TryGetGameLocation() != null; - public string? MainExecutable { get; internal set; } - public AbsolutePath? TryGetGameLocation() { return Consts.TestMode ? AbsolutePath.GetCurrentDirectory() : StoreHandler.Instance.TryGetGamePath(Game); @@ -117,11 +96,9 @@ namespace Wabbajack.Common path = ret.Value; return true; } - else - { - path = default; - return false; - } + + path = default; + return false; } public AbsolutePath GameLocation() @@ -150,16 +127,12 @@ namespace Wabbajack.Common throw new ArgumentException($"{nameof(enumerationValue)} must be of Enum type", nameof(enumerationValue)); } var memberInfo = type.GetMember(enumerationValue.ToString()!); - if(memberInfo.Length > 0) - { - var attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); + if (memberInfo.Length <= 0) + return enumerationValue.ToString()!; - if(attrs.Length > 0) - { - return ((DescriptionAttribute)attrs[0]).Description; - } - } - return enumerationValue.ToString()!; + var attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); + + return attrs.Length > 0 ? ((DescriptionAttribute)attrs[0]).Description : enumerationValue.ToString(); } } @@ -167,8 +140,8 @@ namespace Wabbajack.Common { public static GameMetaData GetByMO2ArchiveName(string gameName) { - var gamename = gameName.ToLower(); - return Games.Values.FirstOrDefault(g => g.MO2ArchiveName?.ToLower() == gamename); + gameName = gameName.ToLower(); + return Games.Values.FirstOrDefault(g => g.MO2ArchiveName?.ToLower() == gameName); } public static GameMetaData GetByNexusName(string gameName) @@ -187,6 +160,7 @@ namespace Wabbajack.Common /// Name to query /// GameMetaData found /// If string could not be translated to a game + /// public static GameMetaData GetByFuzzyName(string someName) { return TryGetByFuzzyName(someName) ?? throw new ArgumentNullException($"{someName} could not be translated to a game"); @@ -196,6 +170,7 @@ namespace Wabbajack.Common /// Tries to parse game data from an arbitrary string. Tries first via parsing as a game Enum, then by Nexus name. /// Name to query /// GameMetaData if found, otherwise null + /// public static GameMetaData? TryGetByFuzzyName(string someName) { if (Enum.TryParse(typeof(Game), someName, true, out var metadata)) return ((Game)metadata!).MetaData(); @@ -229,7 +204,6 @@ namespace Wabbajack.Common { SupportedModManager = ModManager.MO2, Game = Game.Morrowind, - Disabled = false, SteamIDs = new List{22320}, GOGIDs = new List{1440163901, 1435828767}, NexusName = "morrowind", @@ -254,7 +228,6 @@ namespace Wabbajack.Common NexusGameId = 101, MO2Name = "Oblivion", MO2ArchiveName = "oblivion", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Oblivion", SteamIDs = new List {22330}, GOGIDs = new List{1458058109}, RequiredFiles = new List @@ -274,7 +247,6 @@ namespace Wabbajack.Common NexusGameId = 120, MO2Name = "fallout3", MO2ArchiveName = "fallout3", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Fallout3", SteamIDs = new List {22300, 22370}, // base game and GotY RequiredFiles = new List { @@ -293,7 +265,6 @@ namespace Wabbajack.Common NexusGameId = 130, MO2Name = "New Vegas", MO2ArchiveName = "falloutnv", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\falloutnv", SteamIDs = new List {22380, 22490}, // normal and RU version GOGIDs = new List{1454587428}, RequiredFiles = new List @@ -312,7 +283,6 @@ namespace Wabbajack.Common NexusGameId = 110, MO2Name = "Skyrim", MO2ArchiveName = "skyrim", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\skyrim", SteamIDs = new List {72850}, RequiredFiles = new List { @@ -331,7 +301,6 @@ namespace Wabbajack.Common NexusGameId = 1704, MO2Name = "Skyrim Special Edition", MO2ArchiveName = "skyrimse", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Skyrim Special Edition", SteamIDs = new List {489830}, RequiredFiles = new List { @@ -350,7 +319,6 @@ namespace Wabbajack.Common NexusGameId = 1151, MO2Name = "Fallout 4", MO2ArchiveName = "fallout4", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Fallout4", SteamIDs = new List {377160}, RequiredFiles = new List { @@ -359,17 +327,6 @@ namespace Wabbajack.Common MainExecutable = "Fallout4.exe" } }, - /*{ - Game.Fallout4VR, new GameMetaData - { - SupportedModManager = ModManager.MO2, - Game = Game.Fallout4VR, - NexusName = "fallout4", - MO2Name = "Fallout 4", - MO2ArchiveName = "fallout4", - SteamIDs = new List{611660} - } - },*/ { Game.SkyrimVR, new GameMetaData { @@ -379,7 +336,6 @@ namespace Wabbajack.Common NexusGameId = 1704, MO2Name = "Skyrim VR", MO2ArchiveName = "skyrimse", - GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Skyrim VR", SteamIDs = new List {611670}, RequiredFiles = new List { @@ -389,155 +345,6 @@ namespace Wabbajack.Common CommonlyConfusedWith = new []{Game.Skyrim, Game.SkyrimSpecialEdition} } }, - { - Game.DarkestDungeon, new GameMetaData - { - Game = Game.DarkestDungeon, - NexusName = "darkestdungeon", - NexusGameId = 804, - SteamIDs = new List {262060}, - GOGIDs = new List{1450711444}, - RequiredFiles = new List - { - "_windows\\Darkest.exe" - } - } - }, - { - Game.DivinityOriginalSin2DE, new GameMetaData - { - Game = Game.DivinityOriginalSin2DE, - NexusName = "divinityoriginalsin2definitiveedition", - NexusGameId = 2569, - SteamIDs = new List {435150}, - GOGIDs = new List{1584823040}, - AdditionalFolders = new List - { - "%documents%\\Larian Studios\\Divinity Original Sin 2 Definitive Edition\\Mods\\" - }, - RequiredFiles = new List - { - "DefEd\\bin\\SupportTool.exe" - } - } - }, - { - Game.DivinityOriginalSin2, new GameMetaData - { - Game = Game.DivinityOriginalSin2, - NexusName = "divinityoriginalsin2", - NexusGameId = 1661, - SteamIDs = new List {435150}, - GOGIDs = new List{1584823040}, - AdditionalFolders = new List - { - "%documents%\\Larian Studios\\Divinity Original Sin 2\\Mods\\", - }, - RequiredFiles = new List - { - "bin\\SupportTool.exe" - } - } - }, - { - Game.Starbound, new GameMetaData - { - Game = Game.Starbound, - NexusName = "starbound", - NexusGameId = 242, - SteamIDs = new List{211820}, - GOGIDs = new List{1452598881}, - RequiredFiles = new List - { - "win64\\starbound.exe" - } - } - }, - { - Game.SWKOTOR, new GameMetaData - { - Game = Game.SWKOTOR, - NexusName = "kotor", - NexusGameId = 234, - SteamIDs = new List{32370}, - GOGIDs = new List{1207666283}, - RequiredFiles = new List - { - "swkotor.exe" - } - } - }, - { - Game.SWKOTOR2, new GameMetaData - { - Game = Game.SWKOTOR2, - NexusName = "kotor2", - NexusGameId = 198, - SteamIDs = new List{208580}, - GOGIDs = new List{1421404581}, - RequiredFiles = new List - { - "swkotor2.exe" - } - } - }, - { - Game.Witcher, new GameMetaData - { - Game = Game.Witcher, - NexusName = "witcher", - NexusGameId = 150, - SteamIDs = new List{20900}, - GOGIDs = new List{1207658924}, - RequiredFiles = new List - { - "system\\witcher.exe" - } - } - }, - { - Game.Witcher2, new GameMetaData - { - Game = Game.Witcher2, - NexusName = "witcher2", - NexusGameId = 153, - SteamIDs = new List{20920}, - GOGIDs = new List{1207658930}, - RequiredFiles = new List - { - "bin\\witcher2.exe", - "bin\\userContentManager.exe" - } - } - }, - { - Game.Witcher3, new GameMetaData - { - Game = Game.Witcher3, - NexusName = "witcher3", - NexusGameId = 952, - SteamIDs = new List{292030, 499450}, // normal and GotY - GOGIDs = new List{1207664643, 1495134320, 1207664663, 1640424747}, // normal, GotY and both in packages - RequiredFiles = new List - { - "bin\\x64\\witcher2.exe" - } - } - }, - { - Game.StardewValley, new GameMetaData - { - Game = Game.StardewValley, - NexusName = "stardewvalley", - NexusGameId = 1303, - SteamIDs = new List{413150}, - GOGIDs = new List{1453375253}, - RequiredFiles = new List - { - "Stardew Valley.exe" - } - } - }, { Game.Enderal, new GameMetaData { diff --git a/Wabbajack.Common/StoreHandlers/BethNetHandler.cs b/Wabbajack.Common/StoreHandlers/BethNetHandler.cs index d192e284..9a02134d 100644 --- a/Wabbajack.Common/StoreHandlers/BethNetHandler.cs +++ b/Wabbajack.Common/StoreHandlers/BethNetHandler.cs @@ -106,7 +106,7 @@ namespace Wabbajack.Common.StoreHandlers } else { - Utils.Log($"Game at {d} is not supported!"); + Utils.Log($"BethNet Game at {d} is not supported!"); } }); } diff --git a/Wabbajack.Common/StoreHandlers/GOGHandler.cs b/Wabbajack.Common/StoreHandlers/GOGHandler.cs index 8634688e..f475fe1f 100644 --- a/Wabbajack.Common/StoreHandlers/GOGHandler.cs +++ b/Wabbajack.Common/StoreHandlers/GOGHandler.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.IO; using System.Linq; using System.Security; using Microsoft.Win32;