返回提交历史
Modified
src/controllers/api/infestedFoundryController.ts
+40
-0
Modified
src/models/inventoryModels/inventoryModel.ts
+3
-0
Modified
src/types/inventoryTypes/commonInventoryTypes.ts
+5
-1
XFEstudio/XFESpaceNinjaServer
feat: invigorations (#715)
506e77db
代码差异
3 个文件
+48
-1
@@ -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
}
@@ -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 }
@@ -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
}