From 0ed55284ce120ed38ac73281fba9cec05299fbf4 Mon Sep 17 00:00:00 2001 From: Sam Byass Date: Mon, 8 Mar 2021 10:11:04 +0000 Subject: [PATCH] Fix potential crash if we couldn't find a load error for a DLL, clean up on play data reset, update some messages. --- 1.1-1.2/Assemblies/BetterLoading.dll | Bin 85504 -> 86016 bytes About/Manifest.xml | 2 +- Source/BetterLoadingMain.cs | 46 +++++++++++++++++++-------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/1.1-1.2/Assemblies/BetterLoading.dll b/1.1-1.2/Assemblies/BetterLoading.dll index 6c340c5987954c279a53761d6fbb65aaf7bff092..aa0ee42dcf18ad90f569dc243b0de6e3ea71b5da 100644 GIT binary patch delta 26531 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 CTClqS diff --git a/About/Manifest.xml b/About/Manifest.xml index 51ca2d9..18354ae 100755 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ BetterLoading - 3.1.1.0 + 3.1.2.0
  • Core >= 1.0
  • Startupimpact
  • diff --git a/Source/BetterLoadingMain.cs b/Source/BetterLoadingMain.cs index 1c8ac2e..eed2006 100755 --- a/Source/BetterLoadingMain.cs +++ b/Source/BetterLoadingMain.cs @@ -24,7 +24,7 @@ public sealed class BetterLoadingMain : Mod public class DllLoadError { public string dllName; - public LogMessage reasonMessage; + public LogMessage? reasonMessage; } public BetterLoadingMain(ModContentPack content) : base(content) @@ -33,6 +33,8 @@ public BetterLoadingMain(ModContentPack content) : base(content) hInstance = new Harmony("me.samboycoding.blm"); if (Camera.main == null) return; //Just in case + + hInstance.Patch(AccessTools.Method(typeof(PlayDataLoader), nameof(PlayDataLoader.ClearAllPlayData)), new HarmonyMethod(typeof(BetterLoadingMain), nameof(OnClearPlayData))); LogMsg("[BetterLoading] Verifying all mods loaded properly..."); @@ -65,7 +67,7 @@ public BetterLoadingMain(ModContentPack content) : base(content) new DllLoadError { dllName = filename, - reasonMessage = loadFailures.First(msg => msg.text.Contains($"assembly {filename}")) + reasonMessage = loadFailures.FirstOrDefault(msg => msg.text.Contains($"assembly {filename}")) } ) .ToList(); @@ -83,7 +85,7 @@ public BetterLoadingMain(ModContentPack content) : base(content) var alreadyCreatedLoadScreens = Object.FindObjectsOfType().Where(c => c.GetType().FullName.Contains("LoadingScreen")).ToList(); if (alreadyCreatedLoadScreens.Count > 0) { - Log.Warning("[BetterLoading] [Warning] Loading screen already appears to have been injected. Are we running with prepatcher perchance? Destroying old one and re-making."); + Log.Warning("[BetterLoading] [Warning] Probably running with prepatcher! The loading screen handler has already been set up - will just destroy it and re-create. This isn't a problem, just letting you know!"); alreadyCreatedLoadScreens.ForEach(Object.Destroy); LoadingScreen = null; } @@ -127,7 +129,7 @@ private void CreateTimingReport() $"Spent {timeConstructingDefs.TotalMilliseconds}ms turning XML into def instances.\n" + $"Spent {timeResolvingDatabases.TotalMilliseconds}ms resolving cross-references and running post-load, pre-finalize callbacks.\n" + $"Spent {timeRunningCctors.TotalMilliseconds}ms running static constructors (initializing mods).\n" + - $"Spent {timeRunningPostFinalize.Ticks} ticks running post-finalize callbacks.\n" + + $"Spent {timeRunningPostFinalize.TotalMilliseconds}ms running post-finalize callbacks.\n" + $"In total, spent {totalLoadTime.TotalMilliseconds}ms launching the game." , true); } @@ -142,30 +144,36 @@ BetterLoading did not display because not all of your modded .dll files (assembl BetterLoading has nothing to do with this, and it would have happened anyway, we're just letting you know. -Don't report this to the BetterLoading dev. If you want to report it to anyone, report it to the developers of the mods below, but it's probably your fault. +Don't report this to the BetterLoading dev. If you want to report it to anyone, report it to the developers of the mods below, but it's probably an issue with your setup. The assemblies that failed to load are: " + string.Join("\n", DllPathsThatFailedToLoad.Select(kvp => $"{kvp.Key.Name} - {kvp.Value.Select(e => e.dllName + ".dll").ToCommaList()}").ToArray()) - + "\n\nIf you would like to see what info BetterLoading has been able to work out in terms of mod misconfiguration, open the log window (you may have to enable developer mode in settings first) and look at the last few lines (anything containing, and after, the phrase 'failed load, identified')"; + + "\n\nIf you would like to see what info BetterLoading has been able to work out in terms of mod misconfiguration, open the log window (you may have to enable developer mode in settings first) and look at the warning messages from BetterLoading."; foreach (var kvp in DllPathsThatFailedToLoad) { var modThatFailedLoad = kvp.Key; var errors = kvp.Value; - Log.Message($"Errors for mod {modThatFailedLoad.Name}:"); + Log.Warning($"[BetterLoading] Mod {modThatFailedLoad.Name} failed to load at least some of its code. Details:"); foreach (var dllLoadError in errors) { + if (dllLoadError.reasonMessage == null) + { + Log.Warning($"[BetterLoading] \t{dllLoadError.dllName}.dll failed to load, but we couldn't work out why. Possibly intentional? For safety reasons, the loading screen will not show."); + continue; + } + var loaderErrors = GetLoaderErrors(dllLoadError.reasonMessage.text); if (loaderErrors.Count > 0) { - Log.Message($"\t{dllLoadError.dllName}.dll failed load, identified {loaderErrors.Count} types that failed to load."); + Log.Warning($"[BetterLoading] \t{dllLoadError.dllName}.dll failed load, identified {loaderErrors.Count} types that failed to load."); var externalErrors = loaderErrors.Where(e => e.asm != dllLoadError.dllName).ToList(); if (externalErrors.Count == 0) { - Log.Message($"\t{dllLoadError.dllName} load failure seems to be entirely internal - corrupt dll?"); + Log.Warning($"[BetterLoading] \t{dllLoadError.dllName}.dll load failure seems to be entirely internal - corrupt dll?"); continue; } @@ -183,16 +191,16 @@ BetterLoading did not display because not all of your modded .dll files (assembl if (dependentMods.Count > 0) { - Log.Message($"\t{dllLoadError.dllName} appears to have a dependency on these mod(s): {dependentMods.Select(m => m.Name).ToStringSafeEnumerable()}"); + Log.Warning($"[BetterLoading] \t{dllLoadError.dllName} appears to have a dependency on these mod(s): {dependentMods.Select(m => m.Name).ToStringSafeEnumerable()}"); var notLoaded = dependentMods.Where(requiredMod => LoadedModManager.RunningMods.All(runningMod => runningMod.Name != requiredMod.Name)).ToList(); if (notLoaded.Count > 0) - notLoaded.ForEach(m => Log.Warning($"\t{modThatFailedLoad.Name} depends on {m.Name} which is not enabled, so it didn't load properly.")); + notLoaded.ForEach(m => Log.Warning($"[BetterLoading] \t{modThatFailedLoad.Name} depends on {m.Name} which is not enabled, so it didn't load properly.")); var modsLoadedAfterTarget = LoadedModManager.RunningMods.Skip(LoadedModManager.RunningModsListForReading.FindIndex(i => i.Name == modThatFailedLoad.Name)).Take(int.MaxValue).ToList(); var depsLoadedAfterDependent = modsLoadedAfterTarget.Where(loadedAfter => dependentMods.Any(dep => dep.Name == loadedAfter.Name)).ToList(); if (depsLoadedAfterDependent.Count > 0) - depsLoadedAfterDependent.ForEach(m => Log.Warning($"\t{modThatFailedLoad.Name} is loaded before {m.Name} but depends on it, so must be loaded after. It didn't load properly because of this.")); + depsLoadedAfterDependent.ForEach(m => Log.Warning($"[BetterLoading] \t{modThatFailedLoad.Name} is loaded before {m.Name} but depends on it, so must be loaded after. It didn't load properly because of this.")); } if (dependentMods.Count != missingAssemblies.Count) @@ -202,7 +210,7 @@ BetterLoading did not display because not all of your modded .dll files (assembl .Select(asm => $"{asm}.dll") .ToList(); - Log.Message($"\t{dllLoadError.dllName} (also) depends on these DLL(s) which couldn't be found in any installed mods: {notInAnyMods.ToStringSafeEnumerable()}"); + Log.Warning($"[BetterLoading] \t{dllLoadError.dllName} (also) depends on these DLL(s) which couldn't be found in any installed mods: {notInAnyMods.ToStringSafeEnumerable()}"); } } } @@ -282,6 +290,18 @@ private static void LogMsg(string message) Log.Message($"[{DateTime.Now}] {message}"); } + public static void OnClearPlayData() + { + //Reset our harmony patches. + hInstance?.UnpatchAll("me.samboycoding.blm"); + + if(LoadingScreen == null) + return; + + //Destroy loading screen. + Object.Destroy(LoadingScreen); + } + //Following code kept as reference #region Save Game Loading Patches