aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2022-09-23 10:29:55 +0200
committerShauren <shauren.trinity@gmail.com>2022-09-23 19:06:12 +0200
commitdfcc9c69e771658327897bc09be9f5946062150a (patch)
tree986a803105f0593d39ad4d18884717d6bb02b03f /src
parent0efe2a0fa55e41184ea7878217fdd7826853ccdb (diff)
Scripts/HoL: converted Ionar's AI to BossAI
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp71
1 files changed, 32 insertions, 39 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
index cf585bda529..e178f307877 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -65,12 +65,11 @@ enum Misc
## Boss Ionar
######*/
-struct boss_ionar : public ScriptedAI
+struct boss_ionar : public BossAI
{
- boss_ionar(Creature* creature) : ScriptedAI(creature), lSparkList(creature)
+ boss_ionar(Creature* creature) : BossAI(creature, DATA_IONAR)
{
Initialize();
- instance = creature->GetInstanceScript();
}
void Initialize()
@@ -86,23 +85,10 @@ struct boss_ionar : public ScriptedAI
uiDisperseHealth = 45 + urand(0, 10);
}
- InstanceScript* instance;
-
- SummonList lSparkList;
-
- bool bIsSplitPhase;
- bool bHasDispersed;
-
- uint32 uiSplitTimer;
-
- uint32 uiStaticOverloadTimer;
- uint32 uiBallLightningTimer;
-
- uint32 uiDisperseHealth;
-
void Reset() override
{
- lSparkList.DespawnAll();
+ BossAI::Reset();
+ summons.DespawnAll();
Initialize();
@@ -115,20 +101,16 @@ struct boss_ionar : public ScriptedAI
instance->SetBossState(DATA_IONAR, NOT_STARTED);
}
- void JustEngagedWith(Unit* /*who*/) override
+ void JustEngagedWith(Unit* who) override
{
+ BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
-
- instance->SetBossState(DATA_IONAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) override
+ void JustDied(Unit* killer) override
{
+ BossAI::JustDied(killer);
Talk(SAY_DEATH);
-
- lSparkList.DespawnAll();
-
- instance->SetBossState(DATA_IONAR, DONE);
}
void KilledUnit(Unit* who) override
@@ -158,12 +140,12 @@ struct boss_ionar : public ScriptedAI
void CallBackSparks()
{
//should never be empty here, but check
- if (lSparkList.empty())
+ if (summons.empty())
return;
Position pos = me->GetPosition();
- for (ObjectGuid guid : lSparkList)
+ for (ObjectGuid guid : summons)
{
if (Creature* pSpark = ObjectAccessor::GetCreature(*me, guid))
{
@@ -190,7 +172,7 @@ struct boss_ionar : public ScriptedAI
{
if (summoned->GetEntry() == NPC_SPARK_OF_IONAR)
{
- lSparkList.Summon(summoned);
+ summons.Summon(summoned);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
@@ -204,7 +186,7 @@ struct boss_ionar : public ScriptedAI
void SummonedCreatureDespawn(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_SPARK_OF_IONAR)
- lSparkList.Despawn(summoned);
+ summons.Despawn(summoned);
}
void UpdateAI(uint32 uiDiff) override
@@ -227,7 +209,7 @@ struct boss_ionar : public ScriptedAI
bIsSplitPhase = false;
}
// Lightning effect and restore Ionar
- else if (lSparkList.empty())
+ else if (summons.empty())
{
me->SetVisible(true);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_UNINTERACTIBLE);
@@ -281,6 +263,17 @@ struct boss_ionar : public ScriptedAI
DoMeleeAttackIfReady();
}
+
+private:
+ bool bIsSplitPhase;
+ bool bHasDispersed;
+
+ uint32 uiSplitTimer;
+
+ uint32 uiStaticOverloadTimer;
+ uint32 uiBallLightningTimer;
+
+ uint32 uiDisperseHealth;
};
/*######
@@ -292,7 +285,7 @@ struct npc_spark_of_ionar : public ScriptedAI
npc_spark_of_ionar(Creature* creature) : ScriptedAI(creature)
{
Initialize();
- instance = creature->GetInstanceScript();
+ _instance = creature->GetInstanceScript();
}
void Initialize()
@@ -300,10 +293,6 @@ struct npc_spark_of_ionar : public ScriptedAI
uiCheckTimer = 2 * IN_MILLISECONDS;
}
- InstanceScript* instance;
-
- uint32 uiCheckTimer;
-
void Reset() override
{
Initialize();
@@ -313,7 +302,7 @@ struct npc_spark_of_ionar : public ScriptedAI
void MovementInform(uint32 uiType, uint32 uiPointId) override
{
- if (uiType != POINT_MOTION_TYPE || !instance)
+ if (uiType != POINT_MOTION_TYPE || !_instance)
return;
if (uiPointId == DATA_POINT_CALLBACK)
@@ -323,7 +312,7 @@ struct npc_spark_of_ionar : public ScriptedAI
void UpdateAI(uint32 uiDiff) override
{
// Despawn if the encounter is not running
- if (instance->GetBossState(DATA_IONAR) != IN_PROGRESS)
+ if (_instance->GetBossState(DATA_IONAR) != IN_PROGRESS)
{
me->DespawnOrUnsummon();
return;
@@ -332,7 +321,7 @@ struct npc_spark_of_ionar : public ScriptedAI
// Prevent them to follow players through the whole instance
if (uiCheckTimer <= uiDiff)
{
- Creature* ionar = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_IONAR));
+ Creature* ionar = _instance->GetCreature(DATA_IONAR);
if (ionar && ionar->IsAlive())
{
if (me->GetDistance(ionar) > DATA_MAX_SPARK_DISTANCE)
@@ -354,6 +343,10 @@ struct npc_spark_of_ionar : public ScriptedAI
// No melee attack at all!
}
+
+private:
+ InstanceScript* _instance;
+ uint32 uiCheckTimer;
};
void AddSC_boss_ionar()