aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/DragonIsles/AzureVault/azure_vault.h5
-rw-r--r--src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp44
-rw-r--r--src/server/scripts/DragonIsles/AzureVault/instance_azure_vault.cpp23
3 files changed, 26 insertions, 46 deletions
diff --git a/src/server/scripts/DragonIsles/AzureVault/azure_vault.h b/src/server/scripts/DragonIsles/AzureVault/azure_vault.h
index 8f812053155..f91082c61de 100644
--- a/src/server/scripts/DragonIsles/AzureVault/azure_vault.h
+++ b/src/server/scripts/DragonIsles/AzureVault/azure_vault.h
@@ -54,6 +54,11 @@ enum AVGameObjectIds
GO_ARCANE_VAULTS_DOOR_LEYMOR_EXIT = 377951
};
+enum AVActionIds
+{
+ ACTION_FINISH_LEYMOR_INTRO = 251501
+};
+
template <class AI, class T>
inline AI* GetAzureVaultAI(T* obj)
{
diff --git a/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp b/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp
index b23f9795825..d577a686cc5 100644
--- a/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp
+++ b/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp
@@ -91,15 +91,10 @@ enum LeymorNpcs
NPC_LEYLINE_SPROUTS = 190509
};
-enum LeymorActions
-{
- ACTION_ARCANE_TENDER_DEATH = 1
-};
-
// 186644 - Leymor
struct boss_leymor : public BossAI
{
- boss_leymor(Creature* creature) : BossAI(creature, DATA_LEYMOR), _killedArcaneTender(0) { }
+ boss_leymor(Creature* creature) : BossAI(creature, DATA_LEYMOR) { }
void JustAppeared() override
{
@@ -112,21 +107,15 @@ struct boss_leymor : public BossAI
void DoAction(int32 action) override
{
- if (action == ACTION_ARCANE_TENDER_DEATH)
+ if (action == ACTION_FINISH_LEYMOR_INTRO)
{
- _killedArcaneTender++;
- if (_killedArcaneTender >= 3)
+ scheduler.Schedule(1s, [this](TaskContext /*context*/)
{
- instance->SetData(DATA_LEYMOR_INTRO_DONE, 1);
-
- scheduler.Schedule(1s, [this](TaskContext /*context*/)
- {
- me->RemoveAurasDueToSpell(SPELL_STASIS);
- me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
- DoCastSelf(SPELL_ARCANE_ERUPTION);
- Talk(SAY_ANNOUNCE_AWAKEN);
- });
- }
+ me->RemoveAurasDueToSpell(SPELL_STASIS);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
+ DoCastSelf(SPELL_ARCANE_ERUPTION);
+ Talk(SAY_ANNOUNCE_AWAKEN);
+ });
}
}
@@ -149,7 +138,7 @@ struct boss_leymor : public BossAI
{
if (spell->Id == SPELL_CONSUMING_STOMP)
DoCastAOE(SPELL_CONSUMING_STOMP_DAMAGE, true);
- };
+ }
void JustEngagedWith(Unit* who) override
{
@@ -206,9 +195,6 @@ struct boss_leymor : public BossAI
return;
}
}
-
-private:
- int32 _killedArcaneTender;
};
// 191164 - Arcane Tender
@@ -216,18 +202,6 @@ struct npc_arcane_tender : public ScriptedAI
{
npc_arcane_tender(Creature* creature) : ScriptedAI(creature) { }
- void JustDied(Unit* /*killer*/) override
- {
- Creature* leymor = me->GetInstanceScript()->GetCreature(DATA_LEYMOR);
- if (!leymor)
- return;
-
- if (!leymor->IsAIEnabled())
- return;
-
- leymor->AI()->DoAction(ACTION_ARCANE_TENDER_DEATH);
- }
-
void JustAppeared() override
{
Creature* leymor = me->GetInstanceScript()->GetCreature(DATA_LEYMOR);
diff --git a/src/server/scripts/DragonIsles/AzureVault/instance_azure_vault.cpp b/src/server/scripts/DragonIsles/AzureVault/instance_azure_vault.cpp
index 46e6faebb01..bb772053ce9 100644
--- a/src/server/scripts/DragonIsles/AzureVault/instance_azure_vault.cpp
+++ b/src/server/scripts/DragonIsles/AzureVault/instance_azure_vault.cpp
@@ -16,16 +16,19 @@
*/
#include "AreaBoundary.h"
+#include "Creature.h"
+#include "CreatureAI.h"
+#include "CreatureGroups.h"
#include "InstanceScript.h"
#include "ScriptMgr.h"
#include "azure_vault.h"
-BossBoundaryData const boundaries =
+static BossBoundaryData const boundaries =
{
{ DATA_LEYMOR, new CircleBoundary(Position(-5129.39f, 1253.30f), 75.0f) }
};
-ObjectData const creatureData[] =
+static constexpr ObjectData creatureData[] =
{
{ BOSS_LEYMOR, DATA_LEYMOR },
{ BOSS_AZUREBLADE, DATA_AZUREBLADE },
@@ -34,14 +37,14 @@ ObjectData const creatureData[] =
{ 0, 0 } // END
};
-DoorData const doorData[] =
+static constexpr DoorData doorData[] =
{
{ GO_ARCANE_VAULTS_DOOR_LEYMOR_ENTRANCE, DATA_LEYMOR, EncounterDoorBehavior::OpenWhenNotInProgress },
{ GO_ARCANE_VAULTS_DOOR_LEYMOR_EXIT, DATA_LEYMOR, EncounterDoorBehavior::OpenWhenDone },
{ 0, 0, EncounterDoorBehavior::OpenWhenNotInProgress } // END
};
-DungeonEncounterData const encounters[] =
+static constexpr DungeonEncounterData encounters[] =
{
{ DATA_LEYMOR, {{ 2582 }} },
{ DATA_AZUREBLADE, {{ 2585 }} },
@@ -80,15 +83,13 @@ class instance_azure_vault : public InstanceMapScript
return 0;
}
- void SetData(uint32 dataId, uint32 /*value*/) override
+ void OnCreatureGroupDepleted(CreatureGroup const* creatureGroup) override
{
- switch (dataId)
+ if (!_leymorIntroDone && creatureGroup->LeaderHasStringId("leymor_arcane_tender"))
{
- case DATA_LEYMOR_INTRO_DONE:
- _leymorIntroDone = true; // no need to pass value, it will never reset to false
- break;
- default:
- break;
+ _leymorIntroDone = true;
+ if (Creature* leymor = GetCreature(DATA_LEYMOR); leymor && leymor->IsAIEnabled())
+ leymor->AI()->DoAction(ACTION_FINISH_LEYMOR_INTRO);
}
}