diff options
| author | MrSmite <mrsmite@att.net> | 2012-12-21 20:57:22 -0500 |
|---|---|---|
| committer | MrSmite <mrsmite@att.net> | 2012-12-21 20:57:22 -0500 |
| commit | 4c9451d54c885df3fac4be875728425ca0defa45 (patch) | |
| tree | 362df3058e1e20780159b5e544a72f7b07c47a5e /src/server/game/Entities/Unit | |
| parent | 63ea4b1056dd6fc8b25f580331307d14bdcc26d2 (diff) | |
Fix pet stopping approach when attacked by another creature
Fix pet placed on stay after "attack" not attacking new attackers
Closes #8735
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 18 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d4b276fd2db..4252bf1cb1f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12136,7 +12136,10 @@ void Unit::CombatStart(Unit* target, bool initialAggro) if (!target->isInCombat() && target->GetTypeId() != TYPEID_PLAYER && !target->ToCreature()->HasReactState(REACT_PASSIVE) && target->ToCreature()->IsAIEnabled) { - target->ToCreature()->AI()->AttackStart(this); + if (target->isPet()) + target->ToCreature()->AI()->AttackedBy(this); // PetAI has special handler before AttackStart() + else + target->ToCreature()->AI()->AttackStart(this); } SetInCombatWith(target); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 3053d0018d4..8cb0f434907 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1261,12 +1261,22 @@ class Unit : public WorldObject } Unit* getAttackerForHelper() const // If someone wants to help, who to give them { - if (getVictim() != NULL) - return getVictim(); + if (isPet()) + { + if (!m_attackers.empty()) + return *(m_attackers.begin()); - if (!m_attackers.empty()) - return *(m_attackers.begin()); + if (getVictim() != NULL) + return getVictim(); + } + else + { + if (getVictim() != NULL) + return getVictim(); + if (!m_attackers.empty()) + return *(m_attackers.begin()); + } return NULL; } bool Attack(Unit* victim, bool meleeAttack); |
