Fixed flea offers not reducing quantity after purchase
This commit is contained in:
@@ -59,7 +59,7 @@ public class TradeController(
|
||||
{
|
||||
var foundInRaid = _traderConfig.PurchasesAreFoundInRaid;
|
||||
var buyData = (ProcessBuyTradeRequestData) request;
|
||||
_tradeHelper.buyItem(pmcData, buyData, sessionID, foundInRaid, output);
|
||||
_tradeHelper.BuyItem(pmcData, buyData, sessionID, foundInRaid, output);
|
||||
|
||||
return output;
|
||||
}
|
||||
@@ -139,7 +139,7 @@ public class TradeController(
|
||||
/// <param name="sessionId">Session id</param>
|
||||
/// <param name="pmcData">Player profile</param>
|
||||
/// <param name="fleaOffer">Offer being purchased</param>
|
||||
/// <param name="offerRequest">request data from client</param>
|
||||
/// <param name="requestOffer">request data from client</param>
|
||||
/// <param name="output">Output to send back to client</param>
|
||||
private void BuyTraderItemFromRagfair(
|
||||
string sessionId,
|
||||
@@ -162,6 +162,10 @@ public class TradeController(
|
||||
return;
|
||||
}
|
||||
|
||||
// Reduce flea offer quantity
|
||||
fleaOffer.Quantity -= requestOffer.Count;
|
||||
|
||||
// Trigger purchase of item from trader
|
||||
var buyData = new ProcessBuyTradeRequestData
|
||||
{
|
||||
Action = "TradingConfirm",
|
||||
@@ -172,8 +176,7 @@ public class TradeController(
|
||||
SchemeId = 0,
|
||||
SchemeItems = requestOffer.Items
|
||||
};
|
||||
|
||||
_tradeHelper.buyItem(pmcData, buyData, sessionId, _traderConfig.PurchasesAreFoundInRaid, output);
|
||||
_tradeHelper.BuyItem(pmcData, buyData, sessionId, _traderConfig.PurchasesAreFoundInRaid, output);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -182,7 +185,7 @@ public class TradeController(
|
||||
/// <param name="sessionId">Session id</param>
|
||||
/// <param name="pmcData">Player profile</param>
|
||||
/// <param name="fleaOffer">Offer being purchased</param>
|
||||
/// <param name="offerRequest">request data from client</param>
|
||||
/// <param name="requestOffer">request data from client</param>
|
||||
/// <param name="output">Output to send back to client</param>
|
||||
private void BuyPmcItemFromRagfair(
|
||||
string sessionId,
|
||||
@@ -203,20 +206,19 @@ public class TradeController(
|
||||
};
|
||||
|
||||
// buyItem() must occur prior to removing the offer stack, otherwise item inside offer doesn't exist for confirmTrading() to use
|
||||
_tradeHelper.buyItem(pmcData, buyData, sessionId, _ragfairConfig.Dynamic.PurchasesAreFoundInRaid, output);
|
||||
_tradeHelper.BuyItem(pmcData, buyData, sessionId, _ragfairConfig.Dynamic.PurchasesAreFoundInRaid, output);
|
||||
if (output.Warnings?.Count > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// resolve when a profile buy another profile's offer
|
||||
var offerOwnerId = fleaOffer.User?.Id;
|
||||
var offerOwnerId = fleaOffer.User.Id;
|
||||
var offerBuyCount = requestOffer.Count;
|
||||
|
||||
var isPlayerOffer = IsPlayerOffer(fleaOffer.Id, fleaOffer.User?.Id);
|
||||
if (isPlayerOffer)
|
||||
if (IsPlayerOffer(fleaOffer.Id, fleaOffer.User?.Id))
|
||||
{
|
||||
// Complete selling the offer now its been purchased
|
||||
// Complete selling the offer now it has been purchased
|
||||
_ragfairOfferHelper.CompleteOffer(offerOwnerId, fleaOffer, offerBuyCount ?? 0);
|
||||
|
||||
return;
|
||||
@@ -227,7 +229,7 @@ public class TradeController(
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Is the provided offerid and ownerid from a player made offer
|
||||
/// Is the provided offerId and ownerId from a player made offer
|
||||
/// </summary>
|
||||
/// <param name="offerId">id of the offer</param>
|
||||
/// <param name="offerOwnerId">Owner id</param>
|
||||
|
||||
@@ -133,14 +133,15 @@ public class RagfairOfferGenerator(
|
||||
var roubleListingPrice = Math.Round((double) ConvertOfferRequirementsIntoRoubles(offerRequirements));
|
||||
var singleItemListingPrice = isPackOffer ? roubleListingPrice / itemStackCount : roubleListingPrice;
|
||||
|
||||
var rootItem = items.FirstOrDefault();
|
||||
var offer = new RagfairOffer
|
||||
{
|
||||
Id = hashUtil.Generate(),
|
||||
InternalId = offerCounter,
|
||||
User = CreateUserDataForFleaOffer(userID, isTrader),
|
||||
Root = items[0].Id,
|
||||
Root = rootItem.Id,
|
||||
Items = itemsClone,
|
||||
ItemsCost = Math.Round(handbookHelper.GetTemplatePrice(items[0].Template)), // Handbook price
|
||||
ItemsCost = Math.Round(handbookHelper.GetTemplatePrice(rootItem.Template)), // Handbook price
|
||||
Requirements = offerRequirements,
|
||||
RequirementsCost = Math.Round(singleItemListingPrice),
|
||||
SummaryCost = roubleListingPrice,
|
||||
@@ -148,7 +149,8 @@ public class RagfairOfferGenerator(
|
||||
EndTime = GetOfferEndTime(userID, time),
|
||||
LoyaltyLevel = loyalLevel,
|
||||
SellInOnePiece = isPackOffer,
|
||||
Locked = false
|
||||
Locked = false,
|
||||
Quantity = (int)(rootItem.Upd?.StackObjectsCount ?? 1)
|
||||
};
|
||||
|
||||
offerCounter++;
|
||||
|
||||
@@ -740,10 +740,14 @@ public class RagfairOfferHelper(
|
||||
}
|
||||
else
|
||||
{
|
||||
// Partial purchase
|
||||
var offerRootItem = offer.Items[0];
|
||||
|
||||
// Reduce offer root items stack count
|
||||
offerRootItem.Upd.StackObjectsCount -= boughtAmount;
|
||||
|
||||
// Reduce quantity from offer
|
||||
offer.Quantity -= boughtAmount;
|
||||
}
|
||||
|
||||
// Assemble payment to send to seller now offer was purchased
|
||||
|
||||
@@ -21,7 +21,6 @@ namespace Core.Helpers;
|
||||
public class TradeHelper(
|
||||
ISptLogger<TradeHelper> _logger,
|
||||
DatabaseService _databaseService,
|
||||
EventOutputHolder _eventOutputHolder,
|
||||
TraderHelper _traderHelper,
|
||||
ItemHelper _itemHelper,
|
||||
PaymentService _paymentService,
|
||||
@@ -32,13 +31,9 @@ public class TradeHelper(
|
||||
RagfairServer _ragfairServer,
|
||||
TraderAssortHelper _traderAssortHelper,
|
||||
TraderPurchasePersisterService _traderPurchasePersisterService,
|
||||
ConfigServer _configServer,
|
||||
ICloner _cloner
|
||||
)
|
||||
{
|
||||
protected InventoryConfig _inventoryConfig = _configServer.GetConfig<InventoryConfig>();
|
||||
protected TraderConfig _traderConfig = _configServer.GetConfig<TraderConfig>();
|
||||
|
||||
/// <summary>
|
||||
/// Buy item from flea or trader
|
||||
/// </summary>
|
||||
@@ -47,7 +42,7 @@ public class TradeHelper(
|
||||
/// <param name="sessionID">Session id</param>
|
||||
/// <param name="foundInRaid">Should item be found in raid</param>
|
||||
/// <param name="output">Item event router response</param>
|
||||
public void buyItem(
|
||||
public void BuyItem(
|
||||
PmcData pmcData,
|
||||
ProcessBuyTradeRequestData buyRequestData,
|
||||
string sessionID,
|
||||
@@ -64,10 +59,13 @@ public class TradeHelper(
|
||||
{
|
||||
var allOffers = _ragfairServer.GetOffers();
|
||||
|
||||
// We store ragfair offerid in buyRequestData.item_id
|
||||
// We store ragfair offerId in buyRequestData.item_id
|
||||
var offerWithItem = allOffers.FirstOrDefault(x => x.Id == buyRequestData.ItemId);
|
||||
var itemPurchased = offerWithItem.Items.FirstOrDefault();
|
||||
|
||||
// Update offer quantity
|
||||
offerWithItem.Quantity -= buyCount;
|
||||
|
||||
// Ensure purchase does not exceed trader item limit
|
||||
var assortHasBuyRestrictions = _itemHelper.HasBuyRestrictions(itemPurchased);
|
||||
if (assortHasBuyRestrictions)
|
||||
|
||||
@@ -163,6 +163,16 @@ public record RagfairOffer
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tightly bound to offer.items[0].upd.stackObjectsCount
|
||||
/// </summary>
|
||||
[JsonPropertyName("quantity")]
|
||||
public int? Quantity
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
}
|
||||
|
||||
public record OfferRequirement
|
||||
|
||||
@@ -133,9 +133,11 @@ public class RagfairOfferService(
|
||||
var offer = ragfairOfferHolder.GetOfferById(offerId);
|
||||
if (offer != null)
|
||||
{
|
||||
var rootItem = offer.Items[0];
|
||||
offer.Quantity -= amount;
|
||||
|
||||
var rootItem = offer.Items.FirstOrDefault();
|
||||
rootItem.Upd.StackObjectsCount -= amount;
|
||||
if (rootItem.Upd.StackObjectsCount <= 0)
|
||||
if (rootItem.Upd.StackObjectsCount <= 0 || offer.Quantity <= 0)
|
||||
{
|
||||
// Reducing stack size has made it 0, offer is now 'stale'
|
||||
ProcessStaleOffer(offer);
|
||||
|
||||
Reference in New Issue
Block a user