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

feat: purchase additional conclave loadout slots (#2758)

Closes #2756. Also just in general simplified the logic around purchasing loadout slots. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2758 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

3e555b17
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

3 个文件 +18 -44
Deleted src/helpers/purchaseHelpers.ts +0 -23
@@ -1,23 +0,0 @@
1 import type { SlotPurchase, SlotPurchaseName } from "../types/purchaseTypes.ts";
2
3 export const slotPurchaseNameToSlotName: SlotPurchase = {
4 SuitSlotItem: { name: "SuitBin", purchaseQuantity: 1 },
5 TwoSentinelSlotItem: { name: "SentinelBin", purchaseQuantity: 2 },
6 TwoWeaponSlotItem: { name: "WeaponBin", purchaseQuantity: 2 },
7 SpaceSuitSlotItem: { name: "SpaceSuitBin", purchaseQuantity: 1 },
8 TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", purchaseQuantity: 2 },
9 MechSlotItem: { name: "MechBin", purchaseQuantity: 1 },
10 TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", purchaseQuantity: 2 },
11 RandomModSlotItem: { name: "RandomModBin", purchaseQuantity: 3 },
12 TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", purchaseQuantity: 2 },
13 CrewMemberSlotItem: { name: "CrewMemberBin", purchaseQuantity: 1 }
14 };
15
16 export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
17 return slotPurchaseName in slotPurchaseNameToSlotName;
18 };
19
20 export const parseSlotPurchaseName = (slotPurchaseName: string): SlotPurchaseName => {
21 if (!isSlotPurchaseName(slotPurchaseName)) throw new Error(`invalid slot name ${slotPurchaseName}`);
22 return slotPurchaseName;
23 };
Modified src/services/purchaseService.ts +18 -5
@@ -1,4 +1,3 @@
1 import { parseSlotPurchaseName, slotPurchaseNameToSlotName } from "../helpers/purchaseHelpers.ts";
2 1 import { getSubstringFromKeyword } from "../helpers/stringHelpers.ts";
3 2 import {
4 3 addBooster,
@@ -15,7 +14,8 @@ import type {
15 14 IPurchaseRequest,
16 15 IPurchaseResponse,
17 16 IInventoryChanges,
18 IPurchaseParams
17 IPurchaseParams,
18 SlotNames
19 19 } from "../types/purchaseTypes.ts";
20 20 import { PurchaseSource } from "../types/purchaseTypes.ts";
21 21 import { logger } from "../utils/logger.ts";
@@ -489,6 +489,20 @@ export const handleStoreItemAcquisition = async (
489 489 return purchaseResponse;
490 490 };
491 491
492 const slotPurchaseNameToSlotName: Record<string, { name: SlotNames; purchaseQuantity: number }> = {
493 SuitSlotItem: { name: "SuitBin", purchaseQuantity: 1 },
494 TwoSentinelSlotItem: { name: "SentinelBin", purchaseQuantity: 2 },
495 TwoWeaponSlotItem: { name: "WeaponBin", purchaseQuantity: 2 },
496 SpaceSuitSlotItem: { name: "SpaceSuitBin", purchaseQuantity: 1 },
497 TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", purchaseQuantity: 2 },
498 MechSlotItem: { name: "MechBin", purchaseQuantity: 1 },
499 TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", purchaseQuantity: 2 },
500 RandomModSlotItem: { name: "RandomModBin", purchaseQuantity: 3 },
501 TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", purchaseQuantity: 2 },
502 CrewMemberSlotItem: { name: "CrewMemberBin", purchaseQuantity: 1 },
503 PvPLoadoutSlotItem: { name: "PvpBonusLoadoutBin", purchaseQuantity: 1 }
504 };
505
492 506 // // extra = everything above the base +2 slots (depending on slot type)
493 507 // // new slot above base = extra + 1 and slots +1
494 508 // // new frame = slots -1
@@ -500,9 +514,8 @@ const handleSlotPurchase = (
500 514 ignorePurchaseQuantity: boolean
501 515 ): IPurchaseResponse => {
502 516 logger.debug(`slot name ${slotPurchaseNameFull}`);
503 const slotPurchaseName = parseSlotPurchaseName(
504 slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1)
505 );
517 const slotPurchaseName = slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1);
518 if (!(slotPurchaseName in slotPurchaseNameToSlotName)) throw new Error(`invalid slot name ${slotPurchaseName}`);
506 519 logger.debug(`slot purchase name ${slotPurchaseName}`);
507 520
508 521 const slotName = slotPurchaseNameToSlotName[slotPurchaseName].name;
Modified src/types/purchaseTypes.ts +0 -16
@@ -120,18 +120,6 @@ export type IBinChanges = {
120 120 Extra?: number;
121 121 };
122 122
123 export type SlotPurchaseName =
124 | "SuitSlotItem"
125 | "TwoSentinelSlotItem"
126 | "TwoWeaponSlotItem"
127 | "SpaceSuitSlotItem"
128 | "TwoSpaceWeaponSlotItem"
129 | "MechSlotItem"
130 | "TwoOperatorWeaponSlotItem"
131 | "RandomModSlotItem"
132 | "TwoCrewShipSalvageSlotItem"
133 | "CrewMemberSlotItem";
134
135 123 export const slotNames = [
136 124 "SuitBin",
137 125 "WeaponBin",
@@ -148,7 +136,3 @@ export const slotNames = [
148 136 ] as const;
149 137
150 138 export type SlotNames = (typeof slotNames)[number];
151
152 export type SlotPurchase = {
153 [P in SlotPurchaseName]: { name: SlotNames; purchaseQuantity: number };
154 };