Scripts/Icecrown Citadel: Added missing faction specific part of intro scene at Light's Hammer
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user