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: invigorations (#715)

506e77db
Sainan <sainan@calamity.inc>
提交于

代码差异

3 个文件 +48 -1
Modified src/controllers/api/infestedFoundryController.ts +40 -0
@@ -7,6 +7,7 @@ import { IConsumedSuit, IInfestedFoundry, IMiscItem, ITypeCount } from "@/src/ty
7 7 import { ExportMisc, ExportRecipes } from "warframe-public-export-plus";
8 8 import { getRecipe } from "@/src/services/itemDataService";
9 9 import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
10 import { toMongoDate } from "@/src/helpers/inventoryHelpers";
10 11
11 12 export const infestedFoundryController: RequestHandler = async (req, res) => {
12 13 const accountId = await getAccountIdForRequest(req);
@@ -114,6 +115,9 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
114 115 inventory.InfestedFoundry ??= {};
115 116 inventory.InfestedFoundry.InvigorationIndex = request.OfferingsIndex;
116 117 inventory.InfestedFoundry.InvigorationSuitOfferings = request.SuitTypes;
118 if (request.Extra) {
119 inventory.InfestedFoundry.InvigorationsApplied = 0;
120 }
117 121 await inventory.save();
118 122 res.json({
119 123 InventoryChanges: {
@@ -184,6 +188,34 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
184 188 break;
185 189 }
186 190
191 case "u": {
192 const request = getJSONfromString(String(req.body)) as IHelminthInvigorationRequest;
193 const inventory = await getInventory(accountId);
194 const suit = inventory.Suits.find(x => x._id.toString() == request.SuitId.$oid)!;
195 const upgradesExpiry = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000);
196 suit.OffensiveUpgrade = request.OffensiveUpgradeType;
197 suit.DefensiveUpgrade = request.DefensiveUpgradeType;
198 suit.UpgradesExpiry = upgradesExpiry;
199 addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00);
200 for (let i = 0; i != request.ResourceTypes.length; ++i) {
201 inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -=
202 request.ResourceCosts[i];
203 }
204 inventory.InfestedFoundry!.InvigorationsApplied ??= 0;
205 inventory.InfestedFoundry!.InvigorationsApplied += 1;
206 await inventory.save();
207 res.json({
208 SuitId: request.SuitId,
209 OffensiveUpgrade: request.OffensiveUpgradeType,
210 DefensiveUpgrade: request.DefensiveUpgradeType,
211 UpgradesExpiry: toMongoDate(upgradesExpiry),
212 InventoryChanges: {
213 InfestedFoundry: inventory.toJSON().InfestedFoundry
214 }
215 });
216 break;
217 }
218
187 219 default:
188 220 throw new Error(`unhandled infestedFoundry mode: ${String(req.query.mode)}`);
189 221 }
@@ -268,3 +300,11 @@ interface IHelminthOfferingsUpdate {
268 300 SuitTypes: string[];
269 301 Extra: boolean;
270 302 }
303
304 interface IHelminthInvigorationRequest {
305 SuitId: IOid;
306 OffensiveUpgradeType: string;
307 DefensiveUpgradeType: string;
308 ResourceTypes: string[];
309 ResourceCosts: number[];
310 }
Modified src/models/inventoryModels/inventoryModel.ts +3 -0
@@ -233,6 +233,9 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
233 233 UnlockLevel: Number,
234 234 Expiry: Date,
235 235 SkillTree: String,
236 OffensiveUpgrade: String,
237 DefensiveUpgrade: String,
238 UpgradesExpiry: Date,
236 239 ArchonCrystalUpgrades: { type: [ArchonCrystalUpgradeSchema], default: undefined }
237 240 },
238 241 { id: false }
Modified src/types/inventoryTypes/commonInventoryTypes.ts +5 -1
@@ -78,8 +78,9 @@ export interface IEquipmentSelection {
78 78 hide?: boolean;
79 79 }
80 80
81 export interface IEquipmentClient extends Omit<IEquipmentDatabase, "_id"> {
81 export interface IEquipmentClient extends Omit<IEquipmentDatabase, "_id" | "UpgradesExpiry"> {
82 82 ItemId: IOid;
83 UpgradesExpiry?: IMongoDate;
83 84 }
84 85
85 86 export enum EquipmentFeatures {
@@ -112,6 +113,9 @@ export interface IEquipmentDatabase {
112 113 UnlockLevel?: number;
113 114 Expiry?: IMongoDate;
114 115 SkillTree?: string;
116 OffensiveUpgrade?: string;
117 DefensiveUpgrade?: string;
118 UpgradesExpiry?: Date;
115 119 ArchonCrystalUpgrades?: IArchonCrystalUpgrade[];
116 120 _id: Types.ObjectId;
117 121 }