feat(webui): add missing max rank mods #1863
							
								
								
									
										44
									
								
								src/controllers/custom/addMissingMaxRankModsController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/controllers/custom/addMissingMaxRankModsController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					import { ExportArcanes, ExportUpgrades } from "warframe-public-export-plus";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const addMissingMaxRankModsController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId, "Upgrades");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const maxOwnedRanks: Record<string, number> = {};
 | 
				
			||||||
 | 
					    for (const upgrade of inventory.Upgrades) {
 | 
				
			||||||
 | 
					        const fingerprint = JSON.parse(upgrade.UpgradeFingerprint ?? "{}") as { lvl?: number };
 | 
				
			||||||
 | 
					        if (fingerprint.lvl) {
 | 
				
			||||||
 | 
					            maxOwnedRanks[upgrade.ItemType] ??= 0;
 | 
				
			||||||
 | 
					            if (fingerprint.lvl > maxOwnedRanks[upgrade.ItemType]) {
 | 
				
			||||||
 | 
					                maxOwnedRanks[upgrade.ItemType] = fingerprint.lvl;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const [uniqueName, data] of Object.entries(ExportUpgrades)) {
 | 
				
			||||||
 | 
					        if (data.fusionLimit != 0 && data.type != "PARAZON" && maxOwnedRanks[uniqueName] != data.fusionLimit) {
 | 
				
			||||||
 | 
					            inventory.Upgrades.push({
 | 
				
			||||||
 | 
					                ItemType: uniqueName,
 | 
				
			||||||
 | 
					                UpgradeFingerprint: JSON.stringify({ lvl: data.fusionLimit })
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const [uniqueName, data] of Object.entries(ExportArcanes)) {
 | 
				
			||||||
 | 
					        if (
 | 
				
			||||||
 | 
					            data.name != "/Lotus/Language/Items/GenericCosmeticEnhancerName" &&
 | 
				
			||||||
 | 
					            maxOwnedRanks[uniqueName] != data.fusionLimit
 | 
				
			||||||
 | 
					        ) {
 | 
				
			||||||
 | 
					            inventory.Upgrades.push({
 | 
				
			||||||
 | 
					                ItemType: uniqueName,
 | 
				
			||||||
 | 
					                UpgradeFingerprint: JSON.stringify({ lvl: data.fusionLimit })
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -10,6 +10,7 @@ import { getAccountInfoController } from "@/src/controllers/custom/getAccountInf
 | 
				
			|||||||
import { renameAccountController } from "@/src/controllers/custom/renameAccountController";
 | 
					import { renameAccountController } from "@/src/controllers/custom/renameAccountController";
 | 
				
			||||||
import { ircDroppedController } from "@/src/controllers/custom/ircDroppedController";
 | 
					import { ircDroppedController } from "@/src/controllers/custom/ircDroppedController";
 | 
				
			||||||
import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
 | 
					import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
 | 
				
			||||||
 | 
					import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMissingMaxRankModsController";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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";
 | 
				
			||||||
@ -35,6 +36,7 @@ customRouter.get("/getAccountInfo", getAccountInfoController);
 | 
				
			|||||||
customRouter.get("/renameAccount", renameAccountController);
 | 
					customRouter.get("/renameAccount", renameAccountController);
 | 
				
			||||||
customRouter.get("/ircDropped", ircDroppedController);
 | 
					customRouter.get("/ircDropped", ircDroppedController);
 | 
				
			||||||
customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
 | 
					customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
 | 
				
			||||||
 | 
					customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
customRouter.post("/createAccount", createAccountController);
 | 
					customRouter.post("/createAccount", createAccountController);
 | 
				
			||||||
customRouter.post("/createMessage", createMessageController);
 | 
					customRouter.post("/createMessage", createMessageController);
 | 
				
			||||||
 | 
				
			|||||||
@ -510,8 +510,9 @@
 | 
				
			|||||||
                        <div class="card mb-3">
 | 
					                        <div class="card mb-3">
 | 
				
			||||||
                            <h5 class="card-header" data-loc="general_bulkActions"></h5>
 | 
					                            <h5 class="card-header" data-loc="general_bulkActions"></h5>
 | 
				
			||||||
                            <div class="card-body d-flex flex-wrap gap-2">
 | 
					                            <div class="card-body d-flex flex-wrap gap-2">
 | 
				
			||||||
                                <button class="btn btn-primary" onclick="doAddAllMods();" data-loc="mods_bulkAddMods"></button>
 | 
					                                <button class="btn btn-primary" onclick="doAddAllMods();" data-loc="mods_addMissingUnrankedMods"></button>
 | 
				
			||||||
                                <button class="btn btn-danger" onclick="doRemoveUnrankedMods();" data-loc="mods_removeUnranked"></button>
 | 
					                                <button class="btn btn-danger" onclick="doRemoveUnrankedMods();" data-loc="mods_removeUnranked"></button>
 | 
				
			||||||
 | 
					                                <button class="btn btn-primary" onclick="doAddMissingMaxRankMods();" data-loc="mods_addMissingMaxRankMods"></button>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -1795,6 +1795,14 @@ function doRemoveUnrankedMods() {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function doAddMissingMaxRankMods() {
 | 
				
			||||||
 | 
					    revalidateAuthz(() => {
 | 
				
			||||||
 | 
					        fetch("/custom/addMissingMaxRankMods?" + window.authz).then(() => {
 | 
				
			||||||
 | 
					            updateInventory();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Powersuit Route
 | 
					// Powersuit Route
 | 
				
			||||||
 | 
					
 | 
				
			||||||
single.getRoute("#powersuit-route").on("beforeload", function () {
 | 
					single.getRoute("#powersuit-route").on("beforeload", function () {
 | 
				
			||||||
 | 
				
			|||||||
@ -120,8 +120,9 @@ dict = {
 | 
				
			|||||||
    mods_fingerprintHelp: `Benötigst du Hilfe mit dem Fingerabdruck?`,
 | 
					    mods_fingerprintHelp: `Benötigst du Hilfe mit dem Fingerabdruck?`,
 | 
				
			||||||
    mods_rivens: `Rivens`,
 | 
					    mods_rivens: `Rivens`,
 | 
				
			||||||
    mods_mods: `Mods`,
 | 
					    mods_mods: `Mods`,
 | 
				
			||||||
    mods_bulkAddMods: `Fehlende Mods hinzufügen`,
 | 
					    mods_addMissingUnrankedMods: `[UNTRANSLATED] Add Missing Unranked Mods`,
 | 
				
			||||||
    mods_removeUnranked: `Mods ohne Rang entfernen`,
 | 
					    mods_removeUnranked: `Mods ohne Rang entfernen`,
 | 
				
			||||||
 | 
					    mods_addMissingMaxRankMods: `[UNTRANSLATED] Add Missing Max Rank Mods`,
 | 
				
			||||||
    cheats_administratorRequirement: `Du musst Administrator sein, um diese Funktion nutzen zu können. Um Administrator zu werden, füge <code>|DISPLAYNAME|</code> zu <code>administratorNames</code> in der config.json hinzu.`,
 | 
					    cheats_administratorRequirement: `Du musst Administrator sein, um diese Funktion nutzen zu können. Um Administrator zu werden, füge <code>|DISPLAYNAME|</code> zu <code>administratorNames</code> in der config.json hinzu.`,
 | 
				
			||||||
    cheats_server: `Server`,
 | 
					    cheats_server: `Server`,
 | 
				
			||||||
    cheats_skipTutorial: `Tutorial überspringen`,
 | 
					    cheats_skipTutorial: `Tutorial überspringen`,
 | 
				
			||||||
 | 
				
			|||||||
@ -119,8 +119,9 @@ dict = {
 | 
				
			|||||||
    mods_fingerprintHelp: `Need help with the fingerprint?`,
 | 
					    mods_fingerprintHelp: `Need help with the fingerprint?`,
 | 
				
			||||||
    mods_rivens: `Rivens`,
 | 
					    mods_rivens: `Rivens`,
 | 
				
			||||||
    mods_mods: `Mods`,
 | 
					    mods_mods: `Mods`,
 | 
				
			||||||
    mods_bulkAddMods: `Add Missing Mods`,
 | 
					    mods_addMissingUnrankedMods: `Add Missing Unranked Mods`,
 | 
				
			||||||
    mods_removeUnranked: `Remove Unranked Mods`,
 | 
					    mods_removeUnranked: `Remove Unranked Mods`,
 | 
				
			||||||
 | 
					    mods_addMissingMaxRankMods: `Add Missing Max Rank Mods`,
 | 
				
			||||||
    cheats_administratorRequirement: `You must be an administrator to use this feature. To become an administrator, add <code>|DISPLAYNAME|</code> to <code>administratorNames</code> in the config.json.`,
 | 
					    cheats_administratorRequirement: `You must be an administrator to use this feature. To become an administrator, add <code>|DISPLAYNAME|</code> to <code>administratorNames</code> in the config.json.`,
 | 
				
			||||||
    cheats_server: `Server`,
 | 
					    cheats_server: `Server`,
 | 
				
			||||||
    cheats_skipTutorial: `Skip Tutorial`,
 | 
					    cheats_skipTutorial: `Skip Tutorial`,
 | 
				
			||||||
 | 
				
			|||||||
@ -120,8 +120,9 @@ dict = {
 | 
				
			|||||||
    mods_fingerprintHelp: `¿Necesitas ayuda con la huella digital?`,
 | 
					    mods_fingerprintHelp: `¿Necesitas ayuda con la huella digital?`,
 | 
				
			||||||
    mods_rivens: `Agrietados`,
 | 
					    mods_rivens: `Agrietados`,
 | 
				
			||||||
    mods_mods: `Mods`,
 | 
					    mods_mods: `Mods`,
 | 
				
			||||||
    mods_bulkAddMods: `Agregar mods faltantes`,
 | 
					    mods_addMissingUnrankedMods: `[UNTRANSLATED] Add Missing Unranked Mods`,
 | 
				
			||||||
    mods_removeUnranked: `Quitar mods sin rango`,
 | 
					    mods_removeUnranked: `Quitar mods sin rango`,
 | 
				
			||||||
 | 
					    mods_addMissingMaxRankMods: `[UNTRANSLATED] Add Missing Max Rank Mods`,
 | 
				
			||||||
    cheats_administratorRequirement: `Debes ser administrador para usar esta función. Para convertirte en administrador, agrega <code>|DISPLAYNAME|</code> a <code>administratorNames</code> en el archivo config.json.`,
 | 
					    cheats_administratorRequirement: `Debes ser administrador para usar esta función. Para convertirte en administrador, agrega <code>|DISPLAYNAME|</code> a <code>administratorNames</code> en el archivo config.json.`,
 | 
				
			||||||
    cheats_server: `Servidor`,
 | 
					    cheats_server: `Servidor`,
 | 
				
			||||||
    cheats_skipTutorial: `Omitir tutorial`,
 | 
					    cheats_skipTutorial: `Omitir tutorial`,
 | 
				
			||||||
 | 
				
			|||||||
@ -120,8 +120,9 @@ dict = {
 | 
				
			|||||||
    mods_fingerprintHelp: `Besoin d'aide pour l'empreinte ?`,
 | 
					    mods_fingerprintHelp: `Besoin d'aide pour l'empreinte ?`,
 | 
				
			||||||
    mods_rivens: `Rivens`,
 | 
					    mods_rivens: `Rivens`,
 | 
				
			||||||
    mods_mods: `Mods`,
 | 
					    mods_mods: `Mods`,
 | 
				
			||||||
    mods_bulkAddMods: `Ajouter les mods manquants`,
 | 
					    mods_addMissingUnrankedMods: `[UNTRANSLATED] Add Missing Unranked Mods`,
 | 
				
			||||||
    mods_removeUnranked: `[UNTRANSLATED] Remove Unranked Mods`,
 | 
					    mods_removeUnranked: `[UNTRANSLATED] Remove Unranked Mods`,
 | 
				
			||||||
 | 
					    mods_addMissingMaxRankMods: `[UNTRANSLATED] Add Missing Max Rank Mods`,
 | 
				
			||||||
    cheats_administratorRequirement: `Rôle d'administrateur requis pour cette fonctionnalité. Ajoutez <code>|DISPLAYNAME|</code> à la ligne <code>administratorNames</code> dans le fichier config.json.`,
 | 
					    cheats_administratorRequirement: `Rôle d'administrateur requis pour cette fonctionnalité. Ajoutez <code>|DISPLAYNAME|</code> à la ligne <code>administratorNames</code> dans le fichier config.json.`,
 | 
				
			||||||
    cheats_server: `Serveur`,
 | 
					    cheats_server: `Serveur`,
 | 
				
			||||||
    cheats_skipTutorial: `Passer le tutoriel`,
 | 
					    cheats_skipTutorial: `Passer le tutoriel`,
 | 
				
			||||||
 | 
				
			|||||||
@ -120,8 +120,9 @@ dict = {
 | 
				
			|||||||
    mods_fingerprintHelp: `Нужна помощь с отпечатком?`,
 | 
					    mods_fingerprintHelp: `Нужна помощь с отпечатком?`,
 | 
				
			||||||
    mods_rivens: `Моды Разлома`,
 | 
					    mods_rivens: `Моды Разлома`,
 | 
				
			||||||
    mods_mods: `Моды`,
 | 
					    mods_mods: `Моды`,
 | 
				
			||||||
    mods_bulkAddMods: `Добавить отсутствующие моды`,
 | 
					    mods_addMissingUnrankedMods: `[UNTRANSLATED] Add Missing Unranked Mods`,
 | 
				
			||||||
    mods_removeUnranked: `[UNTRANSLATED] Remove Unranked Mods`,
 | 
					    mods_removeUnranked: `[UNTRANSLATED] Remove Unranked Mods`,
 | 
				
			||||||
 | 
					    mods_addMissingMaxRankMods: `[UNTRANSLATED] Add Missing Max Rank Mods`,
 | 
				
			||||||
    cheats_administratorRequirement: `Вы должны быть администратором для использования этой функции. Чтобы стать администратором, добавьте <code>\"|DISPLAYNAME|\"</code> в <code>administratorNames</code> в config.json.`,
 | 
					    cheats_administratorRequirement: `Вы должны быть администратором для использования этой функции. Чтобы стать администратором, добавьте <code>\"|DISPLAYNAME|\"</code> в <code>administratorNames</code> в config.json.`,
 | 
				
			||||||
    cheats_server: `Сервер`,
 | 
					    cheats_server: `Сервер`,
 | 
				
			||||||
    cheats_skipTutorial: `Пропустить обучение`,
 | 
					    cheats_skipTutorial: `Пропустить обучение`,
 | 
				
			||||||
 | 
				
			|||||||
@ -120,8 +120,9 @@ dict = {
 | 
				
			|||||||
    mods_fingerprintHelp: `需要印记相关的帮助?`,
 | 
					    mods_fingerprintHelp: `需要印记相关的帮助?`,
 | 
				
			||||||
    mods_rivens: `裂罅MOD`,
 | 
					    mods_rivens: `裂罅MOD`,
 | 
				
			||||||
    mods_mods: `Mods`,
 | 
					    mods_mods: `Mods`,
 | 
				
			||||||
    mods_bulkAddMods: `添加缺失MOD`,
 | 
					    mods_addMissingUnrankedMods: `[UNTRANSLATED] Add Missing Unranked Mods`,
 | 
				
			||||||
    mods_removeUnranked: `[UNTRANSLATED] Remove Unranked Mods`,
 | 
					    mods_removeUnranked: `[UNTRANSLATED] Remove Unranked Mods`,
 | 
				
			||||||
 | 
					    mods_addMissingMaxRankMods: `[UNTRANSLATED] Add Missing Max Rank Mods`,
 | 
				
			||||||
    cheats_administratorRequirement: `您必须是管理员才能使用此功能。要成为管理员,请将 <code>|DISPLAYNAME|</code> 添加到 config.json 的 <code>administratorNames</code> 中。`,
 | 
					    cheats_administratorRequirement: `您必须是管理员才能使用此功能。要成为管理员,请将 <code>|DISPLAYNAME|</code> 添加到 config.json 的 <code>administratorNames</code> 中。`,
 | 
				
			||||||
    cheats_server: `服务器`,
 | 
					    cheats_server: `服务器`,
 | 
				
			||||||
    cheats_skipTutorial: `跳过教程`,
 | 
					    cheats_skipTutorial: `跳过教程`,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user