From 6a7d49b679b3f09f75b0ededede2a840660f0146 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sat, 29 Nov 2025 12:28:27 -0800 Subject: [PATCH] fix: Fixes allocating CompactInfo when changing the weight of an item (#2282) ### Summary * Fixes extra allocations and computing weight values when changing the weight of an item. --- Projects/Server/Items/Item.cs | 36 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Projects/Server/Items/Item.cs b/Projects/Server/Items/Item.cs index fc07d6573..130ccb6f1 100644 --- a/Projects/Server/Items/Item.cs +++ b/Projects/Server/Items/Item.cs @@ -474,25 +474,27 @@ public partial class Item : IHued, IComparable, ISpawnable, IObjectPropert } set { - if (Weight != value) + var defaultWeight = DefaultWeight; + var info = LookupCompactInfo(); + var oldWeight = info is { m_Weight: >= 0 } ? info.m_Weight : defaultWeight; + + if (oldWeight == value) { - var info = AcquireCompactInfo(); - - var oldPileWeight = PileWeight; - - info.m_Weight = value; - - if (info.m_Weight < 0) - { - VerifyCompactInfo(); - } - - var newPileWeight = PileWeight; - - UpdateTotal(this, TotalType.Weight, newPileWeight - oldPileWeight); - - InvalidateProperties(); + return; } + + if (value < 0 || defaultWeight == value) + { + info?.m_Weight = -1; + VerifyCompactInfo(); + } + else + { + (info ?? AcquireCompactInfo()).m_Weight = value; + } + + UpdateTotal(this, TotalType.Weight, PileWeight - (int)Math.Ceiling(oldWeight * Amount)); + InvalidateProperties(); } }