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(); } }