From 82781f24a90617833194e353031bcbcd0c4e2a71 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:21:37 -0300 Subject: [PATCH] =?UTF-8?q?feat(Core/Commands):=20add=20honor=20and=20aren?= =?UTF-8?q?a=20point=20reset=20to=20`.reset=20all`=20=E2=80=A6=20(#24978)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../rev_2026_03_03_014716.sql | 8 ++++++ .../Implementation/CharacterDatabase.cpp | 2 ++ .../Implementation/CharacterDatabase.h | 2 ++ src/server/game/Miscellaneous/Language.h | 4 ++- src/server/scripts/Commands/cs_reset.cpp | 28 +++++++++++++++++++ 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_2026_03_03_014716.sql diff --git a/data/sql/updates/pending_db_world/rev_2026_03_03_014716.sql b/data/sql/updates/pending_db_world/rev_2026_03_03_014716.sql new file mode 100644 index 000000000..3ce9fb489 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_2026_03_03_014716.sql @@ -0,0 +1,8 @@ +-- Add acore_string entries for reset all honor/arena messages +DELETE FROM `acore_string` WHERE `entry` IN (5118, 5119); +INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`) VALUES +(5118, 'Honor points have been reset for all players.', NULL, NULL, 'Ehrenpunkte wurden für alle Spieler zurückgesetzt.', '所有玩家的荣誉点数已被重置。', NULL, 'Los puntos de honor se han restablecido para todos los jugadores.', 'Los puntos de honor se han restablecido para todos los jugadores.', NULL), +(5119, 'Arena points have been reset for all players.', NULL, NULL, 'Arenapunkte wurden für alle Spieler zurückgesetzt.', '所有玩家的竞技场点数已被重置。', NULL, 'Los puntos de arena se han restablecido para todos los jugadores.', 'Los puntos de arena se han restablecido para todos los jugadores.', NULL); + +-- Update reset all command description to include honor and arena +UPDATE `command` SET `help` = 'Syntax: .reset all spells\r\n\r\nSyntax: .reset all talents\r\n\r\nSyntax: .reset all honor\r\n\r\nSyntax: .reset all arena\r\n\r\nRequests a reset of spells or talents (including talents for all of a character\'s pets, if any) at the next login for each existing character, or immediately resets honor points or arena points for all characters.' WHERE `name` = 'reset all'; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 43fa9cfbf..11e27fed3 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -502,6 +502,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UDP_CHAR_HONOR_POINTS_ACCUMULATIVE, "UPDATE characters SET totalHonorPoints = totalHonorPoints + ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UDP_CHAR_ARENA_POINTS, "UPDATE characters SET arenaPoints = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UDP_CHAR_ARENA_POINTS_ACCUMULATIVE, "UPDATE characters SET arenaPoints = arenaPoints + ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_ALL_HONOR_POINTS, "UPDATE characters SET totalHonorPoints = 0", CONNECTION_SYNCH); + PrepareStatement(CHAR_UPD_ALL_ARENA_POINTS, "UPDATE characters SET arenaPoints = 0", CONNECTION_SYNCH); PrepareStatement(CHAR_UDP_CHAR_MONEY, "UPDATE characters SET money = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UDP_CHAR_MONEY_ACCUMULATIVE, "UPDATE characters SET money = money + ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_REMOVE_GHOST, "UPDATE characters SET playerFlags = (playerFlags & (~16)) WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 3ead3cf40..6e5aa9154 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -426,6 +426,8 @@ enum CharacterDatabaseStatements : uint32 CHAR_UDP_CHAR_HONOR_POINTS_ACCUMULATIVE, CHAR_UDP_CHAR_ARENA_POINTS, CHAR_UDP_CHAR_ARENA_POINTS_ACCUMULATIVE, + CHAR_UPD_ALL_HONOR_POINTS, + CHAR_UPD_ALL_ARENA_POINTS, CHAR_UDP_CHAR_MONEY, CHAR_UDP_CHAR_MONEY_ACCUMULATIVE, CHAR_UPD_CHAR_REMOVE_GHOST, // pussywizard diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 95486de95..7ba4c975a 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1192,7 +1192,9 @@ enum AcoreStrings LANG_BF_ENABLED = 5116, LANG_BF_DISABLED = 5117, - // Room for more strings 5118-9999 + LANG_RESETALL_HONOR = 5118, + LANG_RESETALL_ARENA = 5119, + // Room for more strings 5120-9999 // Level requirement notifications LANG_SAY_REQ = 6604, diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index e99039bba..c3a6772cc 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -286,6 +286,34 @@ public: if (!handler->GetSession()) handler->SendSysMessage(LANG_RESETALL_TALENTS); } + else if (caseName == "honor") + { + CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_ALL_HONOR_POINTS)); + + sWorldSessionMgr->DoForAllOnlinePlayers([](Player* player) + { + player->SetHonorPoints(0); + }); + + handler->SendWorldText(LANG_RESETALL_HONOR); + if (!handler->GetSession()) + handler->SendSysMessage(LANG_RESETALL_HONOR); + return true; + } + else if (caseName == "arena") + { + CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_ALL_ARENA_POINTS)); + + sWorldSessionMgr->DoForAllOnlinePlayers([](Player* player) + { + player->SetArenaPoints(0); + }); + + handler->SendWorldText(LANG_RESETALL_ARENA); + if (!handler->GetSession()) + handler->SendSysMessage(LANG_RESETALL_ARENA); + return true; + } else { handler->SendErrorMessage(LANG_RESETALL_UNKNOWN_CASE, caseName);