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: `资源无人机不会损毁`,