refactor(Scripts/Commands): convert cs_guild to new system (#17515)

This commit is contained in:
IntelligentQuantum
2023-10-18 17:27:28 +03:30
committed by GitHub
parent 2303e3b063
commit 39db3de5af
+68 -95
View File
@@ -25,13 +25,8 @@ EndScriptData */
#include "Chat.h" #include "Chat.h"
#include "Guild.h" #include "Guild.h"
#include "GuildMgr.h" #include "GuildMgr.h"
#include "Language.h"
#include "ScriptMgr.h" #include "ScriptMgr.h"
#if AC_COMPILER == AC_COMPILER_GNU
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
using namespace Acore::ChatCommands; using namespace Acore::ChatCommands;
class guild_commandscript : public CommandScript class guild_commandscript : public CommandScript
@@ -43,50 +38,38 @@ public:
{ {
static ChatCommandTable guildCommandTable = static ChatCommandTable guildCommandTable =
{ {
{ "create", SEC_GAMEMASTER, true, &HandleGuildCreateCommand, "" }, { "create", HandleGuildCreateCommand, SEC_GAMEMASTER, Console::Yes },
{ "delete", SEC_GAMEMASTER, true, &HandleGuildDeleteCommand, "" }, { "delete", HandleGuildDeleteCommand, SEC_GAMEMASTER, Console::Yes },
{ "invite", SEC_GAMEMASTER, true, &HandleGuildInviteCommand, "" }, { "invite", HandleGuildInviteCommand, SEC_GAMEMASTER, Console::Yes },
{ "uninvite", SEC_GAMEMASTER, true, &HandleGuildUninviteCommand, "" }, { "uninvite", HandleGuildUninviteCommand, SEC_GAMEMASTER, Console::Yes },
{ "rank", SEC_GAMEMASTER, true, &HandleGuildRankCommand, "" }, { "rank", HandleGuildRankCommand, SEC_GAMEMASTER, Console::Yes },
{ "rename", SEC_GAMEMASTER, true, &HandleGuildRenameCommand, "" }, { "rename", HandleGuildRenameCommand, SEC_GAMEMASTER, Console::Yes },
{ "info", SEC_GAMEMASTER, true, &HandleGuildInfoCommand, "" } { "info", HandleGuildInfoCommand, SEC_GAMEMASTER, Console::Yes }
}; };
static ChatCommandTable commandTable = static ChatCommandTable commandTable =
{ {
{ "guild", SEC_GAMEMASTER, true, nullptr, "", guildCommandTable } { "guild", guildCommandTable }
}; };
return commandTable; return commandTable;
} }
/** \brief GM command level 3 - Create a guild. static bool HandleGuildCreateCommand(ChatHandler* handler, Optional<PlayerIdentifier> target, std::string_view guildName)
*
* This command allows a GM (level 3) to create a guild.
*
* The "args" parameter contains the name of the guild leader
* and then the name of the guild.
*
*/
static bool HandleGuildCreateCommand(ChatHandler* handler, char const* args)
{ {
if (!*args) if (!target)
{
target = PlayerIdentifier::FromTargetOrSelf(handler);
}
if (!target || !target->IsConnected())
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false; return false;
}
// if not guild name only (in "") then player name Player* playerTarget = target->GetConnectedPlayer();
Player* target;
if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, &target))
return false;
char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args; if (playerTarget->GetGuildId())
if (!tailStr)
return false;
char* guildStr = handler->extractQuotedArg(tailStr);
if (!guildStr)
return false;
std::string guildName = guildStr;
if (target->GetGuildId())
{ {
handler->SendSysMessage(LANG_PLAYER_IN_GUILD); handler->SendSysMessage(LANG_PLAYER_IN_GUILD);
handler->SetSentErrorMessage(true); handler->SetSentErrorMessage(true);
@@ -108,7 +91,7 @@ public:
} }
Guild* guild = new Guild; Guild* guild = new Guild;
if (!guild->Create(target, guildName)) if (!guild->Create(playerTarget, guildName))
{ {
delete guild; delete guild;
handler->SendSysMessage(LANG_GUILD_NOT_CREATED); handler->SendSysMessage(LANG_GUILD_NOT_CREATED);
@@ -121,16 +104,12 @@ public:
return true; return true;
} }
static bool HandleGuildDeleteCommand(ChatHandler* handler, char const* args) static bool HandleGuildDeleteCommand(ChatHandler*, std::string_view guildName)
{ {
if (!*args) if (guildName.empty())
{
return false; return false;
}
char* guildStr = handler->extractQuotedArg((char*)args);
if (!guildStr)
return false;
std::string guildName = guildStr;
Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); Guild* targetGuild = sGuildMgr->GetGuildByName(guildName);
if (!targetGuild) if (!targetGuild)
@@ -142,41 +121,41 @@ public:
return true; return true;
} }
static bool HandleGuildInviteCommand(ChatHandler* handler, char const* args) static bool HandleGuildInviteCommand(ChatHandler* handler, Optional<PlayerIdentifier> target, std::string_view guildName)
{ {
if (!*args) if (!target)
return false; {
target = PlayerIdentifier::FromTargetOrSelf(handler);
}
// if not guild name only (in "") then player name if (!target)
ObjectGuid targetGuid; {
if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, nullptr, &targetGuid))
return false; return false;
}
char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args;
if (!tailStr)
return false;
char* guildStr = handler->extractQuotedArg(tailStr);
if (!guildStr)
return false;
std::string guildName = guildStr;
Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); Guild* targetGuild = sGuildMgr->GetGuildByName(guildName);
if (!targetGuild) if (!targetGuild)
return false; return false;
// player's guild membership checked in AddMember before add // player's guild membership checked in AddMember before add
return targetGuild->AddMember(targetGuid); return targetGuild->AddMember(target->GetGUID());
} }
static bool HandleGuildUninviteCommand(ChatHandler* handler, char const* args) static bool HandleGuildUninviteCommand(ChatHandler* handler, Optional<PlayerIdentifier> target)
{ {
Player* target; if (!target)
ObjectGuid targetGuid; {
if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid)) target = PlayerIdentifier::FromTargetOrSelf(handler);
return false; }
uint32 guildId = target ? target->GetGuildId() : sCharacterCache->GetCharacterGuildIdByGuid(targetGuid); if (!target)
{
return false;
}
Player* playerTarget = target->GetConnectedPlayer();
uint32 guildId = playerTarget ? playerTarget->GetGuildId() : sCharacterCache->GetCharacterGuildIdByGuid(target->GetGUID());
if (!guildId) if (!guildId)
return false; return false;
@@ -184,7 +163,7 @@ public:
if (!targetGuild) if (!targetGuild)
return false; return false;
targetGuild->DeleteMember(targetGuid, false, true, true); targetGuild->DeleteMember(target->GetGUID(), false, true, true);
return true; return true;
} }
@@ -207,26 +186,15 @@ public:
return targetGuild->ChangeMemberRank(player->GetGUID(), rank); return targetGuild->ChangeMemberRank(player->GetGUID(), rank);
} }
static bool HandleGuildRenameCommand(ChatHandler* handler, char const* _args) static bool HandleGuildRenameCommand(ChatHandler* handler, std::string_view oldGuildStr, std::string_view newGuildStr)
{ {
if (!*_args) if (!oldGuildStr.empty())
return false;
char *args = (char *)_args;
char const* oldGuildStr = handler->extractQuotedArg(args);
if (!oldGuildStr)
{ {
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false; return false;
} }
char const* newGuildStr = handler->extractQuotedArg(strtok(nullptr, "")); if (newGuildStr.empty())
if (!newGuildStr)
{ {
handler->SendSysMessage(LANG_INSERT_GUILD_NAME);
handler->SetSentErrorMessage(true);
return false; return false;
} }
@@ -256,35 +224,40 @@ public:
return true; return true;
} }
static bool HandleGuildInfoCommand(ChatHandler* handler, char const* args) static bool HandleGuildInfoCommand(ChatHandler* handler, Optional<Variant<ObjectGuid::LowType, std::string_view>> const& guildIdentifier)
{ {
Guild* guild = nullptr; Guild* guild = nullptr;
if (args && args[0] != '\0') if (guildIdentifier)
{ {
if (isNumeric(args)) if (ObjectGuid::LowType const* guid = std::get_if<ObjectGuid::LowType>(&*guildIdentifier))
guild = sGuildMgr->GetGuildById(strtoull(args, nullptr, 10)); guild = sGuildMgr->GetGuildById(*guid);
else else
guild = sGuildMgr->GetGuildByName(args); guild = sGuildMgr->GetGuildByName(guildIdentifier->get<std::string_view>());
} }
else if (Player* target = handler->getSelectedPlayerOrSelf()) else if (Optional<PlayerIdentifier> target = PlayerIdentifier::FromTargetOrSelf(handler); target && target->IsConnected())
guild = target->GetGuild(); guild = target->GetConnectedPlayer()->GetGuild();
if (!guild) if (!guild)
return false; return false;
// Display Guild Information // Display Guild Information
handler->PSendSysMessage(LANG_GUILD_INFO_NAME, guild->GetName().c_str(), guild->GetId()); // Guild Id + Name handler->PSendSysMessage(LANG_GUILD_INFO_NAME, guild->GetName().c_str(), guild->GetId()); // Guild Id + Name
std::string guildMasterName; std::string guildMasterName;
if (sCharacterCache->GetCharacterNameByGuid(guild->GetLeaderGUID(), guildMasterName)) if (sCharacterCache->GetCharacterNameByGuid(guild->GetLeaderGUID(), guildMasterName))
{
handler->PSendSysMessage(LANG_GUILD_INFO_GUILD_MASTER, guildMasterName.c_str(), guild->GetLeaderGUID().GetCounter()); // Guild Master handler->PSendSysMessage(LANG_GUILD_INFO_GUILD_MASTER, guildMasterName.c_str(), guild->GetLeaderGUID().GetCounter()); // Guild Master
}
handler->PSendSysMessage(LANG_GUILD_INFO_CREATION_DATE, Acore::Time::TimeToHumanReadable(Seconds(guild->GetCreatedDate())).c_str()); // Creation Date // Format creation date
char createdDateStr[20];
time_t createdDate = guild->GetCreatedDate();
tm localTm;
strftime(createdDateStr, 20, "%Y-%m-%d %H:%M:%S", localtime_r(&createdDate, &localTm));
handler->PSendSysMessage(LANG_GUILD_INFO_CREATION_DATE, createdDateStr); // Creation Date
handler->PSendSysMessage(LANG_GUILD_INFO_MEMBER_COUNT, guild->GetMemberCount()); // Number of Members handler->PSendSysMessage(LANG_GUILD_INFO_MEMBER_COUNT, guild->GetMemberCount()); // Number of Members
handler->PSendSysMessage(LANG_GUILD_INFO_BANK_GOLD, guild->GetTotalBankMoney() / 100 / 100); // Bank Gold (in gold coins) handler->PSendSysMessage(LANG_GUILD_INFO_BANK_GOLD, guild->GetTotalBankMoney() / 100 / 100); // Bank Gold (in gold coins)
handler->PSendSysMessage(LANG_GUILD_INFO_MOTD, guild->GetMOTD().c_str()); // Message of the day handler->PSendSysMessage(LANG_GUILD_INFO_MOTD, guild->GetMOTD().c_str()); // Message of the Day
handler->PSendSysMessage(LANG_GUILD_INFO_EXTRA_INFO, guild->GetInfo().c_str()); // Extra Information handler->PSendSysMessage(LANG_GUILD_INFO_EXTRA_INFO, guild->GetInfo().c_str()); // Extra Information
return true; return true;
} }