Small optimisation of GetOffers()

Only process the paginated trader offers before sending to client
This commit is contained in:
Chomp
2025-06-07 10:40:27 +01:00
parent 5b29ce761b
commit e444a9a3b6
@@ -142,6 +142,7 @@ public class RagfairController
SelectedCategory = searchRequest.HandbookId
};
// Get all offers ready for sorting/filtering below
result.Offers = GetOffersForSearchType(searchRequest, itemsToAdd, traderAssorts, profile.CharacterData.PmcData);
// Client requested a category refresh
@@ -160,7 +161,16 @@ public class RagfairController
searchRequest.SortDirection.GetValueOrDefault(0)
);
// Match offers with quests and lock unfinished quests - get offers from traders
// Must occur prior to pagination
result.OffersCount = result.Offers.Count;
// Handle paging before returning results if searching for general items, not preset items
if (searchRequest.BuildCount == 0)
{
PaginateOffers(searchRequest, result);
}
// Update trader offers' values, Lock quest-linked offers + adjust offer buy limits
foreach (var traderOffer in result.Offers.Where(offer => _ragfairOfferHelper.OfferIsFromTrader(offer)))
{
// For the items, check the barter schemes. The method getDisplayableAssorts sets a flag sptQuestLocked
@@ -175,14 +185,6 @@ public class RagfairController
SetTraderOfferStackSize(traderOffer);
}
result.OffersCount = result.Offers.Count;
// Handle paging before returning results if searching for general items, not preset items
if (searchRequest.BuildCount == 0)
{
PaginateOffers(searchRequest, result);
}
return result;
}
@@ -219,7 +221,6 @@ public class RagfairController
endIndex = result.Offers.Count;
}
//result.Offers = result.Offers.Slice(start, end - start);
result.Offers = result.Offers.Skip(startIndex).Take(endIndex - startIndex).ToList();
}