Refactored ragfair offer holder to pass offer id around instead of full offers

Optimised removing player offer from cache
This commit is contained in:
Chomp
2025-03-05 13:20:12 +00:00
parent 4e5636179d
commit c5864ad2e4
2 changed files with 16 additions and 17 deletions
@@ -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);
+15 -16
View File
@@ -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
/// </summary>
/// <param name="template">Tpl to store offer against</param>
/// <param name="offer">Offer to store against tpl</param>
protected void AddOfferByTemplates(string template, RagfairOffer offer)
/// <param name="offerId">Offer to store against tpl</param>
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
/// </summary>
/// <param name="trader">Trader id to store offer against</param>
/// <param name="offer">Offer to store against</param>
protected void AddOfferByTrader(string trader, RagfairOffer offer)
/// <param name="offerId">Offer to store against</param>
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]);
}
}
}