From 9b743db29343aaf787b42106a45a2f9b6707bf49 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Wed, 22 Oct 2025 05:56:06 +0200 Subject: [PATCH] feat(webui): remove IsNew Closes #2917 --- .../custom/removeIsNewController.ts | 24 +++++++++++++++++++ src/routes/custom.ts | 2 ++ static/webui/index.html | 1 + static/webui/script.js | 9 +++++++ static/webui/translations/de.js | 1 + static/webui/translations/en.js | 1 + static/webui/translations/es.js | 1 + static/webui/translations/fr.js | 1 + static/webui/translations/ru.js | 1 + static/webui/translations/uk.js | 1 + static/webui/translations/zh.js | 1 + 11 files changed, 43 insertions(+) create mode 100644 src/controllers/custom/removeIsNewController.ts diff --git a/src/controllers/custom/removeIsNewController.ts b/src/controllers/custom/removeIsNewController.ts new file mode 100644 index 00000000..e63a0d0a --- /dev/null +++ b/src/controllers/custom/removeIsNewController.ts @@ -0,0 +1,24 @@ +import { getInventory } from "../../services/inventoryService.ts"; +import { getAccountIdForRequest } from "../../services/loginService.ts"; +import type { RequestHandler } from "express"; +import { equipmentKeys } from "../../types/inventoryTypes/inventoryTypes.ts"; +import { broadcastInventoryUpdate } from "../../services/wsService.ts"; + +export const removeIsNewController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const filteredEquipmentKeys = equipmentKeys.filter(k => k !== "CrewShipWeapons" && k !== "CrewShipSalvagedWeapons"); + const inventory = await getInventory(accountId, [...filteredEquipmentKeys, "WeaponSkins"].join(" ")); + for (const key of filteredEquipmentKeys) { + if (key in inventory) { + for (const equipment of inventory[key]) { + if (equipment.IsNew) equipment.IsNew = false; + } + } + } + for (const equipment of inventory.WeaponSkins) { + if (equipment.IsNew) equipment.IsNew = false; + } + await inventory.save(); + res.end(); + broadcastInventoryUpdate(req); +}; diff --git a/src/routes/custom.ts b/src/routes/custom.ts index cf1785f0..05747f5a 100644 --- a/src/routes/custom.ts +++ b/src/routes/custom.ts @@ -22,6 +22,7 @@ import { unlockAllScansController } from "../controllers/custom/unlockAllScansCo import { unlockAllShipFeaturesController } from "../controllers/custom/unlockAllShipFeaturesController.ts"; import { unlockAllCapturaScenesController } from "../controllers/custom/unlockAllCapturaScenesController.ts"; import { removeCustomizationController } from "../controllers/custom/removeCustomizationController.ts"; +import { removeIsNewController } from "../controllers/custom/removeIsNewController.ts"; import { abilityOverrideController } from "../controllers/custom/abilityOverrideController.ts"; import { createAccountController } from "../controllers/custom/createAccountController.ts"; @@ -73,6 +74,7 @@ customRouter.get("/unlockAllScans", unlockAllScansController); customRouter.get("/unlockAllShipFeatures", unlockAllShipFeaturesController); customRouter.get("/unlockAllCapturaScenes", unlockAllCapturaScenesController); customRouter.get("/removeCustomization", removeCustomizationController); +customRouter.get("/removeIsNew", removeIsNewController); customRouter.post("/abilityOverride", abilityOverrideController); customRouter.post("/createAccount", createAccountController); diff --git a/static/webui/index.html b/static/webui/index.html index e7acd146..2e8e3398 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -1154,6 +1154,7 @@ + diff --git a/static/webui/script.js b/static/webui/script.js index 697631cd..a648b6ea 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -2177,6 +2177,15 @@ function removeCustomization(uniqueName) { }); } +function removeIsNew() { + revalidateAuthz().then(() => { + const req = $.get("/custom/removeIsNew?" + window.authz); + req.done(() => { + updateInventory(); + }); + }); +} + function getRequiredParts(category, WeaponType) { switch (category) { case "Hoverboards": diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js index fc563086..2aab7e93 100644 --- a/static/webui/translations/de.js +++ b/static/webui/translations/de.js @@ -234,6 +234,7 @@ dict = { cheats_syndicateMissionsRepeatable: `Syndikat-Missionen wiederholbar`, cheats_unlockAllProfitTakerStages: `Alle Profiteintreiber-Phasen freischalten`, cheats_unlockSuccInventory: `Erfolgreich. Bitte beachte, dass du dein Inventar neu synchronisieren musst, z. B. mit dem /sync Befehl des Bootstrappers im Spielchat, durch Besuch eines Dojo/Relais oder durch erneutes Einloggen.`, + cheats_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`, cheats_instantFinishRivenChallenge: `Riven-Mod Herausforderung sofort abschließen`, cheats_instantResourceExtractorDrones: `Sofortige Ressourcen-Extraktor-Drohnen`, cheats_noResourceExtractorDronesDamage: `Kein Schaden für Ressourcen-Extraktor-Drohnen`, diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js index e27d56bb..8cb37aec 100644 --- a/static/webui/translations/en.js +++ b/static/webui/translations/en.js @@ -233,6 +233,7 @@ dict = { cheats_syndicateMissionsRepeatable: `Syndicate Missions Repeatable`, cheats_unlockAllProfitTakerStages: `Unlock All Profit Taker Stages`, cheats_unlockSuccInventory: `Success. Please note that you'll need to resync your inventory, e.g. using the bootstrapper's /sync command in game chat, visiting a dojo/relay, or relogging.`, + cheats_removeIsNew: `Remove New Equipment Exclamation Icon`, cheats_instantFinishRivenChallenge: `Instant Finish Riven Challenge`, cheats_instantResourceExtractorDrones: `Instant Resource Extractor Drones`, cheats_noResourceExtractorDronesDamage: `No Resource Extractor Drones Damage`, diff --git a/static/webui/translations/es.js b/static/webui/translations/es.js index 85a87227..d9120634 100644 --- a/static/webui/translations/es.js +++ b/static/webui/translations/es.js @@ -234,6 +234,7 @@ dict = { cheats_syndicateMissionsRepeatable: `Misiones de sindicato rejugables`, cheats_unlockAllProfitTakerStages: `Desbloquea todas las etapas del Roba-ganancias`, cheats_unlockSuccInventory: `Éxito. Ten en cuenta que deberás volver a sincronizar tu inventario. Para hacerlo, puedes usar el comando /sync en el Bootstrapper, visitar un dojo o repetidor, o volver a iniciar sesión.`, + cheats_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`, cheats_instantFinishRivenChallenge: `Terminar desafío de agrietado inmediatamente`, cheats_instantResourceExtractorDrones: `Drones de extracción de recursos instantáneos`, cheats_noResourceExtractorDronesDamage: `Sin daño a los drones extractores de recursos`, diff --git a/static/webui/translations/fr.js b/static/webui/translations/fr.js index 9f897bf8..2c349aba 100644 --- a/static/webui/translations/fr.js +++ b/static/webui/translations/fr.js @@ -234,6 +234,7 @@ dict = { cheats_syndicateMissionsRepeatable: `Mission syndicat répétables`, cheats_unlockAllProfitTakerStages: `Débloquer toutes les étapes du Preneur de Profit`, cheats_unlockSuccInventory: `Succès. Une resynchronisation est nécessaire en tapant "/sync" dans le tchat, en visitant un relais ou en se reconnectant.`, + cheats_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`, cheats_instantFinishRivenChallenge: `Débloquer le challenge Riven instantanément`, cheats_instantResourceExtractorDrones: `Ressources de drones d'extraction instantannées`, cheats_noResourceExtractorDronesDamage: `Aucun dégâts aux drones d'extraction de resources`, diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index f9b742a3..4cdd6d82 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -234,6 +234,7 @@ dict = { cheats_syndicateMissionsRepeatable: `Повторять миссии синдиката`, cheats_unlockAllProfitTakerStages: `Разблокировать все этапы Сферы извлечения прибыли`, cheats_unlockSuccInventory: `Успех. Обратите внимание, что вам необходимо будет повторно синхронизировать свой инвентарь, например, с помощью команды загрузчика /sync в чате игры, посетив Додзё/Реле или повторно войдя в игру.`, + cheats_removeIsNew: `Удалить значок восклицательного знака нового снаряжения`, cheats_instantFinishRivenChallenge: `Мгновенное завершение испытания мода Разлома`, cheats_instantResourceExtractorDrones: `Мгновенно добывающие Дроны-сборщики`, cheats_noResourceExtractorDronesDamage: `Без урона по Дронам-сборщикам`, diff --git a/static/webui/translations/uk.js b/static/webui/translations/uk.js index 6d3752a7..94915c59 100644 --- a/static/webui/translations/uk.js +++ b/static/webui/translations/uk.js @@ -234,6 +234,7 @@ dict = { cheats_syndicateMissionsRepeatable: `Повторювати місії синдиката`, cheats_unlockAllProfitTakerStages: `Розблокувати всі етапи Привласнювачки`, cheats_unlockSuccInventory: `Успішно. Зверніть увагу, що вам потрібно буде повторно синхронізувати своє спорядження, наприклад, за допомогою команди завантажувача /sync у чаті гри, відвідавши Доджьо/Реле або повторно увійшовши в гру.`, + cheats_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`, cheats_instantFinishRivenChallenge: `Миттєве завершення випробування модифікатора Розколу`, cheats_instantResourceExtractorDrones: `Миттєво добуваючі Дрони-видобувачі`, cheats_noResourceExtractorDronesDamage: `Без шкоди по Дронам-видобувачам`, diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index 4ff32e50..05a66582 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -234,6 +234,7 @@ dict = { cheats_syndicateMissionsRepeatable: `集团任务可重复完成`, cheats_unlockAllProfitTakerStages: `解锁利润收割者圆蛛所有阶段`, cheats_unlockSuccInventory: `[UNTRANSLATED] Success. Please note that you'll need to resync your inventory, e.g. using the bootstrapper's /sync command in game chat, visiting a dojo/relay, or relogging.`, + cheats_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`, cheats_instantFinishRivenChallenge: `立即完成裂罅挑战`, cheats_instantResourceExtractorDrones: `资源无人机即时完成`, cheats_noResourceExtractorDronesDamage: `资源无人机不会损毁`,