Scripts/Icecrown Citadel
* The Lich King
This commit is contained in:
@@ -52,8 +52,7 @@ void SummonList::DespawnEntry(uint32 entry)
|
||||
else if (summon->GetEntry() == entry)
|
||||
{
|
||||
erase(i++);
|
||||
summon->setDeathState(JUST_DIED);
|
||||
summon->RemoveCorpse();
|
||||
summon->DespawnOrUnsummon();
|
||||
}
|
||||
else
|
||||
++i;
|
||||
@@ -70,13 +69,7 @@ void SummonList::DespawnAll()
|
||||
else
|
||||
{
|
||||
erase(begin());
|
||||
if (TempSummon* summ = summon->ToTempSummon())
|
||||
{
|
||||
summon->DestroyForNearbyPlayers();
|
||||
summ->UnSummon();
|
||||
}
|
||||
else
|
||||
summon->DisappearAndDie();
|
||||
summon->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,6 +479,7 @@ void AddSC_boss_blood_prince_council();
|
||||
void AddSC_boss_blood_queen_lana_thel();
|
||||
void AddSC_boss_valithria_dreamwalker();
|
||||
void AddSC_boss_sindragosa();
|
||||
void AddSC_boss_the_lich_king();
|
||||
void AddSC_icecrown_citadel_teleport();
|
||||
void AddSC_instance_icecrown_citadel();
|
||||
void AddSC_icecrown_citadel();
|
||||
@@ -1181,6 +1182,7 @@ void AddNorthrendScripts()
|
||||
AddSC_boss_blood_queen_lana_thel();
|
||||
AddSC_boss_valithria_dreamwalker();
|
||||
AddSC_boss_sindragosa();
|
||||
AddSC_boss_the_lich_king();
|
||||
AddSC_icecrown_citadel_teleport();
|
||||
AddSC_instance_icecrown_citadel();
|
||||
AddSC_icecrown_citadel();
|
||||
|
||||
@@ -2803,6 +2803,10 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
case 43140: // Flame Breath
|
||||
case 43215: // Flame Breath
|
||||
case 70461: // Coldflame Trap
|
||||
case 72133: // Pain and Suffering
|
||||
case 73788: // Pain and Suffering
|
||||
case 73789: // Pain and Suffering
|
||||
case 73790: // Pain and Suffering
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_LINE;
|
||||
break;
|
||||
case 24340: // Meteor
|
||||
@@ -3327,6 +3331,91 @@ void SpellMgr::LoadDbcDataCorrections()
|
||||
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ANY;
|
||||
spellInfo->Effect[1] = 0;
|
||||
break;
|
||||
case 71614: // Ice Lock
|
||||
spellInfo->Mechanic = MECHANIC_STUN;
|
||||
break;
|
||||
case 72762: // Defile
|
||||
spellInfo->DurationIndex = 559; // 53 seconds
|
||||
break;
|
||||
case 72743: // Defile
|
||||
spellInfo->DurationIndex = 22; // 45 seconds
|
||||
break;
|
||||
case 72754: // Defile
|
||||
case 73708: // Defile
|
||||
case 73709: // Defile
|
||||
case 73710: // Defile
|
||||
spellInfo->EffectRadiusIndex[0] = 22; // 200yd
|
||||
spellInfo->EffectRadiusIndex[1] = 22; // 200yd
|
||||
break;
|
||||
case 69030: // Val'kyr Target Search
|
||||
spellInfo->EffectRadiusIndex[0] = 22; // 200yd
|
||||
spellInfo->EffectRadiusIndex[1] = 22; // 200yd
|
||||
break;
|
||||
case 69198: // Raging Spirit Visual
|
||||
spellInfo->rangeIndex = 13; // 50000yd
|
||||
break;
|
||||
case 73654: // Harvest Souls
|
||||
case 74295: // Harvest Souls
|
||||
case 74296: // Harvest Souls
|
||||
case 74297: // Harvest Souls
|
||||
spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
|
||||
spellInfo->EffectRadiusIndex[1] = 28; // 50000yd
|
||||
spellInfo->EffectRadiusIndex[2] = 28; // 50000yd
|
||||
break;
|
||||
case 73655: // Harvest Soul
|
||||
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS;
|
||||
break;
|
||||
case 73540: // Summon Shadow Trap
|
||||
spellInfo->DurationIndex = 23; // 90 seconds
|
||||
break;
|
||||
case 73530: // Shadow Trap (visual)
|
||||
spellInfo->DurationIndex = 28; // 5 seconds
|
||||
break;
|
||||
case 73529: // Shadow Trap
|
||||
spellInfo->EffectRadiusIndex[1] = 13; // 10yd
|
||||
break;
|
||||
case 74282: // Shadow Trap (searcher)
|
||||
spellInfo->EffectRadiusIndex[0] = 15; // 3yd
|
||||
break;
|
||||
case 72595: // Restore Soul
|
||||
case 73650: // Restore Soul
|
||||
spellInfo->EffectRadiusIndex[0] = 22; // 200yd
|
||||
break;
|
||||
case 74086: // Destroy Soul
|
||||
spellInfo->EffectRadiusIndex[0] = 22; // 200yd
|
||||
break;
|
||||
case 74302: // Summon Spirit Bomb
|
||||
case 74342: // Summon Spirit Bomb
|
||||
spellInfo->EffectRadiusIndex[0] = 22; // 200yd
|
||||
spellInfo->MaxAffectedTargets = 1;
|
||||
break;
|
||||
case 74341: // Summon Spirit Bomb
|
||||
case 74343: // Summon Spirit Bomb
|
||||
spellInfo->EffectRadiusIndex[0] = 22; // 200yd
|
||||
spellInfo->MaxAffectedTargets = 3;
|
||||
break;
|
||||
case 73579: // Summon Spirit Bomb
|
||||
spellInfo->EffectRadiusIndex[0] = 20; // 25yd
|
||||
break;
|
||||
case 72350: // Fury of Frostmourne
|
||||
spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
|
||||
spellInfo->EffectRadiusIndex[1] = 28; // 50000yd
|
||||
break;
|
||||
case 75127: // Kill Frostmourne Players
|
||||
case 72351: // Fury of Frostmourne
|
||||
case 72429: // Mass Resurrection
|
||||
case 73159: // Play Movie
|
||||
case 73582: // Trigger Vile Spirit (Inside, Heroic)
|
||||
spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
|
||||
break;
|
||||
case 72376: // Raise Dead
|
||||
spellInfo->MaxAffectedTargets = 3;
|
||||
spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
|
||||
break;
|
||||
case 71809: // Jump
|
||||
spellInfo->rangeIndex = 3; // 20yd
|
||||
spellInfo->EffectRadiusIndex[0] = 20; // 25yd
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -173,6 +173,7 @@ set(scripts_STAT_SRCS
|
||||
Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
|
||||
Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
|
||||
Northrend/IcecrownCitadel/boss_sindragosa.cpp
|
||||
Northrend/IcecrownCitadel/boss_the_lich_king.cpp
|
||||
Northrend/zuldrak.cpp
|
||||
Northrend/icecrown.cpp
|
||||
Northrend/Gundrak/boss_slad_ran.cpp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,22 +28,30 @@ uint32 const EncounterCount = 13;
|
||||
uint32 const WeeklyNPCs = 9;
|
||||
uint32 const MaxHeroicAttempts = 50;
|
||||
|
||||
// Defined in boss_valithria_dreamwalker.cpp
|
||||
extern Position const ValithriaSpawnPos;
|
||||
// Defined in boss_sindragosa.cpp
|
||||
extern Position const SindragosaSpawnPos;
|
||||
// Defined in boss_the_lich_king.cpp
|
||||
extern Position const TerenasSpawn;
|
||||
extern Position const TerenasSpawnHeroic;
|
||||
extern Position const SpiritWardenSpawn;
|
||||
|
||||
// Shared spells used by more than one script
|
||||
enum SharedSpells
|
||||
{
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_BERSERK2 = 47008,
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_BERSERK2 = 47008,
|
||||
|
||||
// Deathbound Ward
|
||||
SPELL_STONEFORM = 70733,
|
||||
SPELL_STONEFORM = 70733,
|
||||
|
||||
// Residue Rendezvous
|
||||
SPELL_ORANGE_BLIGHT_RESIDUE = 72144,
|
||||
SPELL_GREEN_BLIGHT_RESIDUE = 72145,
|
||||
SPELL_ORANGE_BLIGHT_RESIDUE = 72144,
|
||||
SPELL_GREEN_BLIGHT_RESIDUE = 72145,
|
||||
|
||||
// The Lich King
|
||||
SPELL_FROSTMOURNE_TELEPORT_VISUAL = 73078,
|
||||
};
|
||||
|
||||
enum TeleporterSpells
|
||||
@@ -99,6 +107,9 @@ enum DataTypes
|
||||
DATA_CAPTAIN_RUPERT = 34,
|
||||
DATA_VALITHRIA_TRIGGER = 35,
|
||||
DATA_VALITHRIA_LICH_KING = 36,
|
||||
DATA_HIGHLORD_TIRION_FORDRING = 37,
|
||||
DATA_ARTHAS_PLATFORM = 38,
|
||||
DATA_TERENAS_MENETHIL = 39,
|
||||
};
|
||||
|
||||
enum CreaturesIds
|
||||
@@ -247,7 +258,23 @@ enum CreaturesIds
|
||||
|
||||
// The Lich King
|
||||
NPC_THE_LICH_KING = 36597,
|
||||
NPC_HIGHLORD_TIRION_FORDRING_LK = 38995,
|
||||
NPC_TERENAS_MENETHIL_FROSTMOURNE = 36823,
|
||||
NPC_SPIRIT_WARDEN = 36824,
|
||||
NPC_TERENAS_MENETHIL_FROSTMOURNE_H = 39217,
|
||||
NPC_SHAMBLING_HORROR = 37698,
|
||||
NPC_DRUDGE_GHOUL = 37695,
|
||||
NPC_ICE_SPHERE = 36633,
|
||||
NPC_RAGING_SPIRIT = 36701,
|
||||
NPC_DEFILE = 38757,
|
||||
NPC_VALKYR_SHADOWGUARD = 36609,
|
||||
NPC_VILE_SPIRIT = 37799,
|
||||
NPC_WICKED_SPIRIT = 39190,
|
||||
NPC_STRANGULATE_VEHICLE = 36598,
|
||||
NPC_WORLD_TRIGGER = 22515,
|
||||
NPC_WORLD_TRIGGER_INFINITE_AOI = 36171,
|
||||
NPC_SPIRIT_BOMB = 39189,
|
||||
NPC_FROSTMOURNE_TRIGGER = 38584,
|
||||
};
|
||||
|
||||
enum GameObjectsIds
|
||||
@@ -312,6 +339,20 @@ enum GameObjectsIds
|
||||
GO_ICE_WALL = 202396,
|
||||
GO_ICE_BLOCK = 201722,
|
||||
GO_SIGIL_OF_THE_FROSTWING = 202181,
|
||||
|
||||
// The Lich King
|
||||
GO_ARTHAS_PLATFORM = 202161,
|
||||
GO_ARTHAS_PRECIPICE = 202078,
|
||||
GO_DOODAD_ICECROWN_THRONEFROSTYWIND01 = 202188,
|
||||
GO_DOODAD_ICECROWN_THRONEFROSTYEDGE01 = 202189,
|
||||
GO_DOODAD_ICESHARD_STANDING02 = 202141,
|
||||
GO_DOODAD_ICESHARD_STANDING01 = 202142,
|
||||
GO_DOODAD_ICESHARD_STANDING03 = 202143,
|
||||
GO_DOODAD_ICESHARD_STANDING04 = 202144,
|
||||
GO_DOODAD_ICECROWN_SNOWEDGEWARNING01 = 202190,
|
||||
GO_FROZEN_LAVAMAN = 202436,
|
||||
GO_LAVAMAN_PILLARS_CHAINED = 202437,
|
||||
GO_LAVAMAN_PILLARS_UNCHAINED = 202438,
|
||||
};
|
||||
|
||||
enum AchievementCriteriaIds
|
||||
@@ -351,9 +392,6 @@ enum AchievementCriteriaIds
|
||||
|
||||
enum SharedActions
|
||||
{
|
||||
// Coldflame Traps
|
||||
ACTION_STOP_TRAPS = -377440,
|
||||
|
||||
// Festergut
|
||||
ACTION_FESTERGUT_COMBAT = -366260,
|
||||
ACTION_FESTERGUT_GAS = -366261,
|
||||
@@ -374,6 +412,10 @@ enum SharedActions
|
||||
// Sindragosa
|
||||
ACTION_START_FROSTWYRM = -368530,
|
||||
ACTION_TRIGGER_ASPHYXIATION = -368531,
|
||||
|
||||
// The Lich King
|
||||
ACTION_RESTORE_LIGHT = -72262,
|
||||
ACTION_FROSTMOURNE_INTRO = -36823,
|
||||
};
|
||||
|
||||
enum WeekliesICC
|
||||
@@ -399,6 +441,11 @@ enum WorldStatesICC
|
||||
WORLDSTATE_ATTEMPTS_MAX = 4942,
|
||||
};
|
||||
|
||||
enum AreaIds
|
||||
{
|
||||
AREA_THE_FROZEN_THRONE = 4859,
|
||||
};
|
||||
|
||||
class spell_trigger_spell_from_caster : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -23,6 +23,20 @@
|
||||
#include "PoolMgr.h"
|
||||
#include "icecrown_citadel.h"
|
||||
|
||||
enum EventIds
|
||||
{
|
||||
EVENT_QUAKE = 23437,
|
||||
EVENT_SECOND_REMORSELESS_WINTER = 23507,
|
||||
EVENT_TELEPORT_TO_FROSMOURNE = 23617,
|
||||
};
|
||||
|
||||
enum TimedEvents
|
||||
{
|
||||
EVENT_UPDATE_EXECUTION_TIME = 1,
|
||||
EVENT_QUAKE_SHATTER = 2,
|
||||
EVENT_REBUILD_PLATFORM = 3,
|
||||
};
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N },
|
||||
@@ -116,6 +130,13 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
SpinestalkerGUID = 0;
|
||||
RimefangGUID = 0;
|
||||
TheLichKingGUID = 0;
|
||||
HighlordTirionFordringGUID = 0;
|
||||
TerenasMenethilGUID = 0;
|
||||
ArthasPlatformGUID = 0;
|
||||
ArthasPrecipiceGUID = 0;
|
||||
FrozenThroneEdgeGUID = 0;
|
||||
FrozenThroneWindGUID = 0;
|
||||
FrozenThroneWarningGUID = 0;
|
||||
FrostwyrmCount = 0;
|
||||
SpinestalkerTrashCount = 0;
|
||||
RimefangTrashCount = 0;
|
||||
@@ -125,7 +146,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
IsOrbWhispererEligible = true;
|
||||
ColdflameJetsState = NOT_STARTED;
|
||||
BloodQuickeningState = NOT_STARTED;
|
||||
BloodQuickeningTimer = 0;
|
||||
BloodQuickeningMinutes = 0;
|
||||
}
|
||||
|
||||
@@ -269,6 +289,13 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case NPC_THE_LICH_KING:
|
||||
TheLichKingGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_HIGHLORD_TIRION_FORDRING_LK:
|
||||
HighlordTirionFordringGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_TERENAS_MENETHIL_FROSTMOURNE:
|
||||
case NPC_TERENAS_MENETHIL_FROSTMOURNE_H:
|
||||
TerenasMenethilGUID = creature->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -424,6 +451,40 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case GO_DRINK_ME:
|
||||
PutricideTableGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_ARTHAS_PLATFORM:
|
||||
// this enables movement at The Frozen Throne, when printed this value is 0.000000f
|
||||
// however, when represented as integer client will accept only this value
|
||||
go->SetUInt32Value(GAMEOBJECT_PARENTROTATION, 5535469);
|
||||
ArthasPlatformGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_ARTHAS_PRECIPICE:
|
||||
go->SetUInt32Value(GAMEOBJECT_PARENTROTATION, 4178312);
|
||||
ArthasPrecipiceGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_DOODAD_ICECROWN_THRONEFROSTYEDGE01:
|
||||
FrozenThroneEdgeGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_DOODAD_ICECROWN_THRONEFROSTYWIND01:
|
||||
FrozenThroneWindGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_DOODAD_ICECROWN_SNOWEDGEWARNING01:
|
||||
FrozenThroneWarningGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_FROZEN_LAVAMAN:
|
||||
FrozenBolvarGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_THE_LICH_KING) == DONE)
|
||||
go->SetRespawnTime(7 * DAY);
|
||||
break;
|
||||
case GO_LAVAMAN_PILLARS_CHAINED:
|
||||
PillarsChainedGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_THE_LICH_KING) == DONE)
|
||||
go->SetRespawnTime(7 * DAY);
|
||||
break;
|
||||
case GO_LAVAMAN_PILLARS_UNCHAINED:
|
||||
PillarsUnchainedGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_THE_LICH_KING) == DONE)
|
||||
go->SetRespawnTime(7 * DAY);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -541,6 +602,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
return RimefangGUID;
|
||||
case DATA_THE_LICH_KING:
|
||||
return TheLichKingGUID;
|
||||
case DATA_HIGHLORD_TIRION_FORDRING:
|
||||
return HighlordTirionFordringGUID;
|
||||
case DATA_ARTHAS_PLATFORM:
|
||||
return ArthasPlatformGUID;
|
||||
case DATA_TERENAS_MENETHIL:
|
||||
return TerenasMenethilGUID;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -661,6 +728,14 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
}
|
||||
break;
|
||||
case DATA_THE_LICH_KING:
|
||||
{
|
||||
// set the platform as active object to dramatically increase visibility range
|
||||
// note: "active" gameobjects do not block grid unloading
|
||||
if (GameObject* precipice = instance->GetGameObject(ArthasPrecipiceGUID))
|
||||
precipice->setActive(state == IN_PROGRESS);
|
||||
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
|
||||
platform->setActive(state == IN_PROGRESS);
|
||||
|
||||
if (instance->IsHeroic())
|
||||
{
|
||||
if (state == FAIL && HeroicAttempts)
|
||||
@@ -672,7 +747,18 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
theLichKing->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
|
||||
if (state == DONE)
|
||||
{
|
||||
if (GameObject* bolvar = instance->GetGameObject(FrozenBolvarGUID))
|
||||
bolvar->SetRespawnTime(7 * DAY);
|
||||
if (GameObject* pillars = instance->GetGameObject(PillarsChainedGUID))
|
||||
pillars->SetRespawnTime(7 * DAY);
|
||||
if (GameObject* pillars = instance->GetGameObject(PillarsUnchainedGUID))
|
||||
pillars->SetRespawnTime(7 * DAY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -798,13 +884,13 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
switch (data)
|
||||
{
|
||||
case IN_PROGRESS:
|
||||
BloodQuickeningTimer = 60000;
|
||||
Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000);
|
||||
BloodQuickeningMinutes = 30;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
|
||||
DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
|
||||
break;
|
||||
case DONE:
|
||||
BloodQuickeningTimer = 0;
|
||||
Events.CancelEvent(EVENT_UPDATE_EXECUTION_TIME);
|
||||
BloodQuickeningMinutes = 0;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
|
||||
break;
|
||||
@@ -1050,32 +1136,103 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
|
||||
void Update(uint32 diff)
|
||||
{
|
||||
if (BloodQuickeningState == IN_PROGRESS)
|
||||
if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS)
|
||||
return;
|
||||
|
||||
Events.Update(diff);
|
||||
|
||||
while (uint32 eventId = Events.ExecuteEvent())
|
||||
{
|
||||
if (BloodQuickeningTimer <= diff)
|
||||
switch (eventId)
|
||||
{
|
||||
--BloodQuickeningMinutes;
|
||||
BloodQuickeningTimer = 60000;
|
||||
if (BloodQuickeningMinutes)
|
||||
case EVENT_UPDATE_EXECUTION_TIME:
|
||||
{
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
|
||||
DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
|
||||
--BloodQuickeningMinutes;
|
||||
if (BloodQuickeningMinutes)
|
||||
{
|
||||
Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000);
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
|
||||
DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
|
||||
}
|
||||
else
|
||||
{
|
||||
BloodQuickeningState = DONE;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
|
||||
if (Creature* bq = instance->GetCreature(BloodQueenLanaThelGUID))
|
||||
bq->AI()->DoAction(ACTION_KILL_MINCHAR);
|
||||
}
|
||||
SaveToDB();
|
||||
break;
|
||||
}
|
||||
else
|
||||
case EVENT_QUAKE_SHATTER:
|
||||
{
|
||||
BloodQuickeningState = DONE;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
|
||||
if (Creature* bq = instance->GetCreature(BloodQueenLanaThelGUID))
|
||||
bq->AI()->DoAction(ACTION_KILL_MINCHAR);
|
||||
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
|
||||
platform->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
|
||||
if (GameObject* edge = instance->GetGameObject(FrozenThroneEdgeGUID))
|
||||
edge->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* wind = instance->GetGameObject(FrozenThroneWindGUID))
|
||||
wind->SetGoState(GO_STATE_READY);
|
||||
if (GameObject* warning = instance->GetGameObject(FrozenThroneWarningGUID))
|
||||
warning->SetGoState(GO_STATE_READY);
|
||||
if (Creature* theLichKing = instance->GetCreature(TheLichKingGUID))
|
||||
theLichKing->AI()->DoAction(ACTION_RESTORE_LIGHT);
|
||||
break;
|
||||
}
|
||||
SaveToDB();
|
||||
case EVENT_REBUILD_PLATFORM:
|
||||
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
|
||||
platform->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING);
|
||||
if (GameObject* edge = instance->GetGameObject(FrozenThroneEdgeGUID))
|
||||
edge->SetGoState(GO_STATE_READY);
|
||||
if (GameObject* wind = instance->GetGameObject(FrozenThroneWindGUID))
|
||||
wind->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else
|
||||
BloodQuickeningTimer -= diff;
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessEvent(WorldObject* /*source*/, uint32 eventId)
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_QUAKE:
|
||||
if (GameObject* warning = instance->GetGameObject(FrozenThroneWarningGUID))
|
||||
warning->SetGoState(GO_STATE_ACTIVE);
|
||||
Events.ScheduleEvent(EVENT_QUAKE_SHATTER, 5000);
|
||||
break;
|
||||
case EVENT_SECOND_REMORSELESS_WINTER:
|
||||
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
|
||||
{
|
||||
platform->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED);
|
||||
Events.ScheduleEvent(EVENT_REBUILD_PLATFORM, 1500);
|
||||
}
|
||||
break;
|
||||
case EVENT_TELEPORT_TO_FROSMOURNE: // Harvest Soul (normal mode)
|
||||
if (Creature* terenas = instance->SummonCreature(NPC_TERENAS_MENETHIL_FROSTMOURNE, TerenasSpawn, NULL, 63000))
|
||||
{
|
||||
terenas->AI()->DoAction(ACTION_FROSTMOURNE_INTRO);
|
||||
std::list<Creature*> triggers;
|
||||
GetCreatureListWithEntryInGrid(triggers, terenas, NPC_WORLD_TRIGGER_INFINITE_AOI, 100.0f);
|
||||
if (!triggers.empty())
|
||||
{
|
||||
triggers.sort(Trinity::ObjectDistanceOrderPred(terenas, false));
|
||||
Unit* visual = triggers.front();
|
||||
visual->CastSpell(visual, SPELL_FROSTMOURNE_TELEPORT_VISUAL, true);
|
||||
}
|
||||
|
||||
if (Creature* warden = instance->SummonCreature(NPC_SPIRIT_WARDEN, SpiritWardenSpawn, NULL, 63000))
|
||||
{
|
||||
terenas->AI()->AttackStart(warden);
|
||||
warden->AddThreat(terenas, 300000.0f);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
EventMap Events;
|
||||
uint64 LadyDeathwisperElevatorGUID;
|
||||
uint64 DeathbringerSaurfangGUID;
|
||||
uint64 DeathbringerSaurfangDoorGUID;
|
||||
@@ -1105,8 +1262,17 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
uint64 SpinestalkerGUID;
|
||||
uint64 RimefangGUID;
|
||||
uint64 TheLichKingGUID;
|
||||
uint64 HighlordTirionFordringGUID;
|
||||
uint64 TerenasMenethilGUID;
|
||||
uint64 ArthasPlatformGUID;
|
||||
uint64 ArthasPrecipiceGUID;
|
||||
uint64 FrozenThroneEdgeGUID;
|
||||
uint64 FrozenThroneWindGUID;
|
||||
uint64 FrozenThroneWarningGUID;
|
||||
uint64 FrozenBolvarGUID;
|
||||
uint64 PillarsChainedGUID;
|
||||
uint64 PillarsUnchainedGUID;
|
||||
uint32 TeamInInstance;
|
||||
uint32 BloodQuickeningTimer;
|
||||
uint32 ColdflameJetsState;
|
||||
uint32 FrostwyrmCount;
|
||||
uint32 SpinestalkerTrashCount;
|
||||
|
||||
Reference in New Issue
Block a user