From 297c88468cc62abc1bbfc20674dfa01396bb0b13 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 29 Sep 2025 19:24:19 -0300 Subject: [PATCH 1/7] =?UTF-8?q?fix(Scripts/Gundrak):=20Fix=20Sladran=20Ven?= =?UTF-8?q?om=20Bolt=20target=20and=20Poison=20Nova=20f=E2=80=A6=20(#23055?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/Northrend/Gundrak/boss_slad_ran.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 68a22e964..5bf51b7c9 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -51,14 +51,7 @@ enum Misc MAX_CONSTRICTOR = 3, MAX_SUMMONS = 5, - EVENT_POISON_NOVA = 1, - EVENT_POWERFULL_BITE = 2, - EVENT_VENOM_BOLT = 3, - EVENT_CHECK_HEALTH1 = 4, - EVENT_CHECK_HEALTH2 = 5, - EVENT_SUMMON1 = 6, - EVENT_SUMMON2 = 7, - EVENT_KILL_TALK = 8 + EVENT_KILL_TALK = 1 }; const Position SpawnLoc[] = @@ -121,17 +114,17 @@ public: Talk(SAY_AGGRO); BossAI::JustEngagedWith(who); - ScheduleTimedEvent(10s, [&]{ + ScheduleTimedEvent(16s, 53s, [&]{ Talk(EMOTE_NOVA); DoCastAOE(SPELL_POISON_NOVA); - }, 15s); + }, 16s, 53s); ScheduleTimedEvent(3s, [&] { DoCastVictim(SPELL_POWERFULL_BITE); }, 10s); ScheduleTimedEvent(15s, [&] { - DoCastVictim(SPELL_VENOM_BOLT); + DoCastRandomTarget(SPELL_VENOM_BOLT, 0, 45.0f, false); }, 10s); } From 35e267393f1b6a86d1cd66a802f37fe86f5b0e6d Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Mon, 29 Sep 2025 19:39:17 -0500 Subject: [PATCH 2/7] fix(DB/Formations): Drakkari Colossus will now call help from Drakkari Golems (#23064) --- .../sql/updates/pending_db_world/rev_1759191371018343890.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759191371018343890.sql diff --git a/data/sql/updates/pending_db_world/rev_1759191371018343890.sql b/data/sql/updates/pending_db_world/rev_1759191371018343890.sql new file mode 100644 index 000000000..ac19fef59 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759191371018343890.sql @@ -0,0 +1,5 @@ +DELETE FROM `creature_formations` WHERE (`leaderGUID` = 127046); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(127046, 127046, 0, 0, 1, 0, 0), +(127046, 127080, 0, 0, 1, 0, 0), +(127046, 127081, 0, 0, 1, 0, 0); From 81edabf1fb2e3b10a51fda81b91b65b7771397c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 Sep 2025 00:40:20 +0000 Subject: [PATCH 3/7] chore(DB): import pending files Referenced commit(s): 35e267393f1b6a86d1cd66a802f37fe86f5b0e6d --- .../rev_1759191371018343890.sql => db_world/2025_09_30_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759191371018343890.sql => db_world/2025_09_30_00.sql} (86%) diff --git a/data/sql/updates/pending_db_world/rev_1759191371018343890.sql b/data/sql/updates/db_world/2025_09_30_00.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1759191371018343890.sql rename to data/sql/updates/db_world/2025_09_30_00.sql index ac19fef59..c4fbf8264 100644 --- a/data/sql/updates/pending_db_world/rev_1759191371018343890.sql +++ b/data/sql/updates/db_world/2025_09_30_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_09_29_00 -> 2025_09_30_00 DELETE FROM `creature_formations` WHERE (`leaderGUID` = 127046); INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES (127046, 127046, 0, 0, 1, 0, 0), From a644a62c1645cb2ef77ac42580613620451f4851 Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Tue, 30 Sep 2025 02:12:34 -0500 Subject: [PATCH 4/7] fix(DB) Riding Ram Upgraded to a beast from a critter (#23071) --- data/sql/updates/pending_db_world/rev_1759192557957949899.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759192557957949899.sql diff --git a/data/sql/updates/pending_db_world/rev_1759192557957949899.sql b/data/sql/updates/pending_db_world/rev_1759192557957949899.sql new file mode 100644 index 000000000..afe7257eb --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759192557957949899.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `type` = 8 WHERE `entry` = 8881; From e75d2e9c8a24e6512220acbf145b8a8ed107a89c Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Tue, 30 Sep 2025 02:13:12 -0500 Subject: [PATCH 5/7] fix(Script/Gundrak) Drakkari Colossus will now use Mortal Strikes (#23065) Co-authored-by: Andrew <47818697+Nyeriah@users.noreply.github.com> --- .../pending_db_world/rev_1759180852833254842.sql | 3 +++ .../Northrend/Gundrak/boss_drakkari_colossus.cpp | 13 ++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1759180852833254842.sql diff --git a/data/sql/updates/pending_db_world/rev_1759180852833254842.sql b/data/sql/updates/pending_db_world/rev_1759180852833254842.sql new file mode 100644 index 000000000..9e2a2cb86 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759180852833254842.sql @@ -0,0 +1,3 @@ +-- Drakkari Colossus - Mortal Strike spell difficulty +DELETE FROM `spelldifficulty_dbc` WHERE `ID` = 54715; +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES (54715, 54715, 59454, 0, 0); diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 8a9463b51..18a30b7db 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -27,6 +27,7 @@ enum Spells SPELL_MOJO_WAVE = 55626, SPELL_FREEZE_ANIM = 52656, SPELL_MIGHTY_BLOW = 54719, + SPELL_MORTAL_STRIKE = 54715, SPELL_ELEMENTAL_SPAWN_EFFECT = 54888, SPELL_EMERGE = 54850, @@ -54,9 +55,10 @@ enum Misc EMOTE_ALTAR = 1, EVENT_COLOSSUS_MIGHTY_BLOW = 1, - EVENT_COLOSSUS_HEALTH_1 = 2, - EVENT_COLOSSUS_HEALTH_2 = 3, - EVENT_COLOSSUS_START_FIGHT = 4, + EVENT_COLOSSUS_MORTAL_STRIKE = 2, + EVENT_COLOSSUS_HEALTH_1 = 3, + EVENT_COLOSSUS_HEALTH_2 = 4, + EVENT_COLOSSUS_START_FIGHT = 5, EVENT_ELEMENTAL_HEALTH = 10, EVENT_ELEMENTAL_SURGE = 11, @@ -146,6 +148,7 @@ public: { BossAI::JustEngagedWith(who); events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s); + events.ScheduleEvent(EVENT_COLOSSUS_MORTAL_STRIKE, 7s); events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_2, 1s); } @@ -212,6 +215,10 @@ public: me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false); events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s); break; + case EVENT_COLOSSUS_MORTAL_STRIKE: + DoCastVictim(SPELL_MORTAL_STRIKE); + events.ScheduleEvent(EVENT_COLOSSUS_MORTAL_STRIKE, 7s); + break; case EVENT_COLOSSUS_HEALTH_1: if (me->HealthBelowPct(51)) { From 05b57ecb74183dfbd78000c3eeae2b61d071767c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 Sep 2025 07:13:35 +0000 Subject: [PATCH 6/7] chore(DB): import pending files Referenced commit(s): a644a62c1645cb2ef77ac42580613620451f4851 --- .../rev_1759180852833254842.sql => db_world/2025_09_30_01.sql} | 1 + .../rev_1759192557957949899.sql => db_world/2025_09_30_02.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1759180852833254842.sql => db_world/2025_09_30_01.sql} (86%) rename data/sql/updates/{pending_db_world/rev_1759192557957949899.sql => db_world/2025_09_30_02.sql} (61%) diff --git a/data/sql/updates/pending_db_world/rev_1759180852833254842.sql b/data/sql/updates/db_world/2025_09_30_01.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1759180852833254842.sql rename to data/sql/updates/db_world/2025_09_30_01.sql index 9e2a2cb86..1d4899fe1 100644 --- a/data/sql/updates/pending_db_world/rev_1759180852833254842.sql +++ b/data/sql/updates/db_world/2025_09_30_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_09_30_00 -> 2025_09_30_01 -- Drakkari Colossus - Mortal Strike spell difficulty DELETE FROM `spelldifficulty_dbc` WHERE `ID` = 54715; INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES (54715, 54715, 59454, 0, 0); diff --git a/data/sql/updates/pending_db_world/rev_1759192557957949899.sql b/data/sql/updates/db_world/2025_09_30_02.sql similarity index 61% rename from data/sql/updates/pending_db_world/rev_1759192557957949899.sql rename to data/sql/updates/db_world/2025_09_30_02.sql index afe7257eb..15ed01d1a 100644 --- a/data/sql/updates/pending_db_world/rev_1759192557957949899.sql +++ b/data/sql/updates/db_world/2025_09_30_02.sql @@ -1,2 +1,3 @@ +-- DB update 2025_09_30_01 -> 2025_09_30_02 -- UPDATE `creature_template` SET `type` = 8 WHERE `entry` = 8881; From a56d1f65aad6cdb1aadf64195f5450ae213bba79 Mon Sep 17 00:00:00 2001 From: Takenbacon Date: Tue, 30 Sep 2025 03:16:07 -0700 Subject: [PATCH 7/7] fix(Core/Server): Fix player login checks (#23073) --- src/server/game/Handlers/CharacterHandler.cpp | 58 +++++++++---------- src/server/game/Server/WorldSession.h | 1 + src/server/shared/SharedDefines.h | 17 +++--- 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 259bf3415..1bb8ac6ed 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -668,51 +668,46 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) { - m_playerLoading = true; + if (!sWorld->getBoolConfig(CONFIG_REALM_LOGIN_ENABLED)) + { + SendCharLoginFailed(LoginFailureReason::NoWorld); + return; + } + + if (PlayerLoading() || GetPlayer() != nullptr) + { + LOG_ERROR("network", "Player tried to login again, AccountId = {}", GetAccountId()); + KickPlayer("WorldSession::HandlePlayerLoginOpcode Another client logging in"); + return; + } + ObjectGuid playerGuid; recvData >> playerGuid; - if (PlayerLoading() || GetPlayer() != nullptr || !playerGuid.IsPlayer()) - { - // limit player interaction with the world - if (!sWorld->getBoolConfig(CONFIG_REALM_LOGIN_ENABLED)) - { - WorldPacket data(SMSG_CHARACTER_LOGIN_FAILED, 1); - // see LoginFailureReason enum for more reasons - data << uint8(LoginFailureReason::NoWorld); - SendPacket(&data); - return; - } - } - - if (!playerGuid.IsPlayer() || !IsLegitCharacterForAccount(playerGuid)) + if (!IsLegitCharacterForAccount(playerGuid)) { LOG_ERROR("network", "Account ({}) can't login with that character ({}).", GetAccountId(), playerGuid.ToString()); KickPlayer("Account can't login with this character"); return; } - auto SendCharLogin = [&](ResponseCodes result) - { - WorldPacket data(SMSG_CHARACTER_LOGIN_FAILED, 1); - data << uint8(result); - SendPacket(&data); - }; - // pussywizard: if (WorldSession* sess = sWorldSessionMgr->FindOfflineSessionForCharacterGUID(playerGuid.GetCounter())) + { if (sess->GetAccountId() != GetAccountId()) { - SendCharLogin(CHAR_LOGIN_DUPLICATE_CHARACTER); + SendCharLoginFailed(LoginFailureReason::DuplicateCharacter); return; } + } + // pussywizard: if (WorldSession* sess = sWorldSessionMgr->FindOfflineSession(GetAccountId())) { Player* p = sess->GetPlayer(); if (!p || sess->IsKicked()) { - SendCharLogin(CHAR_LOGIN_DUPLICATE_CHARACTER); + SendCharLoginFailed(LoginFailureReason::DuplicateCharacter); return; } @@ -723,7 +718,7 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) // pussywizard: players stay ingame no matter what (prevent abuse), but allow to turn it off to stop crashing if (!sWorld->getBoolConfig(CONFIG_ENABLE_LOGIN_AFTER_DC)) { - SendCharLogin(CHAR_LOGIN_DUPLICATE_CHARACTER); + SendCharLoginFailed(LoginFailureReason::DuplicateCharacter); return; } @@ -765,7 +760,7 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) } if (!p->FindMap() || !p->IsInWorld() || sess->IsKicked()) { - SendCharLogin(CHAR_LOGIN_DUPLICATE_CHARACTER); + SendCharLoginFailed(LoginFailureReason::DuplicateCharacter); return; } @@ -781,11 +776,9 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) std::shared_ptr holder = std::make_shared(GetAccountId(), playerGuid); if (!holder->Initialize()) - { - m_playerLoading = false; return; - } + m_playerLoading = true; AddQueryHolderCallback(CharacterDatabase.DelayQueryHolder(holder)).AfterComplete([this](SQLQueryHolderBase const& holder) { HandlePlayerLoginFromDB(static_cast(holder)); @@ -2575,6 +2568,13 @@ void WorldSession::SendCharDelete(ResponseCodes result) SendPacket(&data); } +void WorldSession::SendCharLoginFailed(LoginFailureReason reason) +{ + WorldPacket data(SMSG_CHARACTER_LOGIN_FAILED, 1); + data << uint8(reason); + SendPacket(&data); +}; + void WorldSession::SendCharRename(ResponseCodes result, CharacterRenameInfo const* renameInfo) { WorldPacket data(SMSG_CHAR_RENAME, 1 + 8 + renameInfo->Name.size() + 1); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 15c0a7368..c5fa3c8ae 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -601,6 +601,7 @@ public: // opcodes handlers void SendCharCreate(ResponseCodes result); void SendCharDelete(ResponseCodes result); + void SendCharLoginFailed(LoginFailureReason reason); void SendCharRename(ResponseCodes result, CharacterRenameInfo const* renameInfo); void SendCharCustomize(ResponseCodes result, CharacterCustomizeInfo const* customizeInfo); void SendCharFactionChange(ResponseCodes result, CharacterFactionChangeInfo const* factionChangeInfo); diff --git a/src/server/shared/SharedDefines.h b/src/server/shared/SharedDefines.h index fb95d6cea..aa278a3d6 100644 --- a/src/server/shared/SharedDefines.h +++ b/src/server/shared/SharedDefines.h @@ -4010,14 +4010,15 @@ enum ServerProcessTypes // Login Failure Reasons enum class LoginFailureReason : uint8 { - Failed = 0, - NoWorld = 1, - DuplicateCharacter = 2, - NoInstances = 3, - Disabled = 4, - NoCharacter = 5, - LockedForTransfer = 6, - LockedByBilling = 7 + Failed = 0, // Login failed + NoWorld = 1, // World server down + DuplicateCharacter = 2, // A character with that name already exists + NoInstances = 3, // No instance servers are available + Disabled = 4, // Login for that race, class or character is currently disabled. + NoCharacter = 5, // Character not found + LockedForTransfer = 6, // You cannot log in until the character update process you recently initiated is complete. + LockedByBilling = 7, // Character locked. Contact billing for more information + UsingRemote = 8, // You cannot log in while using World of Warcraft Remote. }; namespace Acore::Impl