aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorwotlk-enthusiast <61640421+wotlk-enthusiast@users.noreply.github.com>2021-01-08 14:56:55 -0700
committerGitHub <noreply@github.com>2021-01-08 22:56:55 +0100
commita225717b99b6d1befcfe40f3001bfb1efcf8a9d8 (patch)
tree2c1aa70dfa38bdc28dc190ec480eb02b9d85646a /src
parent94a74126e9b82c1f31ac4218ff5fbaf773cd50ef (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.cpp75
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;
}