diff --git a/src/controllers/api/tauntHistoryController.ts b/src/controllers/api/tauntHistoryController.ts new file mode 100644 index 00000000..6da5cb2c --- /dev/null +++ b/src/controllers/api/tauntHistoryController.ts @@ -0,0 +1,22 @@ +import { RequestHandler } from "express"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getInventory } from "@/src/services/inventoryService"; +import { ITaunt } from "@/src/types/inventoryTypes/inventoryTypes"; +import { logger } from "@/src/utils/logger"; + +// eslint-disable-next-line @typescript-eslint/no-misused-promises +export const tauntHistoryController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const clientTaunt = JSON.parse(String(req.body)) as ITaunt; + logger.debug(`updating taunt ${clientTaunt.node} to state ${clientTaunt.state}`); + inventory.TauntHistory ??= []; + const taunt = inventory.TauntHistory.find(x => x.node == clientTaunt.node); + if (taunt) { + taunt.state = clientTaunt.state; + } else { + inventory.TauntHistory.push(clientTaunt); + } + await inventory.save(); + res.end(); +}; diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index 8fdec7e7..c0004783 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -64,6 +64,7 @@ export const upgradesController: RequestHandler = async (req, res) => { case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker": + case "/Lotus/Types/Items/MiscItems/WeaponAmpArcaneUnlocker": for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.Features ??= 0; diff --git a/src/controllers/custom/pushArchonCrystalUpgradeController.ts b/src/controllers/custom/pushArchonCrystalUpgradeController.ts index cbe1023d..c12ea584 100644 --- a/src/controllers/custom/pushArchonCrystalUpgradeController.ts +++ b/src/controllers/custom/pushArchonCrystalUpgradeController.ts @@ -10,11 +10,13 @@ export const pushArchonCrystalUpgradeController: RequestHandler = async (req, re if (suit) { suit.ArchonCrystalUpgrades ??= []; const count = (req.query.count as number | undefined) ?? 1; - for (let i = 0; i != count; ++i) { - suit.ArchonCrystalUpgrades.push({ UpgradeType: req.query.type as string }); + if (count >= 1 && count <= 10000) { + for (let i = 0; i != count; ++i) { + suit.ArchonCrystalUpgrades.push({ UpgradeType: req.query.type as string }); + } + await inventory.save(); + res.end(); } - await inventory.save(); - res.end(); } res.status(400).end(); }; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 487600de..aee6aef2 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -31,7 +31,7 @@ import { IFusionTreasure, ISpectreLoadout, IWeaponSkinDatabase, - ITauntHistory, + ITaunt, IPeriodicMissionCompletionDatabase, IPeriodicMissionCompletionResponse, ILoreFragmentScan, @@ -533,7 +533,7 @@ weaponSkinsSchema.set("toJSON", { } }); -const tauntHistorySchema = new Schema( +const tauntSchema = new Schema( { node: String, state: String @@ -772,8 +772,8 @@ const inventorySchema = new Schema( //Ayatan Item FusionTreasures: [fusionTreasuresSchema], - //"node": "TreasureTutorial", "state": "TS_COMPLETED" - TauntHistory: [tauntHistorySchema], + //only used for Maroo apparently - { "node": "TreasureTutorial", "state": "TS_COMPLETED" } + TauntHistory: { type: [tauntSchema], default: undefined }, //noShow2FA,VisitPrimeVault etc WebFlags: Schema.Types.Mixed, diff --git a/src/routes/api.ts b/src/routes/api.ts index 4e7b7dc5..3d26dc13 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -24,7 +24,8 @@ import { getShipController } from "@/src/controllers/api/getShipController"; import { getVendorInfoController } from "@/src/controllers/api/getVendorInfoController"; import { giveKeyChainTriggeredItemsController } from "@/src/controllers/api/giveKeyChainTriggeredItemsController"; import { giveKeyChainTriggeredMessageController } from "@/src/controllers/api/giveKeyChainTriggeredMessageController"; -import { guildTechController } from "@/src/controllers/api/guildTechController"; +import { gildWeaponController } from "@/src/controllers/api/gildWeaponController"; +import { guildTechController } from "../controllers/api/guildTechController"; import { hostSessionController } from "@/src/controllers/api/hostSessionController"; import { hubController } from "@/src/controllers/api/hubController"; import { hubInstancesController } from "@/src/controllers/api/hubInstancesController"; @@ -58,6 +59,7 @@ import { startRecipeController } from "@/src/controllers/api/startRecipeControll import { stepSequencersController } from "@/src/controllers/api/stepSequencersController"; import { surveysController } from "@/src/controllers/api/surveysController"; import { syndicateSacrificeController } from "@/src/controllers/api/syndicateSacrificeController"; +import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController"; import { trainingResultController } from "@/src/controllers/api/trainingResultController"; import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController"; import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController"; @@ -65,7 +67,6 @@ import { updateQuestController } from "@/src/controllers/api/updateQuestControll import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController"; import { updateThemeController } from "@/src/controllers/api/updateThemeController"; import { upgradesController } from "@/src/controllers/api/upgradesController"; -import { gildWeaponController } from "@/src/controllers/api/gildWeaponController"; const apiRouter = express.Router(); @@ -134,6 +135,7 @@ apiRouter.post("/startDojoRecipe.php", startDojoRecipeController); apiRouter.post("/startRecipe.php", startRecipeController); apiRouter.post("/stepSequencers.php", stepSequencersController); apiRouter.post("/syndicateSacrifice.php", syndicateSacrificeController); +apiRouter.post("/tauntHistory.php", tauntHistoryController); apiRouter.post("/trainingResult.php", trainingResultController); apiRouter.post("/unlockShipFeature.php", unlockShipFeatureController); apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 3c049fa9..e0cdff3c 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -177,7 +177,7 @@ export interface IInventoryResponse { CompletedAlerts: string[]; Consumables: IConsumable[]; LevelKeys: IConsumable[]; - TauntHistory: ITauntHistory[]; + TauntHistory?: ITaunt[]; StoryModeChoice: string; PeriodicMissionCompletions: IPeriodicMissionCompletionDatabase[]; KubrowPetEggs: IKubrowPetEgg[]; @@ -888,9 +888,9 @@ export interface INotePacks { PERCUSSION: string; } -export interface ITauntHistory { +export interface ITaunt { node: string; - state: string; + state: "TS_UNLOCKED" | "TS_COMPLETED"; } export interface IWeaponSkinDatabase { diff --git a/static/webui/index.html b/static/webui/index.html index 5b49578e..505c3665 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -114,7 +114,7 @@

You can use these unlimited slots to apply a wide range of upgrades.

- + x