From e1b7abe2d9597491cc2233c78fea1b2df6b66f21 Mon Sep 17 00:00:00 2001 From: Flipp Syder <76629141+vulppine@users.noreply.github.com> Date: Thu, 5 May 2022 22:25:59 -0700 Subject: [PATCH] Another quick fix for markings (#7966) --- Content.Client/Markings/MarkingsSystem.cs | 2 +- Content.Server/Database/ServerDbBase.cs | 1 - Content.Shared/Markings/MarkingsSet.cs | 33 ++++++++++++++--------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/Content.Client/Markings/MarkingsSystem.cs b/Content.Client/Markings/MarkingsSystem.cs index e54292edb4..c51f4e9759 100644 --- a/Content.Client/Markings/MarkingsSystem.cs +++ b/Content.Client/Markings/MarkingsSystem.cs @@ -74,7 +74,7 @@ namespace Content.Client.Markings // if the given marking isn't correctly formed, we need to // instead just allocate a new marking based on the old one - // with the correct sprite count + if (marking.MarkingColors.Count != markingPrototype.Sprites.Count) { marking = new Marking(marking.MarkingId, markingPrototype.Sprites.Count); diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index fba1bbe793..739f77abfd 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -175,7 +175,6 @@ namespace Content.Server.Database // ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract var markingsRaw = profile.Markings?.Deserialize>(); - profile.Markings?.Dispose(); List markings = new(); if (markingsRaw != null) diff --git a/Content.Shared/Markings/MarkingsSet.cs b/Content.Shared/Markings/MarkingsSet.cs index e47d5cd266..332df3538f 100644 --- a/Content.Shared/Markings/MarkingsSet.cs +++ b/Content.Shared/Markings/MarkingsSet.cs @@ -124,25 +124,34 @@ public class MarkingsSet : IEnumerable, IEquatable // Ensures that all markings in a set are valid. public static MarkingsSet EnsureValid(MarkingsSet set, MarkingManager? manager = null) { - if (manager == null) + IoCManager.Resolve(ref manager); + + for (var i = set._markings.Count - 1; i >= 0; i--) { - manager = IoCManager.Resolve(); + var marking = set._markings[i]; + if (manager.IsValidMarking(marking, out var markingProto)) + { + if (marking.MarkingColors.Count != markingProto.Sprites.Count) + { + set._markings[i] = new Marking(marking.MarkingId, markingProto.Sprites.Count); + } + } + else + { + set._markings.RemoveAt(i); + } } - var newList = set._markings.Where(marking => manager.Markings().ContainsKey(marking.MarkingId)).ToList(); - - set._markings = newList; - return set; } // Filters out markings based on species. - public static MarkingsSet FilterSpecies(MarkingsSet set, string species) + public static MarkingsSet FilterSpecies(MarkingsSet set, string species, MarkingManager? manager = null) { - var _markingsManager = IoCManager.Resolve(); + IoCManager.Resolve(ref manager); var newList = set._markings.Where(marking => { - if (!_markingsManager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? prototype)) + if (!manager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? prototype)) { return false; } @@ -164,14 +173,14 @@ public class MarkingsSet : IEnumerable, IEquatable } // Processes a MarkingsSet using the given dictionary of MarkingPoints. - public static MarkingsSet ProcessPoints(MarkingsSet set, Dictionary points) + public static MarkingsSet ProcessPoints(MarkingsSet set, Dictionary points, MarkingManager? manager = null) { + IoCManager.Resolve(ref manager); var finalSet = new List(); - var _markingsManager = IoCManager.Resolve(); foreach (var marking in set) { - if (_markingsManager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? markingPrototype)) + if (manager.Markings().TryGetValue(marking.MarkingId, out MarkingPrototype? markingPrototype)) { if (points.TryGetValue(markingPrototype.MarkingCategory, out var pointsRemaining)) {