feat: potatoes & exilus adapters (#163)

This commit is contained in:
Sainan 2024-05-06 15:08:56 +02:00 committed by GitHub
parent 91abd419f7
commit 676c3b1616
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 70 additions and 1 deletions

View File

@ -0,0 +1,44 @@
import { RequestHandler } from "express";
import { IUpgradesRequest } from "@/src/types/requestTypes";
import { IGenericItemDatabase, IMiscItem, TGenericItemKey } from "@/src/types/inventoryTypes/inventoryTypes";
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
export const upgradesController: RequestHandler = async (req, res) => {
const accountId = req.query.accountId as string;
const payload = JSON.parse(req.body.toString()) as IUpgradesRequest;
const inventory = await getInventory(accountId);
for (const operation of payload.Operations) {
addMiscItems(inventory, [
{
ItemType: operation.UpgradeRequirement,
ItemCount: -1
} satisfies IMiscItem
]);
switch (operation.UpgradeRequirement) {
case "/Lotus/Types/Items/MiscItems/OrokinReactor":
case "/Lotus/Types/Items/MiscItems/OrokinCatalyst":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0;
item.Features |= 1;
break;
}
}
break;
case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0;
item.Features |= 2;
break;
}
}
break;
default:
throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement);
}
}
await inventory.save();
res.end();
};

View File

@ -45,6 +45,7 @@ import { getGuildController } from "@/src/controllers/api/getGuildController";
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
import { createGuildController } from "@/src/controllers/api/createGuildController";
import { sellController } from "@/src/controllers/api/sellController";
import { upgradesController } from "@/src/controllers/api/upgradesController";
const apiRouter = express.Router();
@ -100,5 +101,6 @@ apiRouter.post("/updateTheme.php", updateThemeController);
apiRouter.post("/addFriendImage.php", addFriendImageController);
apiRouter.post("/createGuild.php", createGuildController);
apiRouter.post("/sell.php", sellController);
apiRouter.post("/upgrades.php", upgradesController);
export { apiRouter };

View File

@ -211,7 +211,7 @@ const addGearExpByCategory = (
});
};
const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: IMiscItem[] | undefined) => {
export const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: IMiscItem[] | undefined) => {
const { MiscItems } = inventory;
itemsArray?.forEach(({ ItemCount, ItemType }) => {

View File

@ -95,6 +95,12 @@ export interface IGenericItem {
Features?: number; //space suit has this
}
export interface IGenericItemDatabase extends Omit<IGenericItem, "ItemId"> {
_id: Types.ItemId;
}
export type TGenericItemKey = "Suits" | "LongGuns" | "Pistols" | "Melee";
export interface IDuviriInfo {
Seed: number;
NumCompletions: number;

View File

@ -1,3 +1,4 @@
import { IOid } from "./commonTypes";
import {
IBooster,
IChallengeProgress,
@ -64,3 +65,19 @@ export interface IUpdateGlyphRequest {
AvatarImageType: string;
AvatarImage: string;
}
export interface IUpgradesRequest {
ItemCategory: string;
ItemId: IOid;
ItemFeatures: number;
UpgradeVersion: number;
Operations: IUpgradeOperation[];
}
export interface IUpgradeOperation {
OperationType: string;
UpgradeRequirement: string; // uniqueName of item being consumed
PolarizeSlot: number;
PolarizeValue: string; // polarity
PolarityRemap: {}[];
}