Update Healer Man server
This commit is contained in:
1 parent
6114a2295f
commit
69809f7228
593 files changed
+903643
-40774
No files matched your search
@@ -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(
|
||||
|
||||
Reference in new issue
Block a user