Release Healer Man 0.1.21

This commit is contained in:
phenom committed 2026-09-08 10:40:26 -04:00
1 parent 699fc858c9
commit f6f2375145
210 files changed
+976039 -6247

No files matched your search

@@ -460,6 +460,12 @@ function attacksFor(template, sourceSpells, spellCatalog, bossMechanics) {
initialCooldownMs: [spell.runtime.cooldownMs, spell.runtime.cooldownMs],
repeatCooldownMs: [spell.runtime.cooldownMs, spell.runtime.cooldownMs],
damageMultiplier: spell.runtime.damageMultiplier,
...(spell.runtime.formula ? {
runewakerFormula: {
...spell.runtime.formula,
spellLevel: Number(sourceSpell.level ?? 0),
},
} : {}),
}];
});
const recipeAttacks = Array.isArray(template.attacks)
@@ -471,7 +477,34 @@ function attacksFor(template, sourceSpells, spellCatalog, bossMechanics) {
const mechanics = authored?.mode === "replace"
? authored.mechanics ?? []
: [...(authored?.mechanics ?? []), ...recipeAttacks, ...sourceAttacks];
const unique = [...new Map(mechanics.map((attack) => [attack.id, attack])).values()];
const sourceSpellLevels = new Map(
(sourceSpells ?? []).map((sourceSpell) => [Number(sourceSpell.id), Number(sourceSpell.level ?? 0)]),
);
for (const spellId of authored?.source?.spellIds ?? []) {
if (!sourceSpellLevels.has(Number(spellId))) {
// Script-derived spell evidence has no NPC assignment level in the packaged row.
// Zero is the catalog's explicit unassigned-level sentinel and is not used by
// the HealerMan baseline adapter.
sourceSpellLevels.set(Number(spellId), 0);
}
}
const withSourceFormula = mechanics.map((attack) => {
const spellId = Number(attack.spellId ?? attack.source?.spellId ?? 0);
const spell = spellCatalog.get(spellId);
if (!sourceSpellLevels.has(spellId)
|| spell?.mappingStatus !== "damage-family"
|| !spell.runtime?.formula) {
return attack;
}
return {
...attack,
runewakerFormula: {
...spell.runtime.formula,
spellLevel: sourceSpellLevels.get(spellId),
},
};
});
const unique = [...new Map(withSourceFormula.map((attack) => [attack.id, attack])).values()];
return [basicAttack, ...unique];
}
@@ -706,7 +739,7 @@ async function generatePopulation() {
serverEntryPolicy: "RuneWaker numeric ids are never passed to AzerothCore serverEntry.",
sourceSpellCatalog: projectPath(spellCatalogFile),
sourceSpellCatalogSha256: await sha256(spellCatalogFile),
sourceSpellPolicy: "Only positively classified direct-HP-damage families execute; coefficients remain conservative HealerMan values.",
sourceSpellPolicy: "Only positively classified direct-HP-damage families execute; source fields are preserved and live damage uses the labeled HealerMan baseline adapter when native stats are unavailable.",
};
const reportFile = resolveProject(recipe.files.report);
await mkdir(path.dirname(reportFile), { recursive: true });