aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2025-05-17 13:44:24 +0300
committerGitHub <noreply@github.com>2025-05-17 12:44:24 +0200
commit763dc107bb298d88a69a6f24aef08d70030b053d (patch)
tree4b8ba62910feb80e574980063540df8a935e75e9 /src
parentb3698c4870159492645b99b7db763bf07a3ee4d7 (diff)
Scripts/Scholomance: Modernize scripts (#30920)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp444
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp46
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp113
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp124
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp215
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp134
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp364
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp240
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp110
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp128
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp134
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp124
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp116
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h3
14 files changed, 1028 insertions, 1267 deletions
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index f8c7b97cb47..e4ca9095ca4 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/*
-Name: Boss_Darkmaster_Gandling
-%Complete: 90
-Comment: Doors Not yet reopening.
-Category: Scholomance
-*/
-
#include "ScriptMgr.h"
#include "GameObject.h"
#include "InstanceScript.h"
@@ -33,115 +26,106 @@ Category: Scholomance
#include "SpellScript.h"
#include "TemporarySummon.h"
-enum Says
+enum GandlingTexts
{
- YELL_SUMMONED = 0
+ SAY_SUMMONED = 0
};
-enum Spells
+enum GandlingSpells
{
- SPELL_ARCANEMISSILES = 15790,
- SPELL_SHADOWSHIELD = 12040,
+ SPELL_ARCANE_MISSILES = 15790,
+ SPELL_SHADOW_SHIELD = 12040,
SPELL_CURSE = 18702,
SPELL_SHADOW_PORTAL = 17950
};
-enum Events
+enum GandlingEvents
{
- EVENT_ARCANEMISSILES = 1,
- EVENT_SHADOWSHIELD = 2,
- EVENT_CURSE = 3,
- EVENT_SHADOW_PORTAL = 4
+ EVENT_ARCANE_MISSILES = 1,
+ EVENT_SHADOW_SHIELD,
+ EVENT_CURSE,
+ EVENT_SHADOW_PORTAL
};
-class boss_darkmaster_gandling : public CreatureScript
+// 1853 - Darkmaster Gandling
+struct boss_darkmaster_gandling : public BossAI
{
- public: boss_darkmaster_gandling() : CreatureScript("boss_darkmaster_gandling") { }
-
- struct boss_darkmaster_gandlingAI : public BossAI
+ boss_darkmaster_gandling(Creature* creature) : BossAI(creature, DATA_DARKMASTER_GANDLING) { }
+
+ void Reset() override
+ {
+ _Reset();
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_GANDLING)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_GANDLING)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_ARCANE_MISSILES, 4500ms);
+ events.ScheduleEvent(EVENT_SHADOW_SHIELD, 12s);
+ events.ScheduleEvent(EVENT_CURSE, 2s);
+ events.ScheduleEvent(EVENT_SHADOW_PORTAL, 15s);
+
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_GANDLING)))
+ gate->SetGoState(GO_STATE_READY);
+ }
+
+ void IsSummonedBy(WorldObject* /*summoner*/) override
+ {
+ Talk(SAY_SUMMONED);
+ me->GetMotionMaster()->MoveRandom(5);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- boss_darkmaster_gandlingAI(Creature* creature) : BossAI(creature, DATA_DARKMASTER_GANDLING) { }
-
- void Reset() override
- {
- _Reset();
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_GANDLING)))
- gate->SetGoState(GO_STATE_ACTIVE);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_GANDLING)))
- gate->SetGoState(GO_STATE_ACTIVE);
- }
-
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_ARCANEMISSILES, 4500ms);
- events.ScheduleEvent(EVENT_SHADOWSHIELD, 12s);
- events.ScheduleEvent(EVENT_CURSE, 2s);
- events.ScheduleEvent(EVENT_SHADOW_PORTAL, 15s);
-
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_GANDLING)))
- gate->SetGoState(GO_STATE_READY);
- }
-
- void IsSummonedBy(WorldObject* /*summoner*/) override
- {
- Talk(YELL_SUMMONED);
- me->GetMotionMaster()->MoveRandom(5);
- }
-
- void UpdateAI(uint32 diff) override
+ switch (eventId)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ case EVENT_ARCANE_MISSILES:
+ DoCastVictim(SPELL_ARCANE_MISSILES);
+ events.Repeat(8s);
+ break;
+ case EVENT_SHADOW_SHIELD:
+ DoCastSelf(SPELL_SHADOW_SHIELD);
+ events.Repeat(14s, 28s);
+ break;
+ case EVENT_CURSE:
+ DoCastVictim(SPELL_CURSE);
+ events.Repeat(15s, 27s);
+ break;
+ case EVENT_SHADOW_PORTAL:
+ if (HealthAbovePct(3))
{
- case EVENT_ARCANEMISSILES:
- DoCastVictim(SPELL_ARCANEMISSILES, true);
- events.ScheduleEvent(EVENT_ARCANEMISSILES, 8s);
- break;
- case EVENT_SHADOWSHIELD:
- DoCast(me, SPELL_SHADOWSHIELD);
- events.ScheduleEvent(EVENT_SHADOWSHIELD, 14s, 28s);
- break;
- case EVENT_CURSE:
- DoCastVictim(SPELL_CURSE, true);
- events.ScheduleEvent(EVENT_CURSE, 15s, 27s);
- break;
- case EVENT_SHADOW_PORTAL:
- if (HealthAbovePct(3))
- {
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_SHADOW_PORTAL, true);
- events.ScheduleEvent(EVENT_SHADOW_PORTAL, 17s, 27s);
- }
+ DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_SHADOW_PORTAL);
+ events.Repeat(17s, 27s);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
- DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_darkmaster_gandlingAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
-// Script for Shadow Portal spell 17950
enum Rooms
{
ROOM_HALL_OF_SECRETS = 0,
@@ -163,82 +147,71 @@ enum SPSpells
};
// 17950 - Shadow Portal
-class spell_shadow_portal : public SpellScriptLoader
+class spell_shadow_portal : public SpellScript
{
- public:
- spell_shadow_portal() : SpellScriptLoader("spell_shadow_portal") { }
-
- class spell_shadow_portal_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_shadow_portal_SpellScript);
-
- bool Load() override
- {
- _instance = GetCaster()->GetInstanceScript();
- return InstanceHasScript(GetCaster(), ScholomanceScriptName);
- }
-
- void HandleCast(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- uint8 attempts = 0;
- uint32 spellId = 0;
+ PrepareSpellScript(spell_shadow_portal);
- while (!spellId)
- {
- if (attempts++ >= 6) break;
+ bool Load() override
+ {
+ _instance = GetCaster()->GetInstanceScript();
+ return InstanceHasScript(GetCaster(), ScholomanceScriptName);
+ }
- switch (urand(0, 5))
- {
- case ROOM_HALL_OF_SECRETS:
- if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_RAVENIAN)))
- if (go->GetGoState() == GO_STATE_ACTIVE)
- spellId = SPELL_SHADOW_PORTAL_HALLOFSECRETS;
- break;
- case ROOM_HALL_OF_THE_DAMNED:
- if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_THEOLEN)))
- if (go->GetGoState() == GO_STATE_ACTIVE)
- spellId = SPELL_SHADOW_PORTAL_HALLOFTHEDAMNED;
- break;
- case ROOM_THE_COVEN:
- if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_MALICIA)))
- if (go->GetGoState() == GO_STATE_ACTIVE)
- spellId = SPELL_SHADOW_PORTAL_THECOVEN;
- break;
- case ROOM_THE_SHADOW_VAULT:
- if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_ILLUCIA)))
- if (go->GetGoState() == GO_STATE_ACTIVE)
- spellId = SPELL_SHADOW_PORTAL_THESHADOWVAULT;
- break;
- case ROOM_BAROV_FAMILY_VAULT:
- if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_BAROV)))
- if (go->GetGoState() == GO_STATE_ACTIVE)
- spellId = SPELL_SHADOW_PORTAL_BAROVFAMILYVAULT;
- break;
- case ROOM_VAULT_OF_THE_RAVENIAN:
- if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_POLKELT)))
- if (go->GetGoState() == GO_STATE_ACTIVE)
- spellId = SPELL_SHADOW_PORTAL_VAULTOFTHERAVENIAN;
- break;
- }
+ void HandleCast(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ uint8 attempts = 0;
+ uint32 spellId = 0;
- if (spellId)
- GetHitUnit()->CastSpell(GetHitUnit(), spellId);
- }
- }
+ while (!spellId)
+ {
+ if (attempts++ >= 6) break;
- void Register() override
+ switch (urand(0, 5))
{
- OnEffectHitTarget += SpellEffectFn(spell_shadow_portal_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY);
+ case ROOM_HALL_OF_SECRETS:
+ if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_RAVENIAN)))
+ if (go->GetGoState() == GO_STATE_ACTIVE)
+ spellId = SPELL_SHADOW_PORTAL_HALLOFSECRETS;
+ break;
+ case ROOM_HALL_OF_THE_DAMNED:
+ if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_THEOLEN)))
+ if (go->GetGoState() == GO_STATE_ACTIVE)
+ spellId = SPELL_SHADOW_PORTAL_HALLOFTHEDAMNED;
+ break;
+ case ROOM_THE_COVEN:
+ if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_MALICIA)))
+ if (go->GetGoState() == GO_STATE_ACTIVE)
+ spellId = SPELL_SHADOW_PORTAL_THECOVEN;
+ break;
+ case ROOM_THE_SHADOW_VAULT:
+ if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_ILLUCIA)))
+ if (go->GetGoState() == GO_STATE_ACTIVE)
+ spellId = SPELL_SHADOW_PORTAL_THESHADOWVAULT;
+ break;
+ case ROOM_BAROV_FAMILY_VAULT:
+ if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_BAROV)))
+ if (go->GetGoState() == GO_STATE_ACTIVE)
+ spellId = SPELL_SHADOW_PORTAL_BAROVFAMILYVAULT;
+ break;
+ case ROOM_VAULT_OF_THE_RAVENIAN:
+ if (GameObject* go = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(GO_GATE_POLKELT)))
+ if (go->GetGoState() == GO_STATE_ACTIVE)
+ spellId = SPELL_SHADOW_PORTAL_VAULTOFTHERAVENIAN;
+ break;
}
- InstanceScript* _instance = nullptr;
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_shadow_portal_SpellScript();
+ if (spellId)
+ GetHitUnit()->CastSpell(GetHitUnit(), spellId);
}
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_shadow_portal::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+
+ InstanceScript* _instance = nullptr;
};
// Script for Shadow Portal spells 17863, 17939, 17943, 17944, 17946, 17948
@@ -282,100 +255,89 @@ enum ScriptEventId
};
// 17863, 17939, 17943, 17944, 17946, 17948 - Shadow Portal
-class spell_shadow_portal_rooms : public SpellScriptLoader
+class spell_shadow_portal_rooms : public SpellScript
{
- public:
- spell_shadow_portal_rooms() : SpellScriptLoader("spell_shadow_portal_rooms") { }
+ PrepareSpellScript(spell_shadow_portal_rooms);
- class spell_shadow_portal_rooms_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_shadow_portal_rooms_SpellScript);
-
- bool Load() override
- {
- _instance = GetCaster()->GetInstanceScript();
- return InstanceHasScript(GetCaster(), ScholomanceScriptName);
- }
+ bool Load() override
+ {
+ _instance = GetCaster()->GetInstanceScript();
+ return InstanceHasScript(GetCaster(), ScholomanceScriptName);
+ }
- void HandleSendEvent(SpellEffIndex /*effIndex*/)
- {
- // If only one player in threat list fail spell
+ void HandleSendEvent(SpellEffIndex /*effIndex*/)
+ {
+ // If only one player in threat list fail spell
- Unit* caster = GetCaster();
+ Unit* caster = GetCaster();
- int8 pos_to_summon = 0;
- int8 phase_to_set = 0;
- int32 gate_to_close = 0;
+ int8 pos_to_summon = 0;
+ int8 phase_to_set = 0;
+ int32 gate_to_close = 0;
- switch (GetEffectInfo().MiscValue)
- {
- case SPELL_EVENT_HALLOFSECRETS:
- pos_to_summon = 0; // Not yet spawned
- phase_to_set = 1;
- gate_to_close = GO_GATE_RAVENIAN;
- break;
- case SPELL_EVENT_HALLOFTHEDAMNED:
- pos_to_summon = 0;
- phase_to_set = 2;
- gate_to_close = GO_GATE_THEOLEN;
- break;
- case SPELL_EVENT_THECOVEN:
- pos_to_summon = 3;
- phase_to_set = 3;
- gate_to_close = GO_GATE_MALICIA;
- break;
- case SPELL_EVENT_THESHADOWVAULT:
- pos_to_summon = 6;
- phase_to_set = 4;
- gate_to_close = GO_GATE_ILLUCIA;
- break;
- case SPELL_EVENT_BAROVFAMILYVAULT:
- pos_to_summon = 9;
- phase_to_set = 5;
- gate_to_close = GO_GATE_BAROV;
- break;
- case SPELL_EVENT_VAULTOFTHERAVENIAN:
- pos_to_summon = 0; // Not yet spawned
- phase_to_set = 6;
- gate_to_close = GO_GATE_POLKELT;
- break;
- default:
- break;
- }
+ switch (GetEffectInfo().MiscValue)
+ {
+ case SPELL_EVENT_HALLOFSECRETS:
+ pos_to_summon = 0; // Not yet spawned
+ phase_to_set = 1;
+ gate_to_close = GO_GATE_RAVENIAN;
+ break;
+ case SPELL_EVENT_HALLOFTHEDAMNED:
+ pos_to_summon = 0;
+ phase_to_set = 2;
+ gate_to_close = GO_GATE_THEOLEN;
+ break;
+ case SPELL_EVENT_THECOVEN:
+ pos_to_summon = 3;
+ phase_to_set = 3;
+ gate_to_close = GO_GATE_MALICIA;
+ break;
+ case SPELL_EVENT_THESHADOWVAULT:
+ pos_to_summon = 6;
+ phase_to_set = 4;
+ gate_to_close = GO_GATE_ILLUCIA;
+ break;
+ case SPELL_EVENT_BAROVFAMILYVAULT:
+ pos_to_summon = 9;
+ phase_to_set = 5;
+ gate_to_close = GO_GATE_BAROV;
+ break;
+ case SPELL_EVENT_VAULTOFTHERAVENIAN:
+ pos_to_summon = 0; // Not yet spawned
+ phase_to_set = 6;
+ gate_to_close = GO_GATE_POLKELT;
+ break;
+ default:
+ break;
+ }
- if (gate_to_close)
+ if (gate_to_close)
+ {
+ for (uint8 i = 0; i < 3; ++i)
+ {
+ if (Creature* Summoned = caster->SummonCreature(NPC_RISEN_GUARDIAN, SummonPos[pos_to_summon++], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2min))
{
- for (uint8 i = 0; i < 3; ++i)
- {
- if (Creature* Summoned = caster->SummonCreature(NPC_RISEN_GUARDIAN, SummonPos[pos_to_summon++], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2min))
- {
- Summoned->GetMotionMaster()->MoveRandom(5);
- Summoned->AI()->SetData(0, phase_to_set);
- }
- }
-
- if (GameObject* gate = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(gate_to_close)))
- gate->SetGoState(GO_STATE_READY);
+ Summoned->GetMotionMaster()->MoveRandom(5);
+ Summoned->AI()->SetData(0, phase_to_set);
}
}
- void Register() override
- {
- OnEffectHit += SpellEffectFn(spell_shadow_portal_rooms_SpellScript::HandleSendEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT);
- }
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*caster, _instance->GetGuidData(gate_to_close)))
+ gate->SetGoState(GO_STATE_READY);
+ }
+ }
- InstanceScript* _instance = nullptr;
- };
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_shadow_portal_rooms::HandleSendEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_shadow_portal_rooms_SpellScript();
- }
+ InstanceScript* _instance = nullptr;
};
void AddSC_boss_darkmaster_gandling()
{
- new boss_darkmaster_gandling();
- new spell_shadow_portal();
- new spell_shadow_portal_rooms();
+ RegisterScholomanceCreatureAI(boss_darkmaster_gandling);
+ RegisterSpellScript(spell_shadow_portal);
+ RegisterSpellScript(spell_shadow_portal_rooms);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
index 3672bf89ff4..af62380ba0e 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
@@ -15,49 +15,35 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Death_knight_darkreaver
-SD%Complete: 100
-SDComment:
-SDCategory: Scholomance
-EndScriptData */
-
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
-class boss_death_knight_darkreaver : public CreatureScript
+enum DarkreaverSpells
{
-public:
- boss_death_knight_darkreaver() : CreatureScript("boss_death_knight_darkreaver") { }
+ SUMMON_FALLEN_CHARGER = 23261
+};
- CreatureAI* GetAI(Creature* creature) const override
+// 14516 - Death Knight Darkreaver
+struct boss_death_knight_darkreaver : public ScriptedAI
+{
+ boss_death_knight_darkreaver(Creature* creature) : ScriptedAI(creature) { }
+
+ void Reset() override
{
- return GetScholomanceAI<boss_death_knight_darkreaverAI>(creature);
}
- struct boss_death_knight_darkreaverAI : public ScriptedAI
+ void JustDied(Unit* /*killer*/) override
{
- boss_death_knight_darkreaverAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- }
-
- void DamageTaken(Unit* /*done_by*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
- {
- if (me->GetHealth() <= damage)
- DoCast(me, 23261, true); //Summon Darkreaver's Fallen Charger
- }
-
- void JustEngagedWith(Unit* /*who*/) override
- {
- }
- };
+ DoCastSelf(SUMMON_FALLEN_CHARGER, true);
+ }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ }
};
void AddSC_boss_death_knight_darkreaver()
{
- new boss_death_knight_darkreaver();
+ RegisterScholomanceCreatureAI(boss_death_knight_darkreaver);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
index 56c78aa4162..74879b5dbd4 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
@@ -15,99 +15,82 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/*
-Name: Boss_Doctor_Theolen_Krastinov
-%Complete: 100
-Comment:
-Category: Scholomance
-*/
-
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
-enum Say
+enum TheolenTexts
{
- EMOTE_FRENZY_KILL = 0,
+ EMOTE_FRENZY_KILL = 0
};
-enum Spells
+enum TheolenSpells
{
SPELL_REND = 16509,
SPELL_BACKHAND = 18103,
SPELL_FRENZY = 8269
};
-enum Events
+enum TheolenEvents
{
- EVENT_REND = 1,
- EVENT_BACKHAND = 2,
- EVENT_FRENZY = 3
+ EVENT_REND = 1,
+ EVENT_BACKHAND,
+ EVENT_FRENZY
};
-class boss_doctor_theolen_krastinov : public CreatureScript
+// 11261 - Doctor Theolen Krastinov
+struct boss_doctor_theolen_krastinov : public BossAI
{
- public: boss_doctor_theolen_krastinov() : CreatureScript("boss_doctor_theolen_krastinov") { }
-
- struct boss_theolenkrastinovAI : public BossAI
- {
- boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTOR_THEOLEN_KRASTINOV) { }
-
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_REND, 8s);
- events.ScheduleEvent(EVENT_BACKHAND, 9s);
- events.ScheduleEvent(EVENT_FRENZY, 1s);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ boss_doctor_theolen_krastinov(Creature* creature) : BossAI(creature, DATA_DOCTOR_THEOLEN_KRASTINOV) { }
- events.Update(diff);
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_REND, 8s);
+ events.ScheduleEvent(EVENT_BACKHAND, 9s);
+ events.ScheduleEvent(EVENT_FRENZY, 1s);
+ }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_REND:
- DoCastVictim(SPELL_REND, true);
- events.ScheduleEvent(EVENT_REND, 10s);
- break;
- case EVENT_BACKHAND:
- DoCastVictim(SPELL_BACKHAND, true);
- events.ScheduleEvent(EVENT_BACKHAND, 10s);
- break;
- case EVENT_FRENZY:
- DoCast(me, SPELL_FRENZY, true);
- Talk(EMOTE_FRENZY_KILL);
- events.ScheduleEvent(EVENT_FRENZY, 120s);
- break;
- default:
- break;
- }
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_REND:
+ DoCastVictim(SPELL_REND);
+ events.Repeat(10s);
+ break;
+ case EVENT_BACKHAND:
+ DoCastVictim(SPELL_BACKHAND);
+ events.Repeat(10s);
+ break;
+ case EVENT_FRENZY:
+ DoCastSelf(SPELL_FRENZY);
+ Talk(EMOTE_FRENZY_KILL);
+ events.Repeat(120s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_theolenkrastinovAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_theolenkrastinov()
{
- new boss_doctor_theolen_krastinov();
+ RegisterScholomanceCreatureAI(boss_doctor_theolen_krastinov);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
index 28e7529fa54..b9b40ee9aae 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
@@ -15,100 +15,84 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/*
-Name: Boss_Illucia_Barov
-%Complete: 100
-Comment:
-Category: Scholomance
-*/
-
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
-enum Spells
+enum IlluciaSpells
{
- SPELL_CURSEOFAGONY = 18671,
+ SPELL_CURSE_OF_AGONY = 18671,
SPELL_DOMINATE = 7645, // UNUSED YET added for documentation
SPELL_FEAR = 12542,
- SPELL_SHADOWSHOCK = 17234,
+ SPELL_SHADOW_SHOCK = 17234,
SPELL_SILENCE = 12528
};
-enum Events
+enum IlluciaEvents
{
- EVENT_CURSEOFAGONY = 1,
- EVENT_SHADOWSHOCK = 2,
- EVENT_SILENCE = 3,
- EVENT_FEAR = 4
+ EVENT_CURSE_OF_AGONY = 1,
+ EVENT_SHADOW_SHOCK,
+ EVENT_SILENCE,
+ EVENT_FEAR
};
-class boss_illucia_barov : public CreatureScript
+// 10502 - Lady Illucia Barov
+struct boss_illucia_barov : public BossAI
{
- public: boss_illucia_barov() : CreatureScript("boss_illucia_barov") { }
+ boss_illucia_barov(Creature* creature) : BossAI(creature, DATA_LADY_ILLUCIA_BAROV) { }
- struct boss_illuciabarovAI : public BossAI
- {
- boss_illuciabarovAI(Creature* creature) : BossAI(creature, DATA_LADY_ILLUCIA_BAROV) { }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_CURSE_OF_AGONY, 18s);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 9s);
+ events.ScheduleEvent(EVENT_SILENCE, 5s);
+ events.ScheduleEvent(EVENT_FEAR, 30s);
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CURSEOFAGONY, 18s);
- events.ScheduleEvent(EVENT_SHADOWSHOCK, 9s);
- events.ScheduleEvent(EVENT_SILENCE, 5s);
- events.ScheduleEvent(EVENT_FEAR, 30s);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_CURSEOFAGONY:
- DoCastVictim(SPELL_CURSEOFAGONY, true);
- events.ScheduleEvent(EVENT_CURSEOFAGONY, 30s);
- break;
- case EVENT_SHADOWSHOCK:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_SHADOWSHOCK, true);
- events.ScheduleEvent(EVENT_SHADOWSHOCK, 12s);
- break;
- case EVENT_SILENCE:
- DoCastVictim(SPELL_SILENCE, true);
- events.ScheduleEvent(EVENT_SILENCE, 14s);
- break;
- case EVENT_FEAR:
- DoCastVictim(SPELL_FEAR, true);
- events.ScheduleEvent(EVENT_FEAR, 30s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CURSE_OF_AGONY:
+ DoCastVictim(SPELL_CURSE_OF_AGONY);
+ events.Repeat(30s);
+ break;
+ case EVENT_SHADOW_SHOCK:
+ DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_SHADOW_SHOCK);
+ events.Repeat(12s);
+ break;
+ case EVENT_SILENCE:
+ DoCastSelf(SPELL_SILENCE);
+ events.Repeat(14s);
+ break;
+ case EVENT_FEAR:
+ DoCastVictim(SPELL_FEAR);
+ events.Repeat(30s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_illuciabarovAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_illuciabarov()
{
- new boss_illucia_barov();
+ RegisterScholomanceCreatureAI(boss_illucia_barov);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index 9a8002b070f..df70433bfeb 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -15,145 +15,128 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_instructormalicia
-SD%Complete: 100
-SDComment:
-SDCategory: Scholomance
-EndScriptData */
-
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
-enum Spells
+enum MaliciaSpells
{
- SPELL_CALLOFGRAVES = 17831,
+ SPELL_CALL_OF_GRAVES = 17831,
SPELL_CORRUPTION = 11672,
- SPELL_FLASHHEAL = 10917,
+ SPELL_FLASH_HEAL = 10917,
SPELL_RENEW = 10929,
- SPELL_HEALINGTOUCH = 9889
+ SPELL_HEALING_TOUCH = 9889
};
-enum Events
+enum MaliciaEvents
{
- EVENT_CALLOFGRAVES = 1,
- EVENT_CORRUPTION = 2,
- EVENT_FLASHHEAL = 3,
- EVENT_RENEW = 4,
- EVENT_HEALINGTOUCH = 5
+ EVENT_CALL_OF_GRAVES = 1,
+ EVENT_CORRUPTION,
+ EVENT_FLASH_HEAL,
+ EVENT_RENEW,
+ EVENT_HEALING_TOUCH
};
-class boss_instructor_malicia : public CreatureScript
+// 10505 - Instructor Malicia
+struct boss_instructor_malicia : public BossAI
{
- public: boss_instructor_malicia() : CreatureScript("boss_instructor_malicia") { }
-
- struct boss_instructormaliciaAI : public BossAI
+ boss_instructor_malicia(Creature* creature) : BossAI(creature, DATA_INSTRUCTOR_MALICIA)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ FlashCounter = 0;
+ TouchCounter = 0;
+ }
+
+ uint32 FlashCounter;
+ uint32 TouchCounter;
+
+ void Reset() override
+ {
+ _Reset();
+ Initialize();
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_CALL_OF_GRAVES, 4s);
+ events.ScheduleEvent(EVENT_CORRUPTION, 8s);
+ events.ScheduleEvent(EVENT_RENEW, 32s);
+ events.ScheduleEvent(EVENT_FLASH_HEAL, 38s);
+ events.ScheduleEvent(EVENT_HEALING_TOUCH, 45s);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTOR_MALICIA)
- {
- Initialize();
- }
-
- void Initialize()
- {
- FlashCounter = 0;
- TouchCounter = 0;
- }
-
- uint32 FlashCounter;
- uint32 TouchCounter;
-
- void Reset() override
+ switch (eventId)
{
- _Reset();
- Initialize();
- }
-
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CALLOFGRAVES, 4s);
- events.ScheduleEvent(EVENT_CORRUPTION, 8s);
- events.ScheduleEvent(EVENT_RENEW, 32s);
- events.ScheduleEvent(EVENT_FLASHHEAL, 38s);
- events.ScheduleEvent(EVENT_HEALINGTOUCH, 45s);
- }
-
- 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_CALL_OF_GRAVES:
+ DoCastSelf(SPELL_CALL_OF_GRAVES);
+ events.Repeat(65s);
+ break;
+ case EVENT_CORRUPTION:
+ DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_CORRUPTION);
+ events.Repeat(24s);
+ break;
+ case EVENT_RENEW:
+ DoCastSelf(SPELL_RENEW);
+ events.Repeat(10s);
+ break;
+ case EVENT_FLASH_HEAL:
+ // 5 Flash Heal will be cast
+ DoCastSelf(SPELL_FLASH_HEAL);
+ if (FlashCounter < 2)
{
- case EVENT_CALLOFGRAVES:
- DoCastVictim(SPELL_CALLOFGRAVES, true);
- events.ScheduleEvent(EVENT_CALLOFGRAVES, 65s);
- break;
- case EVENT_CORRUPTION:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_CORRUPTION, true);
- events.ScheduleEvent(EVENT_CORRUPTION, 24s);
- break;
- case EVENT_RENEW:
- DoCast(me, SPELL_RENEW);
- events.ScheduleEvent(EVENT_RENEW, 10s);
- break;
- case EVENT_FLASHHEAL:
- //5 Flashheals will be cast
- DoCast(me, SPELL_FLASHHEAL);
- if (FlashCounter < 2)
- {
- events.ScheduleEvent(EVENT_FLASHHEAL, 5s);
- ++FlashCounter;
- }
- else
- {
- FlashCounter=0;
- events.ScheduleEvent(EVENT_FLASHHEAL, 30s);
- }
- break;
- case EVENT_HEALINGTOUCH:
- //3 Healing Touch will be cast
- DoCast(me, SPELL_HEALINGTOUCH);
- if (TouchCounter < 2)
- {
- events.ScheduleEvent(EVENT_HEALINGTOUCH, 5500ms);
- ++TouchCounter;
- }
- else
- {
- TouchCounter=0;
- events.ScheduleEvent(EVENT_HEALINGTOUCH, 30s);
- }
- break;
- default:
- break;
+ events.ScheduleEvent(EVENT_FLASH_HEAL, 5s);
+ ++FlashCounter;
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ else
+ {
+ FlashCounter=0;
+ events.ScheduleEvent(EVENT_FLASH_HEAL, 30s);
+ }
+ break;
+ case EVENT_HEALING_TOUCH:
+ // 3 Healing Touch will be cast
+ DoCastSelf(SPELL_HEALING_TOUCH);
+ if (TouchCounter < 2)
+ {
+ events.ScheduleEvent(EVENT_HEALING_TOUCH, 5500ms);
+ ++TouchCounter;
+ }
+ else
+ {
+ TouchCounter=0;
+ events.ScheduleEvent(EVENT_HEALING_TOUCH, 30s);
+ }
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_instructormaliciaAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_instructormalicia()
{
- new boss_instructor_malicia();
+ RegisterScholomanceCreatureAI(boss_instructor_malicia);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 97a0d1fa435..32f7e0cd2cb 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -19,14 +19,14 @@
#include "scholomance.h"
#include "ScriptedCreature.h"
-enum Spells
+enum JandiceSpells
{
SPELL_CURSE_OF_BLOOD = 24673,
SPELL_ILLUSION = 17773,
SPELL_DROP_JOURNAL = 26096
};
-enum Events
+enum JandiceEvents
{
EVENT_CURSE_OF_BLOOD = 1,
EVENT_ILLUSION,
@@ -34,95 +34,85 @@ enum Events
EVENT_SET_VISIBILITY
};
-class boss_jandice_barov : public CreatureScript
+// 10503 - Jandice Barov
+struct boss_jandice_barov : public ScriptedAI
{
-public:
- boss_jandice_barov() : CreatureScript("boss_jandice_barov") { }
+ boss_jandice_barov(Creature* creature) : ScriptedAI(creature), _summons(me) { }
- struct boss_jandicebarovAI : public ScriptedAI
+ void Reset() override
{
- boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature), Summons(me) { }
-
- void Reset() override
- {
- events.Reset();
- Summons.DespawnAll();
- }
+ _events.Reset();
+ _summons.DespawnAll();
+ }
- void JustSummoned(Creature* summoned) override
- {
- // Illusions should attack a random target.
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- summoned->AI()->AttackStart(target);
+ void JustSummoned(Creature* summoned) override
+ {
+ // Illusions should attack a random target.
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ summoned->AI()->AttackStart(target);
- Summons.Summon(summoned);
- }
+ _summons.Summon(summoned);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 15s);
- events.ScheduleEvent(EVENT_ILLUSION, 30s);
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 15s);
+ _events.ScheduleEvent(EVENT_ILLUSION, 30s);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- Summons.DespawnAll();
- DoCastSelf(SPELL_DROP_JOURNAL, true);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _summons.DespawnAll();
+ DoCastSelf(SPELL_DROP_JOURNAL, true);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ _events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_CURSE_OF_BLOOD:
- DoCastVictim(SPELL_CURSE_OF_BLOOD);
- events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 30s);
- break;
- case EVENT_ILLUSION:
- DoCast(SPELL_ILLUSION);
- me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
- me->SetDisplayId(11686); // Invisible Model
- ModifyThreatByPercent(me->GetVictim(), -99);
- events.ScheduleEvent(EVENT_SET_VISIBILITY, 3s);
- events.ScheduleEvent(EVENT_ILLUSION, 25s);
- break;
- case EVENT_SET_VISIBILITY:
- me->RemoveUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
- me->SetDisplayId(11073); //Jandice Model
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_CURSE_OF_BLOOD:
+ DoCastVictim(SPELL_CURSE_OF_BLOOD);
+ _events.Repeat(30s);
+ break;
+ case EVENT_ILLUSION:
+ DoCast(SPELL_ILLUSION);
+ me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
+ me->SetDisplayId(11686); // Invisible Model
+ ModifyThreatByPercent(me->GetVictim(), -99);
+ _events.ScheduleEvent(EVENT_SET_VISIBILITY, 3s);
+ _events.Repeat(25s);
+ break;
+ case EVENT_SET_VISIBILITY:
+ me->RemoveUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
+ me->SetDisplayId(11073); // Jandice Model
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- private:
- EventMap events;
- SummonList Summons;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_jandicebarovAI>(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap _events;
+ SummonList _summons;
};
void AddSC_boss_jandicebarov()
{
- new boss_jandice_barov();
+ RegisterScholomanceCreatureAI(boss_jandice_barov);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 05ec449e8d1..7e2640da7c3 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -26,12 +26,12 @@
#include "scholomance.h"
#include "ScriptedCreature.h"
-enum Says
+enum KirtonosTexts
{
EMOTE_SUMMONED = 0
};
-enum Spells
+enum KirtonosSpells
{
SPELL_SWOOP = 18144,
SPELL_WING_FLAP = 12882,
@@ -43,7 +43,7 @@ enum Spells
SPELL_DOMINATE_MIND = 14515
};
-enum Events
+enum KirtonosEvents
{
INTRO_1 = 1,
INTRO_2 = 2,
@@ -61,7 +61,7 @@ enum Events
EVENT_KIRTONOS_TRANSFORM = 14
};
-enum Misc
+enum KirtonosMisc
{
WEAPON_KIRTONOS_STAFF = 11365,
POINT_KIRTONOS_LAND = 13,
@@ -74,197 +74,184 @@ Position const PosMove[2] =
{ 314.8673f, 90.30210f, 101.6459f, 0.0f }
};
-class boss_kirtonos_the_herald : public CreatureScript
+// 10506 - Kirtonos the Herald
+struct boss_kirtonos_the_herald : public BossAI
{
- public: boss_kirtonos_the_herald() : CreatureScript("boss_kirtonos_the_herald") { }
+ boss_kirtonos_the_herald(Creature* creature) : BossAI(creature, DATA_KIRTONOS) { }
- struct boss_kirtonos_the_heraldAI : public BossAI
+ void Reset() override
+ {
+ _Reset();
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ events.ScheduleEvent(EVENT_SWOOP, 8s, 8s);
+ events.ScheduleEvent(EVENT_WING_FLAP, 15s, 15s);
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, 18s, 18s);
+ events.ScheduleEvent(EVENT_DISARM, 22s, 22s);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 42s, 42s);
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 53s, 53s);
+ events.ScheduleEvent(EVENT_DOMINATE_MIND, 34s, 48s);
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 20s, 20s);
+ BossAI::JustEngagedWith(who);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
{
- boss_kirtonos_the_heraldAI(Creature* creature) : BossAI(creature, DATA_KIRTONOS) { }
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ _JustDied();
+ }
- void Reset() override
- {
- _Reset();
- }
+ void EnterEvadeMode(EvadeReason /*why*/) override
+ {
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ me->DespawnOrUnsummon(5s);
+ }
- void JustEngagedWith(Unit* who) override
- {
- events.ScheduleEvent(EVENT_SWOOP, 8s, 8s);
- events.ScheduleEvent(EVENT_WING_FLAP, 15s, 15s);
- events.ScheduleEvent(EVENT_PIERCE_ARMOR, 18s, 18s);
- events.ScheduleEvent(EVENT_DISARM, 22s, 22s);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, 42s, 42s);
- events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 53s, 53s);
- events.ScheduleEvent(EVENT_DOMINATE_MIND, 34s, 48s);
- events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 20s, 20s);
- BossAI::JustEngagedWith(who);
- }
+ void IsSummonedBy(WorldObject* /*summoner*/) override
+ {
+ events.ScheduleEvent(INTRO_1, 500ms);
+ me->SetDisableGravity(true);
+ me->SetReactState(REACT_PASSIVE);
+ me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_UNINTERACTIBLE);
+ Talk(EMOTE_SUMMONED);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
- gate->SetGoState(GO_STATE_ACTIVE);
- if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
- {
- brazier->ResetDoorOrButton();
- brazier->SetGoState(GO_STATE_READY);
- }
- _JustDied();
- }
+ void JustSummoned(Creature* summon) override
+ {
+ BossAI::JustSummoned(summon);
+ }
+
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND)
+ events.ScheduleEvent(INTRO_2, 1500ms);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
- void EnterEvadeMode(EvadeReason /*why*/) override
+ if (!UpdateVictim())
+ {
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
- gate->SetGoState(GO_STATE_ACTIVE);
- if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
+ switch (eventId)
{
- brazier->ResetDoorOrButton();
- brazier->SetGoState(GO_STATE_READY);
+ case INTRO_1:
+ me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
+ break;
+ case INTRO_2:
+ me->GetMotionMaster()->MovePoint(0, PosMove[0]);
+ events.ScheduleEvent(INTRO_3, 1s);
+ break;
+ case INTRO_3:
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_READY);
+ me->SetFacingTo(0.01745329f);
+ events.ScheduleEvent(INTRO_4, 3s);
+ break;
+ case INTRO_4:
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
+ brazier->SetGoState(GO_STATE_READY);
+ me->SetWalk(true);
+ me->SetDisableGravity(false);
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ me->SetCanFly(false);
+ events.ScheduleEvent(INTRO_5, 1s);
+ break;
+ case INTRO_5:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_UNINTERACTIBLE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ events.ScheduleEvent(INTRO_6, 5s);
+ break;
+ case INTRO_6:
+ me->GetMotionMaster()->MovePoint(0, PosMove[1]);
+ break;
+ default:
+ break;
}
- me->DespawnOrUnsummon(5s);
}
- void IsSummonedBy(WorldObject* /*summoner*/) override
- {
- events.ScheduleEvent(INTRO_1, 500ms);
- me->SetDisableGravity(true);
- me->SetReactState(REACT_PASSIVE);
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_UNINTERACTIBLE);
- Talk(EMOTE_SUMMONED);
- }
+ return;
+ }
- void JustSummoned(Creature* summon) override
- {
- BossAI::JustSummoned(summon);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND)
- events.ScheduleEvent(INTRO_2, 1500ms);
- }
-
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- events.Update(diff);
-
- if (!UpdateVictim())
- {
- while (uint32 eventId = events.ExecuteEvent())
+ case EVENT_SWOOP:
+ DoCastVictim(SPELL_SWOOP);
+ events.Repeat(15s);
+ break;
+ case EVENT_WING_FLAP:
+ DoCastSelf(SPELL_WING_FLAP);
+ events.Repeat(13s);
+ break;
+ case EVENT_PIERCE_ARMOR:
+ DoCastVictim(SPELL_PIERCE_ARMOR);
+ events.Repeat(12s);
+ break;
+ case EVENT_DISARM:
+ DoCastVictim(SPELL_DISARM);
+ events.Repeat(11s);
+ break;
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOW_BOLT);
+ events.Repeat(42s);
+ break;
+ case EVENT_CURSE_OF_TONGUES:
+ DoCastVictim(SPELL_CURSE_OF_TONGUES);
+ events.Repeat(35s);
+ break;
+ case EVENT_DOMINATE_MIND:
+ DoCastVictim(SPELL_DOMINATE_MIND);
+ events.Repeat(44s, 48s);
+ break;
+ case EVENT_KIRTONOS_TRANSFORM:
+ if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
{
- switch (eventId)
- {
- case INTRO_1:
- me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
- break;
- case INTRO_2:
- me->GetMotionMaster()->MovePoint(0, PosMove[0]);
- events.ScheduleEvent(INTRO_3, 1s);
- break;
- case INTRO_3:
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
- gate->SetGoState(GO_STATE_READY);
- me->SetFacingTo(0.01745329f);
- events.ScheduleEvent(INTRO_4, 3s);
- break;
- case INTRO_4:
- if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
- brazier->SetGoState(GO_STATE_READY);
- me->SetWalk(true);
- me->SetDisableGravity(false);
- DoCast(me, SPELL_KIRTONOS_TRANSFORM);
- me->SetCanFly(false);
- events.ScheduleEvent(INTRO_5, 1s);
- break;
- case INTRO_5:
- me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
- me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_UNINTERACTIBLE);
- me->SetReactState(REACT_AGGRESSIVE);
- events.ScheduleEvent(INTRO_6, 5s);
- break;
- case INTRO_6:
- me->GetMotionMaster()->MovePoint(0, PosMove[1]);
- break;
- default:
- break;
- }
+ me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
+ me->SetVirtualItem(0, uint32(0));
+ me->SetCanFly(false);
}
-
- return;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ else
{
- case EVENT_SWOOP:
- DoCast(me, SPELL_SWOOP);
- events.ScheduleEvent(EVENT_SWOOP, 15s);
- break;
- case EVENT_WING_FLAP:
- DoCast(me, SPELL_WING_FLAP);
- events.ScheduleEvent(EVENT_WING_FLAP, 13s);
- break;
- case EVENT_PIERCE_ARMOR:
- DoCastVictim(SPELL_PIERCE_ARMOR, true);
- events.ScheduleEvent(EVENT_PIERCE_ARMOR, 12s);
- break;
- case EVENT_DISARM:
- DoCastVictim(SPELL_DISARM, true);
- events.ScheduleEvent(EVENT_DISARM, 11s);
- break;
- case EVENT_SHADOW_BOLT:
- DoCastVictim(SPELL_SHADOW_BOLT, true);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, 42s);
- break;
- case EVENT_CURSE_OF_TONGUES:
- DoCastVictim(SPELL_CURSE_OF_TONGUES, true);
- events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 35s);
- break;
- case EVENT_DOMINATE_MIND:
- DoCastVictim(SPELL_DOMINATE_MIND, true);
- events.ScheduleEvent(EVENT_DOMINATE_MIND, 44s, 48s);
- break;
- case EVENT_KIRTONOS_TRANSFORM:
- if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
- {
- me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
- me->SetVirtualItem(0, uint32(0));
- me->SetCanFly(false);
- }
- else
- {
- DoCast(me, SPELL_KIRTONOS_TRANSFORM);
- me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
- me->SetCanFly(true);
- }
- events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 16s, 18s);
- break;
- default:
- break;
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
+ me->SetCanFly(true);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ events.Repeat(16s, 18s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_kirtonos_the_heraldAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
-};
-/*######
-## go_brazier_of_the_herald
-######*/
+ DoMeleeAttackIfReady();
+ }
+};
enum Brazier_Of_The_Herald
{
@@ -277,32 +264,21 @@ Position const PosSummon[1] =
{ 315.028f, 70.53845f, 102.1496f, 0.3859715f }
};
-class go_brazier_of_the_herald : public GameObjectScript
+struct go_brazier_of_the_herald : public GameObjectAI
{
- public:
- go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
-
- struct go_brazier_of_the_heraldAI : public GameObjectAI
- {
- go_brazier_of_the_heraldAI(GameObject* go) : GameObjectAI(go) { }
+ go_brazier_of_the_herald(GameObject* go) : GameObjectAI(go) { }
- bool OnGossipHello(Player* player) override
- {
- me->UseDoorOrButton();
- me->PlayDirectSound(SOUND_SCREECH, 0);
- player->SummonCreature(NPC_KIRTONOS, PosSummon[0], TEMPSUMMON_DEAD_DESPAWN, 15min);
- return true;
- }
- };
-
- GameObjectAI* GetAI(GameObject* go) const override
- {
- return GetScholomanceAI<go_brazier_of_the_heraldAI>(go);
- }
+ bool OnGossipHello(Player* player) override
+ {
+ me->UseDoorOrButton();
+ me->PlayDirectSound(SOUND_SCREECH, 0);
+ player->SummonCreature(NPC_KIRTONOS, PosSummon[0], TEMPSUMMON_DEAD_DESPAWN, 15min);
+ return true;
+ }
};
void AddSC_boss_kirtonos_the_herald()
{
- new boss_kirtonos_the_herald();
- new go_brazier_of_the_herald;
+ RegisterScholomanceCreatureAI(boss_kirtonos_the_herald);
+ RegisterScholomanceGameObjectAI(go_brazier_of_the_herald);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
index b5fd8141e25..e9f35b087fb 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
@@ -20,201 +20,167 @@
#include "ScriptedCreature.h"
#include "SpellScript.h"
-enum Spells
+enum KormokSpells
{
SPELL_SHADOWBOLT_VOLLEY = 20741,
SPELL_BONE_SHIELD = 27688,
SPELL_SUMMON_BONE_MAGES = 27695,
-
SPELL_SUMMON_BONE_MAGE_FRONT_LEFT = 27696,
SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT = 27697,
SPELL_SUMMON_BONE_MAGE_BACK_RIGHT = 27698,
SPELL_SUMMON_BONE_MAGE_BACK_LEFT = 27699,
- SPELL_SUMMON_BONE_MINIONS = 27687
+ SPELL_SUMMON_BONE_MINIONS = 27687,
+ SPELL_SUMMON_BONE_MINION_FRONT = 27690,
+ SPELL_SUMMON_BONE_MINION_BACK = 27691,
+ SPELL_SUMMON_BONE_MINION_LEFT = 27692,
+ SPELL_SUMMON_BONE_MINION_RIGHT = 27693
};
-enum Events
+enum KormokEvents
{
EVENT_SHADOWBOLT_VOLLEY = 1,
EVENT_BONE_SHIELD,
+ EVENT_SUMMON_MAGES,
EVENT_SUMMON_MINIONS
};
-class boss_kormok : public CreatureScript
+// 16118 - Kormok
+struct boss_kormok : public ScriptedAI
{
-public:
- boss_kormok() : CreatureScript("boss_kormok") { }
+ boss_kormok(Creature* creature) : ScriptedAI(creature) { }
- struct boss_kormokAI : public ScriptedAI
+ void Reset() override
{
- boss_kormokAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
+ _events.Reset();
+ }
- void Initialize()
- {
- Mages = false;
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10s);
+ _events.ScheduleEvent(EVENT_BONE_SHIELD, 2s);
+ _events.ScheduleEvent(EVENT_SUMMON_MAGES, 10s, 15s);
+ _events.ScheduleEvent(EVENT_SUMMON_MINIONS, 5s, 10s);
+ }
- void Reset() override
- {
- Initialize();
- events.Reset();
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void JustEngagedWith(Unit* /*who*/) override
- {
- events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10s);
- events.ScheduleEvent(EVENT_BONE_SHIELD, 2s);
- events.ScheduleEvent(EVENT_SUMMON_MINIONS, 15s);
- }
+ _events.Update(diff);
- void JustSummoned(Creature* summoned) override
- {
- summoned->AI()->AttackStart(me->GetVictim());
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
+ while (uint32 eventId = _events.ExecuteEvent())
{
- if (me->HealthBelowPctDamaged(25, damage) && !Mages)
+ switch (eventId)
{
- DoCast(SPELL_SUMMON_BONE_MAGES);
- Mages = true;
+ case EVENT_SHADOWBOLT_VOLLEY:
+ DoCastSelf(SPELL_SHADOWBOLT_VOLLEY);
+ _events.Repeat(15s);
+ break;
+ case EVENT_BONE_SHIELD:
+ DoCastSelf(SPELL_BONE_SHIELD);
+ _events.Repeat(45s);
+ break;
+ case EVENT_SUMMON_MAGES:
+ DoCastSelf(SPELL_SUMMON_BONE_MAGES);
+ _events.Repeat(10s, 15s);
+ break;
+ case EVENT_SUMMON_MINIONS:
+ DoCastSelf(SPELL_SUMMON_BONE_MINIONS);
+ _events.Repeat(20s, 25s);
+ break;
+ default:
+ break;
}
- }
-
- 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_SHADOWBOLT_VOLLEY:
- DoCastVictim(SPELL_SHADOWBOLT_VOLLEY);
- events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 15s);
- break;
- case EVENT_BONE_SHIELD:
- DoCastVictim(SPELL_BONE_SHIELD);
- events.ScheduleEvent(EVENT_BONE_SHIELD, 45s);
- break;
- case EVENT_SUMMON_MINIONS:
- DoCast(SPELL_SUMMON_BONE_MINIONS);
- events.ScheduleEvent(EVENT_SUMMON_MINIONS, 12s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
}
- private:
- EventMap events;
- bool Mages;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_kormokAI>(creature);
+ DoMeleeAttackIfReady();
}
-};
-uint32 const SummonMageSpells[4] =
-{
- SPELL_SUMMON_BONE_MAGE_FRONT_LEFT,
- SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT,
- SPELL_SUMMON_BONE_MAGE_BACK_RIGHT,
- SPELL_SUMMON_BONE_MAGE_BACK_LEFT,
+private:
+ EventMap _events;
};
// 27695 - Summon Bone Mages
-class spell_kormok_summon_bone_mages : SpellScriptLoader
+class spell_kormok_summon_bone_mages : public SpellScript
{
- public:
- spell_kormok_summon_bone_mages() : SpellScriptLoader("spell_kormok_summon_bone_mages") { }
+ PrepareSpellScript(spell_kormok_summon_bone_mages);
- class spell_kormok_summon_bone_magesSpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return ValidateSpellInfo(
{
- PrepareSpellScript(spell_kormok_summon_bone_magesSpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- return ValidateSpellInfo(SummonMageSpells);
- }
-
- void HandleScript(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
- for (uint32 i = 0; i < 2; ++i)
- GetCaster()->CastSpell(GetCaster(), SummonMageSpells[urand(0, 3)], true);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_kormok_summon_bone_magesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
+ SPELL_SUMMON_BONE_MAGE_FRONT_LEFT,
+ SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT,
+ SPELL_SUMMON_BONE_MAGE_BACK_RIGHT,
+ SPELL_SUMMON_BONE_MAGE_BACK_LEFT
+ });
+ }
- SpellScript* GetSpellScript() const override
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ switch (urand(0, 1))
{
- return new spell_kormok_summon_bone_magesSpellScript();
+ case 0:
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MAGE_FRONT_LEFT);
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT);
+ break;
+ case 1:
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MAGE_BACK_RIGHT);
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MAGE_BACK_LEFT);
+ break;
}
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_kormok_summon_bone_mages::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
// 27687 - Summon Bone Minions
-class spell_kormok_summon_bone_minions : SpellScriptLoader
+class spell_kormok_summon_bone_minions : public SpellScript
{
- public:
- spell_kormok_summon_bone_minions() : SpellScriptLoader("spell_kormok_summon_bone_minions") { }
+ PrepareSpellScript(spell_kormok_summon_bone_minions);
- class spell_kormok_summon_bone_minionsSpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spell*/) override
{
- PrepareSpellScript(spell_kormok_summon_bone_minionsSpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
+ return ValidateSpellInfo(
{
- return ValidateSpellInfo({ SPELL_SUMMON_BONE_MINIONS });
- }
-
- void HandleScript(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
-
- // Possible spells to handle this not found.
- for (uint32 i = 0; i < 4; ++i)
- GetCaster()->SummonCreature(NPC_BONE_MINION, GetCaster()->GetPositionX() + float(irand(-7, 7)), GetCaster()->GetPositionY() + float(irand(-7, 7)), GetCaster()->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 2min);
- }
+ SPELL_SUMMON_BONE_MINION_FRONT,
+ SPELL_SUMMON_BONE_MINION_BACK,
+ SPELL_SUMMON_BONE_MINION_LEFT,
+ SPELL_SUMMON_BONE_MINION_RIGHT
+ });
+ }
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_kormok_summon_bone_minionsSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MINION_FRONT);
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MINION_BACK);
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MINION_LEFT);
+ caster->CastSpell(caster, SPELL_SUMMON_BONE_MINION_RIGHT);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_kormok_summon_bone_minionsSpellScript();
+ OnEffectHit += SpellEffectFn(spell_kormok_summon_bone_minions::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
void AddSC_boss_kormok()
{
- new boss_kormok();
- new spell_kormok_summon_bone_mages();
- new spell_kormok_summon_bone_minions();
+ RegisterScholomanceCreatureAI(boss_kormok);
+ RegisterSpellScript(spell_kormok_summon_bone_mages);
+ RegisterSpellScript(spell_kormok_summon_bone_minions);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
index 22ed088934c..bd678b8e71a 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
@@ -15,94 +15,78 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Lord_Alexei_Barov
-SD%Complete: 100
-SDComment: aura applied/defined in database
-SDCategory: Scholomance
-EndScriptData */
-
#include "scholomance.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-enum Spells
+enum AlexeiSpells
{
SPELL_IMMOLATE = 20294,
- SPELL_VEILOFSHADOW = 17820,
+ SPELL_VEIL_OF_SHADOW = 17820,
SPELL_UNHOLY_AURA = 17467
};
-enum Events
+enum AlexeiEvents
{
- EVENT_IMMOLATE = 1,
- EVENT_VEILOFSHADOW = 2
+ EVENT_IMMOLATE = 1,
+ EVENT_VEIL_OF_SHADOW
};
-class boss_lord_alexei_barov : public CreatureScript
+// 10504 - Lord Alexei Barov
+struct boss_lord_alexei_barov : public BossAI
{
- public: boss_lord_alexei_barov() : CreatureScript("boss_lord_alexei_barov") { }
-
- struct boss_lordalexeibarovAI : public BossAI
- {
- boss_lordalexeibarovAI(Creature* creature) : BossAI(creature, DATA_LORD_ALEXEI_BAROV) { }
-
- void Reset() override
- {
- _Reset();
-
- if (!me->HasAura(SPELL_UNHOLY_AURA))
- DoCast(me, SPELL_UNHOLY_AURA);
- }
+ boss_lord_alexei_barov(Creature* creature) : BossAI(creature, DATA_LORD_ALEXEI_BAROV) { }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_IMMOLATE, 7s);
- events.ScheduleEvent(EVENT_VEILOFSHADOW, 15s);
- }
+ void Reset() override
+ {
+ _Reset();
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ if (!me->HasAura(SPELL_UNHOLY_AURA))
+ DoCastSelf(SPELL_UNHOLY_AURA);
+ }
- events.Update(diff);
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_IMMOLATE, 7s);
+ events.ScheduleEvent(EVENT_VEIL_OF_SHADOW, 15s);
+ }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_IMMOLATE:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_IMMOLATE, true);
- events.ScheduleEvent(EVENT_IMMOLATE, 12s);
- break;
- case EVENT_VEILOFSHADOW:
- DoCastVictim(SPELL_VEILOFSHADOW, true);
- events.ScheduleEvent(EVENT_VEILOFSHADOW, 20s);
- break;
- default:
- break;
- }
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_IMMOLATE:
+ DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_IMMOLATE);
+ events.Repeat(12s);
+ break;
+ case EVENT_VEIL_OF_SHADOW:
+ DoCastVictim(SPELL_VEIL_OF_SHADOW);
+ events.Repeat(20s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_lordalexeibarovAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_lordalexeibarov()
{
- new boss_lord_alexei_barov();
+ RegisterScholomanceCreatureAI(boss_lord_alexei_barov);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
index 07615837321..4accabc4746 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
@@ -15,99 +15,83 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/*
-Name: Boss_Lorekeeper_Polkelt
-%Complete: 100
-Comment:
-Category: Scholomance
-*/
-
#include "scholomance.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-enum Spells
+enum PolkeltSpells
{
- SPELL_VOLATILEINFECTION = 24928,
- SPELL_DARKPLAGUE = 18270,
- SPELL_CORROSIVEACID = 23313,
- SPELL_NOXIOUSCATALYST = 18151
+ SPELL_VOLATILE_INFECTION = 24928,
+ SPELL_DARK_PLAGUE = 18270,
+ SPELL_CORROSIVE_ACID = 23313,
+ SPELL_NOXIOUS_CATALYST = 18151
};
-enum Events
+enum PolkeltEvents
{
- EVENT_VOLATILEINFECTION = 1,
- EVENT_DARKPLAGUE = 2,
- EVENT_CORROSIVEACID = 3,
- EVENT_NOXIOUSCATALYST = 4
+ EVENT_VOLATILE_INFECTION = 1,
+ EVENT_DARK_PLAGUE,
+ EVENT_CORROSIVE_ACID,
+ EVENT_NOXIOUS_CATALYST
};
-class boss_lorekeeper_polkelt : public CreatureScript
+// 10901 - Lorekeeper Polkelt
+struct boss_lorekeeper_polkelt : public BossAI
{
- public: boss_lorekeeper_polkelt() : CreatureScript("boss_lorekeeper_polkelt") { }
+ boss_lorekeeper_polkelt(Creature* creature) : BossAI(creature, DATA_LOREKEEPER_POLKELT) { }
- struct boss_lorekeeperpolkeltAI : public BossAI
- {
- boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPER_POLKELT) { }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 38s);
+ events.ScheduleEvent(EVENT_DARK_PLAGUE, 8s);
+ events.ScheduleEvent(EVENT_CORROSIVE_ACID, 45s);
+ events.ScheduleEvent(EVENT_NOXIOUS_CATALYST, 35s);
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_VOLATILEINFECTION, 38s);
- events.ScheduleEvent(EVENT_DARKPLAGUE, 8s);
- events.ScheduleEvent(EVENT_CORROSIVEACID, 45s);
- events.ScheduleEvent(EVENT_NOXIOUSCATALYST, 35s);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_VOLATILEINFECTION:
- DoCastVictim(SPELL_VOLATILEINFECTION, true);
- events.ScheduleEvent(EVENT_VOLATILEINFECTION, 32s);
- break;
- case EVENT_DARKPLAGUE:
- DoCastVictim(SPELL_DARKPLAGUE, true);
- events.ScheduleEvent(EVENT_DARKPLAGUE, 8s);
- break;
- case EVENT_CORROSIVEACID:
- DoCastVictim(SPELL_CORROSIVEACID, true);
- events.ScheduleEvent(EVENT_CORROSIVEACID, 25s);
- break;
- case EVENT_NOXIOUSCATALYST:
- DoCastVictim(SPELL_NOXIOUSCATALYST, true);
- events.ScheduleEvent(EVENT_NOXIOUSCATALYST, 38s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_VOLATILE_INFECTION:
+ DoCastVictim(SPELL_VOLATILE_INFECTION);
+ events.Repeat(32s);
+ break;
+ case EVENT_DARK_PLAGUE:
+ DoCastVictim(SPELL_DARK_PLAGUE);
+ events.Repeat(8s);
+ break;
+ case EVENT_CORROSIVE_ACID:
+ DoCastSelf(SPELL_CORROSIVE_ACID);
+ events.Repeat(25s);
+ break;
+ case EVENT_NOXIOUS_CATALYST:
+ DoCastVictim(SPELL_NOXIOUS_CATALYST);
+ events.Repeat(38s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_lorekeeperpolkeltAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_lorekeeperpolkelt()
{
- new boss_lorekeeper_polkelt();
+ RegisterScholomanceCreatureAI(boss_lorekeeper_polkelt);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
index 6aa017d5174..8581e5f66aa 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
@@ -19,17 +19,17 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-enum Spells
+enum RasSpells
{
SPELL_FROSTBOLT = 21369,
SPELL_ICE_ARMOR = 18100, // This is actually a buff he gives himself
SPELL_FREEZE = 18763,
SPELL_FEAR = 26070,
SPELL_CHILL_NOVA = 18099,
- SPELL_FROSTVOLLEY = 8398
+ SPELL_FROSTBOLT_VOLLEY = 8398
};
-enum Events
+enum RasEvents
{
EVENT_FROSTBOLT = 1,
EVENT_ICE_ARMOR,
@@ -39,91 +39,81 @@ enum Events
EVENT_FROSTVOLLEY
};
-class boss_boss_ras_frostwhisper : public CreatureScript
+// 10508 - Ras Frostwhisper
+struct boss_boss_ras_frostwhisper : public ScriptedAI
{
-public:
- boss_boss_ras_frostwhisper() : CreatureScript("boss_boss_ras_frostwhisper") { }
+ boss_boss_ras_frostwhisper(Creature* creature) : ScriptedAI(creature) { }
- struct boss_rasfrostAI : public ScriptedAI
+ void Reset() override
{
- boss_rasfrostAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- events.Reset();
- DoCast(me, SPELL_ICE_ARMOR);
- }
+ _events.Reset();
+ DoCastSelf(SPELL_ICE_ARMOR);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- events.ScheduleEvent(EVENT_ICE_ARMOR, 2s);
- events.ScheduleEvent(EVENT_FROSTBOLT, 8s);
- events.ScheduleEvent(EVENT_CHILL_NOVA, 12s);
- events.ScheduleEvent(EVENT_FREEZE, 18s);
- events.ScheduleEvent(EVENT_FEAR, 45s);
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_ICE_ARMOR, 2s);
+ _events.ScheduleEvent(EVENT_FROSTBOLT, 8s);
+ _events.ScheduleEvent(EVENT_CHILL_NOVA, 12s);
+ _events.ScheduleEvent(EVENT_FREEZE, 18s);
+ _events.ScheduleEvent(EVENT_FEAR, 45s);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ _events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_ICE_ARMOR:
- DoCast(me, SPELL_ICE_ARMOR);
- events.ScheduleEvent(EVENT_ICE_ARMOR, 3min);
- break;
- case EVENT_FROSTBOLT:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
- DoCast(target, SPELL_FROSTBOLT);
- events.ScheduleEvent(EVENT_FROSTBOLT, 8s);
- break;
- case EVENT_FREEZE:
- DoCastVictim(SPELL_FREEZE);
- events.ScheduleEvent(EVENT_FREEZE, 24s);
- break;
- case EVENT_FEAR:
- DoCastVictim(SPELL_FEAR);
- events.ScheduleEvent(EVENT_FEAR, 30s);
- break;
- case EVENT_CHILL_NOVA:
- DoCastVictim(SPELL_CHILL_NOVA);
- events.ScheduleEvent(EVENT_CHILL_NOVA, 14s);
- break;
- case EVENT_FROSTVOLLEY:
- DoCastVictim(SPELL_FROSTVOLLEY);
- events.ScheduleEvent(EVENT_FROSTVOLLEY, 15s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_ICE_ARMOR:
+ DoCastSelf(SPELL_ICE_ARMOR);
+ _events.Repeat(3min);
+ break;
+ case EVENT_FROSTBOLT:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
+ DoCast(target, SPELL_FROSTBOLT);
+ _events.Repeat(8s);
+ break;
+ case EVENT_FREEZE:
+ DoCastVictim(SPELL_FREEZE);
+ _events.Repeat(24s);
+ break;
+ case EVENT_FEAR:
+ DoCastSelf(SPELL_FEAR);
+ _events.Repeat(30s);
+ break;
+ case EVENT_CHILL_NOVA:
+ DoCastSelf(SPELL_CHILL_NOVA);
+ _events.Repeat(14s);
+ break;
+ case EVENT_FROSTVOLLEY:
+ DoCastVictim(SPELL_FROSTBOLT_VOLLEY);
+ _events.Repeat(15s);
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_rasfrostAI>(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap _events;
};
void AddSC_boss_rasfrost()
{
- new boss_boss_ras_frostwhisper();
+ RegisterScholomanceCreatureAI(boss_boss_ras_frostwhisper);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
index 3b6965f7582..5965e8bf9d3 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
@@ -15,99 +15,83 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/*
-Name: Boss_the_ravenian
-%Complete: 100
-Comment:
-Category: Scholomance
-*/
-
#include "scholomance.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-enum Spells
+enum RavenianSpells
{
SPELL_TRAMPLE = 15550,
SPELL_CLEAVE = 20691,
- SPELL_SUNDERINCLEAVE = 25174,
- SPELL_KNOCKAWAY = 10101
+ SPELL_SUNDERING_CLEAVE = 25174,
+ SPELL_KNOCK_AWAY = 10101
};
-enum Events
+enum RavenianEvents
{
- EVENT_TRAMPLE = 1,
- EVENT_CLEAVE = 2,
- EVENT_SUNDERINCLEAVE = 3,
- EVENT_KNOCKAWAY = 4
+ EVENT_TRAMPLE = 1,
+ EVENT_CLEAVE,
+ EVENT_SUNDERING_CLEAVE,
+ EVENT_KNOCK_AWAY
};
-class boss_the_ravenian : public CreatureScript
+// 10507 - The Ravenian
+struct boss_the_ravenian : public BossAI
{
- public: boss_the_ravenian() : CreatureScript("boss_the_ravenian") { }
+ boss_the_ravenian(Creature* creature) : BossAI(creature, DATA_THE_RAVENIAN) { }
- struct boss_theravenianAI : public BossAI
- {
- boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THE_RAVENIAN) { }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_TRAMPLE, 24s);
+ events.ScheduleEvent(EVENT_CLEAVE, 15s);
+ events.ScheduleEvent(EVENT_SUNDERING_CLEAVE, 40s);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 32s);
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_TRAMPLE, 24s);
- events.ScheduleEvent(EVENT_CLEAVE, 15s);
- events.ScheduleEvent(EVENT_SUNDERINCLEAVE, 40s);
- events.ScheduleEvent(EVENT_KNOCKAWAY, 32s);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_TRAMPLE:
- DoCastVictim(SPELL_TRAMPLE, true);
- events.ScheduleEvent(EVENT_TRAMPLE, 10s);
- break;
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE, true);
- events.ScheduleEvent(EVENT_CLEAVE, 7s);
- break;
- case EVENT_SUNDERINCLEAVE:
- DoCastVictim(SPELL_SUNDERINCLEAVE, true);
- events.ScheduleEvent(EVENT_SUNDERINCLEAVE, 20s);
- break;
- case EVENT_KNOCKAWAY:
- DoCastVictim(SPELL_KNOCKAWAY, true);
- events.ScheduleEvent(EVENT_KNOCKAWAY, 12s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_TRAMPLE:
+ DoCastSelf(SPELL_TRAMPLE);
+ events.Repeat(10s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.Repeat(7s);
+ break;
+ case EVENT_SUNDERING_CLEAVE:
+ DoCastVictim(SPELL_SUNDERING_CLEAVE);
+ events.Repeat(20s);
+ break;
+ case EVENT_KNOCK_AWAY:
+ DoCastVictim(SPELL_KNOCK_AWAY);
+ events.Repeat(12s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_theravenianAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_theravenian()
{
- new boss_the_ravenian();
+ RegisterScholomanceCreatureAI(boss_the_ravenian);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
index 6558325f19d..768e96b3c8a 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
@@ -19,12 +19,12 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-enum Emotes
+enum VectusTexts
{
EMOTE_FRENZY = 0
};
-enum Spells
+enum VectusSpells
{
SPELL_FLAMESTRIKE = 18399,
SPELL_BLAST_WAVE = 16046,
@@ -32,92 +32,78 @@ enum Spells
SPELL_FRENZY = 8269 // 28371
};
-enum Events
+enum VectusEvents
{
EVENT_FIRE_SHIELD = 1,
EVENT_BLAST_WAVE,
EVENT_FRENZY
};
-class boss_vectus : public CreatureScript
+// 10432 - Vectus
+struct boss_vectus : public ScriptedAI
{
-public:
- boss_vectus() : CreatureScript("boss_vectus") { }
+ boss_vectus(Creature* creature) : ScriptedAI(creature) { }
- struct boss_vectusAI : public ScriptedAI
+ void Reset() override
{
- boss_vectusAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- events.Reset();
- }
+ _events.Reset();
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- events.ScheduleEvent(EVENT_FIRE_SHIELD, 2s);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 14s);
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_FIRE_SHIELD, 2s);
+ _events.ScheduleEvent(EVENT_BLAST_WAVE, 14s);
+ }
- void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
- {
- if (me->HealthBelowPctDamaged(25, damage))
- {
- DoCast(me, SPELL_FRENZY);
- Talk(EMOTE_FRENZY);
- events.ScheduleEvent(EVENT_FRENZY, 24s);
- }
- }
+ void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
+ {
+ if (!me->HasAura(SPELL_FRENZY) && me->HealthBelowPctDamaged(25, damage))
+ _events.ScheduleEvent(EVENT_FRENZY, 0s);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ _events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_FIRE_SHIELD:
- DoCast(me, SPELL_FIRE_SHIELD);
- events.ScheduleEvent(EVENT_FIRE_SHIELD, 90s);
- break;
- case EVENT_BLAST_WAVE:
- DoCast(me, SPELL_BLAST_WAVE);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 12s);
- break;
- case EVENT_FRENZY:
- DoCast(me, SPELL_FRENZY);
- Talk(EMOTE_FRENZY);
- events.ScheduleEvent(EVENT_FRENZY, 24s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_FIRE_SHIELD:
+ DoCastSelf(SPELL_FIRE_SHIELD);
+ _events.Repeat(90s);
+ break;
+ case EVENT_BLAST_WAVE:
+ DoCastSelf(SPELL_BLAST_WAVE);
+ _events.Repeat(12s);
+ break;
+ case EVENT_FRENZY:
+ DoCastSelf(SPELL_FRENZY);
+ Talk(EMOTE_FRENZY);
+ _events.Repeat(24s);
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetScholomanceAI<boss_vectusAI>(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap _events;
};
void AddSC_boss_vectus()
{
- new boss_vectus();
+ RegisterScholomanceCreatureAI(boss_vectus);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index 42b075eb4b5..a4a8aa58631 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -62,4 +62,7 @@ inline AI* GetScholomanceAI(T* obj)
return GetInstanceAI<AI>(obj, ScholomanceScriptName);
}
+#define RegisterScholomanceCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetScholomanceAI)
+#define RegisterScholomanceGameObjectAI(ai_name) RegisterGameObjectAIWithFactory(ai_name, GetScholomanceAI)
+
#endif