aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-08-20 00:43:03 +0200
committerShauren <shauren.trinity@gmail.com>2013-08-20 00:43:03 +0200
commit75cc4e7b257a0b40b3e83590bf49a1b337aae9fb (patch)
tree206899383716e91c30a070d2b8bd0298e7fc0196 /src/server/game/Entities/Unit
parent8ae88954aa8960adbf58b7ccecff5b740c8bdcbe (diff)
Core/Auras
* Fixed unsafe removal of charm auras, it is now safe to remove them inside AI hooks * Fixes crash in SmartAI::EnterEvadeMode Closes #8679
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
2 files changed, 6 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 57a920ab56b..7e67a9e6e09 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -162,7 +162,7 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget,
#endif
Unit::Unit(bool isWorldObject) :
WorldObject(isWorldObject), m_movedPlayer(NULL), m_lastSanctuaryTime(0),
- IsAIEnabled(false), NeedChangeAI(false),
+ IsAIEnabled(false), NeedChangeAI(false), LastCharmerGUID(0),
m_ControlledByPlayer(false), movespline(new Movement::MoveSpline()),
i_AI(NULL), i_disabledAI(NULL), m_AutoRepeatFirstCast(false), m_procDeep(0),
m_removedAurasCount(0), i_motionMaster(this), m_ThreatManager(this),
@@ -15836,16 +15836,13 @@ void Unit::RemoveCharmedBy(Unit* charmer)
if (Creature* creature = ToCreature())
{
+ // Creature will restore its old AI on next update
if (creature->AI())
creature->AI()->OnCharmed(false);
- if (type != CHARM_TYPE_VEHICLE) // Vehicles' AI is never modified
- {
- creature->AIM_Initialize();
-
- if (creature->AI() && charmer && charmer->IsAlive())
- creature->AI()->AttackStart(charmer);
- }
+ // Vehicle should not attack its passenger after he exists the seat
+ if (type != CHARM_TYPE_VEHICLE)
+ LastCharmerGUID = charmer->GetGUID();
}
else
ToPlayer()->SetClientControl(this, 1);
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index d34c66f7893..c90357a9eb8 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -2074,6 +2074,7 @@ class Unit : public WorldObject
friend class VehicleJoinEvent;
bool IsAIEnabled, NeedChangeAI;
+ uint64 LastCharmerGUID;
bool CreateVehicleKit(uint32 id, uint32 creatureEntry);
void RemoveVehicleKit();
Vehicle* GetVehicleKit()const { return m_vehicleKit; }