diff --git a/config.json.example b/config.json.example index 9d072329..32562400 100644 --- a/config.json.example +++ b/config.json.example @@ -33,6 +33,7 @@ "noArgonCrystalDecay": false, "noMasteryRankUpCooldown": false, "noVendorPurchaseLimits": true, + "noDeathMarks": false, "noKimCooldowns": false, "instantResourceExtractorDrones": false, "noResourceExtractorDronesDamage": false, diff --git a/src/services/configService.ts b/src/services/configService.ts index cb1a2c38..24707bd5 100644 --- a/src/services/configService.ts +++ b/src/services/configService.ts @@ -39,6 +39,7 @@ interface IConfig { noArgonCrystalDecay?: boolean; noMasteryRankUpCooldown?: boolean; noVendorPurchaseLimits?: boolean; + noDeathMarks?: boolean; noKimCooldowns?: boolean; instantResourceExtractorDrones?: boolean; noResourceExtractorDronesDamage?: boolean; diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 0b452ccc..c30af726 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -54,6 +54,7 @@ import { getInfNodes } from "@/src/helpers/nemesisHelpers"; import { Loadout } from "../models/inventoryModels/loadoutModel"; import { ILoadoutConfigDatabase } from "../types/saveLoadoutTypes"; import { getWorldState } from "./worldStateService"; +import { config } from "./configService"; const getRotations = (rewardInfo: IRewardInfo, tierOverride?: number): number[] => { // For Spy missions, e.g. 3 vaults cracked = A, B, C @@ -418,22 +419,24 @@ export const addMissionInventoryUpdates = async ( break; } case "DeathMarks": { - for (const bossName of value) { - if (inventory.DeathMarks.indexOf(bossName) == -1) { - // It's a new death mark; we have to say the line. - await createMessage(inventory.accountOwnerId, [ - { - sub: bossName, - sndr: "/Lotus/Language/G1Quests/DeathMarkSender", - msg: "/Lotus/Language/G1Quests/DeathMarkMessage", - icon: "/Lotus/Interface/Icons/Npcs/Stalker_d.png", - highPriority: true, - expiry: new Date(Date.now() + 86400_000) // TOVERIFY: This type of inbox message seems to automatically delete itself. We'll just delete it after 24 hours, but it's clear if this is correct. - } - ]); + if (!config.noDeathMarks) { + for (const bossName of value) { + if (inventory.DeathMarks.indexOf(bossName) == -1) { + // It's a new death mark; we have to say the line. + await createMessage(inventory.accountOwnerId, [ + { + sub: bossName, + sndr: "/Lotus/Language/G1Quests/DeathMarkSender", + msg: "/Lotus/Language/G1Quests/DeathMarkMessage", + icon: "/Lotus/Interface/Icons/Npcs/Stalker_d.png", + highPriority: true, + expiry: new Date(Date.now() + 86400_000) // TOVERIFY: This type of inbox message seems to automatically delete itself. We'll just delete it after 24 hours, but it's clear if this is correct. + } + ]); + } } + inventory.DeathMarks = value; } - inventory.DeathMarks = value; break; } case "CapturedAnimals": { diff --git a/static/webui/index.html b/static/webui/index.html index ec786b4e..3830e378 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -611,6 +611,10 @@ +
+ + +
diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js index 20be9fbd..2357d455 100644 --- a/static/webui/translations/de.js +++ b/static/webui/translations/de.js @@ -138,6 +138,7 @@ dict = { cheats_noArgonCrystalDecay: `Argon-Kristalle verschwinden niemals`, cheats_noMasteryRankUpCooldown: `Keine Wartezeit beim Meisterschaftsrangaufstieg`, cheats_noVendorPurchaseLimits: `Keine Kaufbeschränkungen bei Händlern`, + cheats_noDeathMarks: `[UNTRANSLATED] No Death Marks`, cheats_noKimCooldowns: `Keine Wartezeit bei KIM`, 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 bbf2561a..3b6fb449 100644 --- a/static/webui/translations/en.js +++ b/static/webui/translations/en.js @@ -137,6 +137,7 @@ dict = { cheats_noArgonCrystalDecay: `No Argon Crystal Decay`, cheats_noMasteryRankUpCooldown: `No Mastery Rank Up Cooldown`, cheats_noVendorPurchaseLimits: `No Vendor Purchase Limits`, + cheats_noDeathMarks: `No Death Marks`, cheats_noKimCooldowns: `No KIM Cooldowns`, 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 c979bddc..8b751375 100644 --- a/static/webui/translations/es.js +++ b/static/webui/translations/es.js @@ -138,6 +138,7 @@ dict = { cheats_noArgonCrystalDecay: `Sin descomposición de cristal de Argón`, cheats_noMasteryRankUpCooldown: `Sin tiempo de espera para rango de maestría`, cheats_noVendorPurchaseLimits: `Sin límite de compras de vendedores`, + cheats_noDeathMarks: `[UNTRANSLATED] No Death Marks`, cheats_noKimCooldowns: `Sin tiempo de espera para conversaciones KIM`, 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 54f041c6..b1938b53 100644 --- a/static/webui/translations/fr.js +++ b/static/webui/translations/fr.js @@ -138,6 +138,7 @@ dict = { cheats_noArgonCrystalDecay: `[UNTRANSLATED] No Argon Crystal Decay`, cheats_noMasteryRankUpCooldown: `[UNTRANSLATED] No Mastery Rank Up Cooldown`, cheats_noVendorPurchaseLimits: `[UNTRANSLATED] No Vendor Purchase Limits`, + cheats_noDeathMarks: `[UNTRANSLATED] No Death Marks`, cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`, cheats_instantResourceExtractorDrones: `Ressources de drone d'extraction instantannées`, cheats_noResourceExtractorDronesDamage: `[UNTRANSLATED] No Resource Extractor Drones Damage`, diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index 62c82f70..4a5dceeb 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -138,6 +138,7 @@ dict = { cheats_noArgonCrystalDecay: `Без распада аргоновых кристаллов`, cheats_noMasteryRankUpCooldown: `Повышение ранга мастерства без кулдауна`, cheats_noVendorPurchaseLimits: `Отсутствие лимитов на покупки у вендоров`, + cheats_noDeathMarks: `[UNTRANSLATED] No Death Marks`, cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`, cheats_instantResourceExtractorDrones: `Мгновенные Экстракторы Ресурсов`, cheats_noResourceExtractorDronesDamage: `[UNTRANSLATED] No Resource Extractor Drones Damage`, diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index 3d7af8ec..5af41bea 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -138,6 +138,7 @@ dict = { cheats_noArgonCrystalDecay: `[UNTRANSLATED] No Argon Crystal Decay`, cheats_noMasteryRankUpCooldown: `[UNTRANSLATED] No Mastery Rank Up Cooldown`, cheats_noVendorPurchaseLimits: `[UNTRANSLATED] No Vendor Purchase Limits`, + cheats_noDeathMarks: `[UNTRANSLATED] No Death Marks`, cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`, cheats_instantResourceExtractorDrones: `即时资源采集无人机`, cheats_noResourceExtractorDronesDamage: `[UNTRANSLATED] No Resource Extractor Drones Damage`,