forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
39458d5de6
commit
6cc1b9217f
203 files changed
+133929
-31271
No files matched your search
@@ -0,0 +1,96 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { before, describe, it } from "node:test";
|
||||
import {
|
||||
creatureTemplateReference,
|
||||
creatureTemplateUsesImmunitiesReference,
|
||||
parseTable,
|
||||
PINNED_CREATURE_IMMUNITIES_SOURCE,
|
||||
} from "./import-azerothcore-world.mjs";
|
||||
|
||||
describe("AzerothCore creature immunity import", () => {
|
||||
let creatureImmunitiesById;
|
||||
let tableReport;
|
||||
|
||||
before(async () => {
|
||||
creatureImmunitiesById = new Map();
|
||||
tableReport = await parseTable(
|
||||
PINNED_CREATURE_IMMUNITIES_SOURCE.fixtureRoot,
|
||||
"creature_immunities",
|
||||
(row) => creatureImmunitiesById.set(Number(row.ID), row),
|
||||
);
|
||||
});
|
||||
|
||||
it("uses the pinned schema, source commit, and exact table hash", () => {
|
||||
assert.equal(PINNED_CREATURE_IMMUNITIES_SOURCE.commit, "4d9d1d4b5723e819c5c390f6ca1177283dbfb8e3");
|
||||
assert.equal(PINNED_CREATURE_IMMUNITIES_SOURCE.path, "data/sql/base/db_world/creature_immunities.sql");
|
||||
assert.equal(PINNED_CREATURE_IMMUNITIES_SOURCE.sha256,
|
||||
"aee81a1d8b99986f8498a2b4c51b64eaf4b9095a0d1a12bbf3705d9588a90a13");
|
||||
assert.ok(tableReport.rows > 0);
|
||||
assert.equal(tableReport.sha256, PINNED_CREATURE_IMMUNITIES_SOURCE.sha256);
|
||||
assert.ok([
|
||||
"ID",
|
||||
"SchoolMask",
|
||||
"MechanicsMask",
|
||||
].every((column) => tableReport.columns.includes(column)));
|
||||
assert.deepEqual({
|
||||
ID: creatureImmunitiesById.get(-93).ID,
|
||||
SchoolMask: creatureImmunitiesById.get(-93).SchoolMask,
|
||||
MechanicsMask: creatureImmunitiesById.get(-93).MechanicsMask,
|
||||
}, {
|
||||
ID: -93,
|
||||
SchoolMask: 0,
|
||||
MechanicsMask: 16_777_248,
|
||||
});
|
||||
});
|
||||
|
||||
it("resolves Lady Anacondra's immunity FK to Fear and Horror only", () => {
|
||||
const lady = creatureTemplateReference({
|
||||
entry: 3671,
|
||||
name: "Lady Anacondra",
|
||||
CreatureImmunitiesId: -93,
|
||||
}, creatureImmunitiesById);
|
||||
|
||||
assert.equal(lady.entry, 3671);
|
||||
assert.equal(lady.mechanicImmuneMask, 0x0080_0010);
|
||||
assert.deepEqual(lady.mechanicImmunities, ["fear", "horror"]);
|
||||
assert.equal(lady.spellSchoolImmuneMask, 0);
|
||||
assert.deepEqual(lady.schoolImmunities, []);
|
||||
assert.ok(!lady.mechanicImmunities.includes("silence"));
|
||||
assert.ok(!lady.mechanicImmunities.includes("interrupt"));
|
||||
});
|
||||
|
||||
it("retains source-backed Silence and Interrupt immunity on rows that declare them", () => {
|
||||
const immune = creatureTemplateReference({
|
||||
entry: 99_377,
|
||||
name: "Source immunity control",
|
||||
CreatureImmunitiesId: -377,
|
||||
}, creatureImmunitiesById);
|
||||
|
||||
assert.ok(immune.mechanicImmunities.includes("silence"));
|
||||
assert.ok(immune.mechanicImmunities.includes("interrupt"));
|
||||
});
|
||||
|
||||
it("preserves legacy literal masks and fails closed on a missing FK", () => {
|
||||
const legacy = creatureTemplateReference({
|
||||
entry: 1,
|
||||
mechanic_immune_mask: 0x0080_0010,
|
||||
spell_school_immune_mask: 0x04,
|
||||
});
|
||||
assert.equal(legacy.mechanicImmuneMask, 0x0080_0010);
|
||||
assert.deepEqual(legacy.mechanicImmunities, ["fear", "horror"]);
|
||||
assert.equal(legacy.spellSchoolImmuneMask, 0x04);
|
||||
assert.deepEqual(legacy.schoolImmunities, ["fire"]);
|
||||
assert.throws(() => creatureTemplateReference({
|
||||
entry: 3671,
|
||||
CreatureImmunitiesId: -999_999,
|
||||
}, creatureImmunitiesById), /references missing creature_immunities\.ID -999999/);
|
||||
});
|
||||
|
||||
it("loads the FK table only for schemas that declare CreatureImmunitiesId", () => {
|
||||
const legacySchema = "CREATE TABLE `creature_template` (\n `mechanic_immune_mask` int NOT NULL DEFAULT '0'\n) ENGINE=InnoDB;";
|
||||
const fkSchema = "CREATE TABLE `creature_template` (\n `CreatureImmunitiesId` int NOT NULL DEFAULT '0'\n) ENGINE=InnoDB;";
|
||||
|
||||
assert.equal(creatureTemplateUsesImmunitiesReference(legacySchema), false);
|
||||
assert.equal(creatureTemplateUsesImmunitiesReference(fkSchema), true);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user