XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

3 个文件 +22 -7
Modified src/controllers/api/giftingController.ts +7 -1
@@ -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)!;
Modified src/controllers/api/tradingController.ts +2 -1
@@ -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
Modified src/services/inventoryService.ts +13 -5
@@ -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;