返回提交历史
Modified
src/services/worldStateService.ts
+104
-0
XFEstudio/XFESpaceNinjaServer
feat: eidolon/venus/deimos bounty rotation (#1554)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1554 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2ca79ef8
代码差异
1 个文件
+104
-0
@@ -9,6 +9,7 @@ import { config } from "@/src/services/configService";
9
9
import { CRng } from "@/src/services/rngService";
10
10
import { eMissionType, ExportNightwave, ExportRegions } from "warframe-public-export-plus";
11
11
import { ISeasonChallenge, IWorldState } from "../types/worldStateTypes";
12
import { logger } from "../utils/logger";
12
13
13
14
const sortieBosses = [
14
15
"SORTIE_BOSS_HYENA",
@@ -79,6 +80,75 @@ const sortieBossNode: Record<string, string> = {
79
80
SORTIE_BOSS_INFALAD: "SolNode705"
80
81
};
81
82
83
const jobSets: string[][] = [
84
[
85
"/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss",
86
"/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap",
87
"/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountySab",
88
"/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyLib",
89
"/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyCap",
90
"/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyExt",
91
"/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyCap",
92
"/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft",
93
"/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyCache",
94
"/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapOne",
95
"/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapTwo",
96
"/Lotus/Types/Gameplay/Eidolon/Jobs/SabotageBountySab",
97
"/Lotus/Types/Gameplay/Eidolon/Jobs/RescueBountyResc"
98
],
99
[
100
"/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AssassinateBountyAss",
101
"/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyExt",
102
"/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/ReclamationBountyTheft",
103
"/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyLib"
104
],
105
[
106
"/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobAmbush",
107
"/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobExcavation",
108
"/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobRecovery",
109
"/Lotus/Types/Gameplay/Venus/Jobs/VenusChaosJobAssassinate",
110
"/Lotus/Types/Gameplay/Venus/Jobs/VenusChaosJobExcavation",
111
"/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobAssassinate",
112
"/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobExterminate",
113
"/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobResource",
114
"/Lotus/Types/Gameplay/Venus/Jobs/VenusIntelJobRecovery",
115
"/Lotus/Types/Gameplay/Venus/Jobs/VenusIntelJobResource",
116
"/Lotus/Types/Gameplay/Venus/Jobs/VenusIntelJobSpy",
117
"/Lotus/Types/Gameplay/Venus/Jobs/VenusSpyJobSpy",
118
"/Lotus/Types/Gameplay/Venus/Jobs/VenusTheftJobAmbush",
119
"/Lotus/Types/Gameplay/Venus/Jobs/VenusTheftJobExcavation",
120
"/Lotus/Types/Gameplay/Venus/Jobs/VenusTheftJobResource",
121
"/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobCaches",
122
"/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobResource",
123
"/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobSpy",
124
"/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobDefense",
125
"/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobRecovery",
126
"/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobResource",
127
"/Lotus/Types/Gameplay/Venus/Jobs/VenusWetworkJobAssassinate",
128
"/Lotus/Types/Gameplay/Venus/Jobs/VenusWetworkJobSpy"
129
],
130
[
131
"/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusCullJobAssassinate",
132
"/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusCullJobExterminate",
133
"/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusPreservationJobDefense",
134
"/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusTheftJobExcavation"
135
],
136
[
137
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAreaDefenseBounty",
138
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAssassinateBounty",
139
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosCrpSurvivorBounty",
140
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosGrnSurvivorBounty",
141
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosKeyPiecesBounty",
142
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty",
143
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosPurifyBounty"
144
],
145
[
146
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessAreaDefenseBounty",
147
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessExcavateBounty",
148
"/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessPurifyBounty"
149
]
150
];
151
82
152
const EPOCH = 1734307200 * 1000; // Monday, Dec 16, 2024 @ 00:00 UTC+0; should logically be winter in 1999 iteration 0
83
153
84
154
const getSortieTime = (day: number): number => {
@@ -249,6 +319,40 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
249
319
Seed: bountyCycle,
250
320
Nodes: []
251
321
};
322
for (const syndicateInfo of worldState.SyndicateMissions) {
323
if (syndicateInfo.Jobs && syndicateInfo.Seed != bountyCycle) {
324
syndicateInfo.Seed = bountyCycle;
325
logger.debug(`refreshing jobs for ${syndicateInfo.Tag}`);
326
const rng = new CRng(bountyCycle);
327
const table = String.fromCharCode(65 + (bountyCycle % 3));
328
const vaultTable = String.fromCharCode(65 + ((bountyCycle + 1) % 3));
329
const deimosDTable = String.fromCharCode(65 + (bountyCycle % 2));
330
//console.log({ bountyCycleStart, bountyCycleEnd, table, vaultTable, deimosDTable });
331
for (const jobInfo of syndicateInfo.Jobs) {
332
if (jobInfo.jobType) {
333
let found = false;
334
for (const jobSet of jobSets) {
335
if (jobSet.indexOf(jobInfo.jobType) != -1) {
336
jobInfo.jobType = rng.randomElement(jobSet);
337
// TODO: xpAmounts seems like it might need to differ depending on the job?
338
found = true;
339
break;
340
}
341
}
342
if (!found) {
343
logger.warn(`no job set found for type ${jobInfo.jobType}`);
344
}
345
}
346
if (jobInfo.endless || jobInfo.isVault) {
347
jobInfo.rewards = jobInfo.rewards.replace(/Table.Rewards/, `Table${vaultTable}Rewards`);
348
} else if (jobInfo.rewards.startsWith("/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierD")) {
349
jobInfo.rewards = jobInfo.rewards.replace(/Table.Rewards/, `Table${deimosDTable}Rewards`);
350
} else if (!jobInfo.rewards.startsWith("/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierE")) {
351
jobInfo.rewards = jobInfo.rewards.replace(/Table.Rewards/, `Table${table}Rewards`);
352
}
353
}
354
}
355
}
252
356
253
357
if (config.worldState?.creditBoost) {
254
358
worldState.GlobalUpgrades.push({