Skip to content

Commit 5a0c7e2

Browse files
authored
BossAI: Add Queued Casts (#607)
* BossAI: Add Queued Casts BossAI: Add timed respawn on evade BossAI: Correctly set instance data on evade * BossAI: Remove Queued Casts
1 parent b7131b3 commit 5a0c7e2

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/game/AI/ScriptDevAI/base/BossAI.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,21 @@ void BossAI::AddOnAggroText(uint32 text)
3232
m_onAggroTexts.push_back(text);
3333
}
3434

35+
void BossAI::Reset()
36+
{
37+
CombatAI::Reset();
38+
m_creature->SetSpellList(m_creature->GetCreatureInfo()->SpellList);
39+
}
40+
3541
void BossAI::JustDied(Unit* killer)
3642
{
43+
CombatAI::JustDied(killer);
3744
if (!m_onKilledTexts.empty())
3845
DoBroadcastText(m_onKilledTexts[urand(0, m_onKilledTexts.size() - 1)], m_creature, killer);
3946
if (m_instanceDataType == -1)
4047
return;
4148
if (ScriptedInstance* instance = static_cast<ScriptedInstance*>(m_creature->GetInstanceData()))
4249
instance->SetData(m_instanceDataType, DONE);
43-
CombatAI::JustDied(killer);
4450
OpenEntrances();
4551
OpenExits();
4652
}
@@ -78,4 +84,25 @@ void BossAI::AddEntranceObject(uint32 value)
7884
void BossAI::AddExitObject(uint32 value)
7985
{
8086
m_exitObjects.push_back(value);
87+
}
88+
89+
void BossAI::EnterEvadeMode()
90+
{
91+
if (m_instanceDataType == -1)
92+
return;
93+
if (ScriptedInstance* instance = static_cast<ScriptedInstance*>(m_creature->GetInstanceData()))
94+
instance->SetData(m_instanceDataType, FAIL);
95+
OpenEntrances();
96+
if (m_respawnDelay == -1)
97+
{
98+
CombatAI::EnterEvadeMode();
99+
return;
100+
}
101+
m_creature->SetRespawnDelay(m_respawnDelay, true);
102+
m_creature->ForcedDespawn();
103+
}
104+
105+
void BossAI::AddRespawnOnEvade(std::chrono::seconds delay)
106+
{
107+
m_respawnDelay = delay.count();
81108
}

src/game/AI/ScriptDevAI/base/BossAI.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class BossAI : public CombatAI
5656
for (auto& id : m_exitObjects)
5757
instance->DoUseOpenableObject(id, true);
5858
}
59+
5960
/**
6061
* Adds one or more Broadcast Texts to possibly emit when Unit dies
6162
* This function is not called if JustDied is overridden. Add CombatAI::JustDied(); to your overriding function.
@@ -83,6 +84,7 @@ class BossAI : public CombatAI
8384

8485
void SetDataType(uint32 type) { m_instanceDataType = type; }
8586

87+
void Reset() override;
8688
void JustDied(Unit* killer = nullptr) override;
8789
void JustReachedHome() override;
8890
void Aggro(Unit* who = nullptr) override;
@@ -101,6 +103,9 @@ class BossAI : public CombatAI
101103
AddExitObject(fargs...);
102104
}
103105
void SetGateDelay(std::chrono::milliseconds delay) { m_gateDelay = delay; }
106+
void EnterEvadeMode() override;
107+
108+
void AddRespawnOnEvade(std::chrono::seconds delay);
104109

105110
std::chrono::seconds TimeSinceEncounterStart()
106111
{
@@ -121,6 +126,8 @@ class BossAI : public CombatAI
121126

122127
uint32 m_instanceDataType = -1;
123128

129+
uint32 m_respawnDelay = -1;
130+
124131
std::chrono::steady_clock::time_point m_combatStartTimestamp;
125132
};
126133

0 commit comments

Comments
 (0)