chore: replace unlockAllMissions config with an account cheats button #2241
@ -13,7 +13,6 @@
 | 
				
			|||||||
  "skipTutorial": false,
 | 
					  "skipTutorial": false,
 | 
				
			||||||
  "skipAllDialogue": false,
 | 
					  "skipAllDialogue": false,
 | 
				
			||||||
  "unlockAllScans": false,
 | 
					  "unlockAllScans": false,
 | 
				
			||||||
  "unlockAllMissions": false,
 | 
					 | 
				
			||||||
  "infiniteCredits": false,
 | 
					  "infiniteCredits": false,
 | 
				
			||||||
  "infinitePlatinum": false,
 | 
					  "infinitePlatinum": false,
 | 
				
			||||||
  "infiniteEndo": false,
 | 
					  "infiniteEndo": false,
 | 
				
			||||||
 | 
				
			|||||||
@ -6,13 +6,7 @@ import allDialogue from "@/static/fixed_responses/allDialogue.json";
 | 
				
			|||||||
import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
 | 
					import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
 | 
				
			||||||
import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
					import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
 | 
					import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
 | 
				
			||||||
import {
 | 
					import { ExportCustoms, ExportFlavour, ExportResources, ExportVirtuals } from "warframe-public-export-plus";
 | 
				
			||||||
    ExportCustoms,
 | 
					 | 
				
			||||||
    ExportFlavour,
 | 
					 | 
				
			||||||
    ExportRegions,
 | 
					 | 
				
			||||||
    ExportResources,
 | 
					 | 
				
			||||||
    ExportVirtuals
 | 
					 | 
				
			||||||
} from "warframe-public-export-plus";
 | 
					 | 
				
			||||||
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService";
 | 
					import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    addMiscItems,
 | 
					    addMiscItems,
 | 
				
			||||||
@ -22,7 +16,7 @@ import {
 | 
				
			|||||||
    generateRewardSeed
 | 
					    generateRewardSeed
 | 
				
			||||||
} from "@/src/services/inventoryService";
 | 
					} from "@/src/services/inventoryService";
 | 
				
			||||||
import { logger } from "@/src/utils/logger";
 | 
					import { logger } from "@/src/utils/logger";
 | 
				
			||||||
import { catBreadHash } from "@/src/helpers/stringHelpers";
 | 
					import { addString, catBreadHash } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
import { Types } from "mongoose";
 | 
					import { Types } from "mongoose";
 | 
				
			||||||
import { getNemesisManifest } from "@/src/helpers/nemesisHelpers";
 | 
					import { getNemesisManifest } from "@/src/helpers/nemesisHelpers";
 | 
				
			||||||
import { getPersonalRooms } from "@/src/services/personalRoomsService";
 | 
					import { getPersonalRooms } from "@/src/services/personalRoomsService";
 | 
				
			||||||
@ -167,18 +161,6 @@ export const getInventoryResponse = async (
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (config.unlockAllMissions) {
 | 
					 | 
				
			||||||
        inventoryResponse.Missions = [];
 | 
					 | 
				
			||||||
        for (const tag of Object.keys(ExportRegions)) {
 | 
					 | 
				
			||||||
            inventoryResponse.Missions.push({
 | 
					 | 
				
			||||||
                Completes: 1,
 | 
					 | 
				
			||||||
                Tier: 1,
 | 
					 | 
				
			||||||
                Tag: tag
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        addString(inventoryResponse.NodeIntrosCompleted, "TeshinHardModeUnlocked");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (config.unlockAllShipDecorations) {
 | 
					    if (config.unlockAllShipDecorations) {
 | 
				
			||||||
        inventoryResponse.ShipDecorations = [];
 | 
					        inventoryResponse.ShipDecorations = [];
 | 
				
			||||||
        for (const [uniqueName, item] of Object.entries(ExportResources)) {
 | 
					        for (const [uniqueName, item] of Object.entries(ExportResources)) {
 | 
				
			||||||
@ -362,12 +344,6 @@ const allEudicoHeistJobs = [
 | 
				
			|||||||
    "/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyFour"
 | 
					    "/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyFour"
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const addString = (arr: string[], str: string): void => {
 | 
					 | 
				
			||||||
    if (arr.indexOf(str) == -1) {
 | 
					 | 
				
			||||||
        arr.push(str);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const getExpRequiredForMr = (rank: number): number => {
 | 
					const getExpRequiredForMr = (rank: number): number => {
 | 
				
			||||||
    if (rank <= 30) {
 | 
					    if (rank <= 30) {
 | 
				
			||||||
        return 2500 * rank * rank;
 | 
					        return 2500 * rank * rank;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										34
									
								
								src/controllers/custom/completeAllMissionsController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/controllers/custom/completeAllMissionsController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					import { addString } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { addFixedLevelRewards } from "@/src/services/missionInventoryUpdateService";
 | 
				
			||||||
 | 
					import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
 | 
				
			||||||
 | 
					import { IMissionReward } from "@/src/types/missionTypes";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					import { ExportRegions } from "warframe-public-export-plus";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const completeAllMissionsController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    const MissionRewards: IMissionReward[] = [];
 | 
				
			||||||
 | 
					    for (const [tag, node] of Object.entries(ExportRegions)) {
 | 
				
			||||||
 | 
					        if (!inventory.Missions.find(x => x.Tag == tag)) {
 | 
				
			||||||
 | 
					            inventory.Missions.push({
 | 
				
			||||||
 | 
					                Completes: 1,
 | 
				
			||||||
 | 
					                Tier: 1,
 | 
				
			||||||
 | 
					                Tag: tag
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (node.missionReward) {
 | 
				
			||||||
 | 
					                console.log(node.missionReward);
 | 
				
			||||||
 | 
					                addFixedLevelRewards(node.missionReward, inventory, MissionRewards);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for (const reward of MissionRewards) {
 | 
				
			||||||
 | 
					        await handleStoreItemAcquisition(reward.StoreItem, inventory, reward.ItemCount, undefined, true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    addString(inventory.NodeIntrosCompleted, "TeshinHardModeUnlocked");
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -54,3 +54,9 @@ export const regexEscape = (str: string): string => {
 | 
				
			|||||||
    str = str.split("}").join("\\}");
 | 
					    str = str.split("}").join("\\}");
 | 
				
			||||||
    return str;
 | 
					    return str;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const addString = (arr: string[], str: string): void => {
 | 
				
			||||||
 | 
					    if (arr.indexOf(str) == -1) {
 | 
				
			||||||
 | 
					        arr.push(str);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ import { ircDroppedController } from "@/src/controllers/custom/ircDroppedControl
 | 
				
			|||||||
import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
 | 
					import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
 | 
				
			||||||
import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMissingMaxRankModsController";
 | 
					import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMissingMaxRankModsController";
 | 
				
			||||||
import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController";
 | 
					import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController";
 | 
				
			||||||
 | 
					import { completeAllMissionsController } from "@/src/controllers/custom/completeAllMissionsController";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { createAccountController } from "@/src/controllers/custom/createAccountController";
 | 
					import { createAccountController } from "@/src/controllers/custom/createAccountController";
 | 
				
			||||||
import { createMessageController } from "@/src/controllers/custom/createMessageController";
 | 
					import { createMessageController } from "@/src/controllers/custom/createMessageController";
 | 
				
			||||||
@ -40,6 +41,7 @@ customRouter.get("/ircDropped", ircDroppedController);
 | 
				
			|||||||
customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
 | 
					customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
 | 
				
			||||||
customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController);
 | 
					customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController);
 | 
				
			||||||
customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController);
 | 
					customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController);
 | 
				
			||||||
 | 
					customRouter.get("/completeAllMissions", completeAllMissionsController);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
customRouter.post("/createAccount", createAccountController);
 | 
					customRouter.post("/createAccount", createAccountController);
 | 
				
			||||||
customRouter.post("/createMessage", createMessageController);
 | 
					customRouter.post("/createMessage", createMessageController);
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,6 @@ export interface IConfig {
 | 
				
			|||||||
    skipTutorial?: boolean;
 | 
					    skipTutorial?: boolean;
 | 
				
			||||||
    skipAllDialogue?: boolean;
 | 
					    skipAllDialogue?: boolean;
 | 
				
			||||||
    unlockAllScans?: boolean;
 | 
					    unlockAllScans?: boolean;
 | 
				
			||||||
    unlockAllMissions?: boolean;
 | 
					 | 
				
			||||||
    infiniteCredits?: boolean;
 | 
					    infiniteCredits?: boolean;
 | 
				
			||||||
    infinitePlatinum?: boolean;
 | 
					    infinitePlatinum?: boolean;
 | 
				
			||||||
    infiniteEndo?: boolean;
 | 
					    infiniteEndo?: boolean;
 | 
				
			||||||
 | 
				
			|||||||
@ -1367,7 +1367,7 @@ export const addFixedLevelRewards = (
 | 
				
			|||||||
    if (rewards.countedItems) {
 | 
					    if (rewards.countedItems) {
 | 
				
			||||||
        for (const item of rewards.countedItems) {
 | 
					        for (const item of rewards.countedItems) {
 | 
				
			||||||
            MissionRewards.push({
 | 
					            MissionRewards.push({
 | 
				
			||||||
                StoreItem: `/Lotus/StoreItems${item.ItemType.substring("Lotus/".length)}`,
 | 
					                StoreItem: toStoreItem(item.ItemType),
 | 
				
			||||||
                ItemCount: item.ItemCount
 | 
					                ItemCount: item.ItemCount
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -452,9 +452,6 @@
 | 
				
			|||||||
                            <button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
 | 
					                            <button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
 | 
				
			||||||
                            <button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
 | 
					                            <button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="mb-2 d-flex flex-wrap gap-2">
 | 
					 | 
				
			||||||
                            <button class="btn btn-primary" onclick="debounce(doMaxPlexus);" data-loc="inventory_maxPlexus"></button>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@ -587,10 +584,6 @@
 | 
				
			|||||||
                                        <input class="form-check-input" type="checkbox" id="unlockAllScans" />
 | 
					                                        <input class="form-check-input" type="checkbox" id="unlockAllScans" />
 | 
				
			||||||
                                        <label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
 | 
					                                        <label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="form-check">
 | 
					 | 
				
			||||||
                                        <input class="form-check-input" type="checkbox" id="unlockAllMissions" />
 | 
					 | 
				
			||||||
                                        <label class="form-check-label" for="unlockAllMissions" data-loc="cheats_unlockAllMissions"></label>
 | 
					 | 
				
			||||||
                                    </div>
 | 
					 | 
				
			||||||
                                    <div class="form-check">
 | 
					                                    <div class="form-check">
 | 
				
			||||||
                                        <input class="form-check-input" type="checkbox" id="infiniteCredits" />
 | 
					                                        <input class="form-check-input" type="checkbox" id="infiniteCredits" />
 | 
				
			||||||
                                        <label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
 | 
					                                        <label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
 | 
				
			||||||
@ -782,9 +775,11 @@
 | 
				
			|||||||
                            <h5 class="card-header" data-loc="cheats_account"></h5>
 | 
					                            <h5 class="card-header" data-loc="cheats_account"></h5>
 | 
				
			||||||
                            <div class="card-body">
 | 
					                            <div class="card-body">
 | 
				
			||||||
                                <div class="mb-2 d-flex flex-wrap gap-2">
 | 
					                                <div class="mb-2 d-flex flex-wrap gap-2">
 | 
				
			||||||
 | 
					                                    <button class="btn btn-primary" onclick="debounce(doUnlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
 | 
				
			||||||
                                    <button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
 | 
					                                    <button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
 | 
				
			||||||
                                    <button class="btn btn-primary" onclick="doHelminthUnlockAll();" data-loc="cheats_helminthUnlockAll"></button>
 | 
					                                    <button class="btn btn-primary" onclick="doHelminthUnlockAll();" data-loc="cheats_helminthUnlockAll"></button>
 | 
				
			||||||
                                    <button class="btn btn-primary" onclick="doIntrinsicsUnlockAll();" data-loc="cheats_intrinsicsUnlockAll"></button>
 | 
					                                    <button class="btn btn-primary" onclick="doIntrinsicsUnlockAll();" data-loc="cheats_intrinsicsUnlockAll"></button>
 | 
				
			||||||
 | 
					                                    <button class="btn btn-primary" onclick="debounce(doMaxPlexus);" data-loc="inventory_maxPlexus"></button>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <form class="mt-2" onsubmit="doChangeSupportedSyndicate(); return false;">
 | 
					                                <form class="mt-2" onsubmit="doChangeSupportedSyndicate(); return false;">
 | 
				
			||||||
                                    <label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
 | 
					                                    <label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
 | 
				
			||||||
 | 
				
			|||||||
@ -2330,3 +2330,9 @@ async function doMaxPlexus() {
 | 
				
			|||||||
        toast(loc("code_noEquipmentToRankUp"));
 | 
					        toast(loc("code_noEquipmentToRankUp"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function doUnlockAllMissions() {
 | 
				
			||||||
 | 
					    await revalidateAuthz();
 | 
				
			||||||
 | 
					    await fetch("/custom/completeAllMissions?" + window.authz);
 | 
				
			||||||
 | 
					    updateInventory();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user