@@ -27,6 +27,13 @@ enum InstanceActions
2727 INSTANCE_CLOSE_ENTRANCE_DOOR = 250 ,
2828};
2929
30+ struct QueuedCast
31+ {
32+ ObjectGuid target;
33+ uint32 spellId;
34+ uint32 flags;
35+ };
36+
3037class BossAI : public CombatAI
3138{
3239 public:
@@ -56,6 +63,7 @@ class BossAI : public CombatAI
5663 for (auto & id : m_exitObjects)
5764 instance->DoUseOpenableObject (id, true );
5865 }
66+
5967 /* *
6068 * Adds one or more Broadcast Texts to possibly emit when Unit dies
6169 * This function is not called if JustDied is overridden. Add CombatAI::JustDied(); to your overriding function.
@@ -83,6 +91,7 @@ class BossAI : public CombatAI
8391
8492 void SetDataType (uint32 type) { m_instanceDataType = type; }
8593
94+ void Reset () override ;
8695 void JustDied (Unit* killer = nullptr ) override ;
8796 void JustReachedHome () override ;
8897 void Aggro (Unit* who = nullptr ) override ;
@@ -101,6 +110,17 @@ class BossAI : public CombatAI
101110 AddExitObject (fargs...);
102111 }
103112 void SetGateDelay (std::chrono::milliseconds delay) { m_gateDelay = delay; }
113+ void EnterEvadeMode () override ;
114+
115+ void AddCastOnDeath (QueuedCast cast);
116+ template <typename ... Targs>
117+ void AddCastOnDeath (QueuedCast cast, Targs... fargs)
118+ {
119+ AddCastOnDeath (cast);
120+ AddCastOnDeath (fargs...);
121+ }
122+
123+ void AddRespawnOnEvade (std::chrono::seconds delay);
104124
105125 std::chrono::seconds TimeSinceEncounterStart ()
106126 {
@@ -118,9 +138,12 @@ class BossAI : public CombatAI
118138 std::vector<uint32> m_entranceObjects;
119139 std::vector<uint32> m_exitObjects;
120140 std::chrono::milliseconds m_gateDelay = 3s;
141+ std::vector<QueuedCast> m_castOnDeath;
121142
122143 uint32 m_instanceDataType = -1 ;
123144
145+ uint32 m_respawnDelay = -1 ;
146+
124147 std::chrono::steady_clock::time_point m_combatStartTimestamp;
125148};
126149
0 commit comments