Update Healer Man server
This commit is contained in:
1 parent
4c768fbec6
commit
b16821e92e
330 files changed
+35406
-1760
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user