返回提交历史
Modified
src/controllers/api/giftingController.ts
+7
-1
Modified
src/controllers/api/tradingController.ts
+2
-1
Modified
src/services/inventoryService.ts
+13
-5
XFEstudio/XFESpaceNinjaServer
fix: don't use personal platinum for gifting & trading (#3296)
Closes #3295 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3296 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
f5ca92f2
代码差异
3 个文件
+22
-7
@@ -4,6 +4,7 @@ import { areFriends } from "../../services/friendService.ts";
4
4
import { createMessage } from "../../services/inboxService.ts";
5
5
import {
6
6
combineInventoryChanges,
7
CurrencyType,
7
8
getEffectiveAvatarImageType,
8
9
getInventory,
9
10
updateCurrency
@@ -98,7 +99,12 @@ export const giftingController: RequestHandler = async (req, res) => {
98
99
data.buildLabel
99
100
);
100
101
}
101
updateCurrency(senderInventory, data.PurchaseParams.ExpectedPrice, true, response.InventoryChanges);
102
updateCurrency(
103
senderInventory,
104
data.PurchaseParams.ExpectedPrice,
105
CurrencyType.PAID_PLATINUM,
106
response.InventoryChanges
107
);
102
108
}
103
109
if (data.PurchaseParams.StoreItem in ExportBundles) {
104
110
const bundle = getBundle(data.PurchaseParams.StoreItem, data.buildLabel)!;
@@ -4,6 +4,7 @@ import {
4
4
addMiscItem,
5
5
addMods,
6
6
addRecipes,
7
CurrencyType,
7
8
getInventory,
8
9
updateCurrency
9
10
} from "../../services/inventoryService.ts";
@@ -298,7 +299,7 @@ const applyOfferToInventory = (inventory: TInventoryDatabaseDocument, offer: ITr
298
299
if (offer.PremiumCredits < 0) {
299
300
throw new Error(`negative quantity in trade offer`);
300
301
}
301
updateCurrency(inventory, offer.PremiumCredits * factor * -1, true);
302
updateCurrency(inventory, offer.PremiumCredits * factor * -1, CurrencyType.PAID_PLATINUM);
302
303
}
303
304
};
304
305
@@ -1522,19 +1522,27 @@ export const updateSlots = (
1522
1522
}
1523
1523
};
1524
1524
1525
const isCurrencyTracked = (inventory: TInventoryDatabaseDocument, usePremium: boolean): boolean => {
1525
export const CurrencyType = {
1526
CREDITS: false,
1527
PLATINUM: true,
1528
PAID_PLATINUM: 2
1529
} as const;
1530
1531
type TCurrencyType = (typeof CurrencyType)[keyof typeof CurrencyType];
1532
1533
const isCurrencyTracked = (inventory: TInventoryDatabaseDocument, usePremium: TCurrencyType): boolean => {
1526
1534
return usePremium ? !inventory.infinitePlatinum : !inventory.infiniteCredits;
1527
1535
};
1528
1536
1529
1537
export const updateCurrency = (
1530
1538
inventory: TInventoryDatabaseDocument,
1531
1539
price: number,
1532
usePremium: boolean,
1540
currencyType: TCurrencyType,
1533
1541
inventoryChanges: IInventoryChanges = {}
1534
1542
): IInventoryChanges => {
1535
if (price != 0 && isCurrencyTracked(inventory, usePremium)) {
1536
if (usePremium) {
1537
if (price > 0 && inventory.PremiumCreditsFree > 0) {
1543
if (price != 0 && isCurrencyTracked(inventory, currencyType)) {
1544
if (currencyType != CurrencyType.CREDITS) {
1545
if (price > 0 && inventory.PremiumCreditsFree > 0 && currencyType != CurrencyType.PAID_PLATINUM) {
1538
1546
const premiumCreditsFreeDelta = Math.min(price, inventory.PremiumCreditsFree) * -1;
1539
1547
inventoryChanges.PremiumCreditsFree ??= 0;
1540
1548
inventoryChanges.PremiumCreditsFree += premiumCreditsFreeDelta;