aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-09-18 13:02:34 +0400
committerShauren <shauren.trinity@gmail.com>2022-02-27 00:28:25 +0100
commit513eb0acb90cf62ee11b3a606788b96febed9ae9 (patch)
tree7d1d88ec3df3701d06a62660b82fb8a824e0aff4 /src
parent25bca7bef31b29d49e169ad957b90a8f03c57f0c (diff)
Scripts/ICC: update Icecrown Citadel scripts to new model (#25439)
(cherry picked from commit 54b9bb75e47df4491d13b89c28f93dbe3b005dec)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp845
1 files changed, 382 insertions, 463 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 56d02ef39de..8d3c05d8e4f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -208,227 +208,216 @@ enum ICCMisc
};
// at Light's Hammer
-class npc_highlord_tirion_fordring_lh : public CreatureScript
+struct npc_highlord_tirion_fordring_lh : public ScriptedAI
{
- public:
- npc_highlord_tirion_fordring_lh() : CreatureScript("npc_highlord_tirion_fordring_lh") { }
-
- struct npc_highlord_tirion_fordringAI : public ScriptedAI
- {
- npc_highlord_tirion_fordringAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
- {
- Initialize();
- }
+ npc_highlord_tirion_fordring_lh(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
+ {
+ Initialize();
+ }
- void Initialize()
- {
- _theLichKing.Clear();
- _bolvarFordragon.Clear();
- _factionNPC.Clear();
- _damnedKills = 0;
- }
+ void Initialize()
+ {
+ _theLichKing.Clear();
+ _bolvarFordragon.Clear();
+ _factionNPC.Clear();
+ _damnedKills = 0;
+ }
- void Reset() override
- {
- _events.Reset();
- Initialize();
- }
+ void Reset() override
+ {
+ _events.Reset();
+ Initialize();
+ }
- // IMPORTANT NOTE: This is triggered from per-GUID scripts
- // of The Damned SAI
- void SetData(uint32 type, uint32 data) override
+ // IMPORTANT NOTE: This is triggered from per-GUID scripts
+ // of The Damned SAI
+ void SetData(uint32 type, uint32 data) override
+ {
+ if (type == DATA_DAMNED_KILLS && data == 1)
+ {
+ if (++_damnedKills == 2)
{
- if (type == DATA_DAMNED_KILLS && data == 1)
+ if (Creature* theLichKing = me->FindNearestCreature(NPC_THE_LICH_KING_LH, 150.0f))
{
- if (++_damnedKills == 2)
+ if (Creature* bolvarFordragon = me->FindNearestCreature(NPC_HIGHLORD_BOLVAR_FORDRAGON_LH, 150.0f))
{
- if (Creature* theLichKing = me->FindNearestCreature(NPC_THE_LICH_KING_LH, 150.0f))
+ if (Creature* factionNPC = me->FindNearestCreature(_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_SE_HIGH_OVERLORD_SAURFANG : NPC_SE_MURADIN_BRONZEBEARD, 50.0f))
{
- if (Creature* bolvarFordragon = me->FindNearestCreature(NPC_HIGHLORD_BOLVAR_FORDRAGON_LH, 150.0f))
- {
- if (Creature* factionNPC = me->FindNearestCreature(_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_SE_HIGH_OVERLORD_SAURFANG : NPC_SE_MURADIN_BRONZEBEARD, 50.0f))
- {
- me->setActive(true);
- me->SetFarVisible(true);
- _theLichKing = theLichKing->GetGUID();
- theLichKing->setActive(true);
- theLichKing->SetFarVisible(true);
- _bolvarFordragon = bolvarFordragon->GetGUID();
- bolvarFordragon->setActive(true);
- bolvarFordragon->SetFarVisible(true);
- _factionNPC = factionNPC->GetGUID();
- factionNPC->setActive(true);
- factionNPC->SetFarVisible(true);
- }
- }
- }
-
- if (!_bolvarFordragon || !_theLichKing || !_factionNPC)
- return;
-
- Talk(SAY_TIRION_INTRO_1);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_2, 4s);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_3, 14s);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_4, 18s);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_5, 31s);
- _events.ScheduleEvent(EVENT_LK_INTRO_1, 35s);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_6, 51s);
- _events.ScheduleEvent(EVENT_LK_INTRO_2, 58s);
- _events.ScheduleEvent(EVENT_LK_INTRO_3, 74s);
- _events.ScheduleEvent(EVENT_LK_INTRO_4, 86s);
- _events.ScheduleEvent(EVENT_BOLVAR_INTRO_1, 100s);
- _events.ScheduleEvent(EVENT_LK_INTRO_5, 108s);
-
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE)
- {
- _events.ScheduleEvent(EVENT_SAURFANG_INTRO_1, 120s);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_H_7, 129s);
- _events.ScheduleEvent(EVENT_SAURFANG_INTRO_2, 139s);
- _events.ScheduleEvent(EVENT_SAURFANG_INTRO_3, 150s);
- _events.ScheduleEvent(EVENT_SAURFANG_INTRO_4, 162s);
- _events.ScheduleEvent(EVENT_SAURFANG_RUN, 170s);
- }
- else
- {
- _events.ScheduleEvent(EVENT_MURADIN_INTRO_1, 120s);
- _events.ScheduleEvent(EVENT_MURADIN_INTRO_2, 124s);
- _events.ScheduleEvent(EVENT_MURADIN_INTRO_3, 127s);
- _events.ScheduleEvent(EVENT_TIRION_INTRO_A_7, 136s);
- _events.ScheduleEvent(EVENT_MURADIN_INTRO_4, 144s);
- _events.ScheduleEvent(EVENT_MURADIN_INTRO_5, 151s);
- _events.ScheduleEvent(EVENT_MURADIN_RUN, 157s);
+ me->setActive(true);
+ me->SetFarVisible(true);
+ _theLichKing = theLichKing->GetGUID();
+ theLichKing->setActive(true);
+ theLichKing->SetFarVisible(true);
+ _bolvarFordragon = bolvarFordragon->GetGUID();
+ bolvarFordragon->setActive(true);
+ bolvarFordragon->SetFarVisible(true);
+ _factionNPC = factionNPC->GetGUID();
+ factionNPC->setActive(true);
+ factionNPC->SetFarVisible(true);
}
}
}
- }
- void UpdateAI(uint32 diff) override
- {
- if (_damnedKills != 2)
+ if (!_bolvarFordragon || !_theLichKing || !_factionNPC)
return;
- _events.Update(diff);
-
- while (uint32 eventId = _events.ExecuteEvent())
+ Talk(SAY_TIRION_INTRO_1);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_2, 4s);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_3, 14s);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_4, 18s);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_5, 31s);
+ _events.ScheduleEvent(EVENT_LK_INTRO_1, 35s);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_6, 51s);
+ _events.ScheduleEvent(EVENT_LK_INTRO_2, 58s);
+ _events.ScheduleEvent(EVENT_LK_INTRO_3, 74s);
+ _events.ScheduleEvent(EVENT_LK_INTRO_4, 86s);
+ _events.ScheduleEvent(EVENT_BOLVAR_INTRO_1, 100s);
+ _events.ScheduleEvent(EVENT_LK_INTRO_5, 108s);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE)
{
- switch (eventId)
- {
- case EVENT_TIRION_INTRO_2:
- me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
- break;
- case EVENT_TIRION_INTRO_3:
- Talk(SAY_TIRION_INTRO_2);
- break;
- case EVENT_TIRION_INTRO_4:
- me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
- break;
- case EVENT_TIRION_INTRO_5:
- Talk(SAY_TIRION_INTRO_3);
- break;
- case EVENT_LK_INTRO_1:
- me->HandleEmoteCommand(EMOTE_ONESHOT_POINT_NO_SHEATHE);
- if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
- theLichKing->AI()->Talk(SAY_LK_INTRO_1);
- break;
- case EVENT_TIRION_INTRO_6:
- Talk(SAY_TIRION_INTRO_4);
- break;
- case EVENT_LK_INTRO_2:
- if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
- theLichKing->AI()->Talk(SAY_LK_INTRO_2);
- break;
- case EVENT_LK_INTRO_3:
- if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
- theLichKing->AI()->Talk(SAY_LK_INTRO_3);
- break;
- case EVENT_LK_INTRO_4:
- if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
- theLichKing->AI()->Talk(SAY_LK_INTRO_4);
- break;
- case EVENT_BOLVAR_INTRO_1:
- if (Creature* bolvarFordragon = ObjectAccessor::GetCreature(*me, _bolvarFordragon))
- {
- bolvarFordragon->AI()->Talk(SAY_BOLVAR_INTRO_1);
- bolvarFordragon->setActive(false);
- bolvarFordragon->SetFarVisible(false);
- }
- break;
- case EVENT_LK_INTRO_5:
- if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
- {
- theLichKing->AI()->Talk(SAY_LK_INTRO_5);
- theLichKing->setActive(false);
- theLichKing->SetFarVisible(false);
- }
- break;
- case EVENT_SAURFANG_INTRO_1:
- if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
- saurfang->AI()->Talk(SAY_SAURFANG_INTRO_1);
- break;
- case EVENT_TIRION_INTRO_H_7:
- Talk(SAY_TIRION_INTRO_H_5);
- break;
- case EVENT_SAURFANG_INTRO_2:
- if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
- saurfang->AI()->Talk(SAY_SAURFANG_INTRO_2);
- break;
- case EVENT_SAURFANG_INTRO_3:
- if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
- saurfang->AI()->Talk(SAY_SAURFANG_INTRO_3);
- break;
- case EVENT_SAURFANG_INTRO_4:
- if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
- saurfang->AI()->Talk(SAY_SAURFANG_INTRO_4);
- break;
- case EVENT_MURADIN_RUN:
- case EVENT_SAURFANG_RUN:
- if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC))
- factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false);
- me->setActive(false);
- _damnedKills = 3;
- break;
- case EVENT_MURADIN_INTRO_1:
- if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
- muradin->AI()->Talk(SAY_MURADIN_INTRO_1);
- break;
- case EVENT_MURADIN_INTRO_2:
- if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
- muradin->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
- break;
- case EVENT_MURADIN_INTRO_3:
- if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
- muradin->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
- break;
- case EVENT_TIRION_INTRO_A_7:
- Talk(SAY_TIRION_INTRO_A_5);
- break;
- case EVENT_MURADIN_INTRO_4:
- if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
- muradin->AI()->Talk(SAY_MURADIN_INTRO_2);
- break;
- case EVENT_MURADIN_INTRO_5:
- if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
- muradin->AI()->Talk(SAY_MURADIN_INTRO_3);
- break;
- default:
- break;
- }
+ _events.ScheduleEvent(EVENT_SAURFANG_INTRO_1, 120s);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_H_7, 129s);
+ _events.ScheduleEvent(EVENT_SAURFANG_INTRO_2, 139s);
+ _events.ScheduleEvent(EVENT_SAURFANG_INTRO_3, 150s);
+ _events.ScheduleEvent(EVENT_SAURFANG_INTRO_4, 162s);
+ _events.ScheduleEvent(EVENT_SAURFANG_RUN, 170s);
+ }
+ else
+ {
+ _events.ScheduleEvent(EVENT_MURADIN_INTRO_1, 120s);
+ _events.ScheduleEvent(EVENT_MURADIN_INTRO_2, 124s);
+ _events.ScheduleEvent(EVENT_MURADIN_INTRO_3, 127s);
+ _events.ScheduleEvent(EVENT_TIRION_INTRO_A_7, 136s);
+ _events.ScheduleEvent(EVENT_MURADIN_INTRO_4, 144s);
+ _events.ScheduleEvent(EVENT_MURADIN_INTRO_5, 151s);
+ _events.ScheduleEvent(EVENT_MURADIN_RUN, 157s);
}
}
+ }
+ }
- private:
- EventMap _events;
- InstanceScript* const _instance;
- ObjectGuid _theLichKing;
- ObjectGuid _bolvarFordragon;
- ObjectGuid _factionNPC;
- uint16 _damnedKills;
- };
+ void UpdateAI(uint32 diff) override
+ {
+ if (_damnedKills != 2)
+ return;
- CreatureAI* GetAI(Creature* creature) const override
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
{
- return GetIcecrownCitadelAI<npc_highlord_tirion_fordringAI>(creature);
+ switch (eventId)
+ {
+ case EVENT_TIRION_INTRO_2:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
+ break;
+ case EVENT_TIRION_INTRO_3:
+ Talk(SAY_TIRION_INTRO_2);
+ break;
+ case EVENT_TIRION_INTRO_4:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
+ break;
+ case EVENT_TIRION_INTRO_5:
+ Talk(SAY_TIRION_INTRO_3);
+ break;
+ case EVENT_LK_INTRO_1:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_POINT_NO_SHEATHE);
+ if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
+ theLichKing->AI()->Talk(SAY_LK_INTRO_1);
+ break;
+ case EVENT_TIRION_INTRO_6:
+ Talk(SAY_TIRION_INTRO_4);
+ break;
+ case EVENT_LK_INTRO_2:
+ if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
+ theLichKing->AI()->Talk(SAY_LK_INTRO_2);
+ break;
+ case EVENT_LK_INTRO_3:
+ if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
+ theLichKing->AI()->Talk(SAY_LK_INTRO_3);
+ break;
+ case EVENT_LK_INTRO_4:
+ if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
+ theLichKing->AI()->Talk(SAY_LK_INTRO_4);
+ break;
+ case EVENT_BOLVAR_INTRO_1:
+ if (Creature* bolvarFordragon = ObjectAccessor::GetCreature(*me, _bolvarFordragon))
+ {
+ bolvarFordragon->AI()->Talk(SAY_BOLVAR_INTRO_1);
+ bolvarFordragon->setActive(false);
+ bolvarFordragon->SetFarVisible(false);
+ }
+ break;
+ case EVENT_LK_INTRO_5:
+ if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing))
+ {
+ theLichKing->AI()->Talk(SAY_LK_INTRO_5);
+ theLichKing->setActive(false);
+ theLichKing->SetFarVisible(false);
+ }
+ break;
+ case EVENT_SAURFANG_INTRO_1:
+ if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
+ saurfang->AI()->Talk(SAY_SAURFANG_INTRO_1);
+ break;
+ case EVENT_TIRION_INTRO_H_7:
+ Talk(SAY_TIRION_INTRO_H_5);
+ break;
+ case EVENT_SAURFANG_INTRO_2:
+ if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
+ saurfang->AI()->Talk(SAY_SAURFANG_INTRO_2);
+ break;
+ case EVENT_SAURFANG_INTRO_3:
+ if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
+ saurfang->AI()->Talk(SAY_SAURFANG_INTRO_3);
+ break;
+ case EVENT_SAURFANG_INTRO_4:
+ if (Creature* saurfang = ObjectAccessor::GetCreature(*me, _factionNPC))
+ saurfang->AI()->Talk(SAY_SAURFANG_INTRO_4);
+ break;
+ case EVENT_MURADIN_RUN:
+ case EVENT_SAURFANG_RUN:
+ if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC))
+ factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false);
+ me->setActive(false);
+ _damnedKills = 3;
+ break;
+ case EVENT_MURADIN_INTRO_1:
+ if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
+ muradin->AI()->Talk(SAY_MURADIN_INTRO_1);
+ break;
+ case EVENT_MURADIN_INTRO_2:
+ if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
+ muradin->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
+ break;
+ case EVENT_MURADIN_INTRO_3:
+ if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
+ muradin->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
+ break;
+ case EVENT_TIRION_INTRO_A_7:
+ Talk(SAY_TIRION_INTRO_A_5);
+ break;
+ case EVENT_MURADIN_INTRO_4:
+ if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
+ muradin->AI()->Talk(SAY_MURADIN_INTRO_2);
+ break;
+ case EVENT_MURADIN_INTRO_5:
+ if (Creature* muradin = ObjectAccessor::GetCreature(*me, _factionNPC))
+ muradin->AI()->Talk(SAY_MURADIN_INTRO_3);
+ break;
+ default:
+ break;
+ }
}
+ }
+
+private:
+ EventMap _events;
+ InstanceScript* const _instance;
+ ObjectGuid _theLichKing;
+ ObjectGuid _bolvarFordragon;
+ ObjectGuid _factionNPC;
+ uint16 _damnedKills;
};
class DeathPlagueTargetSelector
@@ -453,149 +442,116 @@ private:
Unit const* _me;
};
-class npc_rotting_frost_giant : public CreatureScript
+struct npc_rotting_frost_giant : public ScriptedAI
{
- public:
- npc_rotting_frost_giant() : CreatureScript("npc_rotting_frost_giant") { }
+ npc_rotting_frost_giant(Creature* creature) : ScriptedAI(creature) { }
- struct npc_rotting_frost_giantAI : public ScriptedAI
- {
- npc_rotting_frost_giantAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- _events.Reset();
- _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15s);
- _events.ScheduleEvent(EVENT_STOMP, 5s, 8s);
- _events.ScheduleEvent(EVENT_ARCTIC_BREATH, 10s, 15s);
- }
+ void Reset() override
+ {
+ _events.Reset();
+ _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15s);
+ _events.ScheduleEvent(EVENT_STOMP, 5s, 8s);
+ _events.ScheduleEvent(EVENT_ARCTIC_BREATH, 10s, 15s);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _events.Reset();
- if (InstanceScript* instance = me->GetInstanceScript())
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DEATH_PLAGUE_AURA);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _events.Reset();
+ if (InstanceScript* instance = me->GetInstanceScript())
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DEATH_PLAGUE_AURA);
+ }
- 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)
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_DEATH_PLAGUE:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, DeathPlagueTargetSelector(me)))
{
- case EVENT_DEATH_PLAGUE:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, DeathPlagueTargetSelector(me)))
- {
- Talk(EMOTE_DEATH_PLAGUE_WARNING, target);
- DoCast(target, SPELL_DEATH_PLAGUE_AURA);
- }
- _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15s);
- break;
- case EVENT_STOMP:
- DoCastVictim(SPELL_STOMP);
- _events.ScheduleEvent(EVENT_STOMP, 15s, 18s);
- break;
- case EVENT_ARCTIC_BREATH:
- DoCastVictim(SPELL_ARCTIC_BREATH);
- _events.ScheduleEvent(EVENT_ARCTIC_BREATH, 26s, 33s);
- break;
- default:
- break;
+ Talk(EMOTE_DEATH_PLAGUE_WARNING, target);
+ DoCast(target, SPELL_DEATH_PLAGUE_AURA);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15s);
+ break;
+ case EVENT_STOMP:
+ DoCastVictim(SPELL_STOMP);
+ _events.ScheduleEvent(EVENT_STOMP, 15s, 18s);
+ break;
+ case EVENT_ARCTIC_BREATH:
+ DoCastVictim(SPELL_ARCTIC_BREATH);
+ _events.ScheduleEvent(EVENT_ARCTIC_BREATH, 26s, 33s);
+ break;
+ default:
+ break;
}
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetIcecrownCitadelAI<npc_rotting_frost_giantAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ EventMap _events;
};
-class npc_frost_freeze_trap : public CreatureScript
+struct npc_frost_freeze_trap: public ScriptedAI
{
- public:
- npc_frost_freeze_trap() : CreatureScript("npc_frost_freeze_trap") { }
+ npc_frost_freeze_trap(Creature* creature) : ScriptedAI(creature)
+ {
+ SetCombatMovement(false);
+ }
- struct npc_frost_freeze_trapAI: public ScriptedAI
+ void DoAction(int32 action) override
+ {
+ switch (action)
{
- npc_frost_freeze_trapAI(Creature* creature) : ScriptedAI(creature)
- {
- SetCombatMovement(false);
- }
-
- void DoAction(int32 action) override
- {
- switch (action)
- {
- case 1000:
- case 11000:
- _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, Milliseconds(action));
- break;
- default:
- break;
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- _events.Update(diff);
-
- if (_events.ExecuteEvent() == EVENT_ACTIVATE_TRAP)
- {
- DoCast(me, SPELL_COLDFLAME_JETS);
- _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, 22s);
- }
- }
+ case 1000:
+ case 11000:
+ _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, Milliseconds(action));
+ break;
+ default:
+ break;
+ }
+ }
- private:
- EventMap _events;
- };
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
- CreatureAI* GetAI(Creature* creature) const override
+ if (_events.ExecuteEvent() == EVENT_ACTIVATE_TRAP)
{
- return GetIcecrownCitadelAI<npc_frost_freeze_trapAI>(creature);
+ DoCast(me, SPELL_COLDFLAME_JETS);
+ _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, 22s);
}
+ }
+
+private:
+ EventMap _events;
};
-class npc_alchemist_adrianna : public CreatureScript
+struct npc_alchemist_adrianna : public ScriptedAI
{
- public:
- npc_alchemist_adrianna() : CreatureScript("npc_alchemist_adrianna") { }
-
- struct npc_alchemist_adriannaAI : public ScriptedAI
- {
- npc_alchemist_adriannaAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_alchemist_adrianna(Creature* creature) : ScriptedAI(creature) { }
- bool OnGossipHello(Player* player) override
- {
- if (!me->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !me->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
- if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
- DoCastSelf(SPELL_HARVEST_BLIGHT_SPECIMEN, false);
- return false;
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetIcecrownCitadelAI<npc_alchemist_adriannaAI>(creature);
- }
+ bool OnGossipHello(Player* player) override
+ {
+ if (!me->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !me->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
+ if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
+ DoCastSelf(SPELL_HARVEST_BLIGHT_SPECIMEN, false);
+ return false;
+ }
};
class npc_arthas_teleport_visual : public CreatureScript
@@ -1344,110 +1300,88 @@ class spell_generic_remove_empowered_blood : public SpellScript
}
};
-class spell_icc_stoneform : public SpellScriptLoader
+class spell_icc_stoneform : public AuraScript
{
- public:
- spell_icc_stoneform() : SpellScriptLoader("spell_icc_stoneform") { }
+ PrepareAuraScript(spell_icc_stoneform);
- class spell_icc_stoneform_AuraScript : public AuraScript
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Creature* target = GetTarget()->ToCreature())
{
- PrepareAuraScript(spell_icc_stoneform_AuraScript);
-
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Creature* target = GetTarget()->ToCreature())
- {
- target->SetReactState(REACT_PASSIVE);
- target->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- target->SetImmuneToPC(true);
- target->SetEmoteState(EMOTE_STATE_CUSTOM_SPELL_02);
- }
- }
-
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Creature* target = GetTarget()->ToCreature())
- {
- target->SetReactState(REACT_AGGRESSIVE);
- target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- target->SetImmuneToPC(false);
- target->SetEmoteState(EMOTE_ONESHOT_NONE);
- }
- }
-
- void Register() override
- {
- OnEffectApply += AuraEffectApplyFn(spell_icc_stoneform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectRemove += AuraEffectRemoveFn(spell_icc_stoneform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
+ target->SetReactState(REACT_PASSIVE);
+ target->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ target->SetImmuneToPC(true);
+ target->SetEmoteState(EMOTE_STATE_CUSTOM_SPELL_02);
+ }
+ }
- AuraScript* GetAuraScript() const override
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Creature* target = GetTarget()->ToCreature())
{
- return new spell_icc_stoneform_AuraScript();
+ target->SetReactState(REACT_AGGRESSIVE);
+ target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ target->SetImmuneToPC(false);
+ target->SetEmoteState(EMOTE_ONESHOT_NONE);
}
+ }
+
+ void Register() override
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_icc_stoneform::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ OnEffectRemove += AuraEffectRemoveFn(spell_icc_stoneform::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
};
-class spell_icc_sprit_alarm : public SpellScriptLoader
+class spell_icc_sprit_alarm : public SpellScript
{
- public:
- spell_icc_sprit_alarm() : SpellScriptLoader("spell_icc_sprit_alarm") { }
+ PrepareSpellScript(spell_icc_sprit_alarm);
- class spell_icc_sprit_alarm_SpellScript : public SpellScript
+ void HandleEvent(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ uint32 trapId = 0;
+ switch (GetEffectInfo().MiscValue)
{
- PrepareSpellScript(spell_icc_sprit_alarm_SpellScript);
-
- void HandleEvent(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
- uint32 trapId = 0;
- switch (GetEffectInfo().MiscValue)
- {
- case EVENT_AWAKEN_WARD_1:
- trapId = GO_SPIRIT_ALARM_1;
- break;
- case EVENT_AWAKEN_WARD_2:
- trapId = GO_SPIRIT_ALARM_2;
- break;
- case EVENT_AWAKEN_WARD_3:
- trapId = GO_SPIRIT_ALARM_3;
- break;
- case EVENT_AWAKEN_WARD_4:
- trapId = GO_SPIRIT_ALARM_4;
- break;
- default:
- return;
- }
+ case EVENT_AWAKEN_WARD_1:
+ trapId = GO_SPIRIT_ALARM_1;
+ break;
+ case EVENT_AWAKEN_WARD_2:
+ trapId = GO_SPIRIT_ALARM_2;
+ break;
+ case EVENT_AWAKEN_WARD_3:
+ trapId = GO_SPIRIT_ALARM_3;
+ break;
+ case EVENT_AWAKEN_WARD_4:
+ trapId = GO_SPIRIT_ALARM_4;
+ break;
+ default:
+ return;
+ }
- if (GameObject* trap = GetGObjCaster()->FindNearestGameObject(trapId, 5.0f))
- trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime() / IN_MILLISECONDS);
+ if (GameObject* trap = GetGObjCaster()->FindNearestGameObject(trapId, 5.0f))
+ trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime() / IN_MILLISECONDS);
- std::list<Creature*> wards;
- GetGObjCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);
- wards.sort(Trinity::ObjectDistanceOrderPred(GetGObjCaster()));
- for (std::list<Creature*>::iterator itr = wards.begin(); itr != wards.end(); ++itr)
- {
- if ((*itr)->IsAlive() && (*itr)->HasAura(SPELL_STONEFORM))
- {
- (*itr)->AI()->Talk(SAY_TRAP_ACTIVATE);
- (*itr)->RemoveAurasDueToSpell(SPELL_STONEFORM);
- if (Unit* target = (*itr)->SelectNearestTarget(150.0f))
- (*itr)->AI()->AttackStart(target);
- break;
- }
- }
- }
-
- void Register() override
+ std::list<Creature*> wards;
+ GetGObjCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);
+ wards.sort(Trinity::ObjectDistanceOrderPred(GetGObjCaster()));
+ for (std::list<Creature*>::iterator itr = wards.begin(); itr != wards.end(); ++itr)
+ {
+ if ((*itr)->IsAlive() && (*itr)->HasAura(SPELL_STONEFORM))
{
- OnEffectHit += SpellEffectFn(spell_icc_sprit_alarm_SpellScript::HandleEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT);
+ (*itr)->AI()->Talk(SAY_TRAP_ACTIVATE);
+ (*itr)->RemoveAurasDueToSpell(SPELL_STONEFORM);
+ if (Unit* target = (*itr)->SelectNearestTarget(150.0f))
+ (*itr)->AI()->AttackStart(target);
+ break;
}
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_icc_sprit_alarm_SpellScript();
}
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_icc_sprit_alarm::HandleEvent, EFFECT_2, SPELL_EFFECT_SEND_EVENT);
+ }
};
// 72864 - Death Plague
@@ -1515,65 +1449,43 @@ private:
std::list<WorldObject*> _sharedList;
};
-class spell_icc_harvest_blight_specimen : public SpellScriptLoader
+class spell_icc_harvest_blight_specimen : public SpellScript
{
- public:
- spell_icc_harvest_blight_specimen() : SpellScriptLoader("spell_icc_harvest_blight_specimen") { }
-
- class spell_icc_harvest_blight_specimen_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_icc_harvest_blight_specimen_SpellScript);
-
- void HandleScript(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
- GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
- }
+ PrepareSpellScript(spell_icc_harvest_blight_specimen);
- void HandleQuestComplete(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
- }
+ void HandleScript(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
+ }
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleQuestComplete, EFFECT_1, SPELL_EFFECT_QUEST_COMPLETE);
- }
- };
+ void HandleQuestComplete(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_icc_harvest_blight_specimen_SpellScript();
- }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen::HandleQuestComplete, EFFECT_1, SPELL_EFFECT_QUEST_COMPLETE);
+ }
};
// 72585 - Soul Missile
-class spell_icc_soul_missile : public SpellScriptLoader
+class spell_icc_soul_missile : public SpellScript
{
- public:
- spell_icc_soul_missile() : SpellScriptLoader("spell_icc_soul_missile") { }
+ PrepareSpellScript(spell_icc_soul_missile);
- class spell_icc_soul_missile_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_icc_soul_missile_SpellScript);
-
- void RelocateDest(SpellDestination& dest)
- {
- static Position const offset = { 0.0f, 0.0f, 200.0f, 0.0f };
- dest.RelocateOffset(offset);
- }
-
- void Register() override
- {
- OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_icc_soul_missile_SpellScript::RelocateDest, EFFECT_0, TARGET_DEST_CASTER);
- }
- };
+ void RelocateDest(SpellDestination& dest)
+ {
+ static Position const offset = { 0.0f, 0.0f, 200.0f, 0.0f };
+ dest.RelocateOffset(offset);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_icc_soul_missile_SpellScript();
- }
+ void Register() override
+ {
+ OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_icc_soul_missile::RelocateDest, EFFECT_0, TARGET_DEST_CASTER);
+ }
};
spell_trigger_spell_from_caster::spell_trigger_spell_from_caster(uint32 triggerId, TriggerCastFlags triggerFlags /*= TRIGGERED_FULL_MASK*/)
@@ -1678,10 +1590,11 @@ class at_icc_nerubar_broodkeeper : public OnlyOnceAreaTriggerScript
void AddSC_icecrown_citadel()
{
- new npc_highlord_tirion_fordring_lh();
- new npc_rotting_frost_giant();
- new npc_frost_freeze_trap();
- new npc_alchemist_adrianna();
+ // Creatures
+ RegisterIcecrownCitadelCreatureAI(npc_highlord_tirion_fordring_lh);
+ RegisterIcecrownCitadelCreatureAI(npc_rotting_frost_giant);
+ RegisterIcecrownCitadelCreatureAI(npc_frost_freeze_trap);
+ RegisterIcecrownCitadelCreatureAI(npc_alchemist_adrianna);
new npc_arthas_teleport_visual();
RegisterIcecrownCitadelCreatureAI(npc_entrance_faction_leader);
RegisterIcecrownCitadelCreatureAI(npc_icc_orb_controller);
@@ -1692,17 +1605,23 @@ void AddSC_icecrown_citadel()
RegisterIcecrownCitadelCreatureAI(npc_darkfallen_advisor);
RegisterIcecrownCitadelCreatureAI(npc_darkfallen_tactician);
RegisterIcecrownCitadelCreatureAI(npc_icc_nerubar_broodkeeper);
+
+ // GameObjects
RegisterGameObjectAI(go_empowering_blood_orb);
+
+ // Spells
RegisterSpellScript(spell_icc_empowered_blood);
RegisterSpellScript(spell_icc_empowered_blood_3);
RegisterSpellScript(spell_icc_siphon_essence);
RegisterSpellScript(spell_darkfallen_blood_mirror);
RegisterSpellScript(spell_generic_remove_empowered_blood);
- new spell_icc_stoneform();
- new spell_icc_sprit_alarm();
+ RegisterSpellScript(spell_icc_stoneform);
+ RegisterSpellScript(spell_icc_sprit_alarm);
RegisterSpellScript(spell_frost_giant_death_plague);
- new spell_icc_harvest_blight_specimen();
- new spell_icc_soul_missile();
+ RegisterSpellScript(spell_icc_harvest_blight_specimen);
+ RegisterSpellScript(spell_icc_soul_missile);
+
+ // AreaTriggers
new at_icc_saurfang_portal();
new at_icc_shutdown_traps();
new at_icc_start_blood_quickening();