From a1dffd10cef9de77944bc26db4dee5b845af080f Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Fri, 17 Nov 2023 00:04:46 -0800 Subject: [PATCH] fix: Acquired recipes are now a Set (#1596) --- Projects/UOContent/Mobiles/PlayerMobile.cs | 42 +++++++++---------- .../UOContent/Skills/Tracking/Tracking.cs | 2 +- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/Projects/UOContent/Mobiles/PlayerMobile.cs b/Projects/UOContent/Mobiles/PlayerMobile.cs index 75e638baa..64f1cdd47 100644 --- a/Projects/UOContent/Mobiles/PlayerMobile.cs +++ b/Projects/UOContent/Mobiles/PlayerMobile.cs @@ -144,7 +144,7 @@ namespace Server.Mobiles new(268, 624, 15) }; - private Dictionary m_AcquiredRecipes; + private HashSet _acquiredRecipes; private HashSet _allFollowers; private int m_BeardModID = -1, m_BeardModHue; @@ -719,7 +719,7 @@ namespace Server.Mobiles : DateTime.MinValue; [CommandProperty(AccessLevel.GameMaster)] - public int KnownRecipes => m_AcquiredRecipes?.Count ?? 0; + public int KnownRecipes => _acquiredRecipes?.Count ?? 0; [CommandProperty(AccessLevel.Counselor, canModify: true)] public VirtueContext Virtues => VirtueSystem.GetOrCreateVirtues(this); @@ -2852,6 +2852,7 @@ namespace Server.Mobiles switch (version) { + case 34: // Acquired Recipes is now a Set case 33: // Removes champion title case 32: // Removes virtue properties case 31: // Removed Short/Long Term Elapse @@ -2902,14 +2903,14 @@ namespace Server.Mobiles if (recipeCount > 0) { - m_AcquiredRecipes = new Dictionary(); + _acquiredRecipes = new HashSet(); for (var i = 0; i < recipeCount; i++) { var r = reader.ReadInt(); - if (reader.ReadBool()) // Don't add in recipes which we haven't gotten or have been removed + if (version > 33 || reader.ReadBool()) // Don't add in recipes which we haven't gotten or have been removed { - m_AcquiredRecipes.Add(r, true); + _acquiredRecipes.Add(r); } } } @@ -3195,7 +3196,7 @@ namespace Server.Mobiles { base.Serialize(writer); - writer.Write(33); // version + writer.Write(34); // version if (Stabled == null) { @@ -3235,18 +3236,17 @@ namespace Server.Mobiles writer.Write(AutoStabled); } - if (m_AcquiredRecipes == null) + if (_acquiredRecipes == null) { writer.Write(0); } else { - writer.Write(m_AcquiredRecipes.Count); + writer.Write(_acquiredRecipes.Count); - foreach (var kvp in m_AcquiredRecipes) + foreach (var recipeId in _acquiredRecipes) { - writer.Write(kvp.Key); - writer.Write(kvp.Value); + writer.Write(recipeId); } } @@ -4458,12 +4458,11 @@ namespace Server.Mobiles InvalidateProperties(); } - public virtual bool HasRecipe(Recipe r) => r != null && HasRecipe(r.ID); + public bool HasRecipe(Recipe r) => r != null && HasRecipe(r.ID); - public virtual bool HasRecipe(int recipeID) => - m_AcquiredRecipes != null && m_AcquiredRecipes.TryGetValue(recipeID, out var value) && value; + public bool HasRecipe(int recipeID) => _acquiredRecipes?.Contains(recipeID) == true; - public virtual void AcquireRecipe(Recipe r) + public void AcquireRecipe(Recipe r) { if (r != null) { @@ -4471,16 +4470,15 @@ namespace Server.Mobiles } } - public virtual void AcquireRecipe(int recipeID) + public void AcquireRecipe(int recipeID) { - m_AcquiredRecipes ??= new Dictionary(); - m_AcquiredRecipes[recipeID] = true; + _acquiredRecipes ??= new HashSet(); + _acquiredRecipes.Add(recipeID); } - public virtual void ResetRecipes() - { - m_AcquiredRecipes = null; - } + public void RemoveRecipe(int recipeID) => _acquiredRecipes?.Remove(recipeID); + + public void ResetRecipes() => _acquiredRecipes = null; public void ResendBuffs() { diff --git a/Projects/UOContent/Skills/Tracking/Tracking.cs b/Projects/UOContent/Skills/Tracking/Tracking.cs index de2cc5709..c59c19d13 100644 --- a/Projects/UOContent/Skills/Tracking/Tracking.cs +++ b/Projects/UOContent/Skills/Tracking/Tracking.cs @@ -323,7 +323,7 @@ namespace Server.SkillHandlers chance = 100; } - return chance > Utility.Random(100); + return chance >= 100 || chance > Utility.Random(100); } private static bool IsValidMobileType(Mobile m, int type) =>