forked from OpenWF/SpaceNinjaServer
		
	feat: reverseQuestProgress (#2948)
Closes #2939 Reviewed-on: OpenWF/SpaceNinjaServer#2948 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									b2749765a3
								
							
						
					
					
						commit
						f3072e84c9
					
				@ -1,12 +1,12 @@
 | 
				
			|||||||
import type { RequestHandler } from "express";
 | 
					import type { RequestHandler } from "express";
 | 
				
			||||||
import { parseString } from "../../helpers/general.ts";
 | 
					 | 
				
			||||||
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
 | 
					import { getJSONfromString } from "../../helpers/stringHelpers.ts";
 | 
				
			||||||
import { getInventory } from "../../services/inventoryService.ts";
 | 
					import { getInventory } from "../../services/inventoryService.ts";
 | 
				
			||||||
import { giveKeyChainItem } from "../../services/questService.ts";
 | 
					import { giveKeyChainItem } from "../../services/questService.ts";
 | 
				
			||||||
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
 | 
					import type { IKeyChainRequest } from "../../types/requestTypes.ts";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "../../services/loginService.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
 | 
					export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
 | 
				
			||||||
    const accountId = parseString(req.query.accountId);
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
    const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
 | 
					    const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const inventory = await getInventory(accountId);
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								src/controllers/api/reverseQuestProgressController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/controllers/api/reverseQuestProgressController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					import type { RequestHandler } from "express";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "../../services/loginService.ts";
 | 
				
			||||||
 | 
					import { resetQuestKeyToStage } from "../../services/questService.ts";
 | 
				
			||||||
 | 
					import { getInventory } from "../../services/inventoryService.ts";
 | 
				
			||||||
 | 
					import { getJSONfromString } from "../../helpers/stringHelpers.ts";
 | 
				
			||||||
 | 
					import type { IKeyChainRequest } from "../../types/requestTypes.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const reverseQuestProgressController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    resetQuestKeyToStage(inventory, keyChainInfo);
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -120,6 +120,7 @@ import { rerollRandomModController } from "../controllers/api/rerollRandomModCon
 | 
				
			|||||||
import { researchMushroomController } from "../controllers/api/researchMushroomController.ts";
 | 
					import { researchMushroomController } from "../controllers/api/researchMushroomController.ts";
 | 
				
			||||||
import { resetQuestProgressController } from "../controllers/api/resetQuestProgressController.ts";
 | 
					import { resetQuestProgressController } from "../controllers/api/resetQuestProgressController.ts";
 | 
				
			||||||
import { retrievePetFromStasisController } from "../controllers/api/retrievePetFromStasisController.ts";
 | 
					import { retrievePetFromStasisController } from "../controllers/api/retrievePetFromStasisController.ts";
 | 
				
			||||||
 | 
					import { reverseQuestProgressController } from "../controllers/api/reverseQuestProgressController.ts";
 | 
				
			||||||
import { saveDialogueController } from "../controllers/api/saveDialogueController.ts";
 | 
					import { saveDialogueController } from "../controllers/api/saveDialogueController.ts";
 | 
				
			||||||
import { saveLoadoutController } from "../controllers/api/saveLoadoutController.ts";
 | 
					import { saveLoadoutController } from "../controllers/api/saveLoadoutController.ts";
 | 
				
			||||||
import { saveSettingsController } from "../controllers/api/saveSettingsController.ts";
 | 
					import { saveSettingsController } from "../controllers/api/saveSettingsController.ts";
 | 
				
			||||||
@ -323,6 +324,7 @@ apiRouter.post("/renamePet.php", renamePetController);
 | 
				
			|||||||
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
 | 
					apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
 | 
				
			||||||
apiRouter.post("/researchMushroom.php", researchMushroomController);
 | 
					apiRouter.post("/researchMushroom.php", researchMushroomController);
 | 
				
			||||||
apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
 | 
					apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
 | 
				
			||||||
 | 
					apiRouter.post("/reverseQuestProgress.php", reverseQuestProgressController);
 | 
				
			||||||
apiRouter.post("/saveDialogue.php", saveDialogueController);
 | 
					apiRouter.post("/saveDialogue.php", saveDialogueController);
 | 
				
			||||||
apiRouter.post("/saveLoadout.php", saveLoadoutController);
 | 
					apiRouter.post("/saveLoadout.php", saveLoadoutController);
 | 
				
			||||||
apiRouter.post("/saveSettings.php", saveSettingsController);
 | 
					apiRouter.post("/saveSettings.php", saveSettingsController);
 | 
				
			||||||
 | 
				
			|||||||
@ -92,6 +92,30 @@ export const updateQuestStage = (
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const resetQuestKeyToStage = (
 | 
				
			||||||
 | 
					    inventory: TInventoryDatabaseDocument,
 | 
				
			||||||
 | 
					    { KeyChain, ChainStage }: IKeyChainRequest
 | 
				
			||||||
 | 
					): void => {
 | 
				
			||||||
 | 
					    const quest = inventory.QuestKeys.find(quest => quest.ItemType === KeyChain);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!quest) {
 | 
				
			||||||
 | 
					        throw new Error(`Quest ${KeyChain} not found in QuestKeys`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    quest.Progress ??= [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    quest.Progress.splice(1 + ChainStage); // remove stages past the target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const questStage = quest.Progress[ChainStage];
 | 
				
			||||||
 | 
					    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | 
				
			||||||
 | 
					    if (questStage) {
 | 
				
			||||||
 | 
					        const run = quest.Progress[0].c;
 | 
				
			||||||
 | 
					        if (run >= 0) {
 | 
				
			||||||
 | 
					            questStage.c = run - 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const addQuestKey = (
 | 
					export const addQuestKey = (
 | 
				
			||||||
    inventory: TInventoryDatabaseDocument,
 | 
					    inventory: TInventoryDatabaseDocument,
 | 
				
			||||||
    questKey: IQuestKeyDatabase
 | 
					    questKey: IQuestKeyDatabase
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user