From c7e752f03eb42f9bfa7642586d149688920d21e3 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 29 Jan 2026 22:53:34 -0300 Subject: [PATCH] fix(Scripts/EoE): Remove red dragon hack (#24541) Co-authored-by: Trista --- .../rev_1769733183070394400.sql | 5 ++ .../Nexus/EyeOfEternity/boss_malygos.cpp | 70 ++++++++++++++++--- .../Nexus/EyeOfEternity/eye_of_eternity.h | 3 +- .../instance_eye_of_eternity.cpp | 26 ++----- 4 files changed, 71 insertions(+), 33 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1769733183070394400.sql diff --git a/data/sql/updates/pending_db_world/rev_1769733183070394400.sql b/data/sql/updates/pending_db_world/rev_1769733183070394400.sql new file mode 100644 index 000000000..debdbaccc --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1769733183070394400.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (56072, 56070); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(56072, 'spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger'), +(56070, 'spell_wyrmrest_skytalon_summon_red_dragon_buddy'); diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index bdf1ba118..813349aea 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -703,20 +703,14 @@ public: Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers(); if (!PlayerList.IsEmpty()) for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - if (Player* pPlayer = i->GetSource()) + if (Player* player = i->GetSource()) { - sScriptMgr->AnticheatSetUnderACKmount(pPlayer); + sScriptMgr->AnticheatSetUnderACKmount(player); - if (!pPlayer->IsAlive() || pPlayer->IsGameMaster()) + if (!player->IsAlive() || player->IsGameMaster()) continue; - if (Creature* c = me->SummonCreature(NPC_WYRMREST_SKYTALON, pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ() - 20.0f, 0.0f, TEMPSUMMON_MANUAL_DESPAWN, 0)) - { - c->SetFaction(pPlayer->GetFaction()); - //pPlayer->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, c, true); - c->m_Events.AddEventAtOffset(new EoEDrakeEnterVehicleEvent(*c, pPlayer->GetGUID()), 500ms); - AttackStart(c); - } + player->CastSpell(player, SPELL_SUMMON_RED_DRAGON_BUDDY, true); } events.RescheduleEvent(EVENT_SAY_PHASE_3_INTRO, 3s, 1); @@ -1433,6 +1427,19 @@ public: { npc_eoe_wyrmrest_skytalonAI(Creature* pCreature) : VehicleAI(pCreature) { } + void IsSummonedBy(WorldObject* summoner) override + { + me->SetDisableGravity(true); + if (summoner && summoner->IsPlayer()) + { + ObjectGuid summonerGUID = summoner->GetGUID(); + me->m_Events.AddEventAtOffset([summonerGUID, this] { + if (Player* rider = ObjectAccessor::GetPlayer(*me, summonerGUID)) + DoCast(rider, SPELL_RIDE_RED_DRAGON, true); + }, 2s); + } + } + void PassengerBoarded(Unit* pass, int8 /*seat*/, bool apply) override { if (apply) @@ -1517,6 +1524,47 @@ class spell_eoe_ph3_surge_of_power : public SpellScript } }; +// 56070 - Summon Red Dragon Buddy +class spell_wyrmrest_skytalon_summon_red_dragon_buddy : public SpellScript +{ + PrepareSpellScript(spell_wyrmrest_skytalon_summon_red_dragon_buddy); + + bool Load() override + { + return GetCaster()->IsPlayer(); + } + + void SetDest(SpellDestination& dest) + { + dest.Relocate(GetCaster()->GetPosition()); + // Adjust effect summon position to lower Z + Position const offset = { 0.0f, 0.0f, -80.0f, 0.0f }; + dest.RelocateOffset(offset); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_wyrmrest_skytalon_summon_red_dragon_buddy::SetDest, EFFECT_0, TARGET_DEST_CASTER_RADIUS); + } +}; + +// 56072 - Ride Red Dragon Buddy +class spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger : public SpellScript +{ + PrepareSpellScript(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + target->CastSpell(GetCaster(), GetEffectValue(), true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_boss_malygos() { new boss_malygos(); @@ -1528,6 +1576,8 @@ void AddSC_boss_malygos() new npc_scion_of_eternity(); new npc_hover_disk(); new npc_eoe_wyrmrest_skytalon(); + RegisterSpellScript(spell_wyrmrest_skytalon_summon_red_dragon_buddy); + RegisterSpellScript(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger); RegisterSpellScript(spell_eoe_ph3_surge_of_power); } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h index 88ad0e920..cfdac7ee6 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h @@ -46,7 +46,6 @@ enum NPCs NPC_HOVER_DISK = 30248, NPC_ARCANE_OVERLOAD = 30282, NPC_SURGE_OF_POWER = 30334, - NPC_WYRMREST_SKYTALON = 30161, NPC_STATIC_FIELD = 30592, NPC_ALEXSTRASZA = 32295, }; @@ -75,6 +74,8 @@ enum eSpells SPELL_HASTE = 57060, SPELL_ALEXSTRASZA_GIFT = 61028, + SPELL_SUMMON_RED_DRAGON_BUDDY = 56070, + SPELL_RIDE_RED_DRAGON = 56072 }; enum eAchiev diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 41a86c063..fea436c4b 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -21,18 +21,6 @@ #include "Vehicle.h" #include "eye_of_eternity.h" -bool EoEDrakeEnterVehicleEvent::Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) -{ - if (Player* p = ObjectAccessor::GetPlayer(_owner, _playerGUID)) - if (p->IsInWorld() && !p->IsDuringRemoveFromWorld() && !p->isBeingLoaded() && p->FindMap() == _owner.FindMap()) - { - p->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, &_owner, true); - return true; - } - _owner.DespawnOrUnsummon(1ms); - return true; -} - class instance_eye_of_eternity : public InstanceMapScript { public: @@ -68,7 +56,7 @@ public: return EncounterStatus == IN_PROGRESS; } - void OnPlayerEnter(Player* pPlayer) override + void OnPlayerEnter(Player* player) override { if (EncounterStatus == DONE) { @@ -79,18 +67,12 @@ public: go->SetPhaseMask(2, true); // no floor, so put players on drakes - if (pPlayer) + if (player) { - if (!pPlayer->IsAlive()) + if (!player->IsAlive()) return; - if (Creature* c = pPlayer->SummonCreature(NPC_WYRMREST_SKYTALON, pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ() - 20.0f, 0.0f, TEMPSUMMON_MANUAL_DESPAWN, 0)) - { - c->SetCanFly(true); - c->SetFaction(pPlayer->GetFaction()); - //pPlayer->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, c, true); - c->m_Events.AddEventAtOffset(new EoEDrakeEnterVehicleEvent(*c, pPlayer->GetGUID()), 500ms); - } + player->CastSpell(player, SPELL_SUMMON_RED_DRAGON_BUDDY, true); } } }