aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-03-11 19:35:22 +0100
committerShauren <shauren.trinity@gmail.com>2011-03-11 19:35:22 +0100
commit9b2d62b72d53f487a84230dba51eb1e47e32145a (patch)
treefc8fbe4f81789b278e2910ac8253b5689a1613b1 /src
parent190ef1c2ef0eac90f90d7f84e8ed20f020b2be11 (diff)
Scripts/Icecrown Citadel: Added missing faction specific part of intro scene at Light's Hammer
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp97
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp138
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h1
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp4
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;
}