From c8f73e72fa778f826f01dc70aa74afb09fe0db7b Mon Sep 17 00:00:00 2001 From: LWM Date: Tue, 30 Apr 2024 06:52:41 -0400 Subject: [PATCH] Functional Intial 1.5 branch --- DeepStorage/CompDeepStorage.cs | 93 ++++++--- DeepStorage/Deep_Storage_CanCarryItemsTo.cs | 12 +- DeepStorage/Dialog_CompSettings.cs | 182 +++++++++--------- DeepStorage/ModInit.cs | 3 +- DeepStorage/ModSettings.cs | 2 + .../Patch_Blueprint_Storage_MultipleTimes.cs | 2 + DeepStorage/Patch_Building_Storage_Gizmos.cs | 2 +- .../Patch_EditWindow_DebugInspector.cs | 2 +- DeepStorage/Patch_Frame_MultipleTimes.cs | 3 + DeepStorage/Patch_StorageGroupUtility.cs | 5 +- DeepStorage/StorageGroupUtility.cs | 2 +- .../1.5/Assemblies/LWM.DeepStorage.dll | Bin 0 -> 137216 bytes _Mod/LWM.DeepStorage/About/About.xml | 1 + _Mod/LWM.DeepStorage/About/Manifest.xml | 2 +- _Mod/LWM.DeepStorage/About/ModSync.xml | 2 +- .../English/Keyed/LWM.Settings.Keys.xml | 2 + 16 files changed, 191 insertions(+), 124 deletions(-) create mode 100644 _Mod/LWM.DeepStorage/1.5/Assemblies/LWM.DeepStorage.dll diff --git a/DeepStorage/CompDeepStorage.cs b/DeepStorage/CompDeepStorage.cs index dad97a0..e6f551a 100644 --- a/DeepStorage/CompDeepStorage.cs +++ b/DeepStorage/CompDeepStorage.cs @@ -13,16 +13,6 @@ namespace LWM.DeepStorage { public class CompDeepStorage : ThingComp, IExposable, IHoldMultipleThings.IHoldMultipleThings, IRenameable { - public string label = ""; - public string RenamableLabel - { - get => this.buildingLabel.NullOrEmpty() ? this.BaseLabel : this.buildingLabel; - set => this.label = value;TODO - } - - public string BaseLabel => this.parent.def.label.CapitalizeFirst(); - - public string InspectLabel => this.RenamableLabel; public override IEnumerable CompGetGizmosExtra() { foreach (Gizmo g in base.CompGetGizmosExtra()) { yield return g; @@ -321,14 +311,63 @@ public bool StackableAt(Thing thing, IntVec3 cell, Map map) { return map.GetComponent().CanStoreItemAt(this, thing, cell); //return this.CapacityToStoreThingAt(thing,map,cell) > 0; } + /****************************** IRenamable interface *****************************/ + /* Because the dev team copies my good ideas, so all the stuff I did to rename */ + /* groups of deep storage items might as well become part of IRenamable */ /*********************************************************************************/ - public override void PostExposeData() { // why not call it "ExposeData" anyway? + public string RenamableLabel + { + get => this.buildingLabel.NullOrEmpty() ? this.BaseLabel : this.buildingLabel; + set { + if (parent is IStorageGroupMember isgm) + { + if (isgm.Group == null) + { + + } + } + string newLabel = value ?? ""; + /* + if ((parent is IStorageGroupMember storage) && storage.Group != null) + { + foreach (var c in DSStorageGroupUtility.GetDSCompsFromGroup(storage.Group)) + { + c.SetLabelDirect(newLabel); + } + } + else SetLabelDirect(newLabel); + */ + } + } + + public string BaseLabel => this.parent.def.label.CapitalizeFirst(); + + public string InspectLabel => this.RenamableLabel; + + /*********************************************************************************/ + public override void PostExposeData() { // ExposeData from inside a ThingWithComps Scribe_Values.Look(ref buildingLabel, "LWM_DS_DSU_label", "", false); Scribe_Values.Look(ref maxNumberStacks, "LWM_DS_DSU_maxNumberStacks", null, false); } - public void ExposeData() // Because ExposeData is a special IExposable thing! + public void ExposeData() // ExposeData when the comp must be saved on its own { PostExposeData(); + Scribe_References.Look(ref parent, "LWM_DS_Comp_Parent"); + // Save def of compproperties: (otherwise, we won't have this info, because this doesn't come from a ThingWithComps) + string dn; + if (Scribe.mode == LoadSaveMode.Saving) + { + dn = CdsProps?.parent.defName; + Scribe_Values.Look(ref dn, "LWM_DS_Comp_CdsPropDefName"); + } + // When loading, LoadingVars is when we'll get the value from Look and we can properly + // set up the comp: + if (Scribe.mode == LoadSaveMode.LoadingVars) + { + dn = null; + Scribe_Values.Look(ref dn, "LWM_DS_Comp_CdsPropDefName"); + this.props = DefDatabase.GetNamed(dn).GetCompProperties(); + } } /********************** properties **********************/ public Properties CdsProps // b/c I hate typing :p @@ -345,7 +384,7 @@ public int MinNumberStacks } public int MaxNumberStacks { - get { + get { // Note: Will need a CalculatedMaxNumberStacks too if we ever let masterwork/legendary add more stacks return maxNumberStacks ?? ((Properties)this.props).maxNumberStacks; } set { @@ -374,25 +413,26 @@ public virtual bool ShowContents } } - public void SetLabel(string newLabel) +/* [Multiplayer.API.SyncMethod] + private void SetLabelDirect(string newLabel) + { + buildingLabel = newLabel; + } + */ + public void ResetSettings() { - if (newLabel == null) newLabel = ""; if ((parent is IStorageGroupMember storage) && storage.Group != null) { - foreach (var c in DSStorageGroupUtility.GetDSCompsFromGroup(storage.Group)) { - c.SetLabelDirect(newLabel); + foreach (var c in DSStorageGroupUtility.GetDSCompsFromGroup(storage.Group)) + { + c.ResetSettingsDirect(); } } - else SetLabelDirect(newLabel); - } - [Multiplayer.API.SyncMethod] - private void SetLabelDirect(string newLabel) - { - buildingLabel = newLabel; + else ResetSettingsDirect(); } [Multiplayer.API.SyncMethod] - public virtual void ResetSettings() + public void ResetSettingsDirect() { this.buildingLabel = ""; this.maxNumberStacks = null; @@ -401,8 +441,11 @@ public virtual void ResetSettings() public void CopySettingsFrom(CompDeepStorage other) { - SetLabelDirect(other.buildingLabel); + Log.Message("Is the other null?" + (other == null)); + Log.Message("If not: " + other.parent); +// SetLabelDirect(other.buildingLabel); SetMaxNumberStacksDirect(other.maxNumberStacks); + Log.Message("Pkay then"); } public string buildingLabel=""; diff --git a/DeepStorage/Deep_Storage_CanCarryItemsTo.cs b/DeepStorage/Deep_Storage_CanCarryItemsTo.cs index 465b4d7..0750aee 100644 --- a/DeepStorage/Deep_Storage_CanCarryItemsTo.cs +++ b/DeepStorage/Deep_Storage_CanCarryItemsTo.cs @@ -253,16 +253,18 @@ static bool Prepare(Harmony instance) static void Postfix(ref bool __result, IntVec3 c, Map map, Pawn carrier) { if (__result == false) return; + if (carrier?.RaceProps == null) return; // Don't know what it is, but let it pass + // If it's smart enough, don't bother looking further: + if (carrier.RaceProps.intelligence >= NecessaryIntelligenceToUseDeepStorage) + return; + if (specialTest != null && specialTest(carrier)) return; // passes specialTest? + // Check if deep storage restrictions even apply here - if it's to a regular shelf, // or to a stockpile, for example, we shouldn't be futzing with it: if (LWM.DeepStorage.Utils.CanStoreMoreThanOneThingAt(map, c)) - { + { // But if it IS in Deep Storage, we know it can't use it, so fail: __result = false; } - if (specialTest != null && specialTest(carrier)) return; // passes specialTest? - if (carrier?.RaceProps == null) return; - if (carrier.RaceProps.intelligence >= NecessaryIntelligenceToUseDeepStorage) - return; // smart enough to use whatever. return; } } diff --git a/DeepStorage/Dialog_CompSettings.cs b/DeepStorage/Dialog_CompSettings.cs index ea76d73..aa04d8a 100644 --- a/DeepStorage/Dialog_CompSettings.cs +++ b/DeepStorage/Dialog_CompSettings.cs @@ -8,30 +8,21 @@ namespace LWM.DeepStorage { - // ripped shamelessly from Dialog_RenameZone - // TODO: Why bother with dialog_rename? I have it all here; just remove other dialog // TODO: show new message for maxNumStacks changing -< - { - public Dialog_CompSettings(CompDeepStorage cds): base(cds) - { - this.cds = cds; - this.curName = cds.parent.Label; -===x==== // NOTE: Any changes that happen can be directed to the Comp - it'll handle any weird storage group things - public class Dialog_CompSettings : Dialog_Rename + public class Dialog_CompSettings : Dialog_RenameBuildingStorage_CreateNew { - public Dialog_CompSettings(ThingWithComps parent) + public Dialog_CompSettings(ThingWithComps parent) : base(parent as IStorageGroupMember) //public Dialog_CompSettings(CompDeepStorage cds, Thing parent = null) { this.cds = DSStorageGroupUtility.GetOrTryMakeCompFrom(parent); this.parent = parent; if (cds == null) return; - this.curName = cds.buildingLabel; - if (curName == "") curName = DSStorageGroupUtility.GetDefaultLabelFor(parent); // same as below - origName = curName; ->>>>x>>> 1.5-initial + if (!(parent is IStorageGroupMember)) + { + Log.Warning("LWM.DeepStorage: Dialog_CompSettings called but " + parent + " is not an IStorageGroupMember"); + return; + } } public override Vector2 InitialSize @@ -50,18 +41,18 @@ public override void PreOpen() { base.PreOpen(); if (cds == null) return; - this.curMaxNumStacks = cds.MaxNumberStacks; - this.curName = cds.buildingLabel; - if (curName == "") curName = DSStorageGroupUtility.GetDefaultLabelFor(parent); // same as below + this.curMaxNumStacks = cds.MaxNumberStacks; // TODO: maybe this should be different, in case we want to allow quality to affect MaxNumStacks? origName = curName; + origMaxNumStacks = curMaxNumStacks; } public override void DoWindowContents(Rect inRect) { if (cds == null) { Log.Error("CompDeepStorage is null - this should never happen"); - return; // TODO: make this say some error message? Maybe? + return; } + Rect tmpR; // Take "Enter" press and close window with it (as if pressed OK): bool pressedEnterForOkay = false; if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) @@ -88,36 +79,51 @@ public override void DoWindowContents(Rect inRect) { StorageGroup group = (parent as IStorageGroupMember)?.Group; // Earlier, I thought about having settings that could apply to only one group member.... // But it's better to tie all group settings together. - if (group != null) + if (group != null && group.MemberCount > 1) { - Rect r = new Rect(0, curY, frame.width, 46f); - Widgets.Label(r, "LWMDS_ApplyChangesToGroup".Translate(group.MemberCount)); - if (Mouse.IsOver(r)) + tmpR = new Rect(0, curY, frame.width, 25f); + Widgets.Label(tmpR, "LWMDS_ApplyChangesToGroup".Translate(group.MemberCount)); + if (Mouse.IsOver(tmpR)) { - TooltipHandler.TipRegion(r, "LWMDS_ApplyChangesToGroupDesc".Translate(group.MemberCount)); + TooltipHandler.TipRegion(tmpR, "LWMDS_ApplyChangesToGroupDesc".Translate(group.MemberCount)); } - curY += 50f; + curY += 30f; } Widgets.DrawLineHorizontal(0f, curY + 6f, frame.width - 10f); curY += 15f; ////////// Rename ////////// - // default button: - if (Widgets.ButtonText(new Rect(frame.width - 95f, curY, 45f, 23f), "Default".Translate(), - true, false, true)) + // NOte: this has to go first to keep focus when other buttons appeaer and disappear + string newName = Widgets.TextEntryLabeled(new Rect(0f, curY, frame.width - 100f, 23f), + "Rename".Translate(), curName); + if (newName.Length < this.MaxNameLength) { - this.curName = ""; + this.curName = newName; } - // reset name button: - if (Widgets.ButtonText(new Rect(frame.width - 45f, curY, 45f, 23f), "ResetButton".Translate(), - true, false, true)) + // default/remove button: + if (group != null) { - this.SetName(""); + tmpR = new Rect(frame.width - 95f, curY, 45f, 23f); + if (Mouse.IsOver(tmpR)) + { + // TODO: tooltips for different numbers of groups? + TooltipHandler.TipRegion(tmpR, "LWMDS_DefaultRemoveNameDesc".Translate()); + } + if (Widgets.ButtonText(tmpR, group.MemberCount > 1 ? "Default".Translate() : "LWMDS_Remove".Translate(), + true, false, true)) + { + RemoveName(); // TODO: Make "default" option not do anything immediately - make it change curName + } } - string newName = Widgets.TextEntryLabeled(new Rect(0f, curY, frame.width-100f, 23f), - "CommandRenameZoneLabel".Translate(), curName); - if (newName.Length < this.MaxNameLength) + // If names aren't the same and they aren't both empty: + if (origName != curName && !(origName.NullOrEmpty() && curName.NullOrEmpty())) { - this.curName = newName; + // reset name button: + tmpR = new Rect(frame.width - 45f, curY, 45f, 23f); + if (Widgets.ButtonText(tmpR, "ResetButton".Translate(), + true, false, true)) + { + curName = origName; + } } curY += 28; ///////// max number stacks //////// //TODO: Should this lists total number for the group? YES @@ -127,35 +133,33 @@ public override void DoWindowContents(Rect inRect) { Widgets.Label(0f, ref curY, frame.width, "LWMDS_DefaultMaxNumStacksTotals" .Translate(cds.CdsProps.maxNumberStacks, cds.CdsProps.maxNumberStacks * parent.OccupiedRect().Cells.EnumerableCount())); + //// text box to change: + string tmpString = curMaxNumStacks.ToString(); + // Set min of 0 and max of 1024, because why not? + Widgets.TextFieldNumericLabeled(new Rect(0, curY, frame.width - 100f, 46f), "LWM_DS_maxNumStacks".Translate(), + ref curMaxNumStacks, ref tmpString, 0, 1024); //// default button: - if (Widgets.ButtonText(new Rect(frame.width - 95f, curY, 45f, 23f), "Default".Translate(), + if (curMaxNumStacks != cds.CdsProps.maxNumberStacks && Widgets.ButtonText(new Rect(frame.width - 95f, curY, 45f, 23f), "Default".Translate(), true, false, true)) { this.curMaxNumStacks = cds.CdsProps.maxNumberStacks; } //// reset button: - if (Widgets.ButtonText(new Rect(frame.width - 45f, curY, 45f, 23f), "ResetButton".Translate(), + if ((curMaxNumStacks != origMaxNumStacks) && Widgets.ButtonText(new Rect(frame.width - 45f, curY, 45f, 23f), "ResetButton".Translate(), true, false, true)) { - curMaxNumStacks = cds.CdsProps.maxNumberStacks; - // TODO: make this a separate method with a message? - foreach (var oc in CompsToApplyChangeTo(true)) - oc.MaxNumberStacks = curMaxNumStacks; + curMaxNumStacks = origMaxNumStacks; } - //// text box to change: - string tmpString = curMaxNumStacks.ToString(); - // Set min of 0 and max of 1024, because why not? - Widgets.TextFieldNumericLabeled(new Rect(0, curY, frame.width-100f, 46f), "LWM_DS_maxNumStacks".Translate(), - ref curMaxNumStacks, ref tmpString, 0, 1024); curY += 50f; - /////////////////////////// RESET & OK buttons //////////////////////////// + /////////////////////////// DEFAULT & OK buttons //////////////////////////// // OK: if (Widgets.ButtonText(new Rect(15f, inRect.height - 35f - 15f, inRect.width - 15f - 15f, 35f), "OK", true, true, true, null) || pressedEnterForOkay) { AcceptanceReport acceptanceReport = this.NameIsValid(this.curName); - if (!acceptanceReport.Accepted) + // If the name is something and it's bad and the name has changed, then we complain: + if (!curName.NullOrEmpty() && !acceptanceReport.Accepted && !(curName == origName)) { if (acceptanceReport.Reason.NullOrEmpty()) { @@ -166,59 +170,61 @@ public override void DoWindowContents(Rect inRect) { } else { + Log.Warning("Setting max num stacks to " + curMaxNumStacks); cds.MaxNumberStacks = curMaxNumStacks; - this.SetName(this.curName); + OnRenamed(curName); Find.WindowStack.TryRemove(this, true); } - } // and Reset: - else if (Widgets.ButtonText(new Rect(15f, inRect.height -35f -15f -50f, inRect.width-15f-15f, 35f), "ResetButton".Translate(), + } // and DEFAULT: + else if (Widgets.ButtonText(new Rect(15f, inRect.height -35f -15f -50f, inRect.width-15f-15f, 35f), "Default".Translate(), true,false,true)) { - this.SetName(""); - foreach (var oc in CompsToApplyChangeTo()) - { - oc.ResetSettings(); - } + RemoveName(); + cds.ResetSettings(); Find.WindowStack.TryRemove(this, true); } GUI.EndGroup(); // very important for this to be called } - // ... Actually, whatever, name it whatever you want. - // But use "" to reset to default. - protected override AcceptanceReport NameIsValid(string name) + + protected override void OnRenamed(string name) { - if (name.Length == 0) return true; - AcceptanceReport result = base.NameIsValid(name); - if (!result.Accepted) + if (origName == curName) return; + if (origName.NullOrEmpty() && curName.NullOrEmpty()) return; + if (curName.NullOrEmpty()) + { + RemoveName(); + return; + } + // Why Ludeon made two separate Dialogs instead of one that handles the _CreateNew option + // inside OnRenamed is beyond me. But whatever. + if ((parent as IStorageGroupMember).Group == null) + { + base.OnRenamed(name); + } + else { - return result; + (parent as IStorageGroupMember).Group.RenamableLabel = name; } - return true; } - - protected void SetName(string name) + void RemoveName() { - if (name != origName) + var t = parent as IStorageGroupMember; + if (t.Group == null) return; + if (t.Group.MemberCount == 1) { - if (name == "") - { - Messages.Message("LWM_DSU_DefaultName".Translate(DSStorageGroupUtility.GetDefaultLabelFor(parent)), - MessageTypeDefOf.TaskCompletion, false); - } - else - { - Messages.Message("LWM_DSU_GainsName".Translate(DSStorageGroupUtility.GetDefaultLabelFor(parent), name), - MessageTypeDefOf.TaskCompletion, false); - } - - origName = name; + curName = ""; + origName = curName; + t.SetStorageGroup(null); + return; } - - // SetLabel sets the label for the entire storage group: - this.cds.SetLabel(name); + t.Group.RenamableLabel = null; // Remove the current name before trying to get next avaiable name + // (otherwise, Group 4, Group 5, Group 4, Group 5, &c + t.Group.RenamableLabel = StorageGroupManager.NewStorageName(t.Group.BaseLabel); + curName = t.Group.RenamableLabel; + origName = curName; } - + /* IEnumerable CompsToApplyChangeTo(bool includeThisOne = true) { if ((parent as IStorageGroupMember)?.Group == null) { @@ -237,6 +243,7 @@ IEnumerable CompsToApplyChangeTo(bool includeThisOne = true) } } } + */ // TODO: Make a nice button, eh? // override InitialSize to make it bigger @@ -247,6 +254,7 @@ IEnumerable CompsToApplyChangeTo(bool includeThisOne = true) // Dialog_Rename has curName private string origName = ""; - protected int curMaxNumStacks; + private int curMaxNumStacks; + private int origMaxNumStacks; } } diff --git a/DeepStorage/ModInit.cs b/DeepStorage/ModInit.cs index f8bb394..fb91ddf 100644 --- a/DeepStorage/ModInit.cs +++ b/DeepStorage/ModInit.cs @@ -7,10 +7,11 @@ namespace LWM.DeepStorage { [StaticConstructorOnStartup] public static class ModInit { static ModInit() { - Log.Message("LWM Update: stable(ish) 1.5"); + Log.Message("LWM Update: stable(ish) 1.5.0.1"); // Thanks to Static Constructor On Startup, all defs should be loaded now RemoveAnyMultipleCompProps(); LWM.DeepStorage.Settings.DefsLoaded(); + if (ModLister.GetActiveModWithIdentifier("rwmt.Multiplayer") != null) Settings.multiplayerIsActive = true; // Can use this when pushing out changes to Steam, to make sure user-tester has // the correct version var harmony = new Harmony("net.littlewhitemouse.LWM.DeepStorage"); diff --git a/DeepStorage/ModSettings.cs b/DeepStorage/ModSettings.cs index d95b9be..adc55a3 100644 --- a/DeepStorage/ModSettings.cs +++ b/DeepStorage/ModSettings.cs @@ -38,6 +38,8 @@ public class Settings : ModSettings { public static bool allowPerDSUSettings = false; public static DefChangeTracker defTracker = new DefChangeTracker(); + public static bool multiplayerIsActive = false; + // Architect Menu: // The defName for the DesignationCategoryDef the mod items are in by default: //TODO: make this a tutorial, provide link. diff --git a/DeepStorage/Patch_Blueprint_Storage_MultipleTimes.cs b/DeepStorage/Patch_Blueprint_Storage_MultipleTimes.cs index 7fd4e57..7bcef32 100644 --- a/DeepStorage/Patch_Blueprint_Storage_MultipleTimes.cs +++ b/DeepStorage/Patch_Blueprint_Storage_MultipleTimes.cs @@ -14,11 +14,13 @@ namespace LWM.DeepStorage [HarmonyPatch(typeof(RimWorld.Blueprint_Storage), "MakeSolidThing")] public static class Patch_Blueprint_Storage_MakeSolidThing { + // __result here is the Frame public static void Postfix(Thing __result, Blueprint_Storage __instance) { if (__instance.Map.GetComponent().settingsForBlueprintsAndFrames.Remove(__instance,out CompDeepStorage comp)) { Utils.Mess(Utils.DBF.StorageGroup, "Blueprint_Storage " + __instance + " transferring settings to " + __result); + comp.parent = (ThingWithComps)__result; __instance.Map.GetComponent().settingsForBlueprintsAndFrames[(ThingWithComps)__result] = comp; } } diff --git a/DeepStorage/Patch_Building_Storage_Gizmos.cs b/DeepStorage/Patch_Building_Storage_Gizmos.cs index f01ef14..1ae2970 100644 --- a/DeepStorage/Patch_Building_Storage_Gizmos.cs +++ b/DeepStorage/Patch_Building_Storage_Gizmos.cs @@ -57,7 +57,7 @@ static bool Prepare(Harmony instance) catch (Exception e) { Log.Warning( - "LWM.DeepStorage: Transpiler could not find \"d__52\" :( -> skip Gizmos patch"); + "LWM.DeepStorage: Transpiler could not find \"d__52\" :( -> skip Gizmos patch: "+e); return false; } diff --git a/DeepStorage/Patch_EditWindow_DebugInspector.cs b/DeepStorage/Patch_EditWindow_DebugInspector.cs index bcffff1..acfb846 100644 --- a/DeepStorage/Patch_EditWindow_DebugInspector.cs +++ b/DeepStorage/Patch_EditWindow_DebugInspector.cs @@ -14,7 +14,7 @@ namespace LWM.DeepStorage * the Debug Inspector is being used */ #if DEBUG - [HarmonyPatch(typeof(Verse.EditWindow_DebugInspector), "CurrentDebugString")] + [HarmonyPatch(typeof(LudeonTK.EditWindow_DebugInspector), "CurrentDebugString")] public static class Patch_EditWindow_DebugInspector { public static string Postfix(string __result) diff --git a/DeepStorage/Patch_Frame_MultipleTimes.cs b/DeepStorage/Patch_Frame_MultipleTimes.cs index aed06fb..b7ee701 100644 --- a/DeepStorage/Patch_Frame_MultipleTimes.cs +++ b/DeepStorage/Patch_Frame_MultipleTimes.cs @@ -32,6 +32,8 @@ public static class Patch_Frame_CompleteConstruction static void Prefix(Frame __instance) { compDS = null; + if (__instance == null) Log.Error("null instance"); + if (__instance.Map == null) Log.Error("Null map for " + __instance); __instance.Map.GetComponent().settingsForBlueprintsAndFrames.Remove(__instance, out compDS); } static IEnumerable Transpiler(IEnumerable instructions) @@ -59,6 +61,7 @@ static void TransferCompData(Building_Storage storage, Frame frame) if (storage == null) return; // duplicate test that follows, because it's harder to inject code after test if (compDS != null) { + Log.Message("But...compds isn't null: " + compDS); Utils.Mess(Utils.DBF.StorageGroup, "Frame " + frame + (storage.TryGetComp() != null ? " transferring settings to new " + storage.ToString() : diff --git a/DeepStorage/Patch_StorageGroupUtility.cs b/DeepStorage/Patch_StorageGroupUtility.cs index b0781c1..fa468a9 100644 --- a/DeepStorage/Patch_StorageGroupUtility.cs +++ b/DeepStorage/Patch_StorageGroupUtility.cs @@ -24,7 +24,10 @@ public static void Prefix(StorageGroup newGroup, IStorageGroupMember member) Utils.Warn(Utils.DBF.StorageGroup, "SetStorageGroup for " + member + " to group that has: " + newGroup.members.Join()); var cds = DSStorageGroupUtility.GetOrTryMakeCompFromGroupMember(member); - if (cds != null && newGroup.members.Count > 0) + if (cds != null && newGroup.members.Count > 0 && + // Note: If member 0 is not spawned, then it's probably a frame or blueprint and we don't + // care because they have special logic elsewhere to transfer comp data to the new member + (newGroup.members[0] as Thing)?.Spawned == true) { Utils.Mess(Utils.DBF.StorageGroup, " Copying settings from " + newGroup.members[0]); cds.CopySettingsFrom(DSStorageGroupUtility.GetOrTryMakeCompFromGroupMember(newGroup.members[0])); diff --git a/DeepStorage/StorageGroupUtility.cs b/DeepStorage/StorageGroupUtility.cs index 9ffaf4b..4f7c14f 100644 --- a/DeepStorage/StorageGroupUtility.cs +++ b/DeepStorage/StorageGroupUtility.cs @@ -84,7 +84,7 @@ public static CompDeepStorage GetOrTryMakeCompFromGroupMember(IStorageGroupMembe } public static CompDeepStorage GetOrTryMakeCompFrom(ThingWithComps thing) { - Utils.Warn(Utils.DBF.StorageGroup, "Trying to get comp for " + (thing == null ? "NULL THING" : thing.ToString() + + Utils.MessQueue(Utils.DBF.StorageGroup, "Trying to get comp for " + (thing == null ? "NULL THING" : thing.ToString() + (thing.Spawned ? "; stored comps for: " + thing.Map.GetComponent().settingsForBlueprintsAndFrames. Keys.Join(k => k.ToString()) : ", which is not spawned"))); if (thing is Building_Storage) diff --git a/_Mod/LWM.DeepStorage/1.5/Assemblies/LWM.DeepStorage.dll b/_Mod/LWM.DeepStorage/1.5/Assemblies/LWM.DeepStorage.dll new file mode 100644 index 0000000000000000000000000000000000000000..151737901f72df7ec5b4e04d192e254ae6110ee1 GIT binary patch literal 137216 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 Pe@9^a|6%`bFz|l?Z7mjP literal 0 HcmV?d00001 diff --git a/_Mod/LWM.DeepStorage/About/About.xml b/_Mod/LWM.DeepStorage/About/About.xml index 5ea7ef3..e24da04 100644 --- a/_Mod/LWM.DeepStorage/About/About.xml +++ b/_Mod/LWM.DeepStorage/About/About.xml @@ -9,6 +9,7 @@
  • 1.2
  • 1.3
  • 1.4
  • +
  • 1.5
  • diff --git a/_Mod/LWM.DeepStorage/About/Manifest.xml b/_Mod/LWM.DeepStorage/About/Manifest.xml index 7c38d27..d8cd429 100644 --- a/_Mod/LWM.DeepStorage/About/Manifest.xml +++ b/_Mod/LWM.DeepStorage/About/Manifest.xml @@ -1,7 +1,7 @@ LWM'sDeepStorage - 1.4.1.2
  • PickUpAndHaul
  • diff --git a/_Mod/LWM.DeepStorage/About/ModSync.xml b/_Mod/LWM.DeepStorage/About/ModSync.xml index 72a61da..915caef 100644 --- a/_Mod/LWM.DeepStorage/About/ModSync.xml +++ b/_Mod/LWM.DeepStorage/About/ModSync.xml @@ -2,7 +2,7 @@ 95d051f8-00e2-42f5-b127-463a9880e037 LWM's Deep Storage - 1.4.1.2 + 1.5.0.1 False lilwhitemouse diff --git a/_Mod/LWM.DeepStorage/Languages/English/Keyed/LWM.Settings.Keys.xml b/_Mod/LWM.DeepStorage/Languages/English/Keyed/LWM.Settings.Keys.xml index 722b22f..ebdb888 100644 --- a/_Mod/LWM.DeepStorage/Languages/English/Keyed/LWM.Settings.Keys.xml +++ b/_Mod/LWM.DeepStorage/Languages/English/Keyed/LWM.Settings.Keys.xml @@ -76,6 +76,8 @@ These changes apply to all {0} members of the group This storage building is part of a group of {0} members - all of the members' settings will update to match these when you change them! Changing any of these settings will only affect THIS building (and its storage group, if it has one). All others will not be affected - if you want to change settings for all units of this type, use the Mod Options + Remove + This storage unit is part of a named group. If there is only one unit in the group, you can REMOVE the name here - it will no longer show up as a destination for bills. Otherwise, you may set the group to a DEFAULT name. Currently: {0} stacks/cell ({1} total) Default: {0} stacks/cell ({1} total)