Update class mechanics, stat rulesets, and CoA reference catalogs
This commit is contained in:
1 parent
b16821e92e
commit
39458d5de6
221 files changed
+2584962
-568
No files matched your search
@@ -9,10 +9,39 @@ export const ROM_KNIGHT_COMPASSION_OF_HOLY_LIGHT_TAG = "rom-compassion-of-holy-l
|
||||
export const ROM_KNIGHT_HOLY_ILLUMINATION_TAG = "rom-holy-illumination";
|
||||
export const ROM_KNIGHT_MASTER_OF_PARRY_TAG = "rom-knight-master-of-parry";
|
||||
export const ROM_KNIGHT_MASTER_OF_PARRY_BLOCK_PROC = "rom-knight-master-of-parry-block";
|
||||
export const ROM_KNIGHT_PANTHERS_BLESSING_TAG = "rom-knight-panthers-blessing";
|
||||
export const ROM_KNIGHT_DEADLY_WHIRLWIND_TAG = "rom-deadly-whirlwind";
|
||||
export const ROM_KNIGHT_CURRENT_COA_WHIRLWIND_SHIELD_ID = 1_493_719;
|
||||
export const ROM_KNIGHT_LOCAL_WHIRLWIND_SHIELD_ID = 490_175;
|
||||
|
||||
export interface RomKnightGodsVengeanceResetContext {
|
||||
readonly characterClassId: string;
|
||||
readonly secondaryClassId: string | null | undefined;
|
||||
readonly ability: Pick<AbilityDefinition, "source" | "classId" | "secondaryClassId" | "dbcSpellId">;
|
||||
readonly learnedPassiveSpellIds: readonly number[];
|
||||
readonly shadowStepLearned: boolean;
|
||||
readonly targetSealStacks: number;
|
||||
readonly sameTarget: boolean;
|
||||
readonly landed: boolean;
|
||||
}
|
||||
|
||||
/** Current CoA God's Vengeance resets Shadow Step only for its linked Punishment hit at exactly four Seals. */
|
||||
export function romKnightGodsVengeanceShouldResetShadowStep(
|
||||
context: RomKnightGodsVengeanceResetContext,
|
||||
): boolean {
|
||||
return context.characterClassId === "rom-knight"
|
||||
&& context.secondaryClassId === "rom-rogue"
|
||||
&& context.ability.source === "runewaker"
|
||||
&& context.ability.classId === "rom-knight"
|
||||
&& context.ability.secondaryClassId === "rom-rogue"
|
||||
&& context.ability.dbcSpellId === 499_909
|
||||
&& context.learnedPassiveSpellIds.includes(499_934)
|
||||
&& context.shadowStepLearned
|
||||
&& context.targetSealStacks === 4
|
||||
&& context.sameTarget
|
||||
&& context.landed;
|
||||
}
|
||||
|
||||
/** Shield of Valor reduces Holy Seal's remaining cooldown only on an active-aura parry. */
|
||||
export function romKnightShieldOfValorCooldownReductionMs(auraActive: boolean, parried: boolean): number {
|
||||
return auraActive && parried ? 1_000 : 0;
|
||||
@@ -216,11 +245,37 @@ function holyIlluminationPassive(row: RomGeneratedAbilityLike): readonly Ability
|
||||
}];
|
||||
}
|
||||
|
||||
function panthersBlessingPassiveMarker(row: RomGeneratedAbilityLike): readonly AbilityEffect[] {
|
||||
return [{
|
||||
kind: "apply-aura",
|
||||
recipient: "caster",
|
||||
aura: {
|
||||
id: "rom-knight-passive-493047",
|
||||
name: row.name,
|
||||
disposition: "buff",
|
||||
durationMs: null,
|
||||
utilityTags: [ROM_KNIGHT_PANTHERS_BLESSING_TAG],
|
||||
},
|
||||
sourceEffectType: -1,
|
||||
sourceAuraType: -1,
|
||||
miscValue: 0,
|
||||
triggerSpellId: 493_047,
|
||||
}];
|
||||
}
|
||||
|
||||
/** Source-backed Knight passive and cast adjustments. */
|
||||
export function overrideRomKnightEffects(
|
||||
row: RomGeneratedAbilityLike,
|
||||
translated: readonly AbilityEffect[],
|
||||
): readonly AbilityEffect[] | null {
|
||||
if (row.classId === "rom-knight"
|
||||
&& row.secondaryClassId === "rom-rogue"
|
||||
&& row.sourceSkillId === 493047) {
|
||||
// Keep the stale RuneWaker shield-conditioned +2 Dodge child suppressed:
|
||||
// its chance and required-buff gate are absent. The current CoA dodge
|
||||
// restore is handled by romKnightPanthersBlessingRuntime.ts.
|
||||
return panthersBlessingPassiveMarker(row);
|
||||
}
|
||||
if (row.classId === "rom-knight"
|
||||
&& row.secondaryClassId === "rom-warrior"
|
||||
&& row.sourceSkillId === 490088) {
|
||||
|
||||
Reference in new issue
Block a user