From 1abc74cab3adc9bee4eba509b35c33da485b18d2 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 26 Apr 2025 20:41:10 +0200 Subject: [PATCH] fix an issue with seed 41449 (SORTIE_BOSS_KRIL) --- src/services/worldStateService.ts | 33 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/services/worldStateService.ts b/src/services/worldStateService.ts index f3da8c92..757f809f 100644 --- a/src/services/worldStateService.ts +++ b/src/services/worldStateService.ts @@ -67,6 +67,12 @@ const sortieFactionToFactionIndexes: Record = { FC_OROKIN: [3] }; +const sortieFactionToSpecialMissionTileset: Record = { + FC_GRINEER: "GrineerGalleonTileset", + FC_CORPUS: "CorpusShipTileset", + FC_INFESTATION: "CorpusShipTileset" +}; + const sortieBossNode: Record = { SORTIE_BOSS_HYENA: "SolNode127", SORTIE_BOSS_KELA: "SolNode193", @@ -282,9 +288,9 @@ const pushSortieIfRelevant = (worldState: IWorldState, day: number): void => { } } - if (sortieBossToFaction[boss] == "FC_OROKIN") { - const orokinDisallowedMissionTypes = [1, 2, 5, 9]; - for (const missionType of orokinDisallowedMissionTypes) { + const specialMissionTypes = [1, 3, 5, 9]; + if (!(sortieBossToFaction[boss] in sortieFactionToSpecialMissionTileset)) { + for (const missionType of specialMissionTypes) { const i = availableMissionIndexes.indexOf(missionType); if (i != -1) { availableMissionIndexes.splice(i, 1); @@ -296,13 +302,22 @@ const pushSortieIfRelevant = (worldState: IWorldState, day: number): void => { const missionTypes = new Set(); for (let i = 0; i < 3; i++) { - const randomIndex = rng.randomInt(0, nodes.length - 1); - const node = nodes[randomIndex]; - let missionIndex = ExportRegions[node].missionIndex; + let randomIndex; + let node; + let missionIndex; + do { + randomIndex = rng.randomInt(0, nodes.length - 1); + node = nodes[randomIndex]; - if (missionIndex != 28) { - missionIndex = rng.randomElement(availableMissionIndexes); - } + missionIndex = ExportRegions[node].missionIndex; + if (missionIndex != 28) { + missionIndex = rng.randomElement(availableMissionIndexes); + } + } while ( + specialMissionTypes.indexOf(missionIndex) != -1 && + sortieTilesets[node as keyof typeof sortieTilesets] != + sortieFactionToSpecialMissionTileset[sortieBossToFaction[boss]] + ); if (i == 2 && rng.randomInt(0, 2) == 2) { const filteredModifiers = modifiers.filter(mod => mod !== "SORTIE_MODIFIER_MELEE_ONLY");