aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorMrSmite <mrsmite@att.net>2012-12-21 20:57:22 -0500
committerMrSmite <mrsmite@att.net>2012-12-21 20:57:22 -0500
commit4c9451d54c885df3fac4be875728425ca0defa45 (patch)
tree362df3058e1e20780159b5e544a72f7b07c47a5e /src/server/game/Entities/Unit
parent63ea4b1056dd6fc8b25f580331307d14bdcc26d2 (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.cpp5
-rw-r--r--src/server/game/Entities/Unit/Unit.h18
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);