From c5864ad2e4aac4572eba5469978a3b1d66f5d681 Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 5 Mar 2025 13:20:12 +0000 Subject: [PATCH] Refactored ragfair offer holder to pass offer id around instead of full offers Optimised removing player offer from cache --- .../Core/Services/RagfairOfferService.cs | 2 +- Libraries/Core/Utils/RagfairOfferHolder.cs | 31 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Libraries/Core/Services/RagfairOfferService.cs b/Libraries/Core/Services/RagfairOfferService.cs index dcf61482..1c4bfc7d 100644 --- a/Libraries/Core/Services/RagfairOfferService.cs +++ b/Libraries/Core/Services/RagfairOfferService.cs @@ -223,7 +223,7 @@ public class RagfairOfferService( playerOffer.Items[0].Upd.OriginalStackObjectsCount = null; // Remove player offer from flea - ragfairOfferHolder.RemoveOffer(playerOffer.Id); + ragfairOfferHolder.RemoveOffer(playerOffer.Id, false); // Send failed offer items to player in mail var unstackedItems = UnstackOfferItems(playerOffer.Items); diff --git a/Libraries/Core/Utils/RagfairOfferHolder.cs b/Libraries/Core/Utils/RagfairOfferHolder.cs index 6f90c113..7c43fc30 100644 --- a/Libraries/Core/Utils/RagfairOfferHolder.cs +++ b/Libraries/Core/Utils/RagfairOfferHolder.cs @@ -130,28 +130,27 @@ public class RagfairOfferHolder( offer.Id = hashUtil.Generate(); } - var offerId = offer.Id; var itemTpl = offer.Items?.FirstOrDefault()?.Template; // If it is an NPC PMC offer AND we have already reached the maximum amount of possible offers // for this template, just don't add in more var sellerIsTrader = ragfairServerHelper.IsTrader(sellerId); - if (itemTpl != null && - !(sellerIsTrader || profileHelper.IsPlayer(sellerId)) && - _offersByTemplate.TryGetValue(itemTpl, out var offers) && - offers?.Count >= _maxOffersPerTemplate + if (itemTpl != null + && !(sellerIsTrader || profileHelper.IsPlayer(sellerId)) + && _offersByTemplate.TryGetValue(itemTpl, out var offers) + && offers?.Count >= _maxOffersPerTemplate ) { return; } - _offersById.Add(offerId, offer); + _offersById.Add(offer.Id, offer); if (sellerIsTrader) { - AddOfferByTrader(sellerId, offer); + AddOfferByTrader(sellerId, offer.Id); } - AddOfferByTemplates(itemTpl, offer); + AddOfferByTemplates(itemTpl, offer.Id); } } @@ -227,18 +226,18 @@ public class RagfairOfferHolder( /// Add offer to offersByTemplate cache /// /// Tpl to store offer against - /// Offer to store against tpl - protected void AddOfferByTemplates(string template, RagfairOffer offer) + /// Offer to store against tpl + protected void AddOfferByTemplates(string template, string offerId) { lock (_offersByTemplateLock) { if (_offersByTemplate.ContainsKey(template)) { - _offersByTemplate[template].Add(offer.Id); + _offersByTemplate[template].Add(offerId); } else { - _offersByTemplate.Add(template, [offer.Id]); + _offersByTemplate.Add(template, [offerId]); } } } @@ -247,18 +246,18 @@ public class RagfairOfferHolder( /// Cache an offer inside `offersByTrader` by trader id /// /// Trader id to store offer against - /// Offer to store against - protected void AddOfferByTrader(string trader, RagfairOffer offer) + /// Offer to store against + protected void AddOfferByTrader(string trader, string offerId) { lock (_offersByTraderLock) { if (_offersByTrader.ContainsKey(trader)) { - _offersByTrader[trader].Add(offer.Id); + _offersByTrader[trader].Add(offerId); } else { - _offersByTrader.Add(trader, [offer.Id]); + _offersByTrader.Add(trader, [offerId]); } } }