diff --git a/data/sql/updates/pending_db_world/rev_1742570511379893181.sql b/data/sql/updates/pending_db_world/rev_1742570511379893181.sql new file mode 100644 index 000000000..aa9062212 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1742570511379893181.sql @@ -0,0 +1,50 @@ +-- +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` IN (45635, 45635, 45635, 45635, 45635, 45635, 45623, 45635, 45623, 45635, 45633, 45633, 45633, 45622, 45633, 45633, 45633, 45622, 45633, 45633, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45586, 45585, 45586, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585)) AND (`SourceId` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 23472) AND (`ConditionValue3` IN (54796, 54792, 54788, 54785, 54781, 54777, 54774, 54774, 54794, 54794, 54773, 54789, 54602, 54798, 54798, 54790, 54808, 54608, 54608, 54772, 54800, 54603, 54795, 54597, 54782, 54793, 54804, 54802, 54783, 54783, 54435, 54435, 54797, 54775, 54779, 54769, 54593, 54806, 54778, 54595, 54776, 54801, 54771, 54623, 54791, 54784, 54770)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 45585, 0, 0, 31, 0, 3, 23472, 54435, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 1, 31, 0, 3, 23472, 54593, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 2, 31, 0, 3, 23472, 54595, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 3, 31, 0, 3, 23472, 54597, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 4, 31, 0, 3, 23472, 54603, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 5, 31, 0, 3, 23472, 54623, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 6, 31, 0, 3, 23472, 54769, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 7, 31, 0, 3, 23472, 54770, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 8, 31, 0, 3, 23472, 54771, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 9, 31, 0, 3, 23472, 54775, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 10, 31, 0, 3, 23472, 54776, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 11, 31, 0, 3, 23472, 54778, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 12, 31, 0, 3, 23472, 54779, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 13, 31, 0, 3, 23472, 54782, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 14, 31, 0, 3, 23472, 54783, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 15, 31, 0, 3, 23472, 54784, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 16, 31, 0, 3, 23472, 54791, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 17, 31, 0, 3, 23472, 54793, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 18, 31, 0, 3, 23472, 54795, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 19, 31, 0, 3, 23472, 54797, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 20, 31, 0, 3, 23472, 54800, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 21, 31, 0, 3, 23472, 54801, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 22, 31, 0, 3, 23472, 54802, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 23, 31, 0, 3, 23472, 54804, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 24, 31, 0, 3, 23472, 54806, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45586, 0, 0, 31, 0, 3, 23472, 54435, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Top) - target World Trigger '), +(13, 1, 45586, 0, 1, 31, 0, 3, 23472, 54783, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Top) - target World Trigger '), +(13, 1, 45622, 0, 0, 31, 0, 3, 23472, 54608, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Middle) - target World Trigger '), +(13, 1, 45622, 0, 1, 31, 0, 3, 23472, 54798, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Middle) - target World Trigger '), +(13, 1, 45623, 0, 0, 31, 0, 3, 23472, 54774, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Bottom) - target World Trigger '), +(13, 1, 45623, 0, 1, 31, 0, 3, 23472, 54794, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Bottom) - target World Trigger '), +(13, 1, 45633, 0, 0, 31, 0, 3, 23472, 54602, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 1, 31, 0, 3, 23472, 54608, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 2, 31, 0, 3, 23472, 54772, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 3, 31, 0, 3, 23472, 54773, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 4, 31, 0, 3, 23472, 54789, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 5, 31, 0, 3, 23472, 54790, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 6, 31, 0, 3, 23472, 54798, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 7, 31, 0, 3, 23472, 54808, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45635, 0, 0, 31, 0, 3, 23472, 54774, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 1, 31, 0, 3, 23472, 54777, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 2, 31, 0, 3, 23472, 54781, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 3, 31, 0, 3, 23472, 54785, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 4, 31, 0, 3, 23472, 54788, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 5, 31, 0, 3, 23472, 54792, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 6, 31, 0, 3, 23472, 54794, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 7, 31, 0, 3, 23472, 54796, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '); diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 1252b05b0..9ec285179 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4885,6 +4885,19 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY); }); + // Felmyst Strafe (Top) + ApplySpellFix({ 45585 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 3; + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS); + }); + + // Felmyst Strafe (Middle, Bottom) + ApplySpellFix({ 45633, 45635 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS); + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 00e91d584..6bdfaaff4 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -49,6 +49,12 @@ enum Spells SPELL_ENCAPSULATE_CHANNEL = 45661, //Flight phase + SPELL_TRIGGER_TOP_STRAFE = 45586, + SPELL_TRIGGER_MIDDLE_STRAFE = 45622, + SPELL_TRIGGER_BOTTOM_STRAFE = 45623, + SPELL_STRAFE_TOP = 45585, + SPELL_STRAFE_MIDDLE = 45633, + SPELL_STRAFE_BOTTOM = 45635, SPELL_SUMMON_DEMONIC_VAPOR = 45391, SPELL_DEMONIC_VAPOR_SPAWN_TRIGGER = 45388, // Triggers visual beam SPELL_DEMONIC_VAPOR_PERIODIC = 45411, // Spawns cloud and deals damage @@ -110,18 +116,17 @@ public: bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override { - std::list creatureList; - _caster->GetCreaturesWithEntryInRange(creatureList, 70.0f, NPC_FOG_TRIGGER); - for (auto const& creature : creatureList) + switch (_currentLane) { - if (_caster->GetExactDist2d(creature) <= 11.0f) - { - creature->CastSpell(creature, SPELL_FOG_OF_CORRUPTION, true); - continue; - } - - if (!_currentLane && creature->GetPositionX() > 1510.0f) - creature->CastSpell(creature, SPELL_FOG_OF_CORRUPTION, true); + case 0: // top + _caster->CastSpell(_caster, SPELL_STRAFE_TOP, true); + break; + case 1: // middle + _caster->CastSpell(_caster, SPELL_STRAFE_MIDDLE, true); + break; + case 2: // bottom + _caster->CastSpell(_caster, SPELL_STRAFE_BOTTOM, true); + break; } return true; } @@ -183,6 +188,12 @@ struct boss_felmyst : public BossAI Talk(YELL_KILL); } + void SpellHitTarget(Unit* target, const SpellInfo* spell) override + { + if (spell->Id == SPELL_STRAFE_TOP || spell->Id == SPELL_STRAFE_MIDDLE || spell->Id == SPELL_STRAFE_BOTTOM) + target->CastSpell(target, SPELL_FOG_OF_CORRUPTION, true); + } + void JustDied(Unit* killer) override { BossAI::JustDied(killer); @@ -297,15 +308,8 @@ struct boss_felmyst : public BossAI case POINT_LANE: Talk(EMOTE_BREATH); me->m_Events.AddEventAtOffset([&] { - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(0)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(1000)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(1500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(2000)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(2500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(3000)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(3500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(4000)); + for (uint8 i = 0; i < 16; ++i) + me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(i*250)); }, 5s); me->m_Events.AddEventAtOffset([&] {