lilwhitemouse / RimWorld-LWM.DeepStorage

A mod for the game RimWorld that has a set of Deep Storage Units that allow storing more than one item at a location.
GNU General Public License v3.0
29 stars 36 forks source link

Can't click and map not generating properly #138

Closed Arbarbonif closed 1 year ago

Arbarbonif commented 1 year ago

I am on the GoG version of Rimworld and have the problem with just deep storage, harmony and hugslibs installed. I also tried redownloading harmony and hugslib... log from rimworld start: https://gist.github.com/80087ea8abe6d38dee60eb3bbc19588c

lilwhitemouse commented 1 year ago

......what is the version of rimworld you are running?

Okay, workaround (hopefully): in mod settings, uncheck "check over capacity" Then restart.

How comfortable are you with weird modding tools? Could you use a decompiler (ILSpy, DNSpy, Microsoft's [mumble mumble] tool) to open RimWorld/RimWorld[Windows|Linux]_Data/Managed/Assembly-CSharp.dll, and then look for Verse->ModLister and see if it has "GetActiveModWithIdentifier"? If it does, could you paste the declaration - should look like public static ModMetaData GetActiveModWithIdentifier (string identifier, bool ignorePostfix = false)

Arbarbonif commented 1 year ago

From the main page in Rimworld: Version 1.4.3580 (64 bit) Compiled Dec 16 2022 This is the latest version Harmony: Lib v2.2.2.0. Mod v1.5.0.0

I don't get a mod settings page in game, it is blank. What appears to be the settings file is :

<?xml version="1.0" encoding="utf-8"?>
<SettingsBlock>
    <ModSettings Class="LWM.DeepStorage.Settings">
        <robotsCanUse>False</robotsCanUse>
        <useRightClickLogic>False</useRightClickLogic>
    </ModSettings>
</SettingsBlock>

I tried adding a checkOverCapacity, but I'm guessing that wasn't right since it was removed on restart...

From the decompiler: // Assembly-CSharp, Version=1.4.8385.38825, Culture=neutral, PublicKeyToken=null // Verse.ModLister using System.Collections.Generic;

public static ModMetaData GetActiveModWithIdentifier(string identifier, bool ignorePostfix = false) { Dictionary<string, List> dictionary = (ignorePostfix ? modsByPackageIdIgnorePostfix : modsByPackageId); if (!dictionary.ContainsKey(identifier)) { return null; } foreach (ModMetaData item in dictionary[identifier]) { if (item.Active) { return item; } } return null; }

lilwhitemouse commented 1 year ago

I tried adding a checkOverCapacity, but I'm guessing that wasn't right since it was removed on restart...

Cute! check_over_capacity as it happens (set to False)

What error does it throw when you try to open the mod settings? I hope you get an error....

This is very odd, and I'm trying to think of what might be going on...

lilwhitemouse commented 1 year ago

Okay, my best guess as what is happening: something has an old .dll lying around and that old .dll is very old. And it's getting referenced before the newer one, so when we look for the newer methods, it's failing because it's finding the old ones. One thing you could do is try removing a bunch of your mods and restarting the game, looking for "LWM: Deep Storage: harmony transpiler fail: no CompareThingsByDrawAltitude " and "[LWM_DeepStorage][ERR] Failed to apply Harmony patches for LWM.DeepStorage.[...]" Then look in that mod's folders for an old .dll of some sort?

You might also try moving Deep Storage to near the top of the mod list?

Very weird

Arbarbonif commented 1 year ago

When opening the mod settings with dev mode on I get the following in the log

Message logging is now once again on. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) Verse.Log:ResetMessageCount () Verse.Log:Clear () Verse.EditWindow_Log:DoWindowContents (UnityEngine.Rect) Verse.Window:InnerWindowOnGUI (int) UnityEngine.GUI:CallWindowDelegate (UnityEngine.GUI/WindowFunction,int,int,UnityEngine.GUISkin,int,single,single,UnityEngine.GUIStyle)

Exception filling window for RimWorld.Dialog_ModSettings: System.MissingMethodException: void Verse.Listing_Standard.CheckboxLabeled(string,bool&,string) at LWM.DeepStorage.DeepStorageMod.DoSettingsWindowContents (UnityEngine.Rect inRect) [0x00000] in :0 at RimWorld.Dialog_ModSettings.DoWindowContents (UnityEngine.Rect inRect) [0x00073] in <0aa5ff10b5a84f7da48080504cb32469>:0 at Verse.Window.InnerWindowOnGUI (System.Int32 x) [0x001d3] in <0aa5ff10b5a84f7da48080504cb32469>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Error (string) Verse.Window:InnerWindowOnGUI (int) UnityEngine.GUI:CallWindowDelegate (UnityEngine.GUI/WindowFunction,int,int,UnityEngine.GUISkin,int,single,single,UnityEngine.GUIStyle)

If I moved Deep Storage immediately below hubslib, same thing. If I move it above hugslib it looks like it doesn't load at all, no config menu at all. I'll try removing everything but deep storage, harmony and hugslib and see if it is any different. Last time I tried that it still didn't work...

Arbarbonif commented 1 year ago

Still didn't work. log on start: Command line arguments: -savedatafolder=C:\Users\KGB\AppData\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) Verse.Root:CheckGlobalInit () Verse.Root:Start () Verse.Root_Entry:Start ()

RimWorld 1.4.3580 rev1294 UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) RimWorld.VersionControl:LogVersionNumber () Verse.Root:CheckGlobalInit () Verse.Root:Start () Verse.Root_Entry:Start ()

Save data folder overridden to C:\Users\KGB\AppData\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) Verse.GenFilePaths:get_SaveDataFolderPath () Verse.GenFilePaths:FolderUnderSaveData (string) Verse.GenFilePaths:get_ConfigFolderPath () Verse.GenFilePaths:get_PrefsFilePath () Verse.Prefs:Init () Verse.Root:CheckGlobalInit () Verse.Root:Start () Verse.Root_Entry:Start ()

[HugsLib] version 10.0.1 UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) HugsLib.Utils.ModLogger:Message (string,object[]) HugsLib.HugsLibController:InitializeController () HugsLib.HugsLibController:EarlyInitialize () HugsLib.Core.HugsLibMod:.ctor (Verse.ModContentPack) System.Reflection.MonoCMethod:InternalInvoke (object,object[]) System.Reflection.MonoCMethod:DoInvoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) System.Reflection.MonoCMethod:Invoke (System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) System.RuntimeType:CreateInstanceImpl (System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Threading.StackCrawlMark&) System.Activator:CreateInstance (System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[]) System.Activator:CreateInstance (System.Type,object[]) Verse.LoadedModManager:CreateModClasses () Verse.LoadedModManager:LoadAllActiveMods () Verse.PlayDataLoader:DoPlayLoad () Verse.PlayDataLoader:LoadAllPlayData (bool) Verse.Root/<>c:b__6_1 () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:b__27_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart ()

[UnlimitedHugs.HugsLib] Patches on methods annotated as Obsolete were detected by HugsLib: Verse.Game.DeinitAndRemoveMap UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) HugsLib.Utils.HarmonyUtility:LogObsoleteMethodPatchErrors () HugsLib.Utils.HarmonyUtility:LogHarmonyPatchIssueErrors () Verse.LongEventHandler:ExecuteToExecuteWhenFinished () Verse.LongEventHandler:UpdateCurrentAsynchronousEvent () Verse.LongEventHandler:LongEventsUpdate (bool&) (wrapper dynamic-method) Verse.Root:Verse.Root.Update_Patch1 (Verse.Root) Verse.Root_Entry:Update ()

LWM: Deep Storage: harmony transpiler fail: no CompareThingsByDrawAltitude UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Error (string) LWM.DeepStorage.Patch_GenUI_ThingsUnderMouse/d0:MoveNext () System.Collections.Generic.List1<HarmonyLib.CodeInstruction>:.ctor (System.Collections.Generic.IEnumerable1) System.Linq.Enumerable:ToList (System.Collections.Generic.IEnumerable1<HarmonyLib.CodeInstruction>) HarmonyLib.CodeTranspiler:GetResult (System.Reflection.Emit.ILGenerator,System.Reflection.MethodBase) HarmonyLib.MethodBodyReader:FinalizeILCodes (HarmonyLib.Emitter,System.Collections.Generic.List1,System.Collections.Generic.List1<System.Reflection.Emit.Label>,bool&) HarmonyLib.MethodCopier:Finalize (HarmonyLib.Emitter,System.Collections.Generic.List1,bool&) HarmonyLib.MethodPatcher:CreateReplacement (System.Collections.Generic.Dictionary2<int, HarmonyLib.CodeInstruction>&) HarmonyLib.PatchFunctions:UpdateWrapper (System.Reflection.MethodBase,HarmonyLib.PatchInfo) HarmonyLib.PatchClassProcessor:ProcessPatchJob (HarmonyLib.PatchJobs1/Job) HarmonyLib.PatchClassProcessor:PatchWithAttributes (System.Reflection.MethodBase&) HarmonyLib.PatchClassProcessor:Patch () HarmonyLib.Harmony:b10_0 (System.Type) HarmonyLib.CollectionExtensions:Do (System.Collections.Generic.IEnumerable1<System.Type>,System.Action1) HarmonyLib.Harmony:PatchAll (System.Reflection.Assembly) HugsLib.ModBase:ApplyHarmonyPatches () HugsLib.HugsLibController:EnumerateChildMods (bool) HugsLib.HugsLibController:LoadReloadInitialize () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:b__27_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart ()

[LWM_DeepStorage][ERR] Failed to apply Harmony patches for LWM.DeepStorage. Exception was: HarmonyLib.HarmonyException: Patching exception in method static System.Boolean LWM.DeepStorage.Patch_TryFindBestBetterStoreCellFor::Prepare() ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.MissingMethodException: Verse.ModMetaData Verse.ModLister.GetActiveModWithIdentifier(string) at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in :0 --- End of inner exception stack trace --- at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in :0 at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in :0 at HarmonyLib.PatchClassProcessor.RunMethod[S,T] (T defaultIfNotExisting, T defaultIfFailing, System.Func2[T,TResult] failOnResult, System.Object[] parameters) [0x000e2] in <255414689d344b1385ae719f6cce8c55>:0 --- End of inner exception stack trace --- at HarmonyLib.PatchClassProcessor.ReportException (System.Exception exception, System.Reflection.MethodBase original) [0x00127] in <255414689d344b1385ae719f6cce8c55>:0 at HarmonyLib.PatchClassProcessor.RunMethod[S,T] (T defaultIfNotExisting, T defaultIfFailing, System.Func2[T,TResult] failOnResult, System.Object[] parameters) [0x00121] in <255414689d344b1385ae719f6cce8c55>:0 at HarmonyLib.PatchClassProcessor.Patch () [0x00015] in <255414689d344b1385ae719f6cce8c55>:0 at HarmonyLib.Harmony.b__10_0 (System.Type type) [0x00007] in <255414689d344b1385ae719f6cce8c55>:0 at HarmonyLib.CollectionExtensions.Do[T] (System.Collections.Generic.IEnumerable1[T] sequence, System.Action1[T] action) [0x00014] in <255414689d344b1385ae719f6cce8c55>:0 at HarmonyLib.Harmony.PatchAll (System.Reflection.Assembly assembly) [0x00006] in <255414689d344b1385ae719f6cce8c55>:0 at HugsLib.ModBase.ApplyHarmonyPatches () [0x0009a] in <4a46802aeab646ab99159f7eecb6b57e>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Error (string) HugsLib.Utils.ModLogger:Error (string,object[]) HugsLib.ModBase:ApplyHarmonyPatches () HugsLib.HugsLibController:EnumerateChildMods (bool) HugsLib.HugsLibController:LoadReloadInitialize () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:b__27_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart ()

[HugsLib] initializing LWM_DeepStorage UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) HugsLib.Utils.ModLogger:Message (string,object[]) HugsLib.HugsLibController:EnumerateChildMods (bool) HugsLib.HugsLibController:LoadReloadInitialize () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:b__27_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart ()

[HugsLib][ERR] LWM_DeepStorage caused an exception during OnDefsLoaded: System.MissingMethodException: Verse.ModMetaData Verse.ModLister.GetActiveModWithIdentifier(string) at LWM.DeepStorage.Settings.DefsLoaded () [0x00096] in :0 at LWM.DeepStorage.LWM_Hug.DefsLoaded () [0x00005] in :0 at HugsLib.HugsLibController.OnDefsLoaded () [0x0001a] in <4a46802aeab646ab99159f7eecb6b57e>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Error (string) HugsLib.Utils.ModLogger:ReportException (System.Exception,string,bool,string) HugsLib.HugsLibController:OnDefsLoaded () HugsLib.HugsLibController:LoadReloadInitialize () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:b__27_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart ()

Arbarbonif commented 1 year ago

Dust off and nuke the place from orbit; it's the only way to be sure.

Deleting and reinstalling everything, including re-downloading all my mods, and it looks to be working now. No idea what was the problem, but that looks to have fixed it. Rimworld is even starting cleanly with no error messages now, so it might have even fixed other things I never noticed...

lilwhitemouse commented 1 year ago

:laughing: Well, "corrupted game files" is certainly something that could cause all that! I did say "weird!"

Well, glad it's working :D Give a shout if anything else comes up!