Complete RoM pair elite mechanics and creature family rules
This commit is contained in:
1 parent
c8b3a3d95a
commit
0206fda9e2
21 files changed
+1082
-134
No files matched your search
@@ -161,10 +161,10 @@ export function overrideRomScoutRogueEffects(
|
||||
customProc(493257, "hit", "rom-reclaim-energy", { chance: 0.25 }));
|
||||
case 499476:
|
||||
return taggedPassive(499476, "Toxic Splash", "rom-toxic-splash",
|
||||
customProc(499476, "hit", "rom-toxic-splash"));
|
||||
// 493296 replaces Infection and can generate 20 rage on a successful hit.
|
||||
customProc(499476, "hit", "rom-infection-rage", { chance: 0.25 }));
|
||||
case 499480:
|
||||
return taggedPassive(499480, "Poison Battle Technique", "rom-poison-battle-technique",
|
||||
customProc(499480, "hit", "rom-poison-battle-technique"));
|
||||
return taggedPassive(499480, "Poison Battle Technique", "rom-poison-battle-technique");
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -180,7 +180,8 @@ export function romScoutRogueCastEffects(
|
||||
const passives = new Set(passiveTags);
|
||||
const target = new Set(targetTags);
|
||||
if (ability.dbcSpellId === 490457) {
|
||||
const masteryFactor = passives.has("rom-master-reflected-shot") ? 1.2 : 1;
|
||||
// Replacement 499535 / component 623051 raises ranged DPS from 0.75 to 0.85.
|
||||
const masteryFactor = passives.has("rom-master-reflected-shot") ? 0.85 / 0.75 : 1;
|
||||
return effects.map((effect) => effect.kind === "damage" ? {
|
||||
...effect,
|
||||
coefficient: effect.coefficient * masteryFactor,
|
||||
@@ -192,6 +193,40 @@ export function romScoutRogueCastEffects(
|
||||
falloffPerJump: passives.has("rom-poisonous-spit") ? 1 : effect.falloffPerJump,
|
||||
} : effect);
|
||||
}
|
||||
if (ability.dbcSpellId === 490451 && passives.has("rom-meridian-attack")) {
|
||||
// 499537/623061 replaces Wrist Attack: -30 physical and magical damage for 10s.
|
||||
return effects.map((effect) => effect.kind === "apply-aura" && effect.recipient !== "caster"
|
||||
? {
|
||||
...effect,
|
||||
aura: {
|
||||
...effect.aura,
|
||||
durationMs: 10_000,
|
||||
modifiers: [
|
||||
{ kind: "damage" as const, direction: "dealt" as const, school: "physical" as const, operation: "percent" as const, value: -0.30 },
|
||||
{ kind: "damage" as const, direction: "dealt" as const, attackKind: "spell" as const, operation: "percent" as const, value: -0.30 },
|
||||
],
|
||||
},
|
||||
} : effect);
|
||||
}
|
||||
if (ability.dbcSpellId === 492920 && passives.has("rom-toxic-splash")) {
|
||||
// 499477 replaces Poison Spray. 493296 is its additional infection hit;
|
||||
// 622992 is the six-second poison it spreads to nearby targets.
|
||||
return [
|
||||
...effects.filter((effect) => effect.kind !== "dot"),
|
||||
// 620287: 0.85 main-hand DPS + 0.20 Dexterity, then +7.5% skill-level DPS.
|
||||
{ kind: "damage", coefficient: 1.11375, coefficientPerLevel: 0.06375, sourceLevel: 1 },
|
||||
{ kind: "dot", coefficient: 0, basePoints: 16.2, pointsPerLevel: 4.2,
|
||||
sourceLevel: 1, ticks: 3, intervalMs: 2_000, tag: "rom-622992" },
|
||||
];
|
||||
}
|
||||
if (ability.dbcSpellId === 490133 && passives.has("rom-poison-battle-technique")) {
|
||||
// 499481/620286 raises Whirlwind's main-hand DPS coefficient 0.70 -> 0.75.
|
||||
return effects.map((effect) => effect.kind === "damage" ? {
|
||||
...effect,
|
||||
coefficient: effect.coefficient * 0.75 / 0.70,
|
||||
...(effect.coefficientPerLevel === undefined ? {} : { coefficientPerLevel: effect.coefficientPerLevel * 0.75 / 0.70 }),
|
||||
} : effect);
|
||||
}
|
||||
if (ability.dbcSpellId === 490454 && passives.has("rom-lasso-master")) {
|
||||
return [...effects, {
|
||||
kind: "status",
|
||||
@@ -216,6 +251,17 @@ export function romScoutRogueCastEffects(
|
||||
return effects;
|
||||
}
|
||||
|
||||
/** 499481/622993 adds a hit only to targets already carrying 622992's poison. */
|
||||
export function romScoutRogueWhirlwindBonusEffect(
|
||||
ability: AbilityDefinition,
|
||||
passiveTags: readonly string[],
|
||||
targetTags: readonly string[],
|
||||
): Extract<AbilityEffect, { kind: "damage" }> | null {
|
||||
if (ability.dbcSpellId !== 490133 || !passiveTags.includes("rom-poison-battle-technique")
|
||||
|| !targetTags.includes("rom-622992")) return null;
|
||||
return { kind: "damage", coefficient: 0.50, coefficientPerLevel: 0.03, sourceLevel: 1 };
|
||||
}
|
||||
|
||||
export type RomScoutRogueProcActionSpec =
|
||||
| {
|
||||
readonly kind: "aura";
|
||||
@@ -246,13 +292,13 @@ export type RomScoutRogueProcActionSpec =
|
||||
/**
|
||||
* A pure result for combat-store proc execution. `triggeringSourceSkillId` is
|
||||
* the RuneWaker skill ID of the attack that generated the hit/crit event.
|
||||
* The level-60/70 replacement skills 499477 and 499481 are absent from the
|
||||
* playable source catalog; those unresolved actions deliberately return null.
|
||||
* The level-60/70 replacement skills 499477 and 499481 are represented by
|
||||
* their learned passive tags and base-ID cast upgrades, not custom procs.
|
||||
*/
|
||||
export function romScoutRogueProcActionSpec(
|
||||
actionId: string,
|
||||
triggeringSourceSkillId: number,
|
||||
casterPoisonous: boolean,
|
||||
_casterPoisonous: boolean,
|
||||
): RomScoutRogueProcActionSpec | null {
|
||||
switch (actionId) {
|
||||
case "rom-exploiting-shot":
|
||||
@@ -286,21 +332,21 @@ export function romScoutRogueProcActionSpec(
|
||||
provenance: "hybrid-estimate",
|
||||
};
|
||||
case "rom-poisonous-spit":
|
||||
if (!casterPoisonous || ![490457, 490424].includes(triggeringSourceSkillId)) return null;
|
||||
if (![490457, 490424].includes(triggeringSourceSkillId)) return null;
|
||||
return {
|
||||
kind: "dot",
|
||||
recipient: "target",
|
||||
effect: {
|
||||
kind: "dot",
|
||||
coefficient: 0,
|
||||
basePoints: 16,
|
||||
pointsPerLevel: 8,
|
||||
basePoints: 7.1,
|
||||
pointsPerLevel: 2.1,
|
||||
sourceLevel: 1,
|
||||
ticks: 5,
|
||||
ticks: 4,
|
||||
intervalMs: 2_000,
|
||||
tag: "rom-poisonous-spit",
|
||||
},
|
||||
provenance: "hybrid-estimate", // 501690 poison scale is a proxy; Poison Powder payload is not in this catalog.
|
||||
provenance: "source", // 499535/503522. Poison Powder is supplied without inventory gating.
|
||||
};
|
||||
case "rom-reclaim-energy":
|
||||
if (triggeringSourceSkillId === 490306) return {
|
||||
@@ -310,8 +356,12 @@ export function romScoutRogueProcActionSpec(
|
||||
kind: "resource", recipient: "caster", resource: "rage", amount: 10, provenance: "hybrid-estimate",
|
||||
};
|
||||
return null;
|
||||
case "rom-toxic-splash": // Requires absent replacement skill 499477 and triggered payload 493296.
|
||||
case "rom-poison-battle-technique": // Requires absent replacement skill 499481.
|
||||
case "rom-infection-rage":
|
||||
return triggeringSourceSkillId === 492625
|
||||
? { kind: "resource", recipient: "caster", resource: "rage", amount: 20, provenance: "hybrid-estimate" }
|
||||
: null;
|
||||
case "rom-toxic-splash": // 499477 is applied as an upgrade of base 492920.
|
||||
case "rom-poison-battle-technique": // 499481 is applied as an upgrade of base 490133.
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
|
||||
Reference in new issue
Block a user