feat: Void Corruption 2025 (#2865)
Reviewed-on: #2865 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: Slayer55555 <slayer55555@noreply.localhost> Co-committed-by: Slayer55555 <slayer55555@noreply.localhost>
This commit is contained in:
parent
fd2286c253
commit
2ca895a5f8
@ -41,6 +41,10 @@
|
||||
"naberusNightsOverride": null,
|
||||
"proxyRebellion": false,
|
||||
"proxyRebellionRewardsOverride": 0,
|
||||
"voidCorruption2025Week1": false,
|
||||
"voidCorruption2025Week2": false,
|
||||
"voidCorruption2025Week3": false,
|
||||
"voidCorruption2025Week4": false,
|
||||
"galleonOfGhouls": 0,
|
||||
"ghoulEmergenceOverride": null,
|
||||
"plagueStarOverride": null,
|
||||
|
||||
@ -51,6 +51,10 @@ export interface IConfig {
|
||||
naberusNightsOverride?: boolean;
|
||||
proxyRebellion?: boolean;
|
||||
proxyRebellionRewardsOverride?: number;
|
||||
voidCorruption2025Week1?: boolean;
|
||||
voidCorruption2025Week2?: boolean;
|
||||
voidCorruption2025Week3?: boolean;
|
||||
voidCorruption2025Week4?: boolean;
|
||||
galleonOfGhouls?: number;
|
||||
ghoulEmergenceOverride?: boolean;
|
||||
plagueStarOverride?: boolean;
|
||||
|
||||
@ -1151,6 +1151,27 @@ export const addMissionRewards = async (
|
||||
let ConquestCompletedMissionsCount;
|
||||
|
||||
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
|
||||
|
||||
if (rewardInfo.goalId) {
|
||||
|
||||
@ -19,6 +19,7 @@ import type {
|
||||
ICalendarDay,
|
||||
ICalendarEvent,
|
||||
ICalendarSeason,
|
||||
IAlert,
|
||||
IGoal,
|
||||
IInvasion,
|
||||
ILiteSortie,
|
||||
@ -112,6 +113,89 @@ const sortieBossNode: Record<Exclude<TSortieBoss, "SORTIE_BOSS_CORRUPTED_VOR">,
|
||||
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
|
||||
}
|
||||
},
|
||||
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[] = [
|
||||
"/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss",
|
||||
"/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap",
|
||||
@ -1481,6 +1565,15 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
worldState.VoidTraders.push(vt);
|
||||
fullyStockBaro(vt);
|
||||
}
|
||||
|
||||
if (config.worldState) {
|
||||
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;
|
||||
if (config.worldState?.starDaysOverride ?? isFebruary) {
|
||||
worldState.Goals.push({
|
||||
|
||||
@ -178,6 +178,7 @@ export interface IRewardInfo {
|
||||
goalManifest?: string;
|
||||
invasionId?: string;
|
||||
invasionAllyFaction?: "FC_GRINEER" | "FC_CORPUS";
|
||||
alertId?: string;
|
||||
sortieId?: string;
|
||||
sortieTag?: "Mission1" | "Mission2" | "Final";
|
||||
sortiePrereqs?: string[];
|
||||
|
||||
@ -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";
|
||||
|
||||
export interface IWorldState {
|
||||
@ -7,7 +7,7 @@ export interface IWorldState {
|
||||
Time: number;
|
||||
InGameMarket: IInGameMarket;
|
||||
Goals: IGoal[];
|
||||
Alerts: [];
|
||||
Alerts: IAlert[];
|
||||
Sorties: ISortie[];
|
||||
LiteSorties: ILiteSortie[];
|
||||
SyndicateMissions: ISyndicateMissionInfo[];
|
||||
@ -35,6 +35,28 @@ export interface IWorldState {
|
||||
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 {
|
||||
_id: IOid;
|
||||
Activation: IMongoDate;
|
||||
|
||||
@ -1232,6 +1232,27 @@
|
||||
</select>
|
||||
</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">
|
||||
<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>
|
||||
|
||||
@ -279,6 +279,7 @@ dict = {
|
||||
worldState_dogDays: `Hitzefrei`,
|
||||
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
|
||||
worldState_wolfHunt: `Wolfsjagd (2025)`,
|
||||
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
|
||||
worldState_orphixVenom: `Orphix Gift`,
|
||||
worldState_longShadow: `Lange Schatten`,
|
||||
worldState_hallowedFlame: `Geweihte Flamme`,
|
||||
|
||||
@ -278,6 +278,7 @@ dict = {
|
||||
worldState_dogDays: `Dog Days`,
|
||||
worldState_dogDaysRewards: `Dog Days Rewards`,
|
||||
worldState_wolfHunt: `Wolf Hunt (2025)`,
|
||||
worldState_voidCorruption: `Void Corruption (|VAL|)`,
|
||||
worldState_orphixVenom: `Orphix Venom`,
|
||||
worldState_longShadow: `Long Shadow`,
|
||||
worldState_hallowedFlame: `Hallowed Flame`,
|
||||
|
||||
@ -279,6 +279,7 @@ dict = {
|
||||
worldState_dogDays: `Canícula`,
|
||||
worldState_dogDaysRewards: `Recompensas de Canícula`,
|
||||
worldState_wolfHunt: `Cacería del Lobo (2025)`,
|
||||
worldState_voidCorruption: `Corrupción del Vacío (|VAL|)`,
|
||||
worldState_orphixVenom: `Veneno de Orphix`,
|
||||
worldState_longShadow: `Sombra Prolongada`,
|
||||
worldState_hallowedFlame: `Llama Sagrada`,
|
||||
|
||||
@ -279,6 +279,7 @@ dict = {
|
||||
worldState_dogDays: `Bataille d'Eau`,
|
||||
worldState_dogDaysRewards: `Récompenses de la Bataille d'Eau`,
|
||||
worldState_wolfHunt: `Chasse au Loup (2025)`,
|
||||
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
|
||||
worldState_orphixVenom: `Venin Orphix`,
|
||||
worldState_longShadow: `La Propagation des Ombres`,
|
||||
worldState_hallowedFlame: `Flamme Hantée`,
|
||||
|
||||
@ -279,6 +279,7 @@ dict = {
|
||||
worldState_dogDays: `Знойные дни`,
|
||||
worldState_dogDaysRewards: `Награды Знойных дней`,
|
||||
worldState_wolfHunt: `Волчья Охота (2025)`,
|
||||
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
|
||||
worldState_orphixVenom: `Яд Орфикса`,
|
||||
worldState_longShadow: `Длинная Тень`,
|
||||
worldState_hallowedFlame: `Священное пламя`,
|
||||
|
||||
@ -279,6 +279,7 @@ dict = {
|
||||
worldState_dogDays: `Спекотні дні`,
|
||||
worldState_dogDaysRewards: `Нагороди Спекотних днів`,
|
||||
worldState_wolfHunt: `Полювання на Вовка (2025)`,
|
||||
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
|
||||
worldState_orphixVenom: `Орфіксова отрута`,
|
||||
worldState_longShadow: `Довга тінь`,
|
||||
worldState_hallowedFlame: `Священне полум'я`,
|
||||
|
||||
@ -279,6 +279,7 @@ dict = {
|
||||
worldState_dogDays: `三伏天`,
|
||||
worldState_dogDaysRewards: `三伏天奖励设置`,
|
||||
worldState_wolfHunt: `恶狼狩猎 (2025)`,
|
||||
worldState_voidCorruption: `[UNTRANSLATED] Void Corruption (|VAL|)`,
|
||||
worldState_orphixVenom: `奥影之毒`,
|
||||
worldState_longShadow: `暗夜长影`,
|
||||
worldState_hallowedFlame: `万圣之焰`,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user