diff options
author | Gustavo <sirikfoll@hotmail.com> | 2017-08-17 12:03:56 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-17 12:03:56 -0300 |
commit | 22a7956069c293a3f8eab8adcd84a9f4703f364a (patch) | |
tree | e3bb77f4da2c3127be444a64808366e849f53935 /src | |
parent | 7b747848ede0bdb7e12374d3560059ec708e177a (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp | 31 |
2 files changed, 29 insertions, 12 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 5b4a767b5b4..f281b27b145 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4655,9 +4655,13 @@ void Spell::EffectChargeDest(SpellEffIndex /*effIndex*/) if (m_targets.HasDst()) { 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); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 07065c48e4f..7b1de4c8bfe 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -268,7 +268,10 @@ enum Events // Strangulate Vehicle (Harvest Soul) EVENT_TELEPORT, EVENT_MOVE_TO_LICH_KING, - EVENT_DESPAWN_SELF + EVENT_DESPAWN_SELF, + + //Spirit Bomb + EVENT_BOMB_EXPLOSION }; enum EventGroups @@ -1057,7 +1060,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); @@ -1074,6 +1076,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)); @@ -1974,20 +1977,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 @@ -2509,8 +2521,9 @@ class spell_the_lich_king_summon_into_air : public SpellScriptLoader // spirit bombs get higher if (GetSpellInfo()->Effects[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); } } |