From e581feb551cb54803da1478da04032e260b35937 Mon Sep 17 00:00:00 2001 From: silinoron Date: Mon, 23 Aug 2010 14:46:10 -0700 Subject: Pets should inherit owner's hostility status for the purposes of target checking Based on patch by Toni.Shocker Fixes issue #3552 --HG-- branch : trunk --- src/server/game/Entities/Unit/Unit.cpp | 14 ++++++++++---- src/server/game/Server/Protocol/Handlers/PetHandler.cpp | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e622504871a..fcbe6adb8f7 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11905,16 +11905,22 @@ bool Unit::canAttack(Unit const* target, bool force) const { if (IsFriendlyTo(target)) return false; + if (GetTypeId()!=TYPEID_PLAYER) - if (!IsHostileTo(target)) + { + if (isPet()) + { + if (Unit *owner = GetOwner()) + if (!(owner->canAttack(target))) + return false; + } + else if (!IsHostileTo(target)) return false; + } } else if (!IsHostileTo(target)) return false; - //if (m_Vehicle && m_Vehicle == target->m_Vehicle) - // return true; - if (!target->isAttackableByAOE() || target->hasUnitState(UNIT_STAT_DIED)) return false; diff --git a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp index 58899a942ac..354909a956e 100644 --- a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp @@ -154,8 +154,9 @@ void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid if (!TargetUnit) return; - if (!pet->canAttack(TargetUnit)) - return; + if (Unit *owner = pet->GetOwner()) + if (!owner->canAttack(TargetUnit)) + return; // Not let attack through obstructions if (sWorld.getConfig(CONFIG_PET_LOS)) -- cgit v1.2.3