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:
Shauren
2012-06-18 13:16:01 +02:00
parent f90f5b6fb7
commit 9938128932
3 changed files with 103 additions and 57 deletions
@@ -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;
} }