forked from phenom/healer-man
206 lines
6.1 KiB
TypeScript
206 lines
6.1 KiB
TypeScript
import generatedCatalog from "./generated/manastormCatalog.json";
|
|
|
|
export type ManastormReferenceStatus = "resolved" | "unresolved";
|
|
export type ManastormReferenceKind = "map" | "encounter" | "creature" | "spell" | "icon";
|
|
|
|
export interface ManastormDbcHeader {
|
|
readonly recordCount: number;
|
|
readonly fieldCount: number;
|
|
readonly recordSize: number;
|
|
readonly stringBlockSize: number;
|
|
}
|
|
|
|
export interface ManastormCatalogSource {
|
|
readonly role: string;
|
|
readonly path: string;
|
|
readonly sha256: string;
|
|
readonly byteLength: number;
|
|
readonly dbc: ManastormDbcHeader;
|
|
}
|
|
|
|
export interface ManastormCatalogProvenance {
|
|
readonly importerVersion: string;
|
|
readonly generatedFrom: readonly string[];
|
|
readonly sources: readonly ManastormCatalogSource[];
|
|
}
|
|
|
|
export interface ManastormCatalogCounts {
|
|
readonly sourceRows: number;
|
|
readonly maps: number;
|
|
readonly encounters: number;
|
|
readonly modifiers: number;
|
|
readonly groupModifiers: number;
|
|
readonly messages: number;
|
|
readonly spellRecords: number;
|
|
readonly spellIconRecords: number;
|
|
readonly resolvedMessageIcons: number;
|
|
readonly unresolvedMessageIcons: number;
|
|
readonly validationIssues: number;
|
|
}
|
|
|
|
export interface ManastormValidationIssue {
|
|
readonly severity: "warning" | "error";
|
|
readonly code: string;
|
|
readonly source: string;
|
|
readonly recordId: number;
|
|
readonly field: string;
|
|
readonly value: string | number | null;
|
|
readonly message: string;
|
|
}
|
|
|
|
export interface ManastormUnresolvedReference {
|
|
readonly kind: Exclude<ManastormReferenceKind, "map" | "encounter">;
|
|
readonly status: "unresolved";
|
|
readonly id: null;
|
|
readonly reason: string;
|
|
readonly sourceEncounterId?: number;
|
|
readonly candidateSpellCount?: number;
|
|
readonly basename?: string;
|
|
}
|
|
|
|
export interface ManastormResolvedIconReference {
|
|
readonly kind: "icon";
|
|
readonly status: "resolved";
|
|
readonly basename: string;
|
|
readonly spellIconIds: readonly number[];
|
|
readonly paths: readonly string[];
|
|
readonly sha256?: string;
|
|
readonly resolutionSource: "SpellIcon.dbc" | "installed-icon-file";
|
|
}
|
|
|
|
export interface ManastormResolvedCreatureReference {
|
|
readonly kind: "creature";
|
|
readonly status: "resolved";
|
|
readonly id: number;
|
|
readonly sourceEncounterId: number;
|
|
readonly source: "DungeonEncounterExtra.dbc";
|
|
}
|
|
|
|
export type ManastormIconReference =
|
|
| ManastormResolvedIconReference
|
|
| ManastormUnresolvedReference;
|
|
|
|
export type ManastormCreatureReference =
|
|
| ManastormResolvedCreatureReference
|
|
| ManastormUnresolvedReference;
|
|
|
|
export interface ManastormMapCatalogEntry {
|
|
readonly id: string;
|
|
readonly mapId: number;
|
|
readonly name: string;
|
|
readonly directory: string;
|
|
readonly instanceType: number;
|
|
readonly flags: number;
|
|
readonly expansionId: number;
|
|
readonly maxPlayers: number;
|
|
readonly sourceRowIds: readonly string[];
|
|
readonly encounterIds: readonly string[];
|
|
}
|
|
|
|
export interface ManastormEncounterCatalogEntry {
|
|
readonly id: string;
|
|
readonly encounterId: number;
|
|
readonly mapIds: readonly number[];
|
|
readonly modeIds: readonly number[];
|
|
readonly sourceRowIds: readonly string[];
|
|
readonly creatureReference: ManastormCreatureReference;
|
|
readonly spellReference: ManastormUnresolvedReference;
|
|
readonly iconReference: ManastormUnresolvedReference;
|
|
}
|
|
|
|
export interface ManastormSourceRow {
|
|
readonly id: string;
|
|
readonly sourceRecordId: number;
|
|
readonly mapId: number;
|
|
readonly mapCatalogId: string;
|
|
readonly modeId: number;
|
|
readonly encounterId: number;
|
|
readonly encounterCatalogId: string;
|
|
readonly scalars: readonly [number, number, number, number, number];
|
|
}
|
|
|
|
export interface ManastormModifier {
|
|
readonly id: string;
|
|
readonly sourceRecordId: number;
|
|
readonly modeId: number;
|
|
readonly level: number;
|
|
readonly tuning: readonly [
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
number,
|
|
];
|
|
readonly rawFlag: number;
|
|
}
|
|
|
|
export interface ManastormGroupModifier {
|
|
readonly id: string;
|
|
readonly sourceRecordId: number;
|
|
readonly playerCount: number;
|
|
readonly modeId: number;
|
|
readonly multipliers: readonly [number, number];
|
|
}
|
|
|
|
export interface ManastormMessage {
|
|
readonly id: string;
|
|
readonly sourceRecordId: number;
|
|
readonly modeId: number;
|
|
readonly progressionValue: number;
|
|
readonly groupId: number;
|
|
readonly iconReference: ManastormIconReference;
|
|
readonly spellReference: ManastormUnresolvedReference;
|
|
readonly title: string;
|
|
readonly description: string;
|
|
readonly titleFlags: number;
|
|
readonly descriptionFlags: number;
|
|
}
|
|
|
|
export interface ManastormCatalog {
|
|
readonly schemaVersion: 1;
|
|
readonly catalogId: "ascension-manastorm-installed-client";
|
|
readonly provenance: ManastormCatalogProvenance;
|
|
readonly counts: ManastormCatalogCounts;
|
|
readonly referencePolicy: Readonly<Record<ManastormReferenceKind, string>>;
|
|
readonly validationIssues: readonly ManastormValidationIssue[];
|
|
readonly maps: readonly ManastormMapCatalogEntry[];
|
|
readonly encounters: readonly ManastormEncounterCatalogEntry[];
|
|
readonly sourceRows: readonly ManastormSourceRow[];
|
|
readonly modifiers: readonly ManastormModifier[];
|
|
readonly groupModifiers: readonly ManastormGroupModifier[];
|
|
readonly messages: readonly ManastormMessage[];
|
|
}
|
|
|
|
export const MANASTORM_CATALOG = generatedCatalog as unknown as ManastormCatalog;
|
|
|
|
const mapById = new Map(MANASTORM_CATALOG.maps.map((map) => [map.mapId, map]));
|
|
const encounterById = new Map(
|
|
MANASTORM_CATALOG.encounters.map((encounter) => [encounter.encounterId, encounter]),
|
|
);
|
|
const sourceRowsByMapId = new Map<number, ManastormSourceRow[]>();
|
|
for (const row of MANASTORM_CATALOG.sourceRows) {
|
|
const rows = sourceRowsByMapId.get(row.mapId) ?? [];
|
|
rows.push(row);
|
|
sourceRowsByMapId.set(row.mapId, rows);
|
|
}
|
|
|
|
export function installedManastormMapById(mapId: number): ManastormMapCatalogEntry | null {
|
|
return mapById.get(mapId) ?? null;
|
|
}
|
|
|
|
export function installedManastormEncounterById(
|
|
encounterId: number,
|
|
): ManastormEncounterCatalogEntry | null {
|
|
return encounterById.get(encounterId) ?? null;
|
|
}
|
|
|
|
export function installedManastormRowsForMap(mapId: number): readonly ManastormSourceRow[] {
|
|
return sourceRowsByMapId.get(mapId) ?? [];
|
|
}
|