mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-04 22:07:52 +00:00
fix(Scripts/Ulduar): Update Yogg portal spawning, p1 Sara Shadow Nova (#26632)
This commit is contained in:
@@ -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);
|
||||
@@ -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');
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user