aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/AI/CoreAI/UnitAI.h6
-rwxr-xr-xsrc/server/game/AI/CreatureAI.h3
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp15
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h3
4 files changed, 18 insertions, 9 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index d839e51c258..07e976a00b7 100755
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -74,6 +74,12 @@ class UnitAI
// for attack reaction use AttackedBy called for not DOT damage in Unit::DealDamage also
virtual void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) {}
+ // Called when the creature receives heal
+ virtual void HealReceived(Unit* /*done_by*/, uint32& /*addhealth*/) {}
+
+ // Called when the unit heals
+ virtual void HealDone(Unit* /*done_to*/, uint32& /*addhealth*/) {}
+
// Select the targets satifying the predicate.
// predicate shall extend std::unary_function<Unit *, bool>
template<class PREDICATE> Unit* SelectTarget(SelectAggroTarget targetType, uint32 position, PREDICATE predicate)
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index 0e26ad7f705..2d309abf8d5 100755
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -93,9 +93,6 @@ class CreatureAI : public UnitAI
// Called for reaction at enter to combat if not in combat yet (enemy can be NULL)
virtual void EnterCombat(Unit* /*enemy*/) {}
- // Called when the creature receives heal
- virtual void HealReceived(Unit* /*done_by*/, uint32& /*addhealth*/) {}
-
// Called when the creature is killed
virtual void JustDied(Unit *) {}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 3896c8a6a81..6423a7a35c2 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -545,11 +545,11 @@ void Unit::DealDamageMods(Unit *pVictim, uint32 &damage, uint32* absorb)
uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellEntry const *spellProto, bool durabilityLoss)
{
- if (pVictim->GetTypeId() == TYPEID_UNIT && pVictim->ToCreature()->IsAIEnabled)
- pVictim->ToCreature()->AI()->DamageTaken(this, damage);
+ if (pVictim->IsAIEnabled)
+ pVictim->GetAI()->DamageTaken(this, damage);
- if (GetTypeId() == TYPEID_UNIT && this->ToCreature()->IsAIEnabled)
- this->ToCreature()->AI()->DamageDealt(pVictim, damage, damagetype);
+ if (IsAIEnabled)
+ GetAI()->DamageDealt(pVictim, damage, damagetype);
if (damagetype != NODAMAGE)
{
@@ -9892,8 +9892,11 @@ int32 Unit::DealHeal(Unit *pVictim, uint32 addhealth)
{
int32 gain = 0;
- if (pVictim->GetTypeId() == TYPEID_UNIT && pVictim->ToCreature()->IsAIEnabled)
- pVictim->ToCreature()->AI()->HealReceived(this, addhealth);
+ if (pVictim->IsAIEnabled)
+ pVictim->GetAI()->HealReceived(this, addhealth);
+
+ if (IsAIEnabled)
+ GetAI()->HealDone(pVictim, addhealth);
if (addhealth)
gain = pVictim->ModifyHealth(int32(addhealth));
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index e5ef44f0a73..76670217ab9 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1106,6 +1106,9 @@ class Unit : public WorldObject
virtual ~Unit ();
+ UnitAI* GetAI() { return i_AI; }
+ void SetAI(UnitAI* newAI) { i_AI = newAI; }
+
void AddToWorld();
void RemoveFromWorld();