From 9bdf371f5ec96dde4867507076889e403ee7fdc0 Mon Sep 17 00:00:00 2001 From: Abbysssal <55982389+Abbysssal@users.noreply.github.com> Date: Sun, 29 Aug 2021 21:19:57 +0700 Subject: [PATCH] fix #40 --- RogueLibsCore/Patches/Patches_Unlocks.cs | 57 +++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/RogueLibsCore/Patches/Patches_Unlocks.cs b/RogueLibsCore/Patches/Patches_Unlocks.cs index 41338a145..37c37d7c4 100644 --- a/RogueLibsCore/Patches/Patches_Unlocks.cs +++ b/RogueLibsCore/Patches/Patches_Unlocks.cs @@ -116,6 +116,7 @@ public static void InitializeUnlockWrappers() { if (unlock.onlyInCharacterCreation && !unlock.unavailable) unlock.unavailable = true; + if (!unlock.unavailable) unlock.onlyInCharacterCreation = true; wrapper = new TraitUnlock(unlock); } else if (unlock.unlockType == UnlockTypes.Ability) @@ -158,6 +159,25 @@ public static void InitializeUnlockWrappers() } } #pragma warning restore CS0618 // Type or member is obsolete + private static void ReverseRogueLibsEffects(Unlock unlock) + { + if (unlock.unlockType == UnlockTypes.Item) + { + if (unlock.unavailable && unlock.freeItem && unlock.onlyInCharacterCreation) + unlock.unavailable = false; + else if (unlock.unavailable && !unlock.freeItem && unlock.onlyInCharacterCreation) + unlock.unavailable = false; + else if (!unlock.unavailable && unlock.freeItem && unlock.onlyInCharacterCreation) + unlock.freeItem = unlock.onlyInCharacterCreation = false; + } + else if (unlock.unlockType == UnlockTypes.Trait) + { + if (!unlock.unavailable && unlock.onlyInCharacterCreation) + unlock.onlyInCharacterCreation = false; + if (unlock.unavailable && unlock.onlyInCharacterCreation) + unlock.unavailable = false; + } + } public static void AddUnlockFull(UnlockWrapper wrapper, bool alreadyLoaded = false) { try @@ -260,9 +280,12 @@ public static IEnumerator SaveEnumerator(Unlocks __instance) Directory.CreateDirectory(text + "/CloudData/"); } SessionDataBig sdb = GameController.gameController.sessionDataBig; + + List unlocks = sdb.unlocks.ConvertAll(CloneUnlock); + unlocks.ForEach(ReverseRogueLibsEffects); UnlockSaveData unlockSaveData = new UnlockSaveData { - unlocks = sdb.unlocks, + unlocks = unlocks, highScores = sdb.highScores, customCharacterSlots = sdb.customCharacterSlots, storedItem = sdb.storedItem, @@ -667,5 +690,37 @@ public static bool Unlocks_LoadUnlockData2(Unlocks __instance, bool secondTry, b } return false; } + + public static Unlock CloneUnlock(Unlock unlock) => new Unlock(unlock.unlockName, unlock.unlockType, unlock.unlocked) + { + __RogueLibsCustom = null, + agents = unlock.agents.ToList(), + cancellations = unlock.cancellations.ToList(), + cantLose = unlock.cantLose, + cantSwap = unlock.cantSwap, + categories = unlock.categories.ToList(), + cost = unlock.cost, + cost2 = unlock.cost2, + cost3 = unlock.cost3, + dcUnlock = unlock.dcUnlock, + freeItem = unlock.freeItem, + isUpgrade = unlock.isUpgrade, + leadingBigQuests = unlock.leadingBigQuests.ToList(), + leadingItems = unlock.leadingItems.ToList(), + leadingTraits = unlock.leadingTraits.ToList(), + notActive = unlock.notActive, + notOnClient = unlock.notOnClient, + nowAvailable = unlock.nowAvailable, + onlyInCharacterCreation = unlock.onlyInCharacterCreation, + prerequisites = unlock.prerequisites.ToList(), + progressCount = unlock.progressCount, + progressList = unlock.progressList.ToList(), + recommendations = unlock.recommendations.ToList(), + removal = unlock.removal, + replacing = unlock.replacing, + specialAbilities = unlock.specialAbilities.ToList(), + unavailable = unlock.unavailable, + upgrade = unlock.upgrade, + }; } }