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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

w.i.p mods

e8240870
Jānis <97699850+janisslsm@users.noreply.github.com>
提交于

代码差异

7 个文件 +801 -179
Modified src/controllers/api/inventoryController.ts +1 -0
@@ -4,6 +4,7 @@ import { toInventoryResponse } from "@/src/helpers/inventoryHelpers";
4 4 import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
5 5 import { config } from "@/src/services/configService";
6 6 import { IInventoryDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
7 //import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
7 8
8 9 // eslint-disable-next-line @typescript-eslint/no-misused-promises
9 10 const inventoryController: RequestHandler = async (request, response) => {
Modified src/controllers/api/tauntHistoryController.ts +1 -8
@@ -2,7 +2,6 @@ import { RequestHandler } from "express";
2 2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 3 import { getInventory } from "@/src/services/inventoryService";
4 4 import { ITaunt } from "@/src/types/inventoryTypes/inventoryTypes";
5 import { logger } from "@/src/utils/logger";
6 5
7 6 // eslint-disable-next-line @typescript-eslint/no-misused-promises
8 7 export const tauntHistoryController: RequestHandler = async (req, res) => {
@@ -10,14 +9,8 @@ export const tauntHistoryController: RequestHandler = async (req, res) => {
10 9 const inventory = await getInventory(accountId);
11 10 if (req.body !== undefined) {
12 11 const clientTaunt = JSON.parse(String(req.body)) as ITaunt;
13 logger.debug(`updating taunt ${clientTaunt.node} to state ${clientTaunt.state}`);
14 12 inventory.TauntHistory ??= [];
15 const taunt = inventory.TauntHistory.find(x => x.node == clientTaunt.node);
16 if (taunt) {
17 taunt.state = clientTaunt.state;
18 } else {
19 inventory.TauntHistory.push(clientTaunt);
20 }
13 inventory.TauntHistory.push(clientTaunt);
21 14 await inventory.save();
22 15 res.end();
23 16 } else {
Modified src/controllers/api/upgradesController.ts +19 -134
@@ -1,149 +1,34 @@
1 1 import { RequestHandler } from "express";
2 2 import { IUpgradesRequest } from "@/src/types/requestTypes";
3 import {
4 ArtifactPolarity,
5 IEquipmentDatabase,
6 EquipmentFeatures
7 } from "@/src/types/inventoryTypes/commonInventoryTypes";
8 import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
9 3 import { getAccountIdForRequest } from "@/src/services/loginService";
10 import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
4 import { getInventory } from "@/src/services/inventoryService";
11 5
12 6 // eslint-disable-next-line @typescript-eslint/no-misused-promises
13 7 export const upgradesController: RequestHandler = async (req, res) => {
14 8 const accountId = await getAccountIdForRequest(req);
15 9 const payload = JSON.parse(String(req.body)) as IUpgradesRequest;
16 10 const inventory = await getInventory(accountId);
17 const InventoryChanges: any = {};
18 for (const operation of payload.Operations) {
19 if (
20 operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/ModSlotUnlocker" ||
21 operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker"
22 ) {
23 await updateCurrency(10, true, accountId);
24 } else {
25 addMiscItems(inventory, [
26 {
27 ItemType: operation.UpgradeRequirement,
28 ItemCount: -1
29 } satisfies IMiscItem
30 ]);
11 console.log(req.body);
12 for (const item of payload.UpgradesToAttach) {
13 for (const upgrade of inventory.Upgrades) {
14 if (upgrade._id?.toString() == item.ItemId.$id) {
15 upgrade.UpgradeFingerprint = item.UpgradeFingerprint;
16 upgrade.Slot = item.Slot;
17 upgrade.ParentId = payload.Weapon.ItemId;
18 }
31 19 }
20 }
32 21
33 switch (operation.UpgradeRequirement) {
34 case "/Lotus/Types/Items/MiscItems/OrokinReactor":
35 case "/Lotus/Types/Items/MiscItems/OrokinCatalyst":
36 for (const item of inventory[payload.ItemCategory]) {
37 if (item._id.toString() == payload.ItemId.$id) {
38 item.Features ??= 0;
39 item.Features |= EquipmentFeatures.DOUBLE_CAPACITY;
40 break;
41 }
42 }
43 break;
44 case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
45 case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker":
46 for (const item of inventory[payload.ItemCategory]) {
47 if (item._id.toString() == payload.ItemId.$id) {
48 item.Features ??= 0;
49 item.Features |= EquipmentFeatures.UTILITY_SLOT;
50 break;
51 }
52 }
53 break;
54 case "/Lotus/Types/Items/MiscItems/HeavyWeaponCatalyst":
55 console.assert(payload.ItemCategory == "SpaceGuns");
56 for (const item of inventory[payload.ItemCategory]) {
57 if (item._id.toString() == payload.ItemId.$id) {
58 item.Features ??= 0;
59 item.Features |= EquipmentFeatures.GRAVIMAG_INSTALLED;
60 break;
61 }
62 }
63 break;
64 case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker":
65 case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker":
66 case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker":
67 case "/Lotus/Types/Items/MiscItems/WeaponAmpArcaneUnlocker":
68 for (const item of inventory[payload.ItemCategory]) {
69 if (item._id.toString() == payload.ItemId.$id) {
70 item.Features ??= 0;
71 item.Features |= EquipmentFeatures.ARCANE_SLOT;
72 break;
73 }
74 }
75 break;
76 case "/Lotus/Types/Items/MiscItems/Forma":
77 case "/Lotus/Types/Items/MiscItems/FormaUmbra":
78 case "/Lotus/Types/Items/MiscItems/FormaAura":
79 case "/Lotus/Types/Items/MiscItems/FormaStance":
80 for (const item of inventory[payload.ItemCategory]) {
81 if (item._id.toString() == payload.ItemId.$id) {
82 item.XP = 0;
83 setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue);
84 item.Polarized ??= 0;
85 item.Polarized += 1;
86 break;
87 }
88 }
89 break;
90 case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker":
91 for (const item of inventory[payload.ItemCategory]) {
92 if (item._id.toString() == payload.ItemId.$id) {
93 item.ModSlotPurchases ??= 0;
94 item.ModSlotPurchases += 1;
95 InventoryChanges[payload.ItemCategory] = {
96 ItemId: {
97 $id: payload.ItemId.$id
98 },
99 ModSlotPurchases: item.ModSlotPurchases
100 };
101 break;
102 }
103 }
104 break;
105 case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker":
106 for (const item of inventory[payload.ItemCategory]) {
107 if (item._id.toString() == payload.ItemId.$id) {
108 item.CustomizationSlotPurchases ??= 0;
109 item.CustomizationSlotPurchases += 1;
110 InventoryChanges[payload.ItemCategory] = {
111 ItemId: {
112 $id: payload.ItemId.$id
113 },
114 CustomizationSlotPurchases: item.CustomizationSlotPurchases
115 };
116 break;
117 }
118 }
119 break;
120 case "":
121 console.assert(operation.OperationType == "UOT_SWAP_POLARITY");
122 for (const item of inventory[payload.ItemCategory]) {
123 if (item._id.toString() == payload.ItemId.$id) {
124 for (let i = 0; i != operation.PolarityRemap.length; ++i) {
125 if (operation.PolarityRemap[i].Slot != i) {
126 setSlotPolarity(item, i, operation.PolarityRemap[i].Value);
127 }
128 }
129 break;
130 }
131 }
132 break;
133 default:
134 throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement);
22 for (const item of payload.UpgradesToDetach) {
23 for (const upgrade of inventory.Upgrades) {
24 if (upgrade._id?.toString() == item.ItemId.$id) {
25 upgrade.UpgradeFingerprint = undefined;
26 upgrade.Slot = undefined;
27 upgrade.ParentId = undefined;
28 }
135 29 }
136 30 }
137 await inventory.save();
138 res.json({ InventoryChanges });
139 };
140 31
141 const setSlotPolarity = (item: IEquipmentDatabase, slot: number, polarity: ArtifactPolarity): void => {
142 item.Polarity ??= [];
143 const entry = item.Polarity.find(entry => entry.Slot == slot);
144 if (entry) {
145 entry.Value = polarity;
146 } else {
147 item.Polarity.push({ Slot: slot, Value: polarity });
148 }
32 await inventory.save();
33 res.json({});
149 34 };
Modified src/models/inventoryModels/inventoryModel.ts +17 -3
@@ -24,7 +24,8 @@ import {
24 24 IQuestKeyResponse,
25 25 IWeaponSkinDatabase,
26 26 IPeriodicMissionCompletionDatabase,
27 IPeriodicMissionCompletionResponse
27 IPeriodicMissionCompletionResponse,
28 ITaunt
28 29 } from "../../types/inventoryTypes/inventoryTypes";
29 30 import { IOid } from "../../types/commonTypes";
30 31 import {
@@ -237,10 +238,14 @@ RawUpgrades.set("toJSON", {
237 238 });
238 239
239 240 //TODO: find out what this is
240 const upgradesSchema = new Schema(
241 const upgradesSchema = new Schema<ICrewShipSalvagedWeaponSkin>(
241 242 {
242 243 UpgradeFingerprint: String,
243 ItemType: String
244 ItemType: String,
245 Slot: Number,
246 ParentId: {
247 $id: String
248 }
244 249 },
245 250 { id: false }
246 251 );
@@ -458,6 +463,13 @@ periodicMissionCompletionsSchema.set("toJSON", {
458 463 }
459 464 });
460 465
466 const tauntSchema = new Schema<ITaunt>(
467 {
468 node: String
469 },
470 { _id: false }
471 );
472
461 473 const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
462 474 {
463 475 accountOwnerId: Schema.Types.ObjectId,
@@ -528,6 +540,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
528 540 //Crafting Blueprint(Item Name + CompletionDate)
529 541 PendingRecipes: [pendingRecipeSchema],
530 542
543 TauntHistory: { type: [tauntSchema], default: undefined },
544
531 545 //Skins for Suits, Weapons etc.
532 546 WeaponSkins: [weaponSkinsSchema],
533 547
Modified src/types/inventoryTypes/inventoryTypes.ts +4 -1
@@ -111,6 +111,7 @@ export type TSolarMapRegion =
111 111 export interface IPendingRecipeResponse extends Omit<IPendingRecipe, "CompletionDate"> {
112 112 CompletionDate: IMongoDate;
113 113 }
114
114 115 export interface IInventoryResponse {
115 116 Horses: IEquipmentDatabase[];
116 117 DrifterMelee: IEquipmentDatabase[];
@@ -395,6 +396,9 @@ export interface ICrewShipSalvagedWeaponSkin {
395 396 ItemType: string;
396 397 UpgradeFingerprint?: string;
397 398 ItemId?: IOid;
399 ParentId?: IOid;
400 Slot?: number;
401 _pid?: Types.ObjectId;
398 402 _id?: Types.ObjectId;
399 403 }
400 404
@@ -872,7 +876,6 @@ export interface INotePacks {
872 876
873 877 export interface ITaunt {
874 878 node: string;
875 state: "TS_UNLOCKED" | "TS_COMPLETED";
876 879 }
877 880
878 881 export interface IWeaponSkinDatabase {
Modified src/types/requestTypes.ts +44 -7
@@ -1,5 +1,5 @@
1 1 import { IOid } from "./commonTypes";
2 import { ArtifactPolarity, IPolarity, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
2 import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
3 3 import {
4 4 IBooster,
5 5 IChallengeProgress,
@@ -99,6 +99,26 @@ export interface IUpdateGlyphRequest {
99 99 AvatarImage: string;
100 100 }
101 101
102 export interface IUpgradesRequest {
103 Category: TEquipmentKey;
104 Weapon: IWeapon;
105 UpgradesToAttach: IUpgradesToAttach[];
106 UpgradesToDetach: IUpgradesToDetach[];
107 Cost: number;
108 UpgradeReq: string;
109 }
110
111 export interface IWeapon {
112 ItemType: string;
113 ItemId: IOid;
114 XP: number;
115 UpgradeVer: number;
116 UnlockLevel: number;
117 ExtraCapacity: number;
118 ExtraRemaining: number;
119 }
120
121 /*
102 122 export interface IUpgradesRequest {
103 123 ItemCategory: TEquipmentKey;
104 124 ItemId: IOid;
@@ -106,11 +126,28 @@ export interface IUpgradesRequest {
106 126 UpgradeVersion: number;
107 127 Operations: IUpgradeOperation[];
108 128 }
129 */
130
131 export interface IUpgradesToAttach {
132 ItemType: string;
133 ItemId: IOid;
134 UpgradeFingerprint: string;
135 Slot: number;
136 ParentId: IOid;
137 }
109 138
110 export interface IUpgradeOperation {
111 OperationType: string;
112 UpgradeRequirement: string; // uniqueName of item being consumed
113 PolarizeSlot: number;
114 PolarizeValue: ArtifactPolarity;
115 PolarityRemap: IPolarity[];
139 export interface IUpgradesToDetach {
140 ItemType: string;
141 ItemId: IOid;
142 UpgradeFingerprint: string;
143 Slot: number;
144 ParentId: IOid;
116 145 }
146
147 // export interface IUpgradeOperation {
148 // OperationType: string;
149 // UpgradeRequirement: string; // uniqueName of item being consumed
150 // PolarizeSlot: number;
151 // PolarizeValue: ArtifactPolarity;
152 // PolarityRemap: IPolarity[];
153 // }