diff options
author | Alex Dcnh <140754794+Wishmaster117@users.noreply.github.com> | 2025-08-25 22:55:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-25 23:55:27 +0200 |
commit | 0ed0e66ee00c5cf0ca48c6f8e5b10bf26ef15eb1 (patch) | |
tree | a54722002976069e7cacf4d156acfe5ea2d5a25d /src | |
parent | 2e26b18851f98d560421bb75a13fb5e425468743 (diff) |
Core/Commands: Add .guild list GM command to list all guilds (#30930)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Guilds/GuildMgr.h | 5 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Language.h | 8 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_guild.cpp | 33 |
3 files changed, 44 insertions, 2 deletions
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index 787d8da8c16..97d82caa4f0 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -34,6 +34,8 @@ private: ~GuildMgr(); public: + typedef std::unordered_map<ObjectGuid::LowType, Trinity::unique_trackable_ptr<Guild>> GuildContainer; + GuildMgr(GuildMgr const&) = delete; GuildMgr(GuildMgr&&) = delete; GuildMgr& operator=(GuildMgr const&) = delete; @@ -47,6 +49,8 @@ public: Guild* GetGuildByName(std::string_view guildName) const; std::string GetGuildNameById(ObjectGuid::LowType guildId) const; + GuildContainer const& GetGuildStore() const { return GuildStore; } + void LoadGuildRewards(); void LoadGuilds(); @@ -64,7 +68,6 @@ public: void ResetTimes(bool week); protected: - typedef std::unordered_map<ObjectGuid::LowType, Trinity::unique_trackable_ptr<Guild>> GuildContainer; ObjectGuid::LowType NextGuildId; GuildContainer GuildStore; std::vector<GuildReward> GuildRewards; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 389b5930b99..5b17f33b7fd 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -995,7 +995,13 @@ enum TrinityStrings LANG_ACCOUNT_BNET_UNLINKED = 1216, LANG_ACCOUNT_BNET_NOT_LINKED = 1217, LANG_DISALLOW_TICKETS_CONFIG = 1218, - // 1219-1499 - free + + // Guild list (.guild list) + LANG_GUILD_LIST_TITLE = 1219, + LANG_GUILD_LIST_HEADER = 1220, + LANG_GUILD_LIST_ROW = 1221, + LANG_GUILD_LIST_TOTAL = 1222, + // 1223-1499 - free // Command argument parsers LANG_CMDPARSER_EITHER = 1500, diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 1518d0b5422..08fbaf49c23 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -33,6 +33,7 @@ EndScriptData */ #include "ObjectMgr.h" #include "Player.h" #include "RBAC.h" +#include "Util.h" #include <iomanip> #if TRINITY_COMPILER == TRINITY_COMPILER_GNU @@ -56,6 +57,7 @@ public: { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "" }, { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "" }, { "info", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildInfoCommand, "" }, + { "list", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildListCommand, "" }, }; static std::vector<ChatCommand> commandTable = { @@ -299,6 +301,37 @@ public: handler->PSendSysMessage(LANG_GUILD_INFO_EXTRA_INFO, guild->GetInfo().c_str()); // Extra Information return true; } + + static bool HandleGuildListCommand(ChatHandler* handler) + { + std::string_view titleAndSummaryColor = handler->IsConsole() ? ""sv : "|cff00ff00"sv; + std::string_view tableHeaderColor = handler->IsConsole() ? ""sv : "|cff00ffff"sv; + std::string_view resetColor = handler->IsConsole() ? ""sv : "|r"sv; + + handler->PSendSysMessage(LANG_GUILD_LIST_TITLE, titleAndSummaryColor, resetColor); + handler->PSendSysMessage(LANG_GUILD_LIST_HEADER, tableHeaderColor, resetColor); + + GuildMgr::GuildContainer const& guildStore = sGuildMgr->GetGuildStore(); + + for (auto const& [id, g] : guildStore) + { + std::string gmName; + if (!sCharacterCache->GetCharacterNameByGuid(g->GetLeaderGUID(), gmName)) + gmName = "---"; + + handler->PSendSysMessage(LANG_GUILD_LIST_ROW, + id, + g->GetName().c_str(), + gmName.c_str(), + TimeToTimestampStr(g->GetCreatedDate()).c_str(), + g->GetMembersCount(), + g->GetBankMoney() / GOLD + ); + } + + handler->PSendSysMessage(LANG_GUILD_LIST_TOTAL, titleAndSummaryColor, guildStore.size(), resetColor); + return true; + } }; void AddSC_guild_commandscript() |