diff options
author | Shauren <shauren.trinity@gmail.com> | 2011-03-11 11:07:23 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2011-03-11 11:07:23 +0100 |
commit | 20b44e82d5a0ba86e1b8819e5d7cad4681ba36f5 (patch) | |
tree | ff5732811cbd06cedb6a5dd5391ebd4ecfb976ff /src | |
parent | 4f892bbba11e6737f5a0461af5d0ded6cb313a51 (diff) |
Scripts/Icecrown Citadel: Added intro scene at Light's Hammer and SAI for The Damned
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp | 182 | ||||
-rwxr-xr-x | src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h | 3 |
2 files changed, 181 insertions, 4 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 4ef35aaa1d8..a896f63d856 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -31,6 +31,22 @@ enum Texts { + // Highlord Tirion Fordring (at Light's Hammer) + SAY_TIRION_INTRO_1 = 0, + SAY_TIRION_INTRO_2 = 1, + SAY_TIRION_INTRO_3 = 2, + SAY_TIRION_INTRO_4 = 3, + + // The Lich King (at Light's Hammer) + SAY_LK_INTRO_1 = 0, + SAY_LK_INTRO_2 = 1, + SAY_LK_INTRO_3 = 2, + SAY_LK_INTRO_4 = 3, + SAY_LK_INTRO_5 = 4, + + // Highlord Bolvar Fordragon (at Light's Hammer) + SAY_BOLVAR_INTRO_1 = 0, + // Rotting Frost Giant EMOTE_DEATH_PLAGUE_WARNING = 0, }; @@ -55,13 +71,170 @@ enum Spells enum Events { + // Highlord Tirion Fordring (at Light's Hammer) + // The Lich King (at Light's Hammer) + // Highlord Bolvar Fordragon (at Light's Hammer) + EVENT_TIRION_INTRO_2 = 1, // EMOTE + EVENT_TIRION_INTRO_3 = 2, + EVENT_TIRION_INTRO_4 = 3, // EMOTE + EVENT_TIRION_INTRO_5 = 4, + EVENT_LK_INTRO_1 = 5, // TIRION EMOTE + EVENT_TIRION_INTRO_6 = 6, + EVENT_LK_INTRO_2 = 7, + EVENT_LK_INTRO_3 = 8, + EVENT_LK_INTRO_4 = 9, + EVENT_BOLVAR_INTRO_1 = 10, + EVENT_LK_INTRO_5 = 11, + // Rotting Frost Giant - EVENT_DEATH_PLAGUE = 1, - EVENT_STOMP = 2, - EVENT_ARCTIC_BREATH = 3, + EVENT_DEATH_PLAGUE = 12, + EVENT_STOMP = 13, + EVENT_ARCTIC_BREATH = 14, // Frost Freeze Trap - EVENT_ACTIVATE_TRAP = 4, + EVENT_ACTIVATE_TRAP = 15, +}; + +enum DataTypesICC +{ + DATA_DAMNED_KILLS = 1, +}; + +// at Light's Hammer +class npc_highlord_tirion_fordring_lh : public CreatureScript +{ + 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) + { + } + + void Reset() + { + events.Reset(); + _theLichKing = 0; + _bolvarFordragon = 0; + _damnedKills = 0; + } + + // IMPORTANT NOTE: This is triggered from per-GUID scripts + // of The Damned SAI + void SetData(uint32 type, uint32 data) + { + if (type == DATA_DAMNED_KILLS && data == 1) + { + if (++_damnedKills == 2) + { + if (Creature* theLichKing = me->FindNearestCreature(NPC_THE_LICH_KING_LH, 150.0f)) + { + if (Creature* bolvarFordragon = me->FindNearestCreature(NPC_HIGHLORD_BOLVAR_FORDRAGON_LH, 150.0f)) + { + me->setActive(true); + _theLichKing = theLichKing->GetGUID(); + theLichKing->setActive(true); + _bolvarFordragon = bolvarFordragon->GetGUID(); + bolvarFordragon->setActive(true); + } + } + + if (!_bolvarFordragon || !_theLichKing) + return; + + Talk(SAY_TIRION_INTRO_1); + events.ScheduleEvent(EVENT_TIRION_INTRO_2, 4000); + events.ScheduleEvent(EVENT_TIRION_INTRO_3, 14000); + events.ScheduleEvent(EVENT_TIRION_INTRO_4, 18000); + events.ScheduleEvent(EVENT_TIRION_INTRO_5, 31000); + events.ScheduleEvent(EVENT_LK_INTRO_1, 35000); + events.ScheduleEvent(EVENT_TIRION_INTRO_6, 51000); + events.ScheduleEvent(EVENT_LK_INTRO_2, 58000); + events.ScheduleEvent(EVENT_LK_INTRO_3, 74000); + events.ScheduleEvent(EVENT_LK_INTRO_4, 86000); + events.ScheduleEvent(EVENT_BOLVAR_INTRO_1, 100000); + events.ScheduleEvent(EVENT_LK_INTRO_5, 108000); + } + } + } + + void UpdateAI(uint32 const diff) + { + if (_damnedKills != 2) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + 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_NOSHEATHE); + 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); + } + break; + case EVENT_LK_INTRO_5: + if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _theLichKing)) + { + theLichKing->AI()->Talk(SAY_LK_INTRO_5); + theLichKing->setActive(false); + me->setActive(false); + _damnedKills = 3; + } + break; + default: + break; + } + } + } + + private: + EventMap events; + uint64 _theLichKing; + uint64 _bolvarFordragon; + uint16 _damnedKills; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_highlord_tirion_fordringAI(creature); + } }; class npc_rotting_frost_giant : public CreatureScript @@ -367,6 +540,7 @@ class at_icc_shutdown_traps : public AreaTriggerScript void AddSC_icecrown_citadel() { + new npc_highlord_tirion_fordring_lh(); new npc_rotting_frost_giant(); new npc_frost_freeze_trap(); new npc_alchemist_adrianna(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 46266551b69..f9c88f3c885 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -80,6 +80,9 @@ enum DataTypes enum CreaturesIds { // At Light's Hammer + NPC_HIGHLORD_TIRION_FORDRING_LH = 37119, + NPC_THE_LICH_KING_LH = 37181, + NPC_HIGHLORD_BOLVAR_FORDRAGON_LH = 37183, NPC_KOR_KRON_GENERAL = 37189, NPC_ALLIANCE_COMMANDER = 37190, NPC_TORTUNOK = 37992, // Druid Armor H |