aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-07-14 22:24:16 +0300
committerGitHub <noreply@github.com>2021-07-14 22:24:16 +0300
commit43055f4244e818d6e7a61a15c00f68485ec10f8b (patch)
tree9a1d8f54c52b8e194772642c1d84a128195322f5
parent5e240a4a50fa4c8075b7dcf8913f1723bdc682b1 (diff)
Scripts/ZG: Update scripts to new register model (3/5) (#26693)
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp307
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp335
2 files changed, 294 insertions, 348 deletions
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
index 7bddbf8dcae..3375b16e579 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
@@ -77,193 +77,172 @@ Position const SpawnBat[6] =
{ -12293.6220f, -1380.2640f, 144.8304f, 5.483f }
};
-class boss_jeklik : public CreatureScript
+struct boss_jeklik : public BossAI
{
- public: boss_jeklik() : CreatureScript("boss_jeklik") { }
-
- struct boss_jeklikAI : public BossAI
+ boss_jeklik(Creature* creature) : BossAI(creature, DATA_JEKLIK) { }
+
+ void Reset() override
+ {
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO);
+ events.SetPhase(PHASE_ONE);
+
+ events.ScheduleEvent(EVENT_CHARGE_JEKLIK, 20s, 0, PHASE_ONE);
+ events.ScheduleEvent(EVENT_SONIC_BURST, 8s, 0, PHASE_ONE);
+ events.ScheduleEvent(EVENT_SCREECH, 13s, 0, PHASE_ONE);
+ events.ScheduleEvent(EVENT_SPAWN_BATS, 60s, 0, PHASE_ONE);
+
+ me->SetCanFly(true);
+ DoCast(me, SPELL_BAT_FORM);
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
+ {
+ if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
{
- boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) { }
-
- void Reset() override
- {
- _Reset();
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- Talk(SAY_DEATH);
- }
-
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- Talk(SAY_AGGRO);
- events.SetPhase(PHASE_ONE);
+ me->RemoveAurasDueToSpell(SPELL_BAT_FORM);
+ me->SetCanFly(false);
+ ResetThreatList();
+ events.SetPhase(PHASE_TWO);
+ events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 6s, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_MIND_FLAY, 11s, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_CHAIN_MIND_FLAY, 26s, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_GREATER_HEAL, 50s, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10s, 0, PHASE_TWO);
+ }
+ }
- events.ScheduleEvent(EVENT_CHARGE_JEKLIK, 20s, 0, PHASE_ONE);
- events.ScheduleEvent(EVENT_SONIC_BURST, 8s, 0, PHASE_ONE);
- events.ScheduleEvent(EVENT_SCREECH, 13s, 0, PHASE_ONE);
- events.ScheduleEvent(EVENT_SPAWN_BATS, 60s, 0, PHASE_ONE);
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- me->SetCanFly(true);
- DoCast(me, SPELL_BAT_FORM);
- }
+ events.Update(diff);
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
- {
- if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
- {
- me->RemoveAurasDueToSpell(SPELL_BAT_FORM);
- me->SetCanFly(false);
- ResetThreatList();
- events.SetPhase(PHASE_TWO);
- events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 6s, 0, PHASE_TWO);
- events.ScheduleEvent(EVENT_MIND_FLAY, 11s, 0, PHASE_TWO);
- events.ScheduleEvent(EVENT_CHAIN_MIND_FLAY, 26s, 0, PHASE_TWO);
- events.ScheduleEvent(EVENT_GREATER_HEAL, 50s, 0, PHASE_TWO);
- events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10s, 0, PHASE_TWO);
- }
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ case EVENT_CHARGE_JEKLIK:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
{
- case EVENT_CHARGE_JEKLIK:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
- {
- DoCast(target, SPELL_CHARGE);
- AttackStart(target);
- }
- events.ScheduleEvent(EVENT_CHARGE_JEKLIK, 15s, 30s, 0, PHASE_ONE);
- break;
- case EVENT_SONIC_BURST:
- DoCastVictim(SPELL_SONICBURST);
- events.ScheduleEvent(EVENT_SONIC_BURST, 8s, 13s, 0, PHASE_ONE);
- break;
- case EVENT_SCREECH:
- DoCastVictim(SPELL_SCREECH);
- events.ScheduleEvent(EVENT_SCREECH, 18s, 26s, 0, PHASE_ONE);
- break;
- case EVENT_SPAWN_BATS:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
- for (uint8 i = 0; i < 6; ++i)
- if (TempSummon* bat = me->SummonCreature(NPC_BLOODSEEKER_BAT, SpawnBat[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15s))
- bat->AI()->AttackStart(target);
- events.ScheduleEvent(EVENT_SPAWN_BATS, 1min, 0, PHASE_ONE);
- break;
- case EVENT_SHADOW_WORD_PAIN:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
- DoCast(target, SPELL_SHADOW_WORD_PAIN);
- events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 12s, 18s, 0, PHASE_TWO);
- break;
- case EVENT_MIND_FLAY:
- DoCastVictim(SPELL_MIND_FLAY);
- events.ScheduleEvent(EVENT_MIND_FLAY, 16s, 0, PHASE_TWO);
- break;
- case EVENT_CHAIN_MIND_FLAY:
- me->InterruptNonMeleeSpells(false);
- DoCastVictim(SPELL_CHAIN_MIND_FLAY);
- events.ScheduleEvent(EVENT_CHAIN_MIND_FLAY, 15s, 30s, 0, PHASE_TWO);
- break;
- case EVENT_GREATER_HEAL:
- me->InterruptNonMeleeSpells(false);
- DoCast(me, SPELL_GREATERHEAL);
- events.ScheduleEvent(EVENT_GREATER_HEAL, 25s, 35s, 0, PHASE_TWO);
- break;
- case EVENT_SPAWN_FLYING_BATS:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
- if (TempSummon* flyingBat = me->SummonCreature(NPC_FRENZIED_BAT, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15s))
- flyingBat->AI()->AttackStart(target);
- events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10s, 15s, 0, PHASE_TWO);
- break;
- default:
- break;
+ DoCast(target, SPELL_CHARGE);
+ AttackStart(target);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ events.ScheduleEvent(EVENT_CHARGE_JEKLIK, 15s, 30s, 0, PHASE_ONE);
+ break;
+ case EVENT_SONIC_BURST:
+ DoCastVictim(SPELL_SONICBURST);
+ events.ScheduleEvent(EVENT_SONIC_BURST, 8s, 13s, 0, PHASE_ONE);
+ break;
+ case EVENT_SCREECH:
+ DoCastVictim(SPELL_SCREECH);
+ events.ScheduleEvent(EVENT_SCREECH, 18s, 26s, 0, PHASE_ONE);
+ break;
+ case EVENT_SPAWN_BATS:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
+ for (uint8 i = 0; i < 6; ++i)
+ if (TempSummon* bat = me->SummonCreature(NPC_BLOODSEEKER_BAT, SpawnBat[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15s))
+ bat->AI()->AttackStart(target);
+ events.ScheduleEvent(EVENT_SPAWN_BATS, 1min, 0, PHASE_ONE);
+ break;
+ case EVENT_SHADOW_WORD_PAIN:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
+ DoCast(target, SPELL_SHADOW_WORD_PAIN);
+ events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 12s, 18s, 0, PHASE_TWO);
+ break;
+ case EVENT_MIND_FLAY:
+ DoCastVictim(SPELL_MIND_FLAY);
+ events.ScheduleEvent(EVENT_MIND_FLAY, 16s, 0, PHASE_TWO);
+ break;
+ case EVENT_CHAIN_MIND_FLAY:
+ me->InterruptNonMeleeSpells(false);
+ DoCastVictim(SPELL_CHAIN_MIND_FLAY);
+ events.ScheduleEvent(EVENT_CHAIN_MIND_FLAY, 15s, 30s, 0, PHASE_TWO);
+ break;
+ case EVENT_GREATER_HEAL:
+ me->InterruptNonMeleeSpells(false);
+ DoCast(me, SPELL_GREATERHEAL);
+ events.ScheduleEvent(EVENT_GREATER_HEAL, 25s, 35s, 0, PHASE_TWO);
+ break;
+ case EVENT_SPAWN_FLYING_BATS:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
+ if (TempSummon* flyingBat = me->SummonCreature(NPC_FRENZIED_BAT, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15s))
+ flyingBat->AI()->AttackStart(target);
+ events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10s, 15s, 0, PHASE_TWO);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<boss_jeklikAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
// Flying Bat
-class npc_batrider : public CreatureScript
+struct npc_batrider : public ScriptedAI
{
- public:
- npc_batrider() : CreatureScript("npc_batrider") { }
-
- struct npc_batriderAI : public ScriptedAI
+ npc_batrider(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _bombTimer = 2000;
+ }
+
+ void Reset() override
+ {
+ Initialize();
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override { }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (_bombTimer <= diff)
{
- npc_batriderAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- _bombTimer = 2000;
- }
-
- void Reset() override
- {
- Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- }
-
- void JustEngagedWith(Unit* /*who*/) override { }
-
- void UpdateAI(uint32 diff) override
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
{
- if (!UpdateVictim())
- return;
-
- if (_bombTimer <= diff)
- {
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
- {
- DoCast(target, SPELL_BOMB);
- _bombTimer = 5000;
- }
- }
- else
- _bombTimer -= diff;
-
- DoMeleeAttackIfReady();
+ DoCast(target, SPELL_BOMB);
+ _bombTimer = 5000;
}
+ }
+ else
+ _bombTimer -= diff;
- private:
- uint32 _bombTimer;
- };
+ DoMeleeAttackIfReady();
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<npc_batriderAI>(creature);
- }
+private:
+ uint32 _bombTimer;
};
void AddSC_boss_jeklik()
{
- new boss_jeklik();
- new npc_batrider();
+ RegisterZulGurubCreatureAI(boss_jeklik);
+ RegisterZulGurubCreatureAI(npc_batrider);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
index ce1661520fd..40bdb512409 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
@@ -67,213 +67,180 @@ Position const Formation[] =
{ -11580.5996f, -1254.7900f, 77.6298f, 0.0f }
};
-class boss_jindo : public CreatureScript
+struct boss_jindo : public BossAI
{
- public:
- boss_jindo() : CreatureScript("boss_jindo") { }
-
- struct boss_jindoAI : public BossAI
+ boss_jindo(Creature* creature) : BossAI(creature, DATA_JINDO) { }
+
+ void Reset() override
+ {
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, 20s);
+ events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, 15s);
+ events.ScheduleEvent(EVENT_HEX, 8s);
+ events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, 10s);
+ events.ScheduleEvent(EVENT_TELEPORT, 5s);
+ Talk(SAY_AGGRO);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- boss_jindoAI(Creature* creature) : BossAI(creature, DATA_JINDO) { }
-
- void Reset() override
- {
- _Reset();
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
-
- void JustEngagedWith(Unit* who) override
+ switch (eventId)
{
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, 20s);
- events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, 15s);
- events.ScheduleEvent(EVENT_HEX, 8s);
- events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, 10s);
- events.ScheduleEvent(EVENT_TELEPORT, 5s);
- Talk(SAY_AGGRO);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ case EVENT_BRAIN_WASH_TOTEM:
+ DoCast(me, SPELL_BRAIN_WASH_TOTEM);
+ events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, 18s, 26s);
+ break;
+ case EVENT_POWERFULL_HEALING_WARD:
+ DoCast(me, SPELL_POWERFULL_HEALING_WARD);
+ events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, 14s, 20s);
+ break;
+ case EVENT_HEX:
+ if (Unit* target = me->GetVictim())
{
- case EVENT_BRAIN_WASH_TOTEM:
- DoCast(me, SPELL_BRAIN_WASH_TOTEM);
- events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, 18s, 26s);
- break;
- case EVENT_POWERFULL_HEALING_WARD:
- DoCast(me, SPELL_POWERFULL_HEALING_WARD);
- events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, 14s, 20s);
- break;
- case EVENT_HEX:
- if (Unit* target = me->GetVictim())
- {
- DoCast(target, SPELL_HEX, true);
- if (GetThreat(target))
- ModifyThreatByPercent(target, -80);
- }
- events.ScheduleEvent(EVENT_HEX, 12s, 20s);
- break;
- case EVENT_DELUSIONS_OF_JINDO:
- // Casting the delusion curse with a shade so shade will attack the same target with the curse.
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
- {
- DoCast(target, SPELL_SHADE_OF_JINDO, true);
- DoCast(target, SPELL_DELUSIONS_OF_JINDO);
- }
- events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, 4s, 12s);
- break;
- case EVENT_TELEPORT:
- // Teleports a random player and spawns 9 Sacrificed Trolls to attack player
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
- {
- DoTeleportPlayer(target, TeleportLoc.GetPositionX(), TeleportLoc.GetPositionY(), TeleportLoc.GetPositionZ(), TeleportLoc.GetOrientation());
- if (GetThreat(me->GetVictim()))
- ModifyThreatByPercent(target, -100);
-
- // Summon a formation of trolls
- for (uint8 i = 0; i < 10; ++i)
- if (TempSummon* sacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, Formation[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15s))
- sacrificedTroll->AI()->AttackStart(target);
- }
- events.ScheduleEvent(EVENT_TELEPORT, 15s, 23s);
- break;
- default:
- break;
+ DoCast(target, SPELL_HEX, true);
+ if (GetThreat(target))
+ ModifyThreatByPercent(target, -80);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ events.ScheduleEvent(EVENT_HEX, 12s, 20s);
+ break;
+ case EVENT_DELUSIONS_OF_JINDO:
+ // Casting the delusion curse with a shade so shade will attack the same target with the curse.
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
+ {
+ DoCast(target, SPELL_SHADE_OF_JINDO, true);
+ DoCast(target, SPELL_DELUSIONS_OF_JINDO);
+ }
+ events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, 4s, 12s);
+ break;
+ case EVENT_TELEPORT:
+ // Teleports a random player and spawns 9 Sacrificed Trolls to attack player
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
+ {
+ DoTeleportPlayer(target, TeleportLoc.GetPositionX(), TeleportLoc.GetPositionY(), TeleportLoc.GetPositionZ(), TeleportLoc.GetOrientation());
+ if (GetThreat(me->GetVictim()))
+ ModifyThreatByPercent(target, -100);
+
+ // Summon a formation of trolls
+ for (uint8 i = 0; i < 10; ++i)
+ if (TempSummon* sacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, Formation[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15s))
+ sacrificedTroll->AI()->AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_TELEPORT, 15s, 23s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<boss_jindoAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
// Healing Ward
-class npc_healing_ward : public CreatureScript
+struct npc_healing_ward : public ScriptedAI
{
- public:
- npc_healing_ward() : CreatureScript("npc_healing_ward") { }
-
- struct npc_healing_wardAI : public ScriptedAI
+ npc_healing_ward(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
+ {
+ Initialize();
+ creature->SetReactState(REACT_PASSIVE);
+ }
+
+ void Initialize()
+ {
+ _healTimer = 2000;
+ }
+
+ void Reset() override
+ {
+ Initialize();
+ }
+
+ void AttackStart(Unit* /*victim*/) override { }
+
+ void UpdateAI(uint32 diff) override
+ {
+ // Heal_Timer
+ if (_healTimer <= diff)
{
- npc_healing_wardAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
- {
- Initialize();
- creature->SetReactState(REACT_PASSIVE);
- }
-
- void Initialize()
- {
- _healTimer = 2000;
- }
-
- void Reset() override
- {
- Initialize();
- }
-
- void AttackStart(Unit* /*victim*/) override { }
-
- void UpdateAI(uint32 diff) override
- {
- // Heal_Timer
- if (_healTimer <= diff)
- {
- if (Creature* jindo = _instance->GetCreature(DATA_JINDO))
- DoCast(jindo, SPELL_HEAL);
- _healTimer = 3000;
- }
- else
- _healTimer -= diff;
- }
-
- private:
- uint32 _healTimer;
- InstanceScript* _instance;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<npc_healing_wardAI>(creature);
+ if (Creature* jindo = _instance->GetCreature(DATA_JINDO))
+ DoCast(jindo, SPELL_HEAL);
+ _healTimer = 3000;
}
+ else
+ _healTimer -= diff;
+ }
+
+private:
+ uint32 _healTimer;
+ InstanceScript* _instance;
};
// Shade of Jindo
-class npc_shade_of_jindo : public CreatureScript
+struct npc_shade_of_jindo : public ScriptedAI
{
- public:
- npc_shade_of_jindo() : CreatureScript("npc_shade_of_jindo") { }
-
- struct npc_shade_of_jindoAI : public ScriptedAI
+ npc_shade_of_jindo(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _shadowShockTimer = 1000;
+ }
+
+ void Reset() override
+ {
+ Initialize();
+ DoCast(me, SPELL_INVISIBLE, true);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ // ShadowShock_Timer
+ if (_shadowShockTimer <= diff)
{
- npc_shade_of_jindoAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- _shadowShockTimer = 1000;
- }
-
- void Reset() override
- {
- Initialize();
- DoCast(me, SPELL_INVISIBLE, true);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- // ShadowShock_Timer
- if (_shadowShockTimer <= diff)
- {
- DoCastVictim(SPELL_SHADOWSHOCK);
- _shadowShockTimer = 2000;
- }
- else
- _shadowShockTimer -= diff;
-
- DoMeleeAttackIfReady();
- }
+ DoCastVictim(SPELL_SHADOWSHOCK);
+ _shadowShockTimer = 2000;
+ }
+ else
+ _shadowShockTimer -= diff;
- private:
- uint32 _shadowShockTimer;
- };
+ DoMeleeAttackIfReady();
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<npc_shade_of_jindoAI>(creature);
- }
+private:
+ uint32 _shadowShockTimer;
};
void AddSC_boss_jindo()
{
- new boss_jindo();
- new npc_healing_ward();
- new npc_shade_of_jindo();
+ RegisterZulGurubCreatureAI(boss_jindo);
+ RegisterZulGurubCreatureAI(npc_healing_ward);
+ RegisterZulGurubCreatureAI(npc_shade_of_jindo);
}