diff options
author | silinoron <none@none> | 2010-08-23 14:46:10 -0700 |
---|---|---|
committer | silinoron <none@none> | 2010-08-23 14:46:10 -0700 |
commit | e581feb551cb54803da1478da04032e260b35937 (patch) | |
tree | 49b4dce7ab187ad39620a08d4f61f6b3dcdb2948 /src | |
parent | 181b995e38dd93e057159463c77d8ec8842bca74 (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.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/PetHandler.cpp | 5 |
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)) |