diff options
author | Shauren <shauren.trinity@gmail.com> | 2011-03-11 19:35:22 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2011-03-11 19:35:22 +0100 |
commit | 9b2d62b72d53f487a84230dba51eb1e47e32145a (patch) | |
tree | fc8fbe4f81789b278e2910ac8253b5689a1613b1 /src | |
parent | 190ef1c2ef0eac90f90d7f84e8ed20f020b2be11 (diff) |
Scripts/Icecrown Citadel: Added missing faction specific part of intro scene at Light's Hammer
Diffstat (limited to 'src')
4 files changed, 183 insertions, 57 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 627895a5c87..79442e890cd 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -206,7 +206,8 @@ enum MovePoints POINT_CHARGE = 3781302, POINT_CHOKE = 3781303, POINT_CORPSE = 3781304, - POINT_FINAL = 3781305 + POINT_FINAL = 3781305, + POINT_EXIT = 5, // waypoint id }; static const Position deathbringerPos = {-496.3542f, 2211.33f, 541.1138f, 0.0f}; @@ -638,38 +639,46 @@ class npc_high_overlord_saurfang_icc : public CreatureScript void MovementInform(uint32 type, uint32 id) { - if (type != POINT_MOTION_TYPE) - return; - - switch (id) + if (type == POINT_MOTION_TYPE) { - case POINT_FIRST_STEP: - me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); - Talk(SAY_INTRO_HORDE_3); - events.ScheduleEvent(EVENT_INTRO_HORDE_5, 15500, 0, PHASE_INTRO_H); - events.ScheduleEvent(EVENT_INTRO_HORDE_6, 29500, 0, PHASE_INTRO_H); - events.ScheduleEvent(EVENT_INTRO_HORDE_7, 43800, 0, PHASE_INTRO_H); - events.ScheduleEvent(EVENT_INTRO_HORDE_8, 47000, 0, PHASE_INTRO_H); - if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) - deathbringer->AI()->DoAction(ACTION_CONTINUE_INTRO); - break; - case POINT_CORPSE: - if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) - { - deathbringer->CastSpell(me, SPELL_RIDE_VEHICLE, true); // for the packet logs. - deathbringer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - deathbringer->setDeathState(ALIVE); - } - events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 1000); // move - events.ScheduleEvent(EVENT_OUTRO_HORDE_6, 4000); // say - break; - case POINT_FINAL: - if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) - deathbringer->DespawnOrUnsummon(); - me->DespawnOrUnsummon(); - break; - default: - break; + switch (id) + { + case POINT_FIRST_STEP: + me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); + Talk(SAY_INTRO_HORDE_3); + events.ScheduleEvent(EVENT_INTRO_HORDE_5, 15500, 0, PHASE_INTRO_H); + events.ScheduleEvent(EVENT_INTRO_HORDE_6, 29500, 0, PHASE_INTRO_H); + events.ScheduleEvent(EVENT_INTRO_HORDE_7, 43800, 0, PHASE_INTRO_H); + events.ScheduleEvent(EVENT_INTRO_HORDE_8, 47000, 0, PHASE_INTRO_H); + if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) + deathbringer->AI()->DoAction(ACTION_CONTINUE_INTRO); + break; + case POINT_CORPSE: + if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) + { + deathbringer->CastSpell(me, SPELL_RIDE_VEHICLE, true); // for the packet logs. + deathbringer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + deathbringer->setDeathState(ALIVE); + } + events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 1000); // move + events.ScheduleEvent(EVENT_OUTRO_HORDE_6, 4000); // say + break; + case POINT_FINAL: + if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) + deathbringer->DespawnOrUnsummon(); + me->DespawnOrUnsummon(); + break; + default: + break; + } + } + else if (type == WAYPOINT_MOTION_TYPE && id == POINT_EXIT) + { + std::list<Creature*> guards; + GetCreatureListWithEntryInGrid(guards, me, NPC_KOR_KRON_GENERAL, 50.0f); + for (std::list<Creature*>::iterator itr = guards.begin(); itr != guards.end(); ++itr) + (*itr)->DespawnOrUnsummon(); + me->DespawnOrUnsummon(); } } @@ -842,14 +851,22 @@ class npc_muradin_bronzebeard_icc : public CreatureScript void MovementInform(uint32 type, uint32 id) { - if (type != POINT_MOTION_TYPE || id != POINT_FIRST_STEP) - return; - - me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); - Talk(SAY_INTRO_ALLIANCE_4); - events.ScheduleEvent(EVENT_INTRO_ALLIANCE_5, 5000, 0, PHASE_INTRO_A); - if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) - deathbringer->AI()->DoAction(ACTION_CONTINUE_INTRO); + if (type == POINT_MOTION_TYPE && id == POINT_FIRST_STEP) + { + me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); + Talk(SAY_INTRO_ALLIANCE_4); + events.ScheduleEvent(EVENT_INTRO_ALLIANCE_5, 5000, 0, PHASE_INTRO_A); + if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) + deathbringer->AI()->DoAction(ACTION_CONTINUE_INTRO); + } + else if (type == WAYPOINT_MOTION_TYPE && id == POINT_EXIT) + { + std::list<Creature*> guards; + GetCreatureListWithEntryInGrid(guards, me, NPC_ALLIANCE_COMMANDER, 50.0f); + for (std::list<Creature*>::iterator itr = guards.begin(); itr != guards.end(); ++itr) + (*itr)->DespawnOrUnsummon(); + me->DespawnOrUnsummon(); + } } void UpdateAI(const uint32 diff) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index a896f63d856..6cf8e170450 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -36,6 +36,8 @@ enum Texts SAY_TIRION_INTRO_2 = 1, SAY_TIRION_INTRO_3 = 2, SAY_TIRION_INTRO_4 = 3, + SAY_TIRION_INTRO_H_5 = 4, + SAY_TIRION_INTRO_A_5 = 5, // The Lich King (at Light's Hammer) SAY_LK_INTRO_1 = 0, @@ -47,6 +49,17 @@ enum Texts // Highlord Bolvar Fordragon (at Light's Hammer) SAY_BOLVAR_INTRO_1 = 0, + // High Overlord Saurfang (at Light's Hammer) + SAY_SAURFANG_INTRO_1 = 15, + SAY_SAURFANG_INTRO_2 = 16, + SAY_SAURFANG_INTRO_3 = 17, + SAY_SAURFANG_INTRO_4 = 18, + + // Muradin Bronzebeard (at Light's Hammer) + SAY_MURADIN_INTRO_1 = 13, + SAY_MURADIN_INTRO_2 = 14, + SAY_MURADIN_INTRO_3 = 15, + // Rotting Frost Giant EMOTE_DEATH_PLAGUE_WARNING = 0, }; @@ -74,25 +87,40 @@ 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 + // High Overlord Saurfang (at Light's Hammer) + // Muradin Bronzebeard (at Light's Hammer) + EVENT_TIRION_INTRO_2 = 1, EVENT_TIRION_INTRO_3 = 2, - EVENT_TIRION_INTRO_4 = 3, // EMOTE + EVENT_TIRION_INTRO_4 = 3, EVENT_TIRION_INTRO_5 = 4, - EVENT_LK_INTRO_1 = 5, // TIRION EMOTE + EVENT_LK_INTRO_1 = 5, 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, + EVENT_SAURFANG_INTRO_1 = 12, + EVENT_TIRION_INTRO_H_7 = 13, + EVENT_SAURFANG_INTRO_2 = 14, + EVENT_SAURFANG_INTRO_3 = 15, + EVENT_SAURFANG_INTRO_4 = 16, + EVENT_SAURFANG_RUN = 17, + EVENT_MURADIN_INTRO_1 = 18, + EVENT_MURADIN_INTRO_2 = 19, + EVENT_MURADIN_INTRO_3 = 20, + EVENT_TIRION_INTRO_A_7 = 21, + EVENT_MURADIN_INTRO_4 = 22, + EVENT_MURADIN_INTRO_5 = 23, + EVENT_MURADIN_RUN = 24, // Rotting Frost Giant - EVENT_DEATH_PLAGUE = 12, - EVENT_STOMP = 13, - EVENT_ARCTIC_BREATH = 14, + EVENT_DEATH_PLAGUE = 25, + EVENT_STOMP = 26, + EVENT_ARCTIC_BREATH = 27, // Frost Freeze Trap - EVENT_ACTIVATE_TRAP = 15, + EVENT_ACTIVATE_TRAP = 28, }; enum DataTypesICC @@ -108,7 +136,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript struct npc_highlord_tirion_fordringAI : public ScriptedAI { - npc_highlord_tirion_fordringAI(Creature* creature) : ScriptedAI(creature) + npc_highlord_tirion_fordringAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { } @@ -117,6 +145,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript events.Reset(); _theLichKing = 0; _bolvarFordragon = 0; + _factionNPC = 0; _damnedKills = 0; } @@ -124,6 +153,9 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript // of The Damned SAI void SetData(uint32 type, uint32 data) { + if (!instance) + return; + if (type == DATA_DAMNED_KILLS && data == 1) { if (++_damnedKills == 2) @@ -132,15 +164,20 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript { 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 (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); + _theLichKing = theLichKing->GetGUID(); + theLichKing->setActive(true); + _bolvarFordragon = bolvarFordragon->GetGUID(); + bolvarFordragon->setActive(true); + _factionNPC = factionNPC->GetGUID(); + factionNPC->setActive(true); + } } } - if (!_bolvarFordragon || !_theLichKing) + if (!_bolvarFordragon || !_theLichKing || !_factionNPC) return; Talk(SAY_TIRION_INTRO_1); @@ -155,6 +192,26 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript events.ScheduleEvent(EVENT_LK_INTRO_4, 86000); events.ScheduleEvent(EVENT_BOLVAR_INTRO_1, 100000); events.ScheduleEvent(EVENT_LK_INTRO_5, 108000); + + if (instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) + { + events.ScheduleEvent(EVENT_SAURFANG_INTRO_1, 120000); + events.ScheduleEvent(EVENT_TIRION_INTRO_H_7, 129000); + events.ScheduleEvent(EVENT_SAURFANG_INTRO_2, 139000); + events.ScheduleEvent(EVENT_SAURFANG_INTRO_3, 150000); + events.ScheduleEvent(EVENT_SAURFANG_INTRO_4, 162000); + events.ScheduleEvent(EVENT_SAURFANG_RUN, 170000); + } + else + { + events.ScheduleEvent(EVENT_MURADIN_INTRO_1, 120000); + events.ScheduleEvent(EVENT_MURADIN_INTRO_2, 124000); + events.ScheduleEvent(EVENT_MURADIN_INTRO_3, 127000); + events.ScheduleEvent(EVENT_TIRION_INTRO_A_7, 136000); + events.ScheduleEvent(EVENT_MURADIN_INTRO_4, 144000); + events.ScheduleEvent(EVENT_MURADIN_INTRO_5, 151000); + events.ScheduleEvent(EVENT_MURADIN_RUN, 157000); + } } } } @@ -214,10 +271,57 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript { theLichKing->AI()->Talk(SAY_LK_INTRO_5); theLichKing->setActive(false); - me->setActive(false); - _damnedKills = 3; } 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->GetDBTableGUIDLow()*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; } @@ -226,8 +330,10 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript private: EventMap events; + InstanceScript* const instance; uint64 _theLichKing; uint64 _bolvarFordragon; + uint64 _factionNPC; uint16 _damnedKills; }; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index f9c88f3c885..91210394eb2 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -73,6 +73,7 @@ enum DataTypes DATA_SPINESTALKER = 23, DATA_RIMEFANG = 24, DATA_COLDFLAME_JETS = 25, + DATA_TEAM_IN_INSTANCE = 26, }; #define MAX_ENCOUNTER 12 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 4162cf4132c..3fd5d911240 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -164,7 +164,7 @@ class instance_icecrown_citadel : public InstanceMapScript break; case NPC_SE_HIGH_OVERLORD_SAURFANG: if (teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, ALLIANCE); + creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, ALLIANCE, creature->GetCreatureData()); case NPC_SE_MURADIN_BRONZEBEARD: saurfangEventNPC = creature->GetGUID(); creature->LastUsedScriptID = creature->GetScriptId(); @@ -394,6 +394,8 @@ class instance_icecrown_citadel : public InstanceMapScript return rimefangTrash; case DATA_COLDFLAME_JETS: return coldflameJetsState; + case DATA_TEAM_IN_INSTANCE: + return teamInInstance; default: break; } |