fix(Script/UtgardePinnacle) Svala Sorrowgrave Call of Flames timings (#22860)

Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
Co-authored-by: Ryan Turner <16946913+TheSCREWEDSoftware@users.noreply.github.com>
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
This commit is contained in:
blinkysc
2026-06-30 11:20:23 -05:00
committed by GitHub
parent ea220a857a
commit 17d98abcb0
@@ -112,9 +112,11 @@ public:
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
Started = false; Started = false;
ArthasGUID.Clear(); ArthasGUID.Clear();
lastBrazierGUID.Clear();
} }
ObjectGuid ArthasGUID; ObjectGuid ArthasGUID;
ObjectGuid lastBrazierGUID;
bool Started; bool Started;
InstanceScript* instance; InstanceScript* instance;
EventMap events; EventMap events;
@@ -132,13 +134,20 @@ public:
summons.DespawnAll(); summons.DespawnAll();
events.Reset(); events.Reset();
events2.Reset(); events2.Reset();
lastBrazierGUID.Clear();
if (!Started) if (!Started)
{
me->SetImmuneToAll(true); me->SetImmuneToAll(true);
me->SetHover(false);
me->SetDisableGravity(false);
}
else else
{ {
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetImmuneToAll(false); me->SetImmuneToAll(false);
me->SetHover(true); me->SetHover(true);
me->SetDisableGravity(true);
} }
} }
@@ -229,6 +238,7 @@ public:
events2.ScheduleEvent(EVENT_SVALA_TALK3, 3s); events2.ScheduleEvent(EVENT_SVALA_TALK3, 3s);
break; break;
case EVENT_SVALA_TALK3: case EVENT_SVALA_TALK3:
me->SetDisableGravity(true);
me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 6.0f); me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 6.0f);
me->SetHover(true); me->SetHover(true);
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
@@ -279,6 +289,7 @@ public:
events2.ScheduleEvent(EVENT_SVALA_TALK8, 13s); events2.ScheduleEvent(EVENT_SVALA_TALK8, 13s);
break; break;
case EVENT_SVALA_TALK8: case EVENT_SVALA_TALK8:
me->SetDisableGravity(false);
me->GetMotionMaster()->MoveFall(0, true); me->GetMotionMaster()->MoveFall(0, true);
events2.ScheduleEvent(EVENT_SVALA_TALK9, 2s); events2.ScheduleEvent(EVENT_SVALA_TALK9, 2s);
break; break;
@@ -309,7 +320,8 @@ public:
summons.DespawnAll(); summons.DespawnAll();
me->CastSpell(me, SPELL_CALL_FLAMES, false); me->CastSpell(me, SPELL_CALL_FLAMES, false);
events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 500ms); events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 500ms);
events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 1s); events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 2500ms);
events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 4500ms);
events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, 8s, 12s); events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, 8s, 12s);
break; break;
case EVENT_SORROWGRAVE_FLAMES2: case EVENT_SORROWGRAVE_FLAMES2:
@@ -318,8 +330,25 @@ public:
me->GetCreaturesWithEntryInRange(braziers, 100.0f, NPC_FLAME_BRAZIER); me->GetCreaturesWithEntryInRange(braziers, 100.0f, NPC_FLAME_BRAZIER);
if (!braziers.empty()) if (!braziers.empty())
{ {
for (std::list<Creature*>::const_iterator itr = braziers.begin(); itr != braziers.end(); ++itr) std::vector<Creature*> availableBraziers;
(*itr)->CastCustomSpell(SPELL_BALL_OF_FLAME, SPELLVALUE_MAX_TARGETS, 1, (*itr), true);
for (Creature* brazier : braziers)
{
if (brazier->GetGUID() != lastBrazierGUID)
availableBraziers.push_back(brazier);
}
if (availableBraziers.empty())
availableBraziers.assign(braziers.begin(), braziers.end());
uint32 randomIndex = urand(0, availableBraziers.size() - 1);
Creature* selectedBrazier = availableBraziers[randomIndex];
if (selectedBrazier)
{
selectedBrazier->CastCustomSpell(SPELL_BALL_OF_FLAME, SPELLVALUE_MAX_TARGETS, 1, nullptr, false);
lastBrazierGUID = selectedBrazier->GetGUID();
}
} }
break; break;
} }
@@ -336,6 +365,7 @@ public:
DoTeleportPlayer(target, 296.632f, -346.075f, 90.63f, 4.6f); DoTeleportPlayer(target, 296.632f, -346.075f, 90.63f, 4.6f);
me->NearTeleportTo(296.632f, -346.075f, 110.0f, 4.6f, false); me->NearTeleportTo(296.632f, -346.075f, 110.0f, 4.6f, false);
me->SetControlled(true, UNIT_STATE_ROOT); me->SetControlled(true, UNIT_STATE_ROOT);
me->SetDisableGravity(true);
} }
events.DelayEvents(25001ms); // +1 just to be sure events.DelayEvents(25001ms); // +1 just to be sure
@@ -349,8 +379,11 @@ public:
case EVENT_SORROWGRAVE_FINISH_RITUAL: case EVENT_SORROWGRAVE_FINISH_RITUAL:
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
me->SetDisableGravity(false);
me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 3.0f);
AttackStart(me->GetVictim()); AttackStart(me->GetVictim());
me->GetMotionMaster()->MoveFall(0, true); me->GetMotionMaster()->MoveChase(me->GetVictim());
summons.DespawnAll(); summons.DespawnAll();
break; break;
} }