Playerbot: only assist targets the owner is actually fighting

ResolveOwnerAssistTarget preferred GetSelectedUnit() over the victim, so
merely targeting a neutral/yellow mob made every bot attack it. Now the
victim (real combat target) is preferred, and the selected-unit fallback
only counts when the owner is IN combat and targeting that unit (a cast
in flight) — a selected-but-unattacked mob never pulls the squad.
This commit is contained in:
devbox
2026-08-18 11:11:46 +10:00
parent 00f65c7b89
commit 0e96c7798e
+20 -6
View File
@@ -149,7 +149,12 @@ Unit* ResolveOwnerAssistTarget(Player* owner)
if (!owner || !owner->IsInWorld())
return nullptr;
Unit* t = owner->GetSelectedUnit();
// Assist only what the owner is ACTUALLY fighting. Prefer the victim
// (the unit the owner is attacking); a merely-selected target (e.g. a
// neutral/yellow mob the player is hovering or inspecting) must NOT pull
// the squad into combat — bots only join once the player commits to an
// attack.
Unit* t = owner->GetVictim();
if (t)
{
if (!t->IsAlive() || t->GetMap() != owner->GetMap())
@@ -160,11 +165,20 @@ Unit* ResolveOwnerAssistTarget(Player* owner)
if (!t)
{
t = owner->GetVictim();
if (t && (!t->IsAlive() || t->GetMap() != owner->GetMap()))
t = nullptr;
if (t && !owner->IsValidAttackTarget(t))
t = nullptr;
// Casters/ranged can have a selected target while the victim field
// lags a cast — treat the selection as an assist target only when the
// owner is genuinely ENGAGED with it (in combat and targeting it).
t = owner->GetSelectedUnit();
if (t)
{
if (!t->IsAlive() || t->GetMap() != owner->GetMap())
t = nullptr;
else if (!owner->IsValidAttackTarget(t))
t = nullptr;
else if (!owner->IsInCombat() ||
owner->GetTarget() != t->GetGUID())
t = nullptr;
}
}
return t;