From 0893734cb8ae0d90b5d2c8fa2a511233d33872fd Mon Sep 17 00:00:00 2001 From: Herp Derpinstine Date: Thu, 7 Dec 2023 22:11:39 -0600 Subject: [PATCH] Implemented Unity.Shared --- .../MelonLoader.Bootstrap/Entrypoint.cs | 8 +- .../Fixes/UnhandledAssemblyResolve.cs | 35 ++- .../Fixes/UnhandledException.cs | 4 +- .../MelonLoader.Shared.csproj | 2 +- .../Utils/MelonExtensions.cs | 78 ++++-- .../MelonLoader.Shared/Utils/MelonLogger.cs | 2 +- MelonLoader/MelonLoader.sln | 7 + .../Unity/Unity.Bootstrap/Bootstrap.cs | 23 +- .../Unity.Bootstrap/Unity.Bootstrap.csproj | 5 + .../Unity.Shared/Resources/classdata.tpk | Bin 0 -> 135646 bytes .../Unity/Unity.Shared/Unity.Shared.csproj | 26 ++ .../Unity.Shared/Utils/UnityEnvironment.cs | 253 ++++++++++++++++++ .../Unity.Shared/Utils/UnityExtensions.cs | 20 ++ 13 files changed, 423 insertions(+), 40 deletions(-) create mode 100644 MelonLoader/Modules/Unity/Unity.Shared/Resources/classdata.tpk create mode 100644 MelonLoader/Modules/Unity/Unity.Shared/Unity.Shared.csproj create mode 100644 MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityEnvironment.cs create mode 100644 MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityExtensions.cs diff --git a/MelonLoader/MelonLoader.Bootstrap/Entrypoint.cs b/MelonLoader/MelonLoader.Bootstrap/Entrypoint.cs index 1e317cf8..d97e6c84 100644 --- a/MelonLoader/MelonLoader.Bootstrap/Entrypoint.cs +++ b/MelonLoader/MelonLoader.Bootstrap/Entrypoint.cs @@ -1,4 +1,6 @@ -using MelonLoader.Utils; +using MelonLoader.Fixes; +using MelonLoader.Utils; +using System.IO; namespace MelonLoader.Bootstrap { @@ -24,6 +26,10 @@ public static unsafe void Entry() MelonDebug.Msg("Found Bootstrap Module: " + module.GetType().FullName); MelonLogger.Msg($"Running Engine: {module.EngineName}"); + + // Fix Resolving Issue + UnhandledAssemblyResolve.AddSearchDirectoryToFront(Path.Combine(MelonEnvironment.ModulesDirectory, module.EngineName, "net6")); + module.Startup(); // TO-DO: Implement Fallback Handling for when a Module Fails to Startup } } diff --git a/MelonLoader/MelonLoader.Shared/Fixes/UnhandledAssemblyResolve.cs b/MelonLoader/MelonLoader.Shared/Fixes/UnhandledAssemblyResolve.cs index 37f62bd1..ebc74b16 100644 --- a/MelonLoader/MelonLoader.Shared/Fixes/UnhandledAssemblyResolve.cs +++ b/MelonLoader/MelonLoader.Shared/Fixes/UnhandledAssemblyResolve.cs @@ -1,5 +1,6 @@ using MelonLoader.Utils; using System; +using System.Collections.Generic; using System.IO; using System.Reflection; @@ -15,7 +16,7 @@ public static class UnhandledAssemblyResolve private static AssemblyLoadContext _alc; #endif - private static string[] SearchableDirectories = new string[] + private static List SearchableDirectories = new List { #if NET6_0 Path.Combine(MelonEnvironment.ModulesDirectory, "Mono", "net6"), @@ -38,7 +39,7 @@ public static class UnhandledAssemblyResolve MelonEnvironment.GameRootDirectory }; - public static void Install() + internal static void Install() { #if NET6_0 AssemblyLoadContext.Default.Resolving += OnResolve; @@ -48,6 +49,31 @@ public static void Install() #endif } + public static void AddSearchDirectoryToFront(string path) + { + if (SearchableDirectories.Contains(path)) + return; + + string[] dirArr = SearchableDirectories.ToArray(); + SearchableDirectories.Clear(); + SearchableDirectories.Add(path); + SearchableDirectories.AddRange(dirArr); + } + + public static void AddSearchDirectory(string path) + { + if (SearchableDirectories.Contains(path)) + return; + SearchableDirectories.Add(path); + } + + public static void RemoveSearchDirectory(string path) + { + if (!SearchableDirectories.Contains(path)) + return; + SearchableDirectories.Remove(path); + } + private static Assembly FindAssembly(string name, Func tryLoad) { var filename = name + ".dll"; @@ -55,11 +81,14 @@ private static Assembly FindAssembly(string name, Func tryLoad Assembly ret = null; foreach (string folder in SearchableDirectories) { + if (!Directory.Exists(folder)) + continue; + ret = tryLoad(Path.Combine(folder, filename)); if (ret != null) return ret; - foreach (var childFolder in Directory.GetDirectories(folder)) + foreach (var childFolder in Directory.GetDirectories(folder, "*", SearchOption.AllDirectories)) { ret = tryLoad(Path.Combine(childFolder, filename)); if (ret != null) diff --git a/MelonLoader/MelonLoader.Shared/Fixes/UnhandledException.cs b/MelonLoader/MelonLoader.Shared/Fixes/UnhandledException.cs index 66a27486..1899af94 100644 --- a/MelonLoader/MelonLoader.Shared/Fixes/UnhandledException.cs +++ b/MelonLoader/MelonLoader.Shared/Fixes/UnhandledException.cs @@ -3,9 +3,9 @@ namespace MelonLoader.Fixes { - public static class UnhandledException + internal static class UnhandledException { - public static void Install(AppDomain domain) => + internal static void Install(AppDomain domain) => domain.UnhandledException += (sender, args) => MelonLogger.Error((args.ExceptionObject as Exception).ToString()); diff --git a/MelonLoader/MelonLoader.Shared/MelonLoader.Shared.csproj b/MelonLoader/MelonLoader.Shared/MelonLoader.Shared.csproj index af0d860c..362b26ab 100644 --- a/MelonLoader/MelonLoader.Shared/MelonLoader.Shared.csproj +++ b/MelonLoader/MelonLoader.Shared/MelonLoader.Shared.csproj @@ -21,7 +21,7 @@ https://github.com/LavaGang/MelonLoader Lava Gang Lava Gang - Copyright (c) 2023 Lava Gang + Copyright (c) 2020 - 2024 Lava Gang The World's First Universal Mod Loader, expandable to work on any game engine. diff --git a/MelonLoader/MelonLoader.Shared/Utils/MelonExtensions.cs b/MelonLoader/MelonLoader.Shared/Utils/MelonExtensions.cs index 3dac3ecd..8dd7825f 100644 --- a/MelonLoader/MelonLoader.Shared/Utils/MelonExtensions.cs +++ b/MelonLoader/MelonLoader.Shared/Utils/MelonExtensions.cs @@ -63,8 +63,60 @@ public static IntPtr ToAnsiPointer(this string str) #endregion + #region Enum + + /// + /// From: http://www.sambeauvois.be/blog/2011/08/enum-hasflag-method-extension-for-4-0-framework/ + /// A FX 3.5 way to mimic the FX4 "HasFlag" method. + /// + /// The tested enum. + /// The value to test. + /// True if the flag is set. Otherwise false. + public static bool HasFlag(this Enum variable, Enum value) + { + // check if from the same type. + if (variable.GetType() != value.GetType()) + throw new ArgumentException("The checked flag is not from the same type as the checked variable."); + + ulong num = Convert.ToUInt64(value); + ulong num2 = Convert.ToUInt64(variable); + return (num2 & num) == num; + } + + #endregion + #region Color + private static Dictionary DrawingColorDict = new Dictionary + { + { Color.Black, ConsoleColor.Black }, + { Color.DarkBlue, ConsoleColor.DarkBlue }, + { Color.DarkGreen, ConsoleColor.DarkGreen }, + { Color.DarkCyan, ConsoleColor.DarkCyan }, + { Color.DarkRed, ConsoleColor.DarkRed }, + { Color.DarkMagenta, ConsoleColor.DarkMagenta }, + { Color.Yellow, ConsoleColor.Yellow }, + { Color.LightGray, ConsoleColor.Gray }, + { Color.DarkGray, ConsoleColor.DarkGray }, + { Color.CornflowerBlue, ConsoleColor.Blue } , + { Color.LimeGreen, ConsoleColor.Green }, + { Color.Cyan, ConsoleColor.Cyan }, + { Color.IndianRed, ConsoleColor.Red }, + { Color.Magenta, ConsoleColor.Magenta }, + { Color.White, ConsoleColor.White }, + }; + + public static ConsoleColor ToConsoleColor(this Color color) + { + if (!DrawingColorDict.ContainsKey(color)) + return MelonUtils.DefaultTextConsoleColor; + return DrawingColorDict[color]; + } + + #endregion + + #region ConsoleColor + private static Dictionary ConsoleColorDict = new Dictionary { { ConsoleColor.Black, Color.Black }, @@ -85,25 +137,6 @@ public static IntPtr ToAnsiPointer(this string str) { ConsoleColor.White, Color.White }, }; - private static Dictionary DrawingColorDict = new Dictionary - { - { Color.Black, ConsoleColor.Black }, - { Color.DarkBlue, ConsoleColor.DarkBlue }, - { Color.DarkGreen, ConsoleColor.DarkGreen }, - { Color.DarkCyan, ConsoleColor.DarkCyan }, - { Color.DarkRed, ConsoleColor.DarkRed }, - { Color.DarkMagenta, ConsoleColor.DarkMagenta }, - { Color.Yellow, ConsoleColor.Yellow }, - { Color.LightGray, ConsoleColor.Gray }, - { Color.DarkGray, ConsoleColor.DarkGray }, - { Color.CornflowerBlue, ConsoleColor.Blue } , - { Color.LimeGreen, ConsoleColor.Green }, - { Color.Cyan, ConsoleColor.Cyan }, - { Color.IndianRed, ConsoleColor.Red }, - { Color.Magenta, ConsoleColor.Magenta }, - { Color.White, ConsoleColor.White }, - }; - public static Color ToDrawingColor(this ConsoleColor color) { if (!ConsoleColorDict.ContainsKey(color)) @@ -111,13 +144,6 @@ public static Color ToDrawingColor(this ConsoleColor color) return ConsoleColorDict[color]; } - public static ConsoleColor ToConsoleColor(this Color color) - { - if (!DrawingColorDict.ContainsKey(color)) - return MelonUtils.DefaultTextConsoleColor; - return DrawingColorDict[color]; - } - #endregion } } diff --git a/MelonLoader/MelonLoader.Shared/Utils/MelonLogger.cs b/MelonLoader/MelonLoader.Shared/Utils/MelonLogger.cs index 72bb4ef7..41c1c40a 100644 --- a/MelonLoader/MelonLoader.Shared/Utils/MelonLogger.cs +++ b/MelonLoader/MelonLoader.Shared/Utils/MelonLogger.cs @@ -161,7 +161,7 @@ internal static void Internal_Warning(string namesection, string txt) internal static void Internal_Error(string namesection, string txt) => Internal_Msg(Color.IndianRed, Color.IndianRed, namesection, txt); - internal static void WriteSpacer() + public static void WriteSpacer() { BootstrapInterop.NativeWriteLogToFile(""); Console.WriteLine(); diff --git a/MelonLoader/MelonLoader.sln b/MelonLoader/MelonLoader.sln index 997110fb..199163e7 100644 --- a/MelonLoader/MelonLoader.sln +++ b/MelonLoader/MelonLoader.sln @@ -29,6 +29,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CoreCLR", "CoreCLR", "{40E3 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreCLR.Bootstrap", "Modules\CoreCLR\CoreCLR.Bootstrap\CoreCLR.Bootstrap.csproj", "{0950C2EC-9116-4A7A-B5CF-A6C24CB90689}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Shared", "Modules\Unity\Unity.Shared\Unity.Shared.csproj", "{AAB39E01-B118-4481-9796-036E92B857A0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -67,6 +69,10 @@ Global {0950C2EC-9116-4A7A-B5CF-A6C24CB90689}.Debug|Any CPU.Build.0 = Debug|Any CPU {0950C2EC-9116-4A7A-B5CF-A6C24CB90689}.Release|Any CPU.ActiveCfg = Release|Any CPU {0950C2EC-9116-4A7A-B5CF-A6C24CB90689}.Release|Any CPU.Build.0 = Release|Any CPU + {AAB39E01-B118-4481-9796-036E92B857A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AAB39E01-B118-4481-9796-036E92B857A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AAB39E01-B118-4481-9796-036E92B857A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AAB39E01-B118-4481-9796-036E92B857A0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -81,6 +87,7 @@ Global {5C34E23A-F841-460C-BD45-3EE1ED4E15F8} = {879B734F-9F94-4811-BA4A-28160BD525AA} {40E3E955-2FEE-4C38-BE89-76F61594DB4A} = {716CE800-E309-4104-ACA3-867BB8BF4FB0} {0950C2EC-9116-4A7A-B5CF-A6C24CB90689} = {40E3E955-2FEE-4C38-BE89-76F61594DB4A} + {AAB39E01-B118-4481-9796-036E92B857A0} = {3E7F5C09-221B-4492-9BA0-2D1ED9BEC58C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4490CB48-16CD-4D0A-858D-1484CB9DED02} diff --git a/MelonLoader/Modules/Unity/Unity.Bootstrap/Bootstrap.cs b/MelonLoader/Modules/Unity/Unity.Bootstrap/Bootstrap.cs index e2002f6f..7781fc9f 100644 --- a/MelonLoader/Modules/Unity/Unity.Bootstrap/Bootstrap.cs +++ b/MelonLoader/Modules/Unity/Unity.Bootstrap/Bootstrap.cs @@ -2,13 +2,17 @@ using MelonLoader.Interfaces; using MelonLoader.Utils; using MelonLoader.Mono.Bootstrap; -using System; using System.Collections.Generic; +using MelonLoader.Unity.Utils; +using System.Drawing; +using MelonLoader.Fixes; namespace MelonLoader.Unity { public class Bootstrap : IBootstrapModule { + private static readonly string GameDataPath = $"{Path.Combine(MelonEnvironment.GameRootDirectory, MelonEnvironment.GameExecutableName)}_Data"; + public string EngineName => "Unity"; /// @@ -27,10 +31,18 @@ public bool IsMyEngine } } - internal static string GameDataPath { get; private set; } = $"{Path.Combine(MelonEnvironment.GameRootDirectory, MelonEnvironment.GameExecutableName)}_Data"; - public void Startup() { + // Read Game Info + UnityEnvironment.Initialize(GameDataPath); + + // Log the Information + //BootstrapInterop.SetDefaultConsoleTitleWithGameName(GameName, GameVersion); + MelonLogger.Msg($"Engine Version: {UnityEnvironment.EngineVersionString}"); + MelonLogger.Msg($"Game Name: {UnityEnvironment.GameName}"); + MelonLogger.Msg($"Game Developer: {UnityEnvironment.GameDeveloper}"); + MelonLogger.Msg($"Game Version: {UnityEnvironment.GameVersion}"); + // Get GameAssembly Name string gameAssemblyName = "GameAssembly"; if (MelonUtils.IsUnix) @@ -45,7 +57,7 @@ public void Startup() if (File.Exists(gameAssemblyPath)) { // Start Il2Cpp Support - MelonLogger.Msg("Engine Variant: Il2Cpp"); + MelonLogger.Msg("Runtime Variant: Il2Cpp"); //Il2CppLoader.Startup(gameAssemblyPath); } else @@ -56,7 +68,7 @@ public void Startup() MelonAssertion.ThrowInternalFailure("Failed to get Mono Runtime Info!"); else { - MelonLogger.Msg($"Engine Variant: {runtimeInfo.VariantName}"); + MelonLogger.Msg($"Runtime Variant: {runtimeInfo.VariantName}"); MonoLoader.Startup(runtimeInfo); } } @@ -158,7 +170,6 @@ internal static MonoRuntimeInfo GetMonoRuntimeInfo() } } - // Return Nothing return null; } diff --git a/MelonLoader/Modules/Unity/Unity.Bootstrap/Unity.Bootstrap.csproj b/MelonLoader/Modules/Unity/Unity.Bootstrap/Unity.Bootstrap.csproj index 606e3c29..327317d6 100644 --- a/MelonLoader/Modules/Unity/Unity.Bootstrap/Unity.Bootstrap.csproj +++ b/MelonLoader/Modules/Unity/Unity.Bootstrap/Unity.Bootstrap.csproj @@ -18,5 +18,10 @@ all False + + False + all + False + \ No newline at end of file diff --git a/MelonLoader/Modules/Unity/Unity.Shared/Resources/classdata.tpk b/MelonLoader/Modules/Unity/Unity.Shared/Resources/classdata.tpk new file mode 100644 index 0000000000000000000000000000000000000000..aeafd0ac6025501bb19856a78c7a12bc90ecaff8 GIT binary patch literal 135646 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 + + MelonLoader.Unity + net35;netstandard2.1;net6 + Latest + $(SolutionDir)Output\$(Configuration)\MelonLoader\Modules\Unity\ + true + embedded + MelonLoader.Unity.Shared + + + + + + + + + + + + + + False + + + \ No newline at end of file diff --git a/MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityEnvironment.cs b/MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityEnvironment.cs new file mode 100644 index 00000000..479a0e36 --- /dev/null +++ b/MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityEnvironment.cs @@ -0,0 +1,253 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using AssetsTools.NET; +using AssetsTools.NET.Extra; +using UnityVersion = AssetRipper.Primitives.UnityVersion; +using MelonLoader.Utils; + +namespace MelonLoader.Unity.Utils +{ + public static class UnityEnvironment + { + private const string _defaultInfo = "UNKNOWN"; + private static bool _isInitialized; + + public static UnityVersion EngineVersion { get; private set; } = UnityVersion.MinVersion; + public static string EngineVersionString { get; private set; } = UnityVersion.MinVersion.ToString(); + + public static string GameName { get; private set; } + public static string GameDeveloper { get; private set; } + public static string GameVersion { get; private set; } + + public static void Initialize(string gameDataPath) + { + // Check if already Initialized + if (_isInitialized) + return; + _isInitialized = true; + + //if (!string.IsNullOrEmpty(MelonLaunchOptions.Core.UnityVersion)) + //{ + // try { EngineVersion = UnityVersion.Parse(MelonLaunchOptions.Core.UnityVersion); } + // catch (Exception ex) + // { + // EngineVersion = UnityVersion.MinVersion; + // if (MelonDebug.IsEnabled()) + // MelonLogger.Error(ex); + // } + //} + + AssetsManager assetsManager = new AssetsManager(); + ReadGameInfo(assetsManager, gameDataPath); + assetsManager.UnloadAll(); + + if (string.IsNullOrEmpty(GameDeveloper) + || string.IsNullOrEmpty(GameName)) + ReadGameInfoFallback(gameDataPath); + + if (EngineVersion == UnityVersion.MinVersion) + { + try { EngineVersion = ReadVersionFallback(gameDataPath); } + catch (Exception ex) + { + if (MelonDebug.IsEnabled()) + MelonLogger.Error(ex); + } + } + + if (string.IsNullOrEmpty(GameDeveloper)) + GameDeveloper = _defaultInfo; + if (string.IsNullOrEmpty(GameName)) + GameName = _defaultInfo; + if (string.IsNullOrEmpty(GameVersion)) + GameVersion = _defaultInfo; + + EngineVersionString = EngineVersion.ToString(); + } + + private static void ReadGameInfo(AssetsManager assetsManager, string gameDataPath) + { + AssetsFileInstance instance = null; + try + { + string bundlePath = Path.Combine(gameDataPath, "globalgamemanagers"); + if (!File.Exists(bundlePath)) + bundlePath = Path.Combine(gameDataPath, "mainData"); + + if (!File.Exists(bundlePath)) + { + bundlePath = Path.Combine(gameDataPath, "data.unity3d"); + if (!File.Exists(bundlePath)) + return; + + BundleFileInstance bundleFile = assetsManager.LoadBundleFile(bundlePath); + instance = assetsManager.LoadAssetsFileFromBundle(bundleFile, "globalgamemanagers"); + } + else + instance = assetsManager.LoadAssetsFile(bundlePath, true); + if (instance == null) + return; + + assetsManager.LoadIncludedClassPackage(); + + if (!instance.file.Metadata.TypeTreeEnabled) + assetsManager.LoadClassDatabaseFromPackage(instance.file.Metadata.UnityVersion); + + if (EngineVersion == UnityVersion.MinVersion) + EngineVersion = UnityVersion.Parse(instance.file.Metadata.UnityVersion); + + List assetFiles = instance.file.GetAssetsOfType(AssetClassID.PlayerSettings); + if (assetFiles.Count > 0) + { + AssetFileInfo playerSettings = assetFiles.First(); + + AssetTypeValueField playerSettings_baseField = assetsManager.GetBaseField(instance, playerSettings); + if (playerSettings_baseField != null) + { + AssetTypeValueField bundleVersion = playerSettings_baseField.Get("bundleVersion"); + if (bundleVersion != null) + GameVersion = bundleVersion.AsString; + + AssetTypeValueField companyName = playerSettings_baseField.Get("companyName"); + if (companyName != null) + GameDeveloper = companyName.AsString; + + AssetTypeValueField productName = playerSettings_baseField.Get("productName"); + if (productName != null) + GameName = productName.AsString; + } + } + } + catch (Exception ex) + { + if (MelonDebug.IsEnabled()) + MelonLogger.Error(ex); + //MelonLogger.Error("Failed to Initialize Assets Manager!"); + } + if (instance != null) + instance.file.Close(); + } + + private static void ReadGameInfoFallback(string gameDataPath) + { + try + { + string appInfoFilePath = Path.Combine(gameDataPath, "app.info"); + if (!File.Exists(appInfoFilePath)) + return; + + string[] filestr = File.ReadAllLines(appInfoFilePath); + if ((filestr == null) || (filestr.Length < 2)) + return; + + if (string.IsNullOrEmpty(GameDeveloper) && !string.IsNullOrEmpty(filestr[0])) + GameDeveloper = filestr[0]; + + if (string.IsNullOrEmpty(GameName) && !string.IsNullOrEmpty(filestr[1])) + GameName = filestr[1]; + + } + catch (Exception ex) + { + if (MelonDebug.IsEnabled()) + MelonLogger.Error(ex); + } + } + + private static UnityVersion ReadVersionFallback(string gameDataPath) + { + + try + { + var globalgamemanagersPath = Path.Combine(gameDataPath, "globalgamemanagers"); + if (File.Exists(globalgamemanagersPath)) + return GetVersionFromGlobalGameManagers(File.ReadAllBytes(globalgamemanagersPath)); + } + catch (Exception ex) + { + if (MelonDebug.IsEnabled()) + MelonLogger.Error(ex); + } + + try + { + var dataPath = Path.Combine(gameDataPath, "data.unity3d"); + if (File.Exists(dataPath)) + return GetVersionFromDataUnity3D(File.OpenRead(dataPath)); + } + catch (Exception ex) + { + if (MelonDebug.IsEnabled()) + MelonLogger.Error(ex); + } + + if (MelonUtils.IsWindows) + { + string unityPlayerPath = Path.Combine(MelonEnvironment.GameRootDirectory, "UnityPlayer.dll"); + if (!File.Exists(unityPlayerPath)) + unityPlayerPath = MelonEnvironment.GameExecutablePath; + + var unityVer = FileVersionInfo.GetVersionInfo(unityPlayerPath); + return new UnityVersion((ushort)unityVer.FileMajorPart, (ushort)unityVer.FileMinorPart, (ushort)unityVer.FileBuildPart); + } + + return default; + } + + private static UnityVersion GetVersionFromGlobalGameManagers(byte[] ggmBytes) + { + var verString = new StringBuilder(); + var idx = 0x14; + while (ggmBytes[idx] != 0) + { + verString.Append(Convert.ToChar(ggmBytes[idx])); + idx++; + } + + Regex UnityVersionRegex = new Regex(@"^[0-9]+\.[0-9]+\.[0-9]+[abcfx][0-9]+$", RegexOptions.Compiled); + string unityVer = verString.ToString(); + if (!UnityVersionRegex.IsMatch(unityVer)) + { + idx = 0x30; + verString = new StringBuilder(); + while (ggmBytes[idx] != 0) + { + verString.Append(Convert.ToChar(ggmBytes[idx])); + idx++; + } + + unityVer = verString.ToString().Trim(); + } + + return UnityVersion.Parse(unityVer); + } + + private static UnityVersion GetVersionFromDataUnity3D(Stream fileStream) + { + var verString = new StringBuilder(); + + if (fileStream.CanSeek) + fileStream.Seek(0x12, SeekOrigin.Begin); + else + { + if (fileStream.Read(new byte[0x12], 0, 0x12) != 0x12) + throw new("Failed to seek to 0x12 in data.unity3d"); + } + + while (true) + { + var read = fileStream.ReadByte(); + if (read == 0) + break; + verString.Append(Convert.ToChar(read)); + } + + return UnityVersion.Parse(verString.ToString().Trim()); + } + } +} diff --git a/MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityExtensions.cs b/MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityExtensions.cs new file mode 100644 index 00000000..f69dcdba --- /dev/null +++ b/MelonLoader/Modules/Unity/Unity.Shared/Utils/UnityExtensions.cs @@ -0,0 +1,20 @@ +using AssetsTools.NET; +using AssetsTools.NET.Extra; + +namespace MelonLoader.Unity.Utils +{ + public static class UnityExtensions + { + #region AssetsManager + + public static ClassPackageFile LoadIncludedClassPackage(this AssetsManager assetsManager) + { + ClassPackageFile classPackage = null; + using (var stream = typeof(UnityExtensions).Assembly.GetManifestResourceStream("MelonLoader.Unity.Resources.classdata.tpk")) + classPackage = assetsManager.LoadClassPackage(stream); + return classPackage; + } + + #endregion + } +}