forked from phenom/healer-man
76 lines
3.2 KiB
TypeScript
76 lines
3.2 KiB
TypeScript
import type { DungeonDefinition } from "./dungeonTypes";
|
|
import type { DungeonEncounterDefinition } from "./dungeonEncounterTypes";
|
|
|
|
export interface WowVerifiedNoOpInstanceReview {
|
|
readonly dungeonId: "stormwind-stockade" | "razorfen-kraul" | "ragefire-chasm";
|
|
readonly sourceFile: string;
|
|
readonly sha256: string;
|
|
readonly reviewedBehavior: string;
|
|
}
|
|
|
|
const SOURCE_ROOT = "../HealerMan-Storage/pipeline-work/dungeons/azerothcore-scripts/src/server/scripts";
|
|
|
|
/**
|
|
* These pinned instance scripts only register an empty InstanceScript. Keeping
|
|
* that fact executable prevents the production audit from inventing doors,
|
|
* waves, or gates that the authoritative source does not define.
|
|
*/
|
|
export const WOW_VERIFIED_NO_OP_INSTANCE_REVIEWS: readonly WowVerifiedNoOpInstanceReview[] = Object.freeze([
|
|
{
|
|
dungeonId: "stormwind-stockade",
|
|
sourceFile: `${SOURCE_ROOT}/EasternKingdoms/TheStockade/instance_the_stockade.cpp`,
|
|
sha256: "5e86a879ea7919840567607e6fbc1b6df2c50581f23574295430b46701f54a49",
|
|
reviewedBehavior: "The pinned Stockade instance script only constructs and registers an empty InstanceScript; it defines no saved encounter state, gates, waves, summons, or route transitions.",
|
|
},
|
|
{
|
|
dungeonId: "razorfen-kraul",
|
|
sourceFile: `${SOURCE_ROOT}/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp`,
|
|
sha256: "50309cf599020ca404d3230f134919349177a98aa572bf61132dd0e14504da54",
|
|
reviewedBehavior: "The pinned Razorfen Kraul instance script only constructs and registers an empty InstanceScript; it defines no saved encounter state, gates, waves, summons, or route transitions.",
|
|
},
|
|
{
|
|
dungeonId: "ragefire-chasm",
|
|
sourceFile: `${SOURCE_ROOT}/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp`,
|
|
sha256: "294d043e5e6f02f3fbe82f369129659617da30727e048ffa4a333237e58a22f6",
|
|
reviewedBehavior: "The pinned Ragefire Chasm instance script only constructs and registers an empty InstanceScript; it defines no saved encounter state, gates, waves, summons, or route transitions.",
|
|
},
|
|
]);
|
|
|
|
function reviewedNoOpEncounter(
|
|
definition: DungeonDefinition,
|
|
review: WowVerifiedNoOpInstanceReview,
|
|
): DungeonEncounterDefinition {
|
|
return Object.freeze({
|
|
id: `${definition.id}:source-reviewed-instance`,
|
|
dungeonId: definition.id,
|
|
initialPhase: "active",
|
|
source: Object.freeze({
|
|
fidelity: "source-exact",
|
|
scope: "instance-orchestration",
|
|
files: Object.freeze([review.sourceFile]),
|
|
reviewedBehavior: review.reviewedBehavior,
|
|
adaptations: Object.freeze([]),
|
|
remainingGaps: Object.freeze([]),
|
|
}),
|
|
rules: Object.freeze([]),
|
|
});
|
|
}
|
|
|
|
export function withWowVerifiedNoOpInstanceContent(
|
|
definition: DungeonDefinition,
|
|
): DungeonDefinition {
|
|
const review = WOW_VERIFIED_NO_OP_INSTANCE_REVIEWS.find(
|
|
(candidate) => candidate.dungeonId === definition.id,
|
|
);
|
|
if (!review) return definition;
|
|
const encounterId = `${definition.id}:source-reviewed-instance`;
|
|
if (definition.encounters?.some((encounter) => encounter.id === encounterId)) return definition;
|
|
return Object.freeze({
|
|
...definition,
|
|
encounters: Object.freeze([
|
|
...(definition.encounters ?? []),
|
|
reviewedNoOpEncounter(definition, review),
|
|
]),
|
|
});
|
|
}
|