Merge branch 'main' into main

This commit is contained in:
Master 2024-07-01 22:21:45 +08:00 committed by GitHub
commit 11fd4c060f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 41 additions and 14 deletions

View File

@ -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();
};

View File

@ -64,6 +64,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponAmpArcaneUnlocker":
for (const item of inventory[payload.ItemCategory]) { for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0; item.Features ??= 0;

View File

@ -10,11 +10,13 @@ export const pushArchonCrystalUpgradeController: RequestHandler = async (req, re
if (suit) { if (suit) {
suit.ArchonCrystalUpgrades ??= []; suit.ArchonCrystalUpgrades ??= [];
const count = (req.query.count as number | undefined) ?? 1; const count = (req.query.count as number | undefined) ?? 1;
if (count >= 1 && count <= 10000) {
for (let i = 0; i != count; ++i) { for (let i = 0; i != count; ++i) {
suit.ArchonCrystalUpgrades.push({ UpgradeType: req.query.type as string }); suit.ArchonCrystalUpgrades.push({ UpgradeType: req.query.type as string });
} }
await inventory.save(); await inventory.save();
res.end(); res.end();
} }
}
res.status(400).end(); res.status(400).end();
}; };

View File

@ -31,7 +31,7 @@ import {
IFusionTreasure, IFusionTreasure,
ISpectreLoadout, ISpectreLoadout,
IWeaponSkinDatabase, IWeaponSkinDatabase,
ITauntHistory, ITaunt,
IPeriodicMissionCompletionDatabase, IPeriodicMissionCompletionDatabase,
IPeriodicMissionCompletionResponse, IPeriodicMissionCompletionResponse,
ILoreFragmentScan, ILoreFragmentScan,
@ -533,7 +533,7 @@ weaponSkinsSchema.set("toJSON", {
} }
}); });
const tauntHistorySchema = new Schema<ITauntHistory>( const tauntSchema = new Schema<ITaunt>(
{ {
node: String, node: String,
state: String state: String
@ -772,8 +772,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//Ayatan Item //Ayatan Item
FusionTreasures: [fusionTreasuresSchema], FusionTreasures: [fusionTreasuresSchema],
//"node": "TreasureTutorial", "state": "TS_COMPLETED" //only used for Maroo apparently - { "node": "TreasureTutorial", "state": "TS_COMPLETED" }
TauntHistory: [tauntHistorySchema], TauntHistory: { type: [tauntSchema], default: undefined },
//noShow2FA,VisitPrimeVault etc //noShow2FA,VisitPrimeVault etc
WebFlags: Schema.Types.Mixed, WebFlags: Schema.Types.Mixed,

View File

@ -24,7 +24,8 @@ import { getShipController } from "@/src/controllers/api/getShipController";
import { getVendorInfoController } from "@/src/controllers/api/getVendorInfoController"; import { getVendorInfoController } from "@/src/controllers/api/getVendorInfoController";
import { giveKeyChainTriggeredItemsController } from "@/src/controllers/api/giveKeyChainTriggeredItemsController"; import { giveKeyChainTriggeredItemsController } from "@/src/controllers/api/giveKeyChainTriggeredItemsController";
import { giveKeyChainTriggeredMessageController } from "@/src/controllers/api/giveKeyChainTriggeredMessageController"; 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 { hostSessionController } from "@/src/controllers/api/hostSessionController";
import { hubController } from "@/src/controllers/api/hubController"; import { hubController } from "@/src/controllers/api/hubController";
import { hubInstancesController } from "@/src/controllers/api/hubInstancesController"; 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 { stepSequencersController } from "@/src/controllers/api/stepSequencersController";
import { surveysController } from "@/src/controllers/api/surveysController"; import { surveysController } from "@/src/controllers/api/surveysController";
import { syndicateSacrificeController } from "@/src/controllers/api/syndicateSacrificeController"; import { syndicateSacrificeController } from "@/src/controllers/api/syndicateSacrificeController";
import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController";
import { trainingResultController } from "@/src/controllers/api/trainingResultController"; import { trainingResultController } from "@/src/controllers/api/trainingResultController";
import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController"; import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController";
import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController"; 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 { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
import { updateThemeController } from "@/src/controllers/api/updateThemeController"; import { updateThemeController } from "@/src/controllers/api/updateThemeController";
import { upgradesController } from "@/src/controllers/api/upgradesController"; import { upgradesController } from "@/src/controllers/api/upgradesController";
import { gildWeaponController } from "@/src/controllers/api/gildWeaponController";
const apiRouter = express.Router(); const apiRouter = express.Router();
@ -134,6 +135,7 @@ apiRouter.post("/startDojoRecipe.php", startDojoRecipeController);
apiRouter.post("/startRecipe.php", startRecipeController); apiRouter.post("/startRecipe.php", startRecipeController);
apiRouter.post("/stepSequencers.php", stepSequencersController); apiRouter.post("/stepSequencers.php", stepSequencersController);
apiRouter.post("/syndicateSacrifice.php", syndicateSacrificeController); apiRouter.post("/syndicateSacrifice.php", syndicateSacrificeController);
apiRouter.post("/tauntHistory.php", tauntHistoryController);
apiRouter.post("/trainingResult.php", trainingResultController); apiRouter.post("/trainingResult.php", trainingResultController);
apiRouter.post("/unlockShipFeature.php", unlockShipFeatureController); apiRouter.post("/unlockShipFeature.php", unlockShipFeatureController);
apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController); apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController);

View File

@ -177,7 +177,7 @@ export interface IInventoryResponse {
CompletedAlerts: string[]; CompletedAlerts: string[];
Consumables: IConsumable[]; Consumables: IConsumable[];
LevelKeys: IConsumable[]; LevelKeys: IConsumable[];
TauntHistory: ITauntHistory[]; TauntHistory?: ITaunt[];
StoryModeChoice: string; StoryModeChoice: string;
PeriodicMissionCompletions: IPeriodicMissionCompletionDatabase[]; PeriodicMissionCompletions: IPeriodicMissionCompletionDatabase[];
KubrowPetEggs: IKubrowPetEgg[]; KubrowPetEggs: IKubrowPetEgg[];
@ -888,9 +888,9 @@ export interface INotePacks {
PERCUSSION: string; PERCUSSION: string;
} }
export interface ITauntHistory { export interface ITaunt {
node: string; node: string;
state: string; state: "TS_UNLOCKED" | "TS_COMPLETED";
} }
export interface IWeaponSkinDatabase { export interface IWeaponSkinDatabase {

View File

@ -114,7 +114,7 @@
<div class="card-body"> <div class="card-body">
<p>You can use these unlimited slots to apply a wide range of upgrades.</p> <p>You can use these unlimited slots to apply a wide range of upgrades.</p>
<form class="input-group mb-3" onsubmit="doPushArchonCrystalUpgrade();return false;"> <form class="input-group mb-3" onsubmit="doPushArchonCrystalUpgrade();return false;">
<input type="number" id="archon-crystal-add-count" min="1" value="1" class="form-control" style="max-width:100px" /> <input type="number" id="archon-crystal-add-count" min="1" max="10000" value="1" class="form-control" style="max-width:100px" />
<span class="input-group-text">x</span> <span class="input-group-text">x</span>
<input class="form-control" list="datalist-archonCrystalUpgrades" /> <input class="form-control" list="datalist-archonCrystalUpgrades" />
<button class="btn btn-primary" type="submit">Add</button> <button class="btn btn-primary" type="submit">Add</button>