Update Healer Man server
This commit is contained in:
1 parent
f864b5aea7
commit
fdb6739f8d
10 files changed
+236
-16
No files matched your search
@@ -57,6 +57,7 @@ import {
|
||||
commitPartyAbilityUse,
|
||||
partyAbilityAmount,
|
||||
} from "./partyAbilityAi";
|
||||
import { minimumHostileTargetsForAbility } from "./combatRotation";
|
||||
import { emitRotationDecision } from "./rotationTelemetry";
|
||||
import { imminentCooldownMechanic } from "./companionCooldownPolicy";
|
||||
import { normalizeActorResourcePool } from "./combatActors";
|
||||
@@ -799,7 +800,7 @@ function partyHostileTargets(
|
||||
for (const id of ordered) {
|
||||
if (selected.length >= (targeting.maximumTargets ?? 3)) break;
|
||||
const position = getMobPosition(id);
|
||||
if (!position || combat.mobs[id]?.dead) continue;
|
||||
if (!position || !combat.mobs[id]?.engaged || combat.mobs[id]?.dead) continue;
|
||||
if (selected.length > 0 && distanceSquared(previous, position) > (targeting.jumpRange ?? 12) ** 2) continue;
|
||||
if (!combatHasLineOfSight(previous, position)) continue;
|
||||
selected.push(id);
|
||||
@@ -812,7 +813,7 @@ function partyHostileTargets(
|
||||
return Object.values(combat.mobs)
|
||||
.filter((mob) => {
|
||||
const position = getMobPosition(mob.id);
|
||||
return !mob.dead && Boolean(position
|
||||
return mob.engaged && !mob.dead && Boolean(position
|
||||
&& distanceSquared(origin, position) <= (targeting.radius ?? ability.radius ?? ability.range.max) ** 2
|
||||
&& combatHasLineOfSight(origin, position)
|
||||
&& (!memberSpatial || isPositionInFacingArc(memberSpatial, position, targeting.attackArcRadians ?? Math.PI / 2)));
|
||||
@@ -826,7 +827,7 @@ function partyHostileTargets(
|
||||
return Object.values(combat.mobs)
|
||||
.filter((mob) => {
|
||||
const position = getMobPosition(mob.id);
|
||||
return !mob.dead && Boolean(position
|
||||
return mob.engaged && !mob.dead && Boolean(position
|
||||
&& distanceSquared(center, position) <= radius * radius
|
||||
&& combatHasLineOfSight(center, position));
|
||||
})
|
||||
@@ -1824,7 +1825,14 @@ export function advanceDungeonPartyCombat(now = Date.now()): void {
|
||||
const abilityTargetId = (ability.target === "self" && !hostileSelfArea) || ability.target === "friendly"
|
||||
? member.id
|
||||
: memberTargetId;
|
||||
const minimumHostiles = minimumHostileTargetsForAbility(ability.name);
|
||||
return partyAbilityTargetIsValid(runtimeMember, ability, abilityTargetId)
|
||||
&& (minimumHostiles <= 1 || partyHostileTargets(
|
||||
ability,
|
||||
abilityTargetId,
|
||||
memberPosition,
|
||||
member.id,
|
||||
).length >= minimumHostiles)
|
||||
&& (ability.name !== "Envenom" || matchingAuraStacks(
|
||||
currentCombat.auras,
|
||||
ROGUE_DEADLY_POISON_DOSE_TAG,
|
||||
@@ -1845,6 +1853,8 @@ export function advanceDungeonPartyCombat(now = Date.now()): void {
|
||||
// Let maintained effects tick instead of resetting their first tick on every GCD.
|
||||
&& !currentCombat.effects.some((effect) => effect.sourceActorId === member.id
|
||||
&& effect.sourceAbilityId === ability.id && effect.targetId === abilityTargetId && effect.remainingTicks > 0)
|
||||
&& !currentCombat.areaEffects.some((effect) => effect.sourceActorId === member.id
|
||||
&& effect.sourceAbilityId === ability.id && effect.expiresAt > now)
|
||||
&& !ability.effects.some((effect) => effect.kind === "apply-aura"
|
||||
&& currentCombat.auras.some((aura) => aura.sourceId === member.id
|
||||
&& aura.definition.id === effect.aura.id && aura.targetId === abilityTargetId));
|
||||
|
||||
Reference in new issue
Block a user