feat: invigorations #715

Merged
Sainan merged 4 commits from invigorations into main 2025-01-04 21:17:42 -08:00
3 changed files with 48 additions and 1 deletions

View File

@ -7,6 +7,7 @@ import { IConsumedSuit, IInfestedFoundry, IMiscItem, ITypeCount } from "@/src/ty
import { ExportMisc, ExportRecipes } from "warframe-public-export-plus";
import { getRecipe } from "@/src/services/itemDataService";
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
export const infestedFoundryController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
@ -114,6 +115,9 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
inventory.InfestedFoundry ??= {};
inventory.InfestedFoundry.InvigorationIndex = request.OfferingsIndex;
inventory.InfestedFoundry.InvigorationSuitOfferings = request.SuitTypes;
if (request.Extra) {
inventory.InfestedFoundry.InvigorationsApplied = 0;
}
await inventory.save();
res.json({
InventoryChanges: {
@ -184,6 +188,34 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
break;
}
case "u": {
const request = getJSONfromString(String(req.body)) as IHelminthInvigorationRequest;
const inventory = await getInventory(accountId);
const suit = inventory.Suits.find(x => x._id.toString() == request.SuitId.$oid)!;
const upgradesExpiry = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000);
suit.OffensiveUpgrade = request.OffensiveUpgradeType;
suit.DefensiveUpgrade = request.DefensiveUpgradeType;
suit.UpgradesExpiry = upgradesExpiry;
addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00);
for (let i = 0; i != request.ResourceTypes.length; ++i) {
inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -=
request.ResourceCosts[i];
}
inventory.InfestedFoundry!.InvigorationsApplied ??= 0;
inventory.InfestedFoundry!.InvigorationsApplied += 1;
await inventory.save();
res.json({
SuitId: request.SuitId,
OffensiveUpgrade: request.OffensiveUpgradeType,
DefensiveUpgrade: request.DefensiveUpgradeType,
UpgradesExpiry: toMongoDate(upgradesExpiry),
InventoryChanges: {
InfestedFoundry: inventory.toJSON().InfestedFoundry
}
});
break;
}
default:
throw new Error(`unhandled infestedFoundry mode: ${String(req.query.mode)}`);
}
@ -268,3 +300,11 @@ interface IHelminthOfferingsUpdate {
SuitTypes: string[];
Extra: boolean;
}
interface IHelminthInvigorationRequest {
SuitId: IOid;
OffensiveUpgradeType: string;
DefensiveUpgradeType: string;
ResourceTypes: string[];
ResourceCosts: number[];
}

View File

@ -233,6 +233,9 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
UnlockLevel: Number,
Expiry: Date,
SkillTree: String,
OffensiveUpgrade: String,
DefensiveUpgrade: String,
UpgradesExpiry: Date,
ArchonCrystalUpgrades: { type: [ArchonCrystalUpgradeSchema], default: undefined }
},
{ id: false }

View File

@ -78,8 +78,9 @@ export interface IEquipmentSelection {
hide?: boolean;
}
export interface IEquipmentClient extends Omit<IEquipmentDatabase, "_id"> {
export interface IEquipmentClient extends Omit<IEquipmentDatabase, "_id" | "UpgradesExpiry"> {
ItemId: IOid;
UpgradesExpiry?: IMongoDate;
}
export enum EquipmentFeatures {
@ -112,6 +113,9 @@ export interface IEquipmentDatabase {
UnlockLevel?: number;
Expiry?: IMongoDate;
SkillTree?: string;
OffensiveUpgrade?: string;
DefensiveUpgrade?: string;
UpgradesExpiry?: Date;
ArchonCrystalUpgrades?: IArchonCrystalUpgrade[];
_id: Types.ObjectId;
}