Scripts/Icecrown Citadel
* Properly remove glow aura during outro from Tirion * Improved Wicked Spirit behaviour & visibility on heroic mode * Removed gossip npcflag from Tirion after LK death
This commit is contained in:
@@ -3417,6 +3417,9 @@ void SpellMgr::LoadDbcDataCorrections()
|
|||||||
spellInfo->rangeIndex = 3; // 20yd
|
spellInfo->rangeIndex = 3; // 20yd
|
||||||
spellInfo->EffectRadiusIndex[0] = 20; // 25yd
|
spellInfo->EffectRadiusIndex[0] = 20; // 25yd
|
||||||
break;
|
break;
|
||||||
|
case 72405: // Broken Frostmourne
|
||||||
|
spellInfo->EffectRadiusIndex[1] = 22; // 200yd
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -499,6 +499,16 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
{
|
{
|
||||||
_JustDied();
|
_JustDied();
|
||||||
DoCastAOE(SPELL_PLAY_MOVIE, false);
|
DoCastAOE(SPELL_PLAY_MOVIE, false);
|
||||||
|
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||||
|
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x03);
|
||||||
|
float x, y, z;
|
||||||
|
me->GetPosition(x, y, z);
|
||||||
|
// use larger distance for vmap height search than in most other cases
|
||||||
|
float ground_Z = me->GetMap()->GetHeight(x, y, z, true, MAX_FALL_DISTANCE);
|
||||||
|
if (fabs(ground_Z - z) < 0.1f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
me->GetMotionMaster()->MoveFall(ground_Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* target)
|
void EnterCombat(Unit* target)
|
||||||
@@ -722,16 +732,7 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
summons.Summon(summon);
|
summons.Summon(summon);
|
||||||
if (events.GetPhaseMask() & PHASE_MASK_FROSTMOURNE)
|
if (events.GetPhaseMask() & PHASE_MASK_FROSTMOURNE)
|
||||||
{
|
{
|
||||||
Position offset;
|
TeleportSpirit(summon);
|
||||||
me->GetPositionOffsetTo(*summon, offset);
|
|
||||||
offset.m_positionZ += 5.0f;
|
|
||||||
Position dest = TerenasSpawnHeroic;
|
|
||||||
dest.RelocateOffset(offset);
|
|
||||||
summon->NearTeleportTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), dest.GetOrientation());
|
|
||||||
summon->UpdateEntry(NPC_WICKED_SPIRIT);
|
|
||||||
summon->SetSpeed(MOVE_FLIGHT, 0.5f);
|
|
||||||
summon->CastSpell(summon, SPELL_VILE_SPIRIT_MOVE_SEARCH, true);
|
|
||||||
summon->CastSpell((Unit*)NULL, SPELL_VILE_SPIRIT_DAMAGE_SEARCH, true);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1028,6 +1029,13 @@ class boss_the_lich_king : public CreatureScript
|
|||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i)
|
||||||
|
{
|
||||||
|
Creature* summon = ObjectAccessor::GetCreature(*me, *i);
|
||||||
|
if (summon && summon->GetEntry() == NPC_VILE_SPIRIT)
|
||||||
|
TeleportSpirit(summon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVENT_OUTRO_TALK_1:
|
case EVENT_OUTRO_TALK_1:
|
||||||
@@ -1099,6 +1107,21 @@ 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);
|
||||||
@@ -1160,6 +1183,8 @@ class npc_tirion_fordring_tft : public CreatureScript
|
|||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
_events.Reset();
|
_events.Reset();
|
||||||
|
if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE)
|
||||||
|
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MovementInform(uint32 type, uint32 id)
|
void MovementInform(uint32 type, uint32 id)
|
||||||
@@ -1220,6 +1245,10 @@ class npc_tirion_fordring_tft : public CreatureScript
|
|||||||
void JustReachedHome()
|
void JustReachedHome()
|
||||||
{
|
{
|
||||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
||||||
|
|
||||||
|
if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE)
|
||||||
|
return;
|
||||||
|
|
||||||
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2787,7 +2816,9 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL
|
|||||||
|
|
||||||
// this spell has SPELL_AURA_BLOCK_SPELL_FAMILY so every next cast of this
|
// this spell has SPELL_AURA_BLOCK_SPELL_FAMILY so every next cast of this
|
||||||
// searcher spell will be blocked
|
// searcher spell will be blocked
|
||||||
GetCaster()->GetAI()->SetData(DATA_VILE, 1);
|
if (TempSummon* summon = GetCaster()->ToTempSummon())
|
||||||
|
if (Unit* summoner = summon->GetSummoner())
|
||||||
|
summoner->GetAI()->SetData(DATA_VILE, 1);
|
||||||
GetCaster()->CastSpell((Unit*)NULL, SPELL_SPIRIT_BURST, true);
|
GetCaster()->CastSpell((Unit*)NULL, SPELL_SPIRIT_BURST, true);
|
||||||
GetCaster()->ToCreature()->DespawnOrUnsummon(3000);
|
GetCaster()->ToCreature()->DespawnOrUnsummon(3000);
|
||||||
GetCaster()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
GetCaster()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||||
|
|||||||
Reference in New Issue
Block a user