forked from OpenWF/SpaceNinjaServer
feat: void relic refinement (#455)
This commit is contained in:
parent
e7889fc8c7
commit
e88decd9e2
64
src/controllers/api/projectionManagerController.ts
Normal file
64
src/controllers/api/projectionManagerController.ts
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import { RequestHandler } from "express";
|
||||||
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
|
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
||||||
|
import { ExportRelics, IRelic } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||||
|
export const projectionManagerController: RequestHandler = async (req, res) => {
|
||||||
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
const inventory = await getInventory(accountId);
|
||||||
|
const request = JSON.parse(String(req.body)) as IProjectionUpgradeRequest;
|
||||||
|
const [era, category, currentQuality] = parseProjection(request.projectionType);
|
||||||
|
const upgradeCost = (request.qualityTag - qualityKeywordToNumber[currentQuality]) * 25;
|
||||||
|
const newProjectionType = findProjection(era, category, qualityNumberToKeyword[request.qualityTag]);
|
||||||
|
addMiscItems(inventory, [
|
||||||
|
{
|
||||||
|
ItemType: request.projectionType,
|
||||||
|
ItemCount: -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ItemType: newProjectionType,
|
||||||
|
ItemCount: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ItemType: "/Lotus/Types/Items/MiscItems/VoidTearDrop",
|
||||||
|
ItemCount: -upgradeCost
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
await inventory.save();
|
||||||
|
res.json({
|
||||||
|
prevProjection: request.projectionType,
|
||||||
|
upgradedProjection: newProjectionType,
|
||||||
|
upgradeCost: upgradeCost
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
interface IProjectionUpgradeRequest {
|
||||||
|
projectionType: string;
|
||||||
|
qualityTag: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
type VoidProjectionQuality = "VPQ_BRONZE" | "VPQ_SILVER" | "VPQ_GOLD" | "VPQ_PLATINUM";
|
||||||
|
|
||||||
|
const qualityNumberToKeyword: VoidProjectionQuality[] = ["VPQ_BRONZE", "VPQ_SILVER", "VPQ_GOLD", "VPQ_PLATINUM"];
|
||||||
|
const qualityKeywordToNumber: Record<VoidProjectionQuality, number> = {
|
||||||
|
VPQ_BRONZE: 0,
|
||||||
|
VPQ_SILVER: 1,
|
||||||
|
VPQ_GOLD: 2,
|
||||||
|
VPQ_PLATINUM: 3
|
||||||
|
};
|
||||||
|
|
||||||
|
// e.g. "/Lotus/Types/Game/Projections/T2VoidProjectionProteaPrimeDBronze" -> ["Lith", "W5", "VPQ_BRONZE"]
|
||||||
|
const parseProjection = (typeName: string): [string, string, VoidProjectionQuality] => {
|
||||||
|
const relic: IRelic | undefined = ExportRelics[typeName];
|
||||||
|
if (!relic) {
|
||||||
|
throw new Error(`Unknown projection ${typeName}`);
|
||||||
|
}
|
||||||
|
return [relic.era, relic.category, relic.quality];
|
||||||
|
};
|
||||||
|
|
||||||
|
const findProjection = (era: string, category: string, quality: VoidProjectionQuality): string => {
|
||||||
|
return Object.entries(ExportRelics).find(
|
||||||
|
([_, relic]) => relic.era == era && relic.category == category && relic.quality == quality
|
||||||
|
)![0];
|
||||||
|
};
|
@ -40,6 +40,7 @@ import { missionInventoryUpdateController } from "@/src/controllers/api/missionI
|
|||||||
import { modularWeaponCraftingController } from "@/src/controllers/api/modularWeaponCraftingController";
|
import { modularWeaponCraftingController } from "@/src/controllers/api/modularWeaponCraftingController";
|
||||||
import { modularWeaponSaleController } from "@/src/controllers/api/modularWeaponSaleController";
|
import { modularWeaponSaleController } from "@/src/controllers/api/modularWeaponSaleController";
|
||||||
import { nameWeaponController } from "@/src/controllers/api/nameWeaponController";
|
import { nameWeaponController } from "@/src/controllers/api/nameWeaponController";
|
||||||
|
import { projectionManagerController } from "../controllers/api/projectionManagerController";
|
||||||
import { purchaseController } from "@/src/controllers/api/purchaseController";
|
import { purchaseController } from "@/src/controllers/api/purchaseController";
|
||||||
import { queueDojoComponentDestructionController } from "@/src/controllers/api/queueDojoComponentDestructionController";
|
import { queueDojoComponentDestructionController } from "@/src/controllers/api/queueDojoComponentDestructionController";
|
||||||
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
|
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
|
||||||
@ -118,6 +119,7 @@ apiRouter.post("/login.php", loginController);
|
|||||||
apiRouter.post("/missionInventoryUpdate.php", missionInventoryUpdateController);
|
apiRouter.post("/missionInventoryUpdate.php", missionInventoryUpdateController);
|
||||||
apiRouter.post("/modularWeaponCrafting.php", modularWeaponCraftingController);
|
apiRouter.post("/modularWeaponCrafting.php", modularWeaponCraftingController);
|
||||||
apiRouter.post("/nameWeapon.php", nameWeaponController);
|
apiRouter.post("/nameWeapon.php", nameWeaponController);
|
||||||
|
apiRouter.post("/projectionManager.php", projectionManagerController);
|
||||||
apiRouter.post("/purchase.php", purchaseController);
|
apiRouter.post("/purchase.php", purchaseController);
|
||||||
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
|
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
|
||||||
apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user