diff --git a/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs b/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs
index e979d476..660fd4b3 100644
--- a/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs
@@ -40,10 +40,6 @@ public class PaymentService(
/// Client response
public void PayMoney(PmcData pmcData, ProcessBuyTradeRequestData request, MongoId sessionID, ItemEventRouterResponse output)
{
- // May need to convert to trader currency
- var trader = traderHelper.GetTrader(request.TransactionId, sessionID);
- var payToTrader = request.TransactionId != "ragfair" && traderHelper.TraderExists(request.TransactionId);
-
// Track the amounts of each type of currency involved in the trade.
var currencyAmounts = new Dictionary();
@@ -72,7 +68,7 @@ public class PaymentService(
// Used by `SptInsure`
// Handle differently, `id` is the money type tpl
var currencyTpl = itemRequest.Id;
- // sometimes the currency can be in two parts, so it fails to tryadd the second part
+ // Sometimes the currency can be in two parts, so it fails to tryadd the second part
currencyAmounts.AddOrUpdate(currencyTpl, itemRequest.Count.Value);
}
}
@@ -80,10 +76,19 @@ public class PaymentService(
// Track the total amount of all currencies.
var totalCurrencyAmount = 0d;
- // Convert id to mongoId if we know it'll be valid (trader id)
- var requestTransactionId = payToTrader ? new MongoId(request.TransactionId) : MongoId.Empty(); // Likely flea, use default
+ // TODO: PMC flea offers use a transaction id of "ragfair", hacky
+ var isPmcFleaPurchase = request.TransactionId == "ragfair";
+ var requestTransactionId = isPmcFleaPurchase ? MongoId.Empty() : new MongoId(request.TransactionId);
- // Loop through each type of currency involved in the trade.
+ // Who is recipient of money player is sending
+ var payToTrader = !isPmcFleaPurchase && traderHelper.TraderExists(requestTransactionId);
+
+ // May need to convert to trader currency
+ var trader = isPmcFleaPurchase
+ ? new TraderBase { Currency = CurrencyType.RUB }
+ : traderHelper.GetTrader(requestTransactionId, sessionID);
+
+ // Loop through each type of currency involved in the trade
foreach (var (currencyTpl, currencyAmount) in currencyAmounts)
{
if (currencyAmount <= 0)
@@ -96,7 +101,7 @@ public class PaymentService(
// Find money stacks in inventory and remove amount needed + update output object to inform client of changes
AddPaymentToOutput(pmcData, currencyTpl, currencyAmount, sessionID, output);
- // If there are warnings, exit early.
+ // If there are warnings, exit early
if (output.Warnings?.Count > 0)
{
return;
@@ -104,7 +109,7 @@ public class PaymentService(
if (payToTrader)
{
- // Convert the amount to the trader's currency and update the sales sum.
+ // Convert the amount to the trader's currency and update the sales sum
var costOfPurchaseInCurrency = handbookHelper.FromRoubles(
handbookHelper.InRoubles(currencyAmount, currencyTpl),
trader.Currency.Value.GetCurrencyTpl()