Update Healer Man server

This commit is contained in:
phenom committed 2026-10-06 22:25:34 -04:00
1 parent 6114a2295f
commit 69809f7228
593 files changed
+903643 -40774

No files matched your search

+28 -4
View File
@@ -1,5 +1,6 @@
import type { RomNativeDerivedStats } from "./romNativeStatsTypes";
import type { RomNativeDamageTargetContext } from "./romNativeCombatAmount";
import type { EnemyDisarmWeaponChannel } from "./enemyWeaponDebuffs";
import {
abilitiesForCharacter,
learnedAbilityForBuild,
@@ -52,6 +53,11 @@ import { applyTalentModifierValue, talentModifiersForRanks } from "./talentModif
import { romWarlockMageSoulBrandStingHasWillpowerBladeState } from "./romWarlockMageSoulBrandSting";
import { EMPTY_ITEM_STATS } from "./itemStats";
import { romBloodArrowCastCosts } from "./romBloodArrow";
import { coaWitchDoctorBrewingAbilityForCast, coaWitchDoctorIngredientIdForAbility } from "./coaWitchDoctorBrewingRuntime";
import { coaBarbarianDecapitateWeaponStrike, coaNormalizedMeleeWeaponSpeed } from "./coaBarbarianWeaponDamageRuntime";
import { coaGuardianFormationAbilityForCast } from "./coaGuardianFormationRuntime";
import { projectCoaGuardianParagonAbility } from "./coaGuardianParagonRuntime";
import { resolvedEquipmentLoadout } from "./heirloomEquipment";
export interface PartyAbilityContext {
readonly now: number;
@@ -351,11 +357,22 @@ export function partyAbilityIsReady(
return !runeCost || spendDeathKnightRunes(member.runes, runeCost, now) !== null;
}
function learnedAbilities(member: PartyMember): readonly AbilityDefinition[] {
function learnedAbilities(member: PartyMember, now: number): readonly AbilityDefinition[] {
const combat = useCombatStore.getState();
const mainHand = member.classId === "barbarian" ? resolvedEquipmentLoadout(combat.equipment, combat.inventory, {
ownerId: member.id, ownerKind: "party", classId: member.classId,
secondaryClassId: member.secondaryClassId, specializationId: member.specializationId,
role: member.role, level: member.level,
})["main-hand"] : null;
return abilitiesForCharacter(member.classId, member.secondaryClassId)
.map((ability) => learnedAbilityForBuild(ability, member.level, member.talentRanks))
.filter((ability): ability is AbilityDefinition => ability !== null)
.map((ability) => partyAbilityWithRomPriestChampionCooldown(member, ability));
.map((ability) => partyAbilityWithRomPriestChampionCooldown(member, ability))
.map((ability) => coaWitchDoctorBrewingAbilityForCast(ability, combat.auras, member.id, now))
.map(coaGuardianFormationAbilityForCast)
.map((ability) => projectCoaGuardianParagonAbility(ability, member, combat.auras, now))
.map((ability) => coaBarbarianDecapitateWeaponStrike(ability, member.gearStats.meleeWeapon,
mainHand ? coaNormalizedMeleeWeaponSpeed(mainHand) : null));
}
function isComboFinisher(ability: AbilityDefinition): boolean {
@@ -414,8 +431,10 @@ export function choosePartyRotationDecision(
[...new Set([...Object.keys(member.resourcePools), member.resourceType])]
.map((resource) => [resource, companionResourceMaximum(member, resource)]),
);
const learned = learnedAbilities(member);
const readyAbilities = learned.filter((ability) => partyAbilityIsReady(
const learned = learnedAbilities(member, context.now);
const readyAbilities = learned.filter((ability) => !(member.classId === "witch-doctor"
&& member.specializationId === "witch-doctor:brewing" && member.role === "healer"
&& coaWitchDoctorIngredientIdForAbility(ability) !== null)).filter((ability) => partyAbilityIsReady(
member,
ability,
context.now,
@@ -592,6 +611,7 @@ export function partyAbilityAmount(
intellectOverride?: number,
effectiveNativeStats?: RomNativeDerivedStats,
nativeTargetContext?: RomNativeDamageTargetContext,
disabledWeaponChannels?: ReadonlySet<EnemyDisarmWeaponChannel>,
): number {
const sourceIntellect = intellectOverride ?? deriveCharacterStats(
member.classId,
@@ -625,6 +645,9 @@ export function partyAbilityAmount(
member.gender,
member.statRuleset ?? "wow",
member.secondaryClassId,
undefined,
undefined,
disabledWeaponChannels,
);
}
const coefficient = "coefficient" in effect
@@ -646,6 +669,7 @@ export function partyAbilityAmount(
member.secondaryClassId,
effectiveNativeStats,
nativeTargetContext,
disabledWeaponChannels,
) + (effect.kind === "damage" ? effect.bonusFlat ?? 0 : 0);
if (member.classId === "druid" && (effect.kind === "damage" || effect.kind === "dot")) {
return applyTalentModifierValue(