mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-10 12:09:14 +01:00
Core/Scripts: More fixes in boss Lich King (#20147)
* Core/Scripts: More fixes in boss Lich King
Fix Valkyr charge spell, they will no longer ignore Z position and become unreachable.
Correct height of Spirit Bomb and added the 3 seconds delay on his explosion.
Set the Trigger inside frostmourne room as active, to avoid problems with reseting the room, e.g: Spirit Bombs not despawning and Wicked Spirits stuck in evade.
Use correct InhabitType for Wicked and Vile Spirits, this avoid a situation where they could spawn falling.
(cherry picked from commit 22a7956069)
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
-- Vile Spirit + (1),(2),(3) / Wicked Spirit + (1),(2),(3)
|
||||
UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (39190,39287,39288,39289,37799,39284,39285,39286);
|
||||
@@ -4222,9 +4222,13 @@ void Spell::EffectChargeDest(SpellEffIndex /*effIndex*/)
|
||||
if (effectHandleMode == SPELL_EFFECT_HANDLE_LAUNCH)
|
||||
{
|
||||
Position pos = destTarget->GetPosition();
|
||||
float angle = m_caster->GetRelativeAngle(pos.GetPositionX(), pos.GetPositionY());
|
||||
float dist = m_caster->GetDistance(pos);
|
||||
pos = m_caster->GetFirstCollisionPosition(dist, angle);
|
||||
|
||||
if (!m_caster->IsWithinLOS(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()))
|
||||
{
|
||||
float angle = m_caster->GetRelativeAngle(pos.GetPositionX(), pos.GetPositionY());
|
||||
float dist = m_caster->GetDistance(pos);
|
||||
pos = m_caster->GetFirstCollisionPosition(dist, angle);
|
||||
}
|
||||
|
||||
m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ);
|
||||
}
|
||||
|
||||
@@ -271,6 +271,9 @@ enum Events
|
||||
EVENT_TELEPORT,
|
||||
EVENT_MOVE_TO_LICH_KING,
|
||||
EVENT_DESPAWN_SELF,
|
||||
|
||||
//Spirit Bomb
|
||||
EVENT_BOMB_EXPLOSION
|
||||
};
|
||||
|
||||
enum EventGroups
|
||||
@@ -1037,7 +1040,6 @@ class boss_the_lich_king : public CreatureScript
|
||||
summon->RemoveAurasDueToSpell(SPELL_VILE_SPIRIT_MOVE_SEARCH);
|
||||
summon->RemoveAurasDueToSpell(SPELL_VILE_SPIRIT_DAMAGE_SEARCH);
|
||||
summon->GetMotionMaster()->MoveTargetedHome();
|
||||
summon->GetMotionMaster()->MoveRandom(10.0f);
|
||||
}
|
||||
else if (summon->GetEntry() == NPC_RAGING_SPIRIT)
|
||||
summon->AI()->DoAction(ACTION_DISABLE_RAGING);
|
||||
@@ -1054,6 +1056,7 @@ class boss_the_lich_king : public CreatureScript
|
||||
{
|
||||
triggers.sort(Trinity::ObjectDistanceOrderPred(terenas, true));
|
||||
Creature* spawner = triggers.front();
|
||||
spawner->setActive(true);
|
||||
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->m_Events.AddEvent(new TriggerWickedSpirit(spawner), spawner->m_Events.CalculateTime(3000));
|
||||
@@ -1955,20 +1958,29 @@ class npc_spirit_bomb : public CreatureScript
|
||||
if (type != POINT_MOTION_TYPE || point != POINT_GROUND)
|
||||
return;
|
||||
|
||||
me->RemoveAllAuras();
|
||||
DoCastAOE(SPELL_EXPLOSION);
|
||||
me->DespawnOrUnsummon(1000);
|
||||
_events.ScheduleEvent(EVENT_BOMB_EXPLOSION, 3000);
|
||||
}
|
||||
|
||||
void AttackStart(Unit* /*victim*/) override
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 /*diff*/) override
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
UpdateVictim();
|
||||
// no melee attacks
|
||||
|
||||
_events.Update(diff);
|
||||
|
||||
if (_events.ExecuteEvent() == EVENT_BOMB_EXPLOSION)
|
||||
{
|
||||
me->RemoveAllAuras();
|
||||
DoCastAOE(SPELL_EXPLOSION);
|
||||
me->DespawnOrUnsummon(1000);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
@@ -2493,8 +2505,9 @@ class spell_the_lich_king_summon_into_air : public SpellScriptLoader
|
||||
// spirit bombs get higher
|
||||
if (GetSpellInfo()->GetEffect(effIndex)->MiscValue == NPC_SPIRIT_BOMB)
|
||||
{
|
||||
dest->RelocateOffset(offset);
|
||||
GetHitDest()->RelocateOffset(offset);
|
||||
static Position const offsetExtra = { 0.0f, 0.0f, 5.0f, 0.0f };
|
||||
dest->RelocateOffset(offsetExtra);
|
||||
GetHitDest()->RelocateOffset(offsetExtra);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user