diff options
author | wotlk-enthusiast <61640421+wotlk-enthusiast@users.noreply.github.com> | 2021-01-08 14:56:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-08 22:56:55 +0100 |
commit | a225717b99b6d1befcfe40f3001bfb1efcf8a9d8 (patch) | |
tree | 2c1aa70dfa38bdc28dc190ec480eb02b9d85646a /src | |
parent | 94a74126e9b82c1f31ac4218ff5fbaf773cd50ef (diff) |
Scripts/Utgarde Pinnacle: Svala Sorrowgrave Intro and Ritual of the Sword (#24503)
* Scripts/Svala SorrowGrave - Fix broken intro event and Ritual of the Sword
* Added missing header for non-PCH build.
* Added error checking for Svala's targeting, and tightened up the timing on the intro event.
* Update WorldDB\Creature_Template_Movement for Svala
* Fix movement during intro and ritual event
* Rename SQL file for merge
Co-authored-by: Carbenium <carbenium@outlook.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp | 75 |
1 files changed, 39 insertions, 36 deletions
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index c9fd7c03bd6..d16261ddda8 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -16,9 +16,11 @@ */ #include "ScriptMgr.h" +#include "Player.h" #include "GameObject.h" #include "InstanceScript.h" #include "MotionMaster.h" +#include "MoveSplineInit.h" #include "ObjectAccessor.h" #include "ScriptedCreature.h" #include "SpellInfo.h" @@ -117,7 +119,8 @@ enum Events //SACRIFICING EVENT_SPAWN_RITUAL_CHANNELERS, EVENT_RITUAL_STRIKE, - EVENT_RITUAL_DISARM + EVENT_RITUAL_DISARM, + EVENT_FINISH_RITUAL }; enum Misc @@ -163,7 +166,7 @@ class boss_svala : public CreatureScript else events.SetPhase(IDLE); - me->SetDisableGravity(events.IsInPhase(NORMAL)); + me->SetDisableGravity(false); Initialize(); @@ -220,20 +223,6 @@ class boss_svala : public CreatureScript Talk(SAY_DEATH); } - void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override - { - if (spellInfo->Id == SPELL_RITUAL_STRIKE_EFF_1 && !events.IsInPhase(NORMAL) && !events.IsInPhase(SVALADEAD)) - { - events.SetPhase(NORMAL); - events.ScheduleEvent(EVENT_SINISTER_STRIKE, 7s, 0, NORMAL); - events.ScheduleEvent(EVENT_CALL_FLAMES, 10s, 20s, 0, NORMAL); - SetCombatMovement(true); - - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 300.0f, true)) - me->GetMotionMaster()->MoveChase(target); - } - } - void UpdateAI(uint32 diff) override { if (events.IsInPhase(IDLE)) @@ -244,7 +233,7 @@ class boss_svala : public CreatureScript events.Update(diff); - if (!_sacrificed && HealthBelowPct(50)) + if (events.IsInPhase(NORMAL) && !_sacrificed && HealthBelowPct(50)) { _sacrificed = true; events.SetPhase(SACRIFICING); @@ -271,20 +260,23 @@ class boss_svala : public CreatureScript { if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID)) arthas->CastSpell(me, SPELL_TRANSFORMING_CHANNEL, true); - Position pos; - pos.Relocate(me); - pos.m_positionZ += 8.0f; - me->GetMotionMaster()->MoveTakeoff(0, pos); + + me->SetDisableGravity(true); + Movement::MoveSplineInit init(me); + init.MoveTo(296.614f, -346.2484f, 95.62769f); + init.SetFly(); + me->GetMotionMaster()->LaunchMoveSpline(std::move(init)); + // spectators flee event - std::list<Creature*> lspectatorList; - GetCreatureListWithEntryInGrid(lspectatorList, me, NPC_SPECTATOR, 100.0f); - for (std::list<Creature*>::iterator itr = lspectatorList.begin(); itr != lspectatorList.end(); ++itr) + std::list<Creature*> spectators; + GetCreatureListWithEntryInGrid(spectators, me, NPC_SPECTATOR, 100.0f); + for (Creature* spectator : spectators) { - if ((*itr)->IsAlive()) + if (spectator->IsAlive()) { - (*itr)->SetStandState(UNIT_STAND_STATE_STAND); - (*itr)->SetWalk(false); - (*itr)->GetMotionMaster()->MovePoint(1, spectatorWP[0]); + spectator->SetStandState(UNIT_STAND_STATE_STAND); + spectator->SetWalk(false); + spectator->GetMotionMaster()->MovePoint(1, spectatorWP[0]); } } events.ScheduleEvent(EVENT_INTRO_TRANSFORM_1, 4200ms, 0, INTRO); @@ -304,7 +296,7 @@ class boss_svala : public CreatureScript me->RemoveAllAuras(); me->UpdateEntry(NPC_SVALA_SORROWGRAVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_1, 6s, 0, INTRO); + events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_1, 2s, 0, INTRO); break; case EVENT_INTRO_SVALA_TALK_1: Talk(SAY_SVALA_INTRO_1); @@ -317,21 +309,17 @@ class boss_svala : public CreatureScript break; case EVENT_INTRO_SVALA_TALK_2: Talk(SAY_SVALA_INTRO_2); - me->SetFacingTo(1.58f); + me->SetFacingTo(1.832595f); if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID)) arthas->SetVisible(false); events.ScheduleEvent(EVENT_INTRO_RELOCATE_SVALA, 13800ms, 0, INTRO); break; case EVENT_INTRO_RELOCATE_SVALA: { - Position pos; - pos.Relocate(me); - pos.m_positionX = me->GetHomePosition().GetPositionX(); - pos.m_positionY = me->GetHomePosition().GetPositionY(); - pos.m_positionZ = 90.6065f; - me->GetMotionMaster()->MoveLand(0, pos); me->SetDisableGravity(false, true); me->SetHover(true); + me->GetMotionMaster()->MoveFall(); + events.ScheduleEvent(EVENT_INTRO_DESPAWN_ARTHAS, 3s, 0, INTRO); break; } @@ -344,6 +332,8 @@ class boss_svala : public CreatureScript _arthasGUID.Clear(); events.SetPhase(NORMAL); _introCompleted = true; + if (Unit* target = me->SelectNearestPlayer(100.0f)) + AttackStart(target); events.ScheduleEvent(EVENT_SINISTER_STRIKE, 7s, 0, NORMAL); events.ScheduleEvent(EVENT_CALL_FLAMES, 10s, 20s, 0, NORMAL); break; @@ -359,6 +349,7 @@ class boss_svala : public CreatureScript case EVENT_RITUAL_PREPARATION: if (Unit* sacrificeTarget = SelectTarget(SelectTargetMethod::Random, 0, 80.0f, true)) { + me->SetDisableGravity(true, true); instance->SetGuidData(DATA_SACRIFICED_PLAYER, sacrificeTarget->GetGUID()); Talk(SAY_SACRIFICE_PLAYER); DoCast(sacrificeTarget, SPELL_RITUAL_PREPARATION); @@ -366,6 +357,7 @@ class boss_svala : public CreatureScript DoCast(me, SPELL_RITUAL_OF_THE_SWORD); } events.ScheduleEvent(EVENT_SPAWN_RITUAL_CHANNELERS, 1s, 0, SACRIFICING); + events.ScheduleEvent(EVENT_FINISH_RITUAL, 25s, 0); break; case EVENT_SPAWN_RITUAL_CHANNELERS: DoCast(me, SPELL_RITUAL_CHANNELER_1, true); @@ -383,6 +375,17 @@ class boss_svala : public CreatureScript case EVENT_RITUAL_DISARM: DoCast(me, SPELL_RITUAL_DISARM); break; + case EVENT_FINISH_RITUAL: + me->SetDisableGravity(false, true); + SetCombatMovement(true); + + if (Unit* target = me->SelectNearestPlayer(100.0f)) + AttackStart(target); + + events.SetPhase(NORMAL); + events.ScheduleEvent(EVENT_SINISTER_STRIKE, 7s, 0, NORMAL); + events.ScheduleEvent(EVENT_CALL_FLAMES, 10s, 20s, 0, NORMAL); + break; default: break; } |