From d2f2665d8ea0fce830427ee47cd3104b6fdd8d66 Mon Sep 17 00:00:00 2001 From: Ovahlord <18347559+ovahlord@users.noreply.github.com> Date: Sun, 16 Aug 2026 16:54:43 +0200 Subject: [PATCH] Core/Units: always set UNIT_FLAG_PET_IN_COMBAT even if there are no summons to match retail behavior --- src/server/game/Combat/CombatManager.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp index 1bd5e31017..77382c033b 100644 --- a/src/server/game/Combat/CombatManager.cpp +++ b/src/server/game/Combat/CombatManager.cpp @@ -405,7 +405,9 @@ bool CombatManager::UpdateOwnerCombatState() const if (combatState) { - _owner->SetUnitFlag(UNIT_FLAG_IN_COMBAT); + // always set UNIT_FLAG_PET_IN_COMBAT even if the unit has no controlled summons + // This behavior is intended as retail uses this to toggle swimming for ocean floor combat + _owner->SetUnitFlag(UNIT_FLAG_IN_COMBAT | UNIT_FLAG_PET_IN_COMBAT); _owner->AtEnterCombat(); if (_owner->GetTypeId() != TYPEID_UNIT) _owner->AtEngage(GetAnyTarget()); @@ -416,10 +418,11 @@ bool CombatManager::UpdateOwnerCombatState() const _owner->AtExitCombat(); if (_owner->GetTypeId() != TYPEID_UNIT) _owner->AtDisengage(); - } - if (Unit* master = _owner->GetCharmerOrOwner()) - master->UpdatePetCombatState(); + // UNIT_FLAG_PET_IN_COMBAT will be cleared if controlled summons are not in combat anymore + if (Unit* master = _owner->GetCharmerOrOwner()) + master->UpdatePetCombatState(); + } return true; }