aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsilinoron <none@none>2010-08-23 14:46:10 -0700
committersilinoron <none@none>2010-08-23 14:46:10 -0700
commite581feb551cb54803da1478da04032e260b35937 (patch)
tree49b4dce7ab187ad39620a08d4f61f6b3dcdb2948 /src
parent181b995e38dd93e057159463c77d8ec8842bca74 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp14
-rw-r--r--src/server/game/Server/Protocol/Handlers/PetHandler.cpp5
2 files changed, 13 insertions, 6 deletions
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))