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;
|
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)
|
// Cosmic Smash (Algalon the Observer)
|
||||||
ApplySpellFix({ 62293 }, [](SpellInfo* spellInfo)
|
ApplySpellFix({ 62293 }, [](SpellInfo* spellInfo)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ enum YoggSpells
|
|||||||
SPELL_TITANIC_STORM_PASSIVE = 64171,
|
SPELL_TITANIC_STORM_PASSIVE = 64171,
|
||||||
SPELL_WEAKENED = 64162,
|
SPELL_WEAKENED = 64162,
|
||||||
|
|
||||||
|
SPELL_TELEPORT_PORTAL_VISUAL = 64416,
|
||||||
|
|
||||||
// GLOBAL
|
// GLOBAL
|
||||||
SPELL_SANITY_BASE = 63786,
|
SPELL_SANITY_BASE = 63786,
|
||||||
SPELL_SANITY = 63050,
|
SPELL_SANITY = 63050,
|
||||||
@@ -70,6 +72,7 @@ enum YoggSpells
|
|||||||
|
|
||||||
// GUARDIANS OF YOGG-SARON
|
// GUARDIANS OF YOGG-SARON
|
||||||
SPELL_SHADOW_NOVA = 62714,
|
SPELL_SHADOW_NOVA = 62714,
|
||||||
|
SPELL_SHADOW_NOVA_SARA = 65719,
|
||||||
SPELL_DARK_VOLLEY = 63038,
|
SPELL_DARK_VOLLEY = 63038,
|
||||||
|
|
||||||
// SARA P2
|
// SARA P2
|
||||||
@@ -290,16 +293,16 @@ const uint32 TABLE_GOSSIP_ENTRY[4] = {NPC_FREYA_GOSSIP, NPC_HODIR_GOSSIP, NPC_MI
|
|||||||
|
|
||||||
static LocationsXY yoggPortalLoc[] =
|
static LocationsXY yoggPortalLoc[] =
|
||||||
{
|
{
|
||||||
{1970.48f, -9.75f, 325.5f},
|
{1964.60f, -42.71f, 325.08f},
|
||||||
{1992.76f, -10.21f, 325.5f},
|
{1986.94f, -46.21f, 324.98f},
|
||||||
{1995.53f, -39.78f, 325.5f},
|
{1989.50f, -6.70f, 325.08f},
|
||||||
{1969.25f, -42.00f, 325.5f},
|
{1965.52f, -8.09f, 324.95f},
|
||||||
{1960.62f, -32.00f, 325.5f},
|
{2000.84f, -25.40f, 325.19f},
|
||||||
{1981.98f, -5.69f, 325.5f},
|
{1960.22f, -26.14f, 325.01f},
|
||||||
{1982.78f, -45.73f, 325.5f},
|
{1976.30f, -47.83f, 325.11f},
|
||||||
{2000.66f, -29.68f, 325.5f},
|
{1997.69f, -37.46f, 325.04f},
|
||||||
{1999.88f, -19.61f, 325.5f},
|
{1998.07f, -13.36f, 325.17f},
|
||||||
{1961.37f, -19.54f, 325.5f}
|
{1976.99f, -3.96f, 325.17f}
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Texts
|
enum Texts
|
||||||
@@ -452,6 +455,8 @@ struct boss_yoggsaron_sara : public ScriptedAI
|
|||||||
me->SetVisible(true);
|
me->SetVisible(true);
|
||||||
me->SetDisplayId(me->GetNativeDisplayId());
|
me->SetDisplayId(me->GetNativeDisplayId());
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
|
me->SetFaction(FACTION_FRIENDLY);
|
||||||
|
me->ClearUnitState(UNIT_STATE_EVADE);
|
||||||
EnableSara(false);
|
EnableSara(false);
|
||||||
SpawnClouds();
|
SpawnClouds();
|
||||||
|
|
||||||
@@ -492,8 +497,6 @@ struct boss_yoggsaron_sara : public ScriptedAI
|
|||||||
// Engage Keepers
|
// Engage Keepers
|
||||||
summons.DoZoneInCombat();
|
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_DOORS_CLOSE, 15s, 0, EVENT_PHASE_ONE);
|
||||||
events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 15min, 0, 0);
|
events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 15min, 0, 0);
|
||||||
events.ScheduleEvent(EVENT_SARA_P1_SUMMON, 0ms, 0, EVENT_PHASE_ONE);
|
events.ScheduleEvent(EVENT_SARA_P1_SUMMON, 0ms, 0, EVENT_PHASE_ONE);
|
||||||
@@ -579,15 +582,15 @@ struct boss_yoggsaron_sara : public ScriptedAI
|
|||||||
void AddPortals()
|
void AddPortals()
|
||||||
{
|
{
|
||||||
_summonSpeed -= 0.1f;
|
_summonSpeed -= 0.1f;
|
||||||
Creature* cr = nullptr;
|
Creature* creature = nullptr;
|
||||||
|
|
||||||
// Spawn Portals
|
// Spawn Portals
|
||||||
for (uint8 i = 0; i < RAID_MODE(4, 10); ++i)
|
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);
|
creature->SetArmor(_currentIllusion);
|
||||||
cr->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);
|
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
|
// 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.
|
// 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;
|
damage = 0;
|
||||||
return;
|
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
|
events.SetPhase(EVENT_PHASE_TWO);
|
||||||
if (me->GetHealth() <= damage)
|
me->SetHealth(me->GetMaxHealth());
|
||||||
{
|
me->SetInCombatWithZone();
|
||||||
_secondPhase = true;
|
me->SetFaction(FACTION_MONSTER_2);
|
||||||
damage = 0;
|
|
||||||
|
|
||||||
events.SetPhase(EVENT_PHASE_TWO);
|
if (Creature* creature = me->SummonCreature(NPC_YOGG_SARON, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI))
|
||||||
me->SetHealth(me->GetMaxHealth());
|
creature->SetVisible(false);
|
||||||
|
|
||||||
if (Creature* cr = me->SummonCreature(NPC_YOGG_SARON, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI))
|
_p2TalkTimer++;
|
||||||
cr->SetVisible(false);
|
Talk(SAY_SARA_TRANSFORM_1);
|
||||||
|
|
||||||
_p2TalkTimer++;
|
|
||||||
Talk(SAY_SARA_TRANSFORM_1);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
damage = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Players who descend into a portal are teleported ~100 yd below to the illusion
|
// 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
|
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
|
void UpdateAI(uint32 diff) override
|
||||||
@@ -2101,7 +2099,8 @@ struct boss_yoggsaron_voice : public NullCreatureAI
|
|||||||
|
|
||||||
void Reset() override
|
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
|
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
||||||
|
|||||||
Reference in New Issue
Block a user