feat: Void Corruption 2025 #2865

Merged
Sainan merged 39 commits from Slayer55555/SpaceNinjaServer:void-alerts into main 2025-10-09 00:28:35 -07:00
14 changed files with 175 additions and 2 deletions

View File

@ -41,6 +41,10 @@
"naberusNightsOverride": null, "naberusNightsOverride": null,
"proxyRebellion": false, "proxyRebellion": false,
"proxyRebellionRewardsOverride": 0, "proxyRebellionRewardsOverride": 0,
"voidCorruption2025Week1": false,
"voidCorruption2025Week2": false,
"voidCorruption2025Week3": false,
"voidCorruption2025Week4": false,
"galleonOfGhouls": 0, "galleonOfGhouls": 0,
"ghoulEmergenceOverride": null, "ghoulEmergenceOverride": null,
"plagueStarOverride": null, "plagueStarOverride": null,

View File

@ -51,6 +51,10 @@ export interface IConfig {
naberusNightsOverride?: boolean; naberusNightsOverride?: boolean;
proxyRebellion?: boolean; proxyRebellion?: boolean;
proxyRebellionRewardsOverride?: number; proxyRebellionRewardsOverride?: number;
voidCorruption2025Week1?: boolean;
voidCorruption2025Week2?: boolean;
voidCorruption2025Week3?: boolean;
voidCorruption2025Week4?: boolean;
galleonOfGhouls?: number; galleonOfGhouls?: number;
ghoulEmergenceOverride?: boolean; ghoulEmergenceOverride?: boolean;
plagueStarOverride?: boolean; plagueStarOverride?: boolean;

View File

@ -1151,6 +1151,27 @@ export const addMissionRewards = async (
let ConquestCompletedMissionsCount; let ConquestCompletedMissionsCount;
let missionCompletionCredits = 0; let missionCompletionCredits = 0;
if (rewardInfo.alertId) {
const alert = getWorldState().Alerts.find(x => x._id.$oid == rewardInfo.alertId);
if (!alert) {
logger.warn(`mission completed unknown alert`, { alertId: rewardInfo.alertId });
} else {
if (inventory.CompletedAlerts.includes(alert._id.$oid)) {
logger.debug(`alert ${alert._id.$oid} already completed, skipping alert reward`);
} else {
inventory.CompletedAlerts.push(alert._id.$oid);
if (alert.MissionInfo.missionReward) {
missionCompletionCredits += addFixedLevelRewards(
alert.MissionInfo.missionReward,
MissionRewards,
rewardInfo
);
}
}
}
}
//inventory change is what the client has not rewarded itself, also the client needs to know the credit changes for display //inventory change is what the client has not rewarded itself, also the client needs to know the credit changes for display
if (rewardInfo.goalId) { if (rewardInfo.goalId) {

View File

@ -19,6 +19,7 @@ import type {
ICalendarDay, ICalendarDay,
ICalendarEvent, ICalendarEvent,
ICalendarSeason, ICalendarSeason,
IAlert,
IGoal, IGoal,
IInvasion, IInvasion,
ILiteSortie, ILiteSortie,
@ -112,6 +113,89 @@ const sortieBossNode: Record<Exclude<TSortieBoss, "SORTIE_BOSS_CORRUPTED_VOR">,
SORTIE_BOSS_VOR: "SolNode108" SORTIE_BOSS_VOR: "SolNode108"
}; };
const configAlerts: Record<string, IAlert> = {
voidCorruption2025Week1: {
_id: { $oid: "677d452e2f324ee7b90f8ccf" },
Activation: { $date: { $numberLong: "1736524800000" } },
Expiry: { $date: { $numberLong: "2000000000000" } },
MissionInfo: {
location: "SolNode61",
missionType: "MT_SABOTAGE",
faction: "FC_CORPUS",
difficulty: 1,
missionReward: {
credits: 30000,
items: ["/Lotus/StoreItems/Upgrades/Mods/Pistol/DualStat/CorruptedFireRateDamagePistol"]
},
levelOverride: "/Lotus/Levels/Proc/Corpus/CorpusShipCoreSabotage",
enemySpec: "/Lotus/Types/Game/EnemySpecs/CorpusShipEnemySpecs/CorpusShipSquadA",
extraEnemySpec: "/Lotus/Types/Game/EnemySpecs/GamemodeExtraEnemySpecs/CorpusSabotageTiersA",
minEnemyLevel: 10,
maxEnemyLevel: 15
}
},
voidCorruption2025Week2: {
_id: { $oid: "677d45811daeae9de40e8c0f" },
Activation: { $date: { $numberLong: "1737129600000" } },
Expiry: { $date: { $numberLong: "2000000000000" } },
MissionInfo: {
location: "SettlementNode11",
missionType: "MT_DEFENSE",
faction: "FC_CORPUS",
difficulty: 1,
missionReward: {
credits: 30000,
items: ["/Lotus/StoreItems/Upgrades/Mods/Pistol/DualStat/CorruptedCritChanceFireRatePistol"]
},
levelOverride: "/Lotus/Levels/Proc/Corpus/CorpusShipDefense",
enemySpec: "/Lotus/Types/Game/EnemySpecs/CorpusShipEnemySpecs/CorpusShipSquadDefenseB",
minEnemyLevel: 20,
maxEnemyLevel: 25,
maxWaveNum: 6
Slayer55555 marked this conversation as resolved Outdated

After 38.5 they changed needed waves to complete one defense rotation. And after that, they use multiples of 3.

  {
    "_id": {
      "$oid": "68dc2466e298b4f04206687a"
    },
    "Activation": {
      "$date": {
        "$numberLong": "1759327200000"
      }
    },
    "Expiry": {
      "$date": {
        "$numberLong": "1761933600000"
      }
    },
    "MissionInfo": {
      "location": "SolNode149",
      "missionType": "MT_DEFENSE",
      "faction": "FC_GRINEER",
      "difficulty": 1,
      "missionReward": {
        "credits": 10000,
        "items": [
          "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/Plushy2022QTCC"
        ]
      },
      "levelOverride": "/Lotus/Levels/Proc/Grineer/GrineerShipyardsDefense",
      "enemySpec": "/Lotus/Types/Game/EnemySpecs/GrineerShipyardsDefenseA",
      "minEnemyLevel": 20,
      "maxEnemyLevel": 30,
      "descText": "/Lotus/Language/Alerts/TennoUnitedAlert",
      "maxWaveNum": 3
    },
    "Tag": "LotusGift",
    "ForceUnlock": true
  },
  {
    "_id": {
      "$oid": "680baa81bd47824aa50c87bd"
    },
    "Activation": {
      "$date": {
        "$numberLong": "1745594978000"
      }
    },
    "Expiry": {
      "$date": {
        "$numberLong": "1745694000000"
      }
    },
    "MissionInfo": {
      "location": "SolNode130",
      "missionType": "MT_DEFENSE",
      "faction": "FC_GRINEER",
      "difficulty": 1,
      "missionReward": {
        "credits": 10000,
        "items": [
          "/Lotus/StoreItems/Types/Recipes/Components/FormaBlueprint"
        ]
      },
      "levelOverride": "/Lotus/Levels/Proc/Grineer/GrineerAsteroidDefense",
      "enemySpec": "/Lotus/Types/Game/EnemySpecs/GrineerDefenseA",
      "minEnemyLevel": 10,
      "maxEnemyLevel": 15,
      "descText": "/Lotus/Language/Alerts/LotusGiftDesc",
      "maxWaveNum": 6
    },
    "Tag": "LotusGift",
    "ForceUnlock": true
  }
After 38.5 they changed needed waves to complete one defense rotation. And after that, they use multiples of 3. ``` { "_id": { "$oid": "68dc2466e298b4f04206687a" }, "Activation": { "$date": { "$numberLong": "1759327200000" } }, "Expiry": { "$date": { "$numberLong": "1761933600000" } }, "MissionInfo": { "location": "SolNode149", "missionType": "MT_DEFENSE", "faction": "FC_GRINEER", "difficulty": 1, "missionReward": { "credits": 10000, "items": [ "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/Plushy2022QTCC" ] }, "levelOverride": "/Lotus/Levels/Proc/Grineer/GrineerShipyardsDefense", "enemySpec": "/Lotus/Types/Game/EnemySpecs/GrineerShipyardsDefenseA", "minEnemyLevel": 20, "maxEnemyLevel": 30, "descText": "/Lotus/Language/Alerts/TennoUnitedAlert", "maxWaveNum": 3 }, "Tag": "LotusGift", "ForceUnlock": true }, { "_id": { "$oid": "680baa81bd47824aa50c87bd" }, "Activation": { "$date": { "$numberLong": "1745594978000" } }, "Expiry": { "$date": { "$numberLong": "1745694000000" } }, "MissionInfo": { "location": "SolNode130", "missionType": "MT_DEFENSE", "faction": "FC_GRINEER", "difficulty": 1, "missionReward": { "credits": 10000, "items": [ "/Lotus/StoreItems/Types/Recipes/Components/FormaBlueprint" ] }, "levelOverride": "/Lotus/Levels/Proc/Grineer/GrineerAsteroidDefense", "enemySpec": "/Lotus/Types/Game/EnemySpecs/GrineerDefenseA", "minEnemyLevel": 10, "maxEnemyLevel": 15, "descText": "/Lotus/Language/Alerts/LotusGiftDesc", "maxWaveNum": 6 }, "Tag": "LotusGift", "ForceUnlock": true } ```

They did, but those are the original alerts, I can change it but it wouldn't be faithful tho.

They did, but those are the original alerts, I can change it but it wouldn't be faithful tho.

There are also some anniversary alerts here that have the same amount of waves.

There are also some anniversary alerts here that have the same amount of waves.

Yes, first week of 12 anniversary /Lotus/Types/Keys/TacAlertKeyAnniversary2019E (March 7 - March 14), but there's a problem: 38.5 was released on March 19. And then in one of the hotfixes, they specifically updated /Lotus/Types/Keys/TacAlertKeyAnniversary2017B (second week) “maxWaveNum”: 10, -> “maxWaveNum”: 6,

Yes, first week of 12 anniversary `/Lotus/Types/Keys/TacAlertKeyAnniversary2019E` (March 7 - March 14), but there's a problem: 38.5 was released on March 19. And then in one of the hotfixes, they specifically updated `/Lotus/Types/Keys/TacAlertKeyAnniversary2017B` (second week) `“maxWaveNum”: 10,` -> `“maxWaveNum”: 6,`
}
},
voidCorruption2025Week3: {
_id: { $oid: "677d45a494ad716c90006b9a" },
Activation: { $date: { $numberLong: "1737734400000" } },
Expiry: { $date: { $numberLong: "2000000000000" } },
MissionInfo: {
location: "SolNode118",
missionType: "MT_ARTIFACT",
faction: "FC_CORPUS",
difficulty: 1,
missionReward: {
credits: 30000,
items: ["/Lotus/StoreItems/Upgrades/Mods/Pistol/DualStat/CorruptedCritDamagePistol"]
},
levelOverride: "/Lotus/Levels/Proc/Corpus/CorpusShipDisruption",
enemySpec: "/Lotus/Types/Game/EnemySpecs/CorpusShipEnemySpecs/CorpusShipSurvivalA",
extraEnemySpec: "/Lotus/Types/Game/EnemySpecs/SpecialMissionSpecs/DisruptionCorpusShip",
customAdvancedSpawners: ["/Lotus/Types/Enemies/AdvancedSpawners/ErrantSpecterInvasion"],
minEnemyLevel: 30,
maxEnemyLevel: 35
}
},
voidCorruption2025Week4: {
_id: { $oid: "677d4700682d173abb0e19fe" },
Activation: { $date: { $numberLong: "1738339200000" } },
Expiry: { $date: { $numberLong: "2000000000000" } },
MissionInfo: {
location: "SolNode4",
missionType: "MT_EXTERMINATION",
faction: "FC_CORPUS",
difficulty: 1,
missionReward: {
credits: 30000,
items: ["/Lotus/StoreItems/Upgrades/Mods/Pistol/DualStat/CorruptedDamageRecoilPistol"]
},
levelOverride: "/Lotus/Levels/Proc/Corpus/CorpusShipExterminate",
enemySpec: "/Lotus/Types/Game/EnemySpecs/CorpusShipEnemySpecs/CorpusShipExterminateMixed",
minEnemyLevel: 40,
maxEnemyLevel: 45
}
}
};
const eidolonJobs: readonly string[] = [ const eidolonJobs: readonly string[] = [
"/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss",
"/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap", "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap",
@ -1481,6 +1565,15 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
worldState.VoidTraders.push(vt); worldState.VoidTraders.push(vt);
fullyStockBaro(vt); fullyStockBaro(vt);
} }
if (config.worldState) {
Sainan marked this conversation as resolved Outdated

There's really no reason to use structuredClone here. You can update IWorldState to also specify readonly IAlert[] for what little value it has.

There's really no reason to use `structuredClone` here. You can update `IWorldState` to also specify `readonly IAlert[]` for what little value it has.
for (const [key, alert] of Object.entries(configAlerts)) {
if (config.worldState[key as keyof typeof config.worldState]) {
worldState.Alerts.push(alert);
}
}
}
const isFebruary = date.getUTCMonth() == 1; const isFebruary = date.getUTCMonth() == 1;
if (config.worldState?.starDaysOverride ?? isFebruary) { if (config.worldState?.starDaysOverride ?? isFebruary) {
worldState.Goals.push({ worldState.Goals.push({

View File

@ -178,6 +178,7 @@ export interface IRewardInfo {
goalManifest?: string; goalManifest?: string;
invasionId?: string; invasionId?: string;
invasionAllyFaction?: "FC_GRINEER" | "FC_CORPUS"; invasionAllyFaction?: "FC_GRINEER" | "FC_CORPUS";
alertId?: string;
sortieId?: string; sortieId?: string;
sortieTag?: "Mission1" | "Mission2" | "Final"; sortieTag?: "Mission1" | "Mission2" | "Final";
sortiePrereqs?: string[]; sortiePrereqs?: string[];

View File

@ -1,4 +1,4 @@
import type { IMissionReward } from "warframe-public-export-plus"; import type { IMissionReward, TFaction } from "warframe-public-export-plus";
import type { IMongoDate, IOid } from "./commonTypes.ts"; import type { IMongoDate, IOid } from "./commonTypes.ts";
export interface IWorldState { export interface IWorldState {
@ -7,7 +7,7 @@ export interface IWorldState {
Time: number; Time: number;
InGameMarket: IInGameMarket; InGameMarket: IInGameMarket;
Goals: IGoal[]; Goals: IGoal[];
Alerts: []; Alerts: IAlert[];
Sorties: ISortie[]; Sorties: ISortie[];
LiteSorties: ILiteSortie[]; LiteSorties: ILiteSortie[];
SyndicateMissions: ISyndicateMissionInfo[]; SyndicateMissions: ISyndicateMissionInfo[];
@ -35,6 +35,28 @@ export interface IWorldState {
Tmp?: string; Tmp?: string;
} }
export interface IAlert {
_id: IOid;
Activation: IMongoDate;
Expiry: IMongoDate;
MissionInfo: IAlertMissionInfo;
}
export interface IAlertMissionInfo {
location: string;
missionType: string;
faction: TFaction;
difficulty: number;
missionReward?: IMissionReward;
levelOverride?: string;
enemySpec?: string;
extraEnemySpec?: string;
customAdvancedSpawners?: string[];
minEnemyLevel?: number;
maxEnemyLevel?: number;
maxWaveNum?: number;
}
export interface IGoal { export interface IGoal {
_id: IOid; _id: IOid;
Activation: IMongoDate; Activation: IMongoDate;

View File

@ -1232,6 +1232,27 @@
</select> </select>
</div> </div>
</div> </div>
<div class="mt-2">
<label class="form-label" data-loc="worldState_voidCorruption" data-loc-replace="2025"></label>
<div class="d-flex flex-wrap gap-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.voidCorruptionWeek1" />
<label class="form-check-label" for="worldState.voidCorruptionWeek1" data-loc="worldState_week" data-loc-replace="1"></label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.voidCorruptionWeek2" />
<label class="form-check-label" for="worldState.voidCorruptionWeek2" data-loc="worldState_week" data-loc-replace="2"></label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.voidCorruptionWeek3" />
<label class="form-check-label" for="worldState.voidCorruptionWeek3" data-loc="worldState_week" data-loc-replace="3"></label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.voidCorruptionWeek4" />
<label class="form-check-label" for="worldState.voidCorruptionWeek4" data-loc="worldState_week" data-loc-replace="4"></label>
</div>
</div>
</div>
<div class="form-group mt-2"> <div class="form-group mt-2">
<label class="form-label" for="worldState.galleonOfGhouls" data-loc="worldState_galleonOfGhouls"></label> <label class="form-label" for="worldState.galleonOfGhouls" data-loc="worldState_galleonOfGhouls"></label>
<abbr data-loc-inc="worldState_wolfHunt|worldState_anniversary|worldState_orphixVenom"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr> <abbr data-loc-inc="worldState_wolfHunt|worldState_anniversary|worldState_orphixVenom"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>

View File

@ -279,6 +279,7 @@ dict = {
worldState_dogDays: `Hitzefrei`, worldState_dogDays: `Hitzefrei`,
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`, worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
worldState_wolfHunt: `Wolfsjagd (2025)`, worldState_wolfHunt: `Wolfsjagd (2025)`,
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
worldState_orphixVenom: `Orphix Gift`, worldState_orphixVenom: `Orphix Gift`,
worldState_longShadow: `Lange Schatten`, worldState_longShadow: `Lange Schatten`,
worldState_hallowedFlame: `Geweihte Flamme`, worldState_hallowedFlame: `Geweihte Flamme`,

View File

@ -278,6 +278,7 @@ dict = {
worldState_dogDays: `Dog Days`, worldState_dogDays: `Dog Days`,
worldState_dogDaysRewards: `Dog Days Rewards`, worldState_dogDaysRewards: `Dog Days Rewards`,
worldState_wolfHunt: `Wolf Hunt (2025)`, worldState_wolfHunt: `Wolf Hunt (2025)`,
worldState_voidCorruption: `Void Corruption (|VAL|)`,
worldState_orphixVenom: `Orphix Venom`, worldState_orphixVenom: `Orphix Venom`,
worldState_longShadow: `Long Shadow`, worldState_longShadow: `Long Shadow`,
worldState_hallowedFlame: `Hallowed Flame`, worldState_hallowedFlame: `Hallowed Flame`,

View File

@ -279,6 +279,7 @@ dict = {
worldState_dogDays: `Canícula`, worldState_dogDays: `Canícula`,
worldState_dogDaysRewards: `Recompensas de Canícula`, worldState_dogDaysRewards: `Recompensas de Canícula`,
worldState_wolfHunt: `Cacería del Lobo (2025)`, worldState_wolfHunt: `Cacería del Lobo (2025)`,
worldState_voidCorruption: `Corrupción del Vacío (|VAL|)`,
worldState_orphixVenom: `Veneno de Orphix`, worldState_orphixVenom: `Veneno de Orphix`,
worldState_longShadow: `Sombra Prolongada`, worldState_longShadow: `Sombra Prolongada`,
worldState_hallowedFlame: `Llama Sagrada`, worldState_hallowedFlame: `Llama Sagrada`,

View File

@ -279,6 +279,7 @@ dict = {
worldState_dogDays: `Bataille d'Eau`, worldState_dogDays: `Bataille d'Eau`,
worldState_dogDaysRewards: `Récompenses de la Bataille d'Eau`, worldState_dogDaysRewards: `Récompenses de la Bataille d'Eau`,
worldState_wolfHunt: `Chasse au Loup (2025)`, worldState_wolfHunt: `Chasse au Loup (2025)`,
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
worldState_orphixVenom: `Venin Orphix`, worldState_orphixVenom: `Venin Orphix`,
worldState_longShadow: `La Propagation des Ombres`, worldState_longShadow: `La Propagation des Ombres`,
worldState_hallowedFlame: `Flamme Hantée`, worldState_hallowedFlame: `Flamme Hantée`,

View File

@ -279,6 +279,7 @@ dict = {
worldState_dogDays: `Знойные дни`, worldState_dogDays: `Знойные дни`,
worldState_dogDaysRewards: `Награды Знойных дней`, worldState_dogDaysRewards: `Награды Знойных дней`,
worldState_wolfHunt: `Волчья Охота (2025)`, worldState_wolfHunt: `Волчья Охота (2025)`,
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
worldState_orphixVenom: `Яд Орфикса`, worldState_orphixVenom: `Яд Орфикса`,
worldState_longShadow: `Длинная Тень`, worldState_longShadow: `Длинная Тень`,
worldState_hallowedFlame: `Священное пламя`, worldState_hallowedFlame: `Священное пламя`,

View File

@ -279,6 +279,7 @@ dict = {
worldState_dogDays: `Спекотні дні`, worldState_dogDays: `Спекотні дні`,
worldState_dogDaysRewards: `Нагороди Спекотних днів`, worldState_dogDaysRewards: `Нагороди Спекотних днів`,
worldState_wolfHunt: `Полювання на Вовка (2025)`, worldState_wolfHunt: `Полювання на Вовка (2025)`,
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
worldState_orphixVenom: `Орфіксова отрута`, worldState_orphixVenom: `Орфіксова отрута`,
worldState_longShadow: `Довга тінь`, worldState_longShadow: `Довга тінь`,
worldState_hallowedFlame: `Священне полум'я`, worldState_hallowedFlame: `Священне полум'я`,

View File

@ -279,6 +279,7 @@ dict = {
worldState_dogDays: `三伏天`, worldState_dogDays: `三伏天`,
worldState_dogDaysRewards: `三伏天奖励设置`, worldState_dogDaysRewards: `三伏天奖励设置`,
worldState_wolfHunt: `恶狼狩猎 (2025)`, worldState_wolfHunt: `恶狼狩猎 (2025)`,
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
worldState_orphixVenom: `奥影之毒`, worldState_orphixVenom: `奥影之毒`,
worldState_longShadow: `暗夜长影`, worldState_longShadow: `暗夜长影`,
worldState_hallowedFlame: `万圣之焰`, worldState_hallowedFlame: `万圣之焰`,