mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
GameRegistry cleanup
This commit is contained in:
parent
82d8939198
commit
3a7af10ed3
@ -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<int>? SteamIDs { get; internal set; }
|
||||
|
||||
// to get gog ids: https://www.gogdb.org
|
||||
public List<int>? 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<string>? AdditionalFolders { get; internal set; }
|
||||
|
||||
// file to check if the game is present, useful when steamIds and gogIds dont help
|
||||
public List<string>? 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<Game>();
|
||||
|
||||
|
||||
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
|
||||
/// <param nambe="someName">Name to query</param>
|
||||
/// <returns>GameMetaData found</returns>
|
||||
/// <exception cref="ArgumentNullException">If string could not be translated to a game</exception>
|
||||
/// </summary>
|
||||
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.
|
||||
/// <param nambe="someName">Name to query</param>
|
||||
/// <returns>GameMetaData if found, otherwise null</returns>
|
||||
/// </summary>
|
||||
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<int>{22320},
|
||||
GOGIDs = new List<int>{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<int> {22330},
|
||||
GOGIDs = new List<int>{1458058109},
|
||||
RequiredFiles = new List<string>
|
||||
@ -274,7 +247,6 @@ namespace Wabbajack.Common
|
||||
NexusGameId = 120,
|
||||
MO2Name = "fallout3",
|
||||
MO2ArchiveName = "fallout3",
|
||||
GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Fallout3",
|
||||
SteamIDs = new List<int> {22300, 22370}, // base game and GotY
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
@ -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<int> {22380, 22490}, // normal and RU version
|
||||
GOGIDs = new List<int>{1454587428},
|
||||
RequiredFiles = new List<string>
|
||||
@ -312,7 +283,6 @@ namespace Wabbajack.Common
|
||||
NexusGameId = 110,
|
||||
MO2Name = "Skyrim",
|
||||
MO2ArchiveName = "skyrim",
|
||||
GameLocationRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\skyrim",
|
||||
SteamIDs = new List<int> {72850},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
@ -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<int> {489830},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
@ -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<int> {377160},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
@ -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<int>{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<int> {611670},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
@ -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<int> {262060},
|
||||
GOGIDs = new List<int>{1450711444},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"_windows\\Darkest.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.DivinityOriginalSin2DE, new GameMetaData
|
||||
{
|
||||
Game = Game.DivinityOriginalSin2DE,
|
||||
NexusName = "divinityoriginalsin2definitiveedition",
|
||||
NexusGameId = 2569,
|
||||
SteamIDs = new List<int> {435150},
|
||||
GOGIDs = new List<int>{1584823040},
|
||||
AdditionalFolders = new List<string>
|
||||
{
|
||||
"%documents%\\Larian Studios\\Divinity Original Sin 2 Definitive Edition\\Mods\\"
|
||||
},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"DefEd\\bin\\SupportTool.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.DivinityOriginalSin2, new GameMetaData
|
||||
{
|
||||
Game = Game.DivinityOriginalSin2,
|
||||
NexusName = "divinityoriginalsin2",
|
||||
NexusGameId = 1661,
|
||||
SteamIDs = new List<int> {435150},
|
||||
GOGIDs = new List<int>{1584823040},
|
||||
AdditionalFolders = new List<string>
|
||||
{
|
||||
"%documents%\\Larian Studios\\Divinity Original Sin 2\\Mods\\",
|
||||
},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"bin\\SupportTool.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.Starbound, new GameMetaData
|
||||
{
|
||||
Game = Game.Starbound,
|
||||
NexusName = "starbound",
|
||||
NexusGameId = 242,
|
||||
SteamIDs = new List<int>{211820},
|
||||
GOGIDs = new List<int>{1452598881},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"win64\\starbound.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.SWKOTOR, new GameMetaData
|
||||
{
|
||||
Game = Game.SWKOTOR,
|
||||
NexusName = "kotor",
|
||||
NexusGameId = 234,
|
||||
SteamIDs = new List<int>{32370},
|
||||
GOGIDs = new List<int>{1207666283},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"swkotor.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.SWKOTOR2, new GameMetaData
|
||||
{
|
||||
Game = Game.SWKOTOR2,
|
||||
NexusName = "kotor2",
|
||||
NexusGameId = 198,
|
||||
SteamIDs = new List<int>{208580},
|
||||
GOGIDs = new List<int>{1421404581},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"swkotor2.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.Witcher, new GameMetaData
|
||||
{
|
||||
Game = Game.Witcher,
|
||||
NexusName = "witcher",
|
||||
NexusGameId = 150,
|
||||
SteamIDs = new List<int>{20900},
|
||||
GOGIDs = new List<int>{1207658924},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"system\\witcher.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.Witcher2, new GameMetaData
|
||||
{
|
||||
Game = Game.Witcher2,
|
||||
NexusName = "witcher2",
|
||||
NexusGameId = 153,
|
||||
SteamIDs = new List<int>{20920},
|
||||
GOGIDs = new List<int>{1207658930},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"bin\\witcher2.exe",
|
||||
"bin\\userContentManager.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.Witcher3, new GameMetaData
|
||||
{
|
||||
Game = Game.Witcher3,
|
||||
NexusName = "witcher3",
|
||||
NexusGameId = 952,
|
||||
SteamIDs = new List<int>{292030, 499450}, // normal and GotY
|
||||
GOGIDs = new List<int>{1207664643, 1495134320, 1207664663, 1640424747}, // normal, GotY and both in packages
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"bin\\x64\\witcher2.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.StardewValley, new GameMetaData
|
||||
{
|
||||
Game = Game.StardewValley,
|
||||
NexusName = "stardewvalley",
|
||||
NexusGameId = 1303,
|
||||
SteamIDs = new List<int>{413150},
|
||||
GOGIDs = new List<int>{1453375253},
|
||||
RequiredFiles = new List<string>
|
||||
{
|
||||
"Stardew Valley.exe"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Game.Enderal, new GameMetaData
|
||||
{
|
||||
|
@ -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!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security;
|
||||
using Microsoft.Win32;
|
||||
|
Loading…
Reference in New Issue
Block a user