fix(Scripts/Ulduar): Update Yogg portal spawning, p1 Sara Shadow Nova (#26632)

This commit is contained in:
sogladev
2026-07-16 00:31:05 +02:00
committed by GitHub
parent 65443de1cd
commit c60a4bde66
4 changed files with 49 additions and 44 deletions

View File

@@ -0,0 +1,5 @@
-- Yogg Portal 'Descend Into Madness'
-- Movement flags: DisableGravity + Root
DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 34072);
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
(34072, 0, 0, 1, 1, 0, 0, 0);

View File

@@ -0,0 +1,7 @@
-- Sara should start friendly, becoming hostile when Yogg-Saron reveals himself (phase 2)
UPDATE `creature_template` SET `faction` = 35 WHERE `entry` IN (33134, 34332);
-- Sara (1)
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 65719) AND (`SourceId` = 0) AND (`ElseGroup` = 1) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 34332) AND (`ConditionValue3` = 0);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13, 1, 65719, 0, 1, 31, 0, 3, 34332, 0, 0, 0, 0, '', 'Shadow Nova');

View File

@@ -2057,12 +2057,6 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
});
// Shadow Nova
ApplySpellFix({ 62714, 65209 }, [](SpellInfo* spellInfo)
{
spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
});
// Cosmic Smash (Algalon the Observer)
ApplySpellFix({ 62293 }, [](SpellInfo* spellInfo)
{

View File

@@ -49,6 +49,8 @@ enum YoggSpells
SPELL_TITANIC_STORM_PASSIVE = 64171,
SPELL_WEAKENED = 64162,
SPELL_TELEPORT_PORTAL_VISUAL = 64416,
// GLOBAL
SPELL_SANITY_BASE = 63786,
SPELL_SANITY = 63050,
@@ -70,6 +72,7 @@ enum YoggSpells
// GUARDIANS OF YOGG-SARON
SPELL_SHADOW_NOVA = 62714,
SPELL_SHADOW_NOVA_SARA = 65719,
SPELL_DARK_VOLLEY = 63038,
// SARA P2
@@ -290,16 +293,16 @@ const uint32 TABLE_GOSSIP_ENTRY[4] = {NPC_FREYA_GOSSIP, NPC_HODIR_GOSSIP, NPC_MI
static LocationsXY yoggPortalLoc[] =
{
{1970.48f, -9.75f, 325.5f},
{1992.76f, -10.21f, 325.5f},
{1995.53f, -39.78f, 325.5f},
{1969.25f, -42.00f, 325.5f},
{1960.62f, -32.00f, 325.5f},
{1981.98f, -5.69f, 325.5f},
{1982.78f, -45.73f, 325.5f},
{2000.66f, -29.68f, 325.5f},
{1999.88f, -19.61f, 325.5f},
{1961.37f, -19.54f, 325.5f}
{1964.60f, -42.71f, 325.08f},
{1986.94f, -46.21f, 324.98f},
{1989.50f, -6.70f, 325.08f},
{1965.52f, -8.09f, 324.95f},
{2000.84f, -25.40f, 325.19f},
{1960.22f, -26.14f, 325.01f},
{1976.30f, -47.83f, 325.11f},
{1997.69f, -37.46f, 325.04f},
{1998.07f, -13.36f, 325.17f},
{1976.99f, -3.96f, 325.17f}
};
enum Texts
@@ -452,6 +455,8 @@ struct boss_yoggsaron_sara : public ScriptedAI
me->SetVisible(true);
me->SetDisplayId(me->GetNativeDisplayId());
me->SetDisableGravity(true);
me->SetFaction(FACTION_FRIENDLY);
me->ClearUnitState(UNIT_STATE_EVADE);
EnableSara(false);
SpawnClouds();
@@ -492,8 +497,6 @@ struct boss_yoggsaron_sara : public ScriptedAI
// Engage Keepers
summons.DoZoneInCombat();
me->CastSpell(me, SPELL_SANITY_BASE, true);
events.ScheduleEvent(EVENT_SARA_P1_DOORS_CLOSE, 15s, 0, EVENT_PHASE_ONE);
events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 15min, 0, 0);
events.ScheduleEvent(EVENT_SARA_P1_SUMMON, 0ms, 0, EVENT_PHASE_ONE);
@@ -579,15 +582,15 @@ struct boss_yoggsaron_sara : public ScriptedAI
void AddPortals()
{
_summonSpeed -= 0.1f;
Creature* cr = nullptr;
Creature* creature = nullptr;
// Spawn Portals
for (uint8 i = 0; i < RAID_MODE(4, 10); ++i)
{
if ((cr = me->SummonCreature(NPC_DESCEND_INTO_MADNESS, yoggPortalLoc[i].x, yoggPortalLoc[i].y, yoggPortalLoc[i].z, 0, TEMPSUMMON_TIMED_DESPAWN, 25000)))
if ((creature = me->SummonCreature(NPC_DESCEND_INTO_MADNESS, yoggPortalLoc[i].x, yoggPortalLoc[i].y, yoggPortalLoc[i].z, 0, TEMPSUMMON_TIMED_DESPAWN, 25000)))
{
cr->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NON_ATTACKABLE);
cr->SetArmor(_currentIllusion);
creature->SetArmor(_currentIllusion);
creature->CastSpell(creature, SPELL_TELEPORT_PORTAL_VISUAL, true);
}
}
@@ -699,39 +702,33 @@ struct boss_yoggsaron_sara : public ScriptedAI
me->CastSpell(me, SPELL_SHATTERED_ILLUSION, true);
}
void DamageTaken(Unit* who, uint32& damage, DamageEffectType, SpellSchoolMask) override
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override
{
// Guardians can be spawned by walking into Ominous Clouds even when InitFight
// never ran (e.g. Vezax not defeated); their novas must not start phase 2 then.
if (!_instance || _instance->GetBossState(BOSS_YOGGSARON) != IN_PROGRESS)
if (!_instance || _instance->GetBossState(BOSS_YOGGSARON) != IN_PROGRESS || !attacker || attacker->GetEntry() != NPC_GUARDIAN_OF_YS || _secondPhase)
{
damage = 0;
return;
}
if (who && who->GetEntry() == NPC_GUARDIAN_OF_YS && !_secondPhase)
// START PHASE 2
if (me->GetHealth() <= damage)
{
damage = 25000;
_secondPhase = true;
damage = 0;
// START PHASE 2
if (me->GetHealth() <= damage)
{
_secondPhase = true;
damage = 0;
events.SetPhase(EVENT_PHASE_TWO);
me->SetHealth(me->GetMaxHealth());
me->SetInCombatWithZone();
me->SetFaction(FACTION_MONSTER_2);
events.SetPhase(EVENT_PHASE_TWO);
me->SetHealth(me->GetMaxHealth());
if (Creature* creature = me->SummonCreature(NPC_YOGG_SARON, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI))
creature->SetVisible(false);
if (Creature* cr = me->SummonCreature(NPC_YOGG_SARON, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI))
cr->SetVisible(false);
_p2TalkTimer++;
Talk(SAY_SARA_TRANSFORM_1);
}
return;
_p2TalkTimer++;
Talk(SAY_SARA_TRANSFORM_1);
}
damage = 0;
}
// Players who descend into a portal are teleported ~100 yd below to the illusion
@@ -1040,7 +1037,8 @@ struct boss_yoggsaron_guardian_of_ys : public ScriptedAI
void JustDied(Unit*) override
{
me->CastSpell((Unit*)nullptr, SPELL_SHADOW_NOVA, true);
DoCastAOE(SPELL_SHADOW_NOVA, true);
DoCastAOE(SPELL_SHADOW_NOVA_SARA, true);
}
void UpdateAI(uint32 diff) override
@@ -2101,7 +2099,8 @@ struct boss_yoggsaron_voice : public NullCreatureAI
void Reset() override
{
me->CastSpell(me, SPELL_INSANE_PERIODIC, true);
DoCastSelf(SPELL_INSANE_PERIODIC, true);
DoCastSelf(SPELL_SANITY_BASE, true);
}
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override