Update Healer Man server

This commit is contained in:
phenom committed 2026-10-02 10:38:12 -04:00
1 parent 4c768fbec6
commit b16821e92e
330 files changed
+35406 -1760

No files matched your search

+17 -13
View File
@@ -254,36 +254,40 @@ function rankNumber(spell) {
return Number(spell.rankText.match(/^Rank\s+(\d+)$/i)?.[1] ?? 0);
}
function resolveDescription(spell) {
const effect = (oneBasedIndex) => spell.effects.find(
(candidate) => candidate.index === Math.max(0, Number(oneBasedIndex || 1) - 1),
);
function resolveDescription(spell, spells) {
return (spell.description || "No client description is available.")
.replace(/\$(\d+)?[sSmM](\d+)?/g, (_token, _spellId, effectIndex) => {
const value = effect(effectIndex);
.replace(/\$(\d+)?[sSmM](\d+)?/g, (_token, referencedSpellId, effectIndex) => {
const referencedSpell = referencedSpellId ? spells.get(Number(referencedSpellId)) : undefined;
const value = (referencedSpell ?? spell).effects.find(
(candidate) => candidate.index === Math.max(0, Number(effectIndex || 1) - 1),
);
if (!value) return "the listed amount";
const maximum = Math.abs(value.basePoints) + Math.max(0, Math.abs(value.dieSides) - 1);
return String(Math.round(maximum * 100) / 100);
})
.replace(/\$(\d+)?t(\d+)?/g, (_token, _spellId, effectIndex) => {
const period = effect(effectIndex)?.periodMs ?? 0;
.replace(/\$(\d+)?t(\d+)?/g, (_token, referencedSpellId, effectIndex) => {
const referencedSpell = referencedSpellId ? spells.get(Number(referencedSpellId)) : undefined;
const period = (referencedSpell ?? spell).effects.find(
(candidate) => candidate.index === Math.max(0, Number(effectIndex || 1) - 1),
)?.periodMs ?? 0;
return period > 0 ? String(period / 1000) : "the listed interval";
})
.replace(/\$(\d+)?d\b/g, () => {
const milliseconds = Math.abs(spell.durationMs);
.replace(/\$(\d+)?d\b/g, (_token, referencedSpellId) => {
const referencedSpell = referencedSpellId ? spells.get(Number(referencedSpellId)) : undefined;
const milliseconds = Math.abs((referencedSpell ?? spell).durationMs);
return milliseconds > 0 ? `${milliseconds / 1000} sec` : "the listed duration";
})
.replace(/\$[a-zA-Z0-9:;.*+/{}-]+/g, "the listed amount");
}
function slimRank(spell) {
function slimRank(spell, spells) {
return {
spellId: spell.id,
rank: rankNumber(spell),
level: spell.spellLevel,
sourceLevel: spell.baseLevel || spell.spellLevel,
maxScalingLevel: spell.maxLevel,
description: resolveDescription(spell),
description: resolveDescription(spell, spells),
castTimeMs: spell.castTimeMs,
cooldownMs: Math.max(spell.recoveryTimeMs, spell.categoryRecoveryTimeMs),
// Zero is the DBC signal for abilities that do not start a global cooldown.
@@ -391,7 +395,7 @@ try {
sourceUnlockLevel: Math.max(1, Math.min(...ranks.map((spell) => spell.spellLevel))),
...(passive ? { passive: true } : {}),
...(talentNodeId ? { talentNodeId } : {}),
ranks: ranks.map(slimRank),
ranks: ranks.map((spell) => slimRank(spell, spells)),
};
}).sort((left, right) => (
left.sourceUnlockLevel - right.sourceUnlockLevel