Scripts/Icecrown Citadel
* Fixed position of summoned creatures (if supposed to be in air) * Fixed casting Fury of Frostmourne initiating outro roleplay while casting something else at the same time * Fixed outro visuals
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
SET @CGUID := 88615;
|
||||||
|
DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+00 AND @CGUID+22;
|
||||||
|
INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`MovementType`) VALUES
|
||||||
|
(@CGUID+00,39190,631,12,1,505.1563,-2536.863,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+01,39190,631,12,1,502.6493,-2531.328,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+02,39190,631,12,1,503.8246,-2508.141,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+03,39190,631,12,1,495.3629,-2538.215,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+04,39190,631,12,1,506.8715,-2515.552,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+05,39190,631,12,1,481.3021,-2509.222,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+06,39190,631,12,1,481.5382,-2527.332,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+07,39190,631,12,1,500.0807,-2523.289,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+08,39190,631,12,1,486.6632,-2517.747,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+09,39190,631,12,1,513.8802,-2511.795,1069.596,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+10,39190,631,12,1,499.6406,-2500.783,1069.656,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+11,39190,631,12,1,513.7101,-2530.931,1069.596,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+12,39190,631,12,1,502.6811,-2522.542,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+13,39190,631,12,1,518.7483,-2521.240,1069.596,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+14,39190,631,12,1,478.9774,-2517.446,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+15,39190,631,12,1,489.0104,-2538.535,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+16,39190,631,12,1,511.6320,-2522.373,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+17,39190,631,12,1,500.8976,-2527.198,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+18,39190,631,12,1,484.7934,-2533.592,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+19,39190,631,12,1,490.4132,-2504.323,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+20,39190,631,12,1,485.0298,-2527.724,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+21,39190,631,12,1,494.2899,-2511.384,1069.598,0,10,10,1), -- Wicked Spirit
|
||||||
|
(@CGUID+22,39190,631,12,1,491.7170,-2532.490,1069.598,0,10,10,1); -- Wicked Spirit
|
||||||
@@ -138,7 +138,7 @@ enum Spells
|
|||||||
SPELL_IN_FROSTMOURNE_ROOM = 74276,
|
SPELL_IN_FROSTMOURNE_ROOM = 74276,
|
||||||
SPELL_KILL_FROSTMOURNE_PLAYERS = 75127,
|
SPELL_KILL_FROSTMOURNE_PLAYERS = 75127,
|
||||||
SPELL_HARVESTED_SOUL = 72679,
|
SPELL_HARVESTED_SOUL = 72679,
|
||||||
SPELL_TRIGGER_VILE_SPIRIT_HEROIC = 73582,
|
SPELL_TRIGGER_VILE_SPIRIT_HEROIC = 73582, // TODO: Cast every 3 seconds during Frostmourne phase, targets a Wicked Spirit amd activates it
|
||||||
|
|
||||||
// Frostmourne
|
// Frostmourne
|
||||||
SPELL_LIGHTS_FAVOR = 69382,
|
SPELL_LIGHTS_FAVOR = 69382,
|
||||||
@@ -152,6 +152,7 @@ enum Spells
|
|||||||
SPELL_SUMMON_SPIRIT_BOMB_1 = 73581, // (Heroic)
|
SPELL_SUMMON_SPIRIT_BOMB_1 = 73581, // (Heroic)
|
||||||
SPELL_SUMMON_SPIRIT_BOMB_2 = 74299, // (Heroic)
|
SPELL_SUMMON_SPIRIT_BOMB_2 = 74299, // (Heroic)
|
||||||
SPELL_EXPLOSION = 73576, // Spirit Bomb (Heroic)
|
SPELL_EXPLOSION = 73576, // Spirit Bomb (Heroic)
|
||||||
|
SPELL_HARVEST_SOUL_DAMAGE_AURA = 73655,
|
||||||
|
|
||||||
// Outro
|
// Outro
|
||||||
SPELL_FURY_OF_FROSTMOURNE = 72350,
|
SPELL_FURY_OF_FROSTMOURNE = 72350,
|
||||||
@@ -221,7 +222,7 @@ enum Events
|
|||||||
EVENT_QUAKE_2 = 27,
|
EVENT_QUAKE_2 = 27,
|
||||||
EVENT_VILE_SPIRITS = 28,
|
EVENT_VILE_SPIRITS = 28,
|
||||||
EVENT_HARVEST_SOULS = 29, // heroic only
|
EVENT_HARVEST_SOULS = 29, // heroic only
|
||||||
EVENT_WICKED_SPIRITS = 30,
|
EVENT_BERSERK = 30,
|
||||||
EVENT_SOUL_RIP = 31,
|
EVENT_SOUL_RIP = 31,
|
||||||
EVENT_DESTROY_SOUL = 32,
|
EVENT_DESTROY_SOUL = 32,
|
||||||
EVENT_FROSTMOURNE_TALK_1 = 33,
|
EVENT_FROSTMOURNE_TALK_1 = 33,
|
||||||
@@ -249,19 +250,18 @@ enum Events
|
|||||||
EVENT_OUTRO_TERENAS_TALK_2 = 55,
|
EVENT_OUTRO_TERENAS_TALK_2 = 55,
|
||||||
EVENT_OUTRO_TALK_7 = 56,
|
EVENT_OUTRO_TALK_7 = 56,
|
||||||
EVENT_OUTRO_TALK_8 = 57,
|
EVENT_OUTRO_TALK_8 = 57,
|
||||||
EVENT_BERSERK = 58,
|
|
||||||
|
|
||||||
// Shambling Horror
|
// Shambling Horror
|
||||||
EVENT_SHOCKWAVE = 59,
|
EVENT_SHOCKWAVE = 58,
|
||||||
EVENT_ENRAGE = 60,
|
EVENT_ENRAGE = 59,
|
||||||
|
|
||||||
// Raging Spirit
|
// Raging Spirit
|
||||||
EVENT_SOUL_SHRIEK = 61,
|
EVENT_SOUL_SHRIEK = 60,
|
||||||
|
|
||||||
// Strangulate Vehicle (Harvest Soul)
|
// Strangulate Vehicle (Harvest Soul)
|
||||||
EVENT_TELEPORT = 62,
|
EVENT_TELEPORT = 61,
|
||||||
EVENT_MOVE_TO_LICH_KING = 63,
|
EVENT_MOVE_TO_LICH_KING = 62,
|
||||||
EVENT_DESPAWN_SELF = 64,
|
EVENT_DESPAWN_SELF = 63,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EventGroups
|
enum EventGroups
|
||||||
@@ -475,6 +475,25 @@ class VileSpiritActivateEvent : public BasicEvent
|
|||||||
Creature* _owner;
|
Creature* _owner;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TriggerWickedSpirit : public BasicEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TriggerWickedSpirit(Creature* owner)
|
||||||
|
: _owner(owner), _counter(13)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Execute(uint64 /*time*/, uint32 /*diff*/)
|
||||||
|
{
|
||||||
|
_owner->CastCustomSpell(SPELL_TRIGGER_VILE_SPIRIT_HEROIC, SPELLVALUE_MAX_TARGETS, 1, NULL, true);
|
||||||
|
return --_counter > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Creature* _owner;
|
||||||
|
int32 _counter;
|
||||||
|
};
|
||||||
|
|
||||||
class boss_the_lich_king : public CreatureScript
|
class boss_the_lich_king : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -503,6 +522,8 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
me->SetDisableGravity(false);
|
me->SetDisableGravity(false);
|
||||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
|
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
|
||||||
me->GetMotionMaster()->MoveFall();
|
me->GetMotionMaster()->MoveFall();
|
||||||
|
if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f))
|
||||||
|
frostmourne->DespawnOrUnsummon();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* target)
|
void EnterCombat(Unit* target)
|
||||||
@@ -601,8 +622,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
summons.DoAction(ACTION_TELEPORT_BACK, pred);
|
summons.DoAction(ACTION_TELEPORT_BACK, pred);
|
||||||
if (!IsHeroic())
|
if (!IsHeroic())
|
||||||
Talk(SAY_LK_FROSTMOURNE_ESCAPE);
|
Talk(SAY_LK_FROSTMOURNE_ESCAPE);
|
||||||
else
|
|
||||||
DoCastAOE(SPELL_TRIGGER_VILE_SPIRIT_HEROIC);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -645,6 +664,8 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
if (events.GetPhaseMask() & PHASE_MASK_ONE && !HealthAbovePct(70))
|
if (events.GetPhaseMask() & PHASE_MASK_ONE && !HealthAbovePct(70))
|
||||||
{
|
{
|
||||||
events.SetPhase(PHASE_TRANSITION);
|
events.SetPhase(PHASE_TRANSITION);
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
me->AttackStop();
|
||||||
me->GetMotionMaster()->MovePoint(POINT_CENTER_1, CenterPosition);
|
me->GetMotionMaster()->MovePoint(POINT_CENTER_1, CenterPosition);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -652,6 +673,8 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
if (events.GetPhaseMask() & PHASE_MASK_TWO && !HealthAbovePct(40))
|
if (events.GetPhaseMask() & PHASE_MASK_TWO && !HealthAbovePct(40))
|
||||||
{
|
{
|
||||||
events.SetPhase(PHASE_TRANSITION);
|
events.SetPhase(PHASE_TRANSITION);
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
me->AttackStop();
|
||||||
me->GetMotionMaster()->MovePoint(POINT_CENTER_2, CenterPosition);
|
me->GetMotionMaster()->MovePoint(POINT_CENTER_2, CenterPosition);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -664,7 +687,8 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
events.SetPhase(PHASE_OUTRO);
|
events.SetPhase(PHASE_OUTRO);
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
SendMusicToPlayers(MUSIC_FURY_OF_FROSTMOURNE);
|
SendMusicToPlayers(MUSIC_FURY_OF_FROSTMOURNE);
|
||||||
DoCastAOE(SPELL_FURY_OF_FROSTMOURNE);
|
me->InterruptNonMeleeSpells(true);
|
||||||
|
me->CastSpell((Unit*)NULL, SPELL_FURY_OF_FROSTMOURNE, TRIGGERED_NONE);
|
||||||
me->SetWalk(true);
|
me->SetWalk(true);
|
||||||
events.ScheduleEvent(EVENT_OUTRO_TALK_1, 2600, 0, PHASE_OUTRO);
|
events.ScheduleEvent(EVENT_OUTRO_TALK_1, 2600, 0, PHASE_OUTRO);
|
||||||
events.ScheduleEvent(EVENT_OUTRO_EMOTE_TALK, 6600, 0, PHASE_OUTRO);
|
events.ScheduleEvent(EVENT_OUTRO_EMOTE_TALK, 6600, 0, PHASE_OUTRO);
|
||||||
@@ -712,7 +736,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
break;
|
break;
|
||||||
case NPC_FROSTMOURNE_TRIGGER:
|
case NPC_FROSTMOURNE_TRIGGER:
|
||||||
{
|
{
|
||||||
summons.Summon(summon);
|
|
||||||
summon->CastSpell((Unit*)NULL, SPELL_BROKEN_FROSTMOURNE, true);
|
summon->CastSpell((Unit*)NULL, SPELL_BROKEN_FROSTMOURNE, true);
|
||||||
|
|
||||||
SendLightOverride(LIGHT_SOULSTORM, 10000);
|
SendLightOverride(LIGHT_SOULSTORM, 10000);
|
||||||
@@ -724,15 +747,10 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
case NPC_VILE_SPIRIT:
|
case NPC_VILE_SPIRIT:
|
||||||
{
|
{
|
||||||
summons.Summon(summon);
|
summons.Summon(summon);
|
||||||
if (events.GetPhaseMask() & PHASE_MASK_FROSTMOURNE)
|
|
||||||
{
|
|
||||||
TeleportSpirit(summon);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
summon->SetReactState(REACT_PASSIVE);
|
summon->SetReactState(REACT_PASSIVE);
|
||||||
summon->SetSpeed(MOVE_FLIGHT, 0.5f);
|
summon->SetSpeed(MOVE_FLIGHT, 0.5f);
|
||||||
summon->GetMotionMaster()->MoveRandom(10.0f);
|
summon->GetMotionMaster()->MoveRandom(10.0f);
|
||||||
|
if (!(events.GetPhaseMask() & PHASE_MASK_FROSTMOURNE))
|
||||||
summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(15000));
|
summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(15000));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -756,7 +774,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
case NPC_VALKYR_SHADOWGUARD:
|
case NPC_VALKYR_SHADOWGUARD:
|
||||||
case NPC_RAGING_SPIRIT:
|
case NPC_RAGING_SPIRIT:
|
||||||
case NPC_VILE_SPIRIT:
|
case NPC_VILE_SPIRIT:
|
||||||
case NPC_WICKED_SPIRIT:
|
|
||||||
summon->ToTempSummon()->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN);
|
summon->ToTempSummon()->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -802,8 +819,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
me->SetFacingTo(0.0f);
|
me->SetFacingTo(0.0f);
|
||||||
Talk(SAY_LK_REMORSELESS_WINTER);
|
Talk(SAY_LK_REMORSELESS_WINTER);
|
||||||
SendMusicToPlayers(MUSIC_SPECIAL);
|
SendMusicToPlayers(MUSIC_SPECIAL);
|
||||||
me->SetReactState(REACT_PASSIVE);
|
|
||||||
me->AttackStop();
|
|
||||||
DoCast(me, SPELL_REMORSELESS_WINTER_1);
|
DoCast(me, SPELL_REMORSELESS_WINTER_1);
|
||||||
events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions
|
events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions
|
||||||
events.ScheduleEvent(EVENT_QUAKE, 62500, 0, PHASE_TRANSITION);
|
events.ScheduleEvent(EVENT_QUAKE, 62500, 0, PHASE_TRANSITION);
|
||||||
@@ -819,8 +834,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
me->SetFacingTo(0.0f);
|
me->SetFacingTo(0.0f);
|
||||||
Talk(SAY_LK_REMORSELESS_WINTER);
|
Talk(SAY_LK_REMORSELESS_WINTER);
|
||||||
SendMusicToPlayers(MUSIC_SPECIAL);
|
SendMusicToPlayers(MUSIC_SPECIAL);
|
||||||
me->SetReactState(REACT_PASSIVE);
|
|
||||||
me->AttackStop();
|
|
||||||
DoCast(me, SPELL_REMORSELESS_WINTER_2);
|
DoCast(me, SPELL_REMORSELESS_WINTER_2);
|
||||||
summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD);
|
summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD);
|
||||||
events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions
|
events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions
|
||||||
@@ -992,10 +1005,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
DoCastAOE(SPELL_VILE_SPIRITS);
|
DoCastAOE(SPELL_VILE_SPIRITS);
|
||||||
events.ScheduleEvent(EVENT_VILE_SPIRITS, urand(35000, 40000), EVENT_GROUP_VILE_SPIRITS, PHASE_THREE);
|
events.ScheduleEvent(EVENT_VILE_SPIRITS, urand(35000, 40000), EVENT_GROUP_VILE_SPIRITS, PHASE_THREE);
|
||||||
break;
|
break;
|
||||||
case EVENT_WICKED_SPIRITS:
|
|
||||||
DoCastAOE(SPELL_VILE_SPIRITS);
|
|
||||||
events.ScheduleEvent(EVENT_WICKED_SPIRITS, urand(35000, 40000), 0, PHASE_FROSTMOURNE);
|
|
||||||
break;
|
|
||||||
case EVENT_HARVEST_SOULS:
|
case EVENT_HARVEST_SOULS:
|
||||||
Talk(SAY_LK_HARVEST_SOUL);
|
Talk(SAY_LK_HARVEST_SOUL);
|
||||||
DoCastAOE(SPELL_HARVEST_SOULS);
|
DoCastAOE(SPELL_HARVEST_SOULS);
|
||||||
@@ -1003,7 +1012,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
events.SetPhase(PHASE_FROSTMOURNE); // will stop running UpdateVictim (no evading)
|
events.SetPhase(PHASE_FROSTMOURNE); // will stop running UpdateVictim (no evading)
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->AttackStop();
|
me->AttackStop();
|
||||||
events.ScheduleEvent(EVENT_WICKED_SPIRITS, events.GetNextEventTime(EVENT_VILE_SPIRITS) - events.GetTimer(), 0, PHASE_FROSTMOURNE);
|
|
||||||
events.DelayEvents(50000, EVENT_GROUP_VILE_SPIRITS);
|
events.DelayEvents(50000, EVENT_GROUP_VILE_SPIRITS);
|
||||||
events.RescheduleEvent(EVENT_DEFILE, 50000, 0, PHASE_THREE);
|
events.RescheduleEvent(EVENT_DEFILE, 50000, 0, PHASE_THREE);
|
||||||
events.RescheduleEvent(EVENT_SOUL_REAPER, urand(57000, 62000), 0, PHASE_THREE);
|
events.RescheduleEvent(EVENT_SOUL_REAPER, urand(57000, 62000), 0, PHASE_THREE);
|
||||||
@@ -1019,16 +1027,22 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
if (!triggers.empty())
|
if (!triggers.empty())
|
||||||
{
|
{
|
||||||
triggers.sort(Trinity::ObjectDistanceOrderPred(terenas, true));
|
triggers.sort(Trinity::ObjectDistanceOrderPred(terenas, true));
|
||||||
Unit* spawner = triggers.front();
|
Creature* spawner = triggers.front();
|
||||||
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_1, true); // summons bombs randomly
|
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_1, true); // summons bombs randomly
|
||||||
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_2, true); // summons bombs on players
|
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_2, true); // summons bombs on players
|
||||||
|
spawner->m_Events.AddEvent(new TriggerWickedSpirit(spawner), spawner->m_Events.CalculateTime(3000));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i)
|
for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i)
|
||||||
{
|
{
|
||||||
Creature* summon = ObjectAccessor::GetCreature(*me, *i);
|
Creature* summon = ObjectAccessor::GetCreature(*me, *i);
|
||||||
if (summon && summon->GetEntry() == NPC_VILE_SPIRIT)
|
if (summon && summon->GetEntry() == NPC_VILE_SPIRIT)
|
||||||
TeleportSpirit(summon);
|
{
|
||||||
|
summon->m_Events.KillAllEvents(true);
|
||||||
|
summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(50000));
|
||||||
|
summon->GetMotionMaster()->MoveRandom(10.0f);
|
||||||
|
summon->SetReactState(REACT_PASSIVE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1099,22 +1113,6 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void TeleportSpirit(Creature* summon)
|
|
||||||
{
|
|
||||||
float dist = me->GetObjectSize() + (15.0f - me->GetObjectSize()) * float(rand_norm());
|
|
||||||
float angle = float(rand_norm()) * float(2.0f * M_PI);
|
|
||||||
Position dest = TerenasSpawnHeroic;
|
|
||||||
me->MovePosition(dest, dist, angle);
|
|
||||||
dest.m_positionZ += 15.0f;
|
|
||||||
summon->UpdateEntry(NPC_WICKED_SPIRIT);
|
|
||||||
summon->SetReactState(REACT_PASSIVE);
|
|
||||||
summon->NearTeleportTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), dest.GetOrientation());
|
|
||||||
summon->SetSpeed(MOVE_FLIGHT, 0.5f);
|
|
||||||
summon->m_Events.KillAllEvents(true);
|
|
||||||
summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(1000));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SendMusicToPlayers(uint32 musicId) const
|
void SendMusicToPlayers(uint32 musicId) const
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_PLAY_MUSIC, 4);
|
WorldPacket data(SMSG_PLAY_MUSIC, 4);
|
||||||
@@ -1635,8 +1633,13 @@ class npc_strangulate_vehicle : public CreatureScript
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (TempSummon* summ = me->ToTempSummon())
|
if (TempSummon* summ = me->ToTempSummon())
|
||||||
|
{
|
||||||
if (Unit* summoner = summ->GetSummoner())
|
if (Unit* summoner = summ->GetSummoner())
|
||||||
|
{
|
||||||
DoCast(summoner, SPELL_HARVEST_SOUL_TELEPORT_BACK);
|
DoCast(summoner, SPELL_HARVEST_SOUL_TELEPORT_BACK);
|
||||||
|
summoner->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL_DAMAGE_AURA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING)))
|
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING)))
|
||||||
lichKing->AI()->SummonedCreatureDespawn(me);
|
lichKing->AI()->SummonedCreatureDespawn(me);
|
||||||
@@ -1993,6 +1996,10 @@ class npc_broken_frostmourne : public CreatureScript
|
|||||||
_events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6000, 0, PHASE_OUTRO);
|
_events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6000, 0, PHASE_OUTRO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnterEvadeMode()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 const diff)
|
void UpdateAI(uint32 const diff)
|
||||||
{
|
{
|
||||||
UpdateVictim();
|
UpdateVictim();
|
||||||
@@ -2472,14 +2479,18 @@ class spell_the_lich_king_summon_into_air : public SpellScriptLoader
|
|||||||
static Position const offset = {0.0f, 0.0f, 15.0f, 0.0f};
|
static Position const offset = {0.0f, 0.0f, 15.0f, 0.0f};
|
||||||
WorldLocation* dest = const_cast<WorldLocation*>(GetExplTargetDest());
|
WorldLocation* dest = const_cast<WorldLocation*>(GetExplTargetDest());
|
||||||
dest->RelocateOffset(offset);
|
dest->RelocateOffset(offset);
|
||||||
|
GetHitDest()->RelocateOffset(offset);
|
||||||
// spirit bombs get higher
|
// spirit bombs get higher
|
||||||
if (GetSpellInfo()->Effects[effIndex].MiscValue == NPC_SPIRIT_BOMB)
|
if (GetSpellInfo()->Effects[effIndex].MiscValue == NPC_SPIRIT_BOMB)
|
||||||
|
{
|
||||||
dest->RelocateOffset(offset);
|
dest->RelocateOffset(offset);
|
||||||
|
GetHitDest()->RelocateOffset(offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Register()
|
void Register()
|
||||||
{
|
{
|
||||||
OnEffectLaunch += SpellEffectFn(spell_the_lich_king_summon_into_air_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_SUMMON);
|
OnEffectHit += SpellEffectFn(spell_the_lich_king_summon_into_air_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_SUMMON);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2954,6 +2965,15 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader
|
|||||||
lichKing->AI()->DoAction(ACTION_TELEPORT_BACK);
|
lichKing->AI()->DoAction(ACTION_TELEPORT_BACK);
|
||||||
if (Creature* spawner = GetCaster()->FindNearestCreature(NPC_WORLD_TRIGGER_INFINITE_AOI, 50.0f))
|
if (Creature* spawner = GetCaster()->FindNearestCreature(NPC_WORLD_TRIGGER_INFINITE_AOI, 50.0f))
|
||||||
spawner->RemoveAllAuras();
|
spawner->RemoveAllAuras();
|
||||||
|
|
||||||
|
std::list<Creature*> spirits;
|
||||||
|
GetCaster()->GetCreatureListWithEntryInGrid(spirits, NPC_WICKED_SPIRIT, 200.0f);
|
||||||
|
for (std::list<Creature*>::iterator itr = spirits.begin(); itr != spirits.end(); ++itr)
|
||||||
|
{
|
||||||
|
(*itr)->m_Events.KillAllEvents(true);
|
||||||
|
(*itr)->SetReactState(REACT_PASSIVE);
|
||||||
|
(*itr)->AI()->EnterEvadeMode();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveAura()
|
void RemoveAura()
|
||||||
@@ -3046,23 +3066,18 @@ class spell_the_lich_king_trigger_vile_spirit : public SpellScriptLoader
|
|||||||
{
|
{
|
||||||
PrepareSpellScript(spell_the_lich_king_trigger_vile_spirit_SpellScript);
|
PrepareSpellScript(spell_the_lich_king_trigger_vile_spirit_SpellScript);
|
||||||
|
|
||||||
void TeleportOutside()
|
void ActivateSpirit()
|
||||||
{
|
{
|
||||||
Creature* target = GetHitCreature();
|
Creature* target = GetHitCreature();
|
||||||
if (!target)
|
if (!target)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Position dest;
|
VileSpiritActivateEvent(target).Execute(0, 0);
|
||||||
Position offset;
|
|
||||||
TerenasSpawnHeroic.GetPositionOffsetTo(*target, offset);
|
|
||||||
GetCaster()->GetPosition(&dest);
|
|
||||||
dest.RelocateOffset(offset);
|
|
||||||
target->NearTeleportTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), dest.GetOrientation());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Register()
|
void Register()
|
||||||
{
|
{
|
||||||
OnHit += SpellHitFn(spell_the_lich_king_trigger_vile_spirit_SpellScript::TeleportOutside);
|
OnHit += SpellHitFn(spell_the_lich_king_trigger_vile_spirit_SpellScript::ActivateSpirit);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -290,6 +290,11 @@ class instance_icecrown_citadel : public InstanceMapScript
|
|||||||
case NPC_TERENAS_MENETHIL_FROSTMOURNE_H:
|
case NPC_TERENAS_MENETHIL_FROSTMOURNE_H:
|
||||||
TerenasMenethilGUID = creature->GetGUID();
|
TerenasMenethilGUID = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
|
case NPC_WICKED_SPIRIT:
|
||||||
|
// Remove corpse as soon as it dies (and respawn 10 seconds later)
|
||||||
|
creature->SetCorpseDelay(0);
|
||||||
|
creature->SetReactState(REACT_PASSIVE);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user