diff options
author | Peter Keresztes Schmidt <carbenium@outlook.com> | 2020-08-22 17:47:51 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-22 17:47:51 +0200 |
commit | f17b9b20f10ed8e14cdddef395ff467053068d35 (patch) | |
tree | 248d785a754be10cecd19c98b0782bfa1f5d64c5 /src | |
parent | 617a769d6f8dc51d049296fbccca724713916ed4 (diff) |
Scripts/Commands: Convert argument parsing of message commands to new system (#25305)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Commands/cs_message.cpp | 114 |
1 files changed, 56 insertions, 58 deletions
diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp index b57cb5fcae0..2c6affbdc2e 100644 --- a/src/server/scripts/Commands/cs_message.cpp +++ b/src/server/scripts/Commands/cs_message.cpp @@ -36,6 +36,8 @@ EndScriptData */ #include "World.h" #include "WorldSession.h" +using namespace Trinity::ChatCommands; + class message_commandscript : public CommandScript { public: @@ -65,16 +67,8 @@ public: return commandTable; } - static bool HandleChannelSetOwnership(ChatHandler* handler, char const* args) + static bool HandleChannelSetOwnership(ChatHandler* handler, std::string channelName, bool grantOwnership) { - if (!*args) - return false; - char const* channelStr = strtok((char*)args, " "); - char const* argStr = strtok(nullptr, ""); - - if (!channelStr || !argStr) - return false; - uint32 channelId = 0; for (uint32 i = 0; i < sChatChannelsStore.GetNumRows(); ++i) { @@ -82,7 +76,7 @@ public: if (!entry) continue; - if (strstr(entry->Name[handler->GetSessionDbcLocale()], channelStr)) + if (StringContainsStringI(entry->Name[handler->GetSessionDbcLocale()], channelName)) { channelId = i; break; @@ -96,7 +90,7 @@ public: if (!entry) continue; - if (strstr(entry->AreaName[handler->GetSessionDbcLocale()], channelStr)) + if (StringContainsStringI(entry->AreaName[handler->GetSessionDbcLocale()], channelName)) { zoneEntry = entry; break; @@ -107,35 +101,33 @@ public: Channel* channel = nullptr; if (ChannelMgr* cMgr = ChannelMgr::forTeam(player->GetTeam())) - channel = cMgr->GetChannel(channelId, channelStr, player, false, zoneEntry); + channel = cMgr->GetChannel(channelId, channelName, player, false, zoneEntry); - if (strcmp(argStr, "on") == 0) + if (grantOwnership) { if (channel) channel->SetOwnership(true); CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_OWNERSHIP); stmt->setUInt8 (0, 1); - stmt->setString(1, channelStr); + stmt->setString(1, channelName); CharacterDatabase.Execute(stmt); - handler->PSendSysMessage(LANG_CHANNEL_ENABLE_OWNERSHIP, channelStr); + handler->PSendSysMessage(LANG_CHANNEL_ENABLE_OWNERSHIP, channelName.c_str()); } - else if (strcmp(argStr, "off") == 0) + else { if (channel) channel->SetOwnership(false); CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_OWNERSHIP); stmt->setUInt8 (0, 0); - stmt->setString(1, channelStr); + stmt->setString(1, channelName); CharacterDatabase.Execute(stmt); - handler->PSendSysMessage(LANG_CHANNEL_DISABLE_OWNERSHIP, channelStr); + handler->PSendSysMessage(LANG_CHANNEL_DISABLE_OWNERSHIP, channelName.c_str()); } - else - return false; return true; } - static bool HandleNameAnnounceCommand(ChatHandler* handler, char const* args) + static bool HandleNameAnnounceCommand(ChatHandler* handler, CommandArgs* args) { if (!*args) return false; @@ -144,11 +136,11 @@ public: if (WorldSession* session = handler->GetSession()) name = session->GetPlayer()->GetName(); - sWorld->SendWorldText(LANG_ANNOUNCE_COLOR, name.c_str(), args); + sWorld->SendWorldText(LANG_ANNOUNCE_COLOR, name.c_str(), args->GetFullArgs()); return true; } - static bool HandleGMNameAnnounceCommand(ChatHandler* handler, char const* args) + static bool HandleGMNameAnnounceCommand(ChatHandler* handler, CommandArgs* args) { if (!*args) return false; @@ -157,9 +149,10 @@ public: if (WorldSession* session = handler->GetSession()) name = session->GetPlayer()->GetName(); - sWorld->SendGMText(LANG_GM_ANNOUNCE_COLOR, name.c_str(), args); + sWorld->SendGMText(LANG_GM_ANNOUNCE_COLOR, name.c_str(), args->GetFullArgs()); return true; } + // global announce static bool HandleAnnounceCommand(ChatHandler* handler, char const* args) { @@ -169,87 +162,92 @@ public: sWorld->SendServerMessage(SERVER_MSG_STRING, Trinity::StringFormat(handler->GetTrinityString(LANG_SYSTEMMESSAGE), args).c_str()); return true; } + // announce to logged in GMs - static bool HandleGMAnnounceCommand(ChatHandler* /*handler*/, char const* args) + static bool HandleGMAnnounceCommand(ChatHandler* /*handler*/, CommandArgs* args) { if (!*args) return false; - sWorld->SendGMText(LANG_GM_BROADCAST, args); + sWorld->SendGMText(LANG_GM_BROADCAST, args->GetFullArgs()); return true; } - // notification player at the screen - static bool HandleNotifyCommand(ChatHandler* handler, char const* args) + + // send on-screen notification to players + static bool HandleNotifyCommand(ChatHandler* handler, CommandArgs* args) { if (!*args) return false; std::string str = handler->GetTrinityString(LANG_GLOBAL_NOTIFY); - str += args; + str += args->GetFullArgs(); - WorldPacket data(SMSG_NOTIFICATION, (str.size()+1)); + WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1)); data << str; sWorld->SendGlobalMessage(&data); return true; } - // notification GM at the screen - static bool HandleGMNotifyCommand(ChatHandler* handler, char const* args) + + // send on-screen notification to GMs + static bool HandleGMNotifyCommand(ChatHandler* handler, CommandArgs* args) { if (!*args) return false; std::string str = handler->GetTrinityString(LANG_GM_NOTIFY); - str += args; + str += args->GetFullArgs(); - WorldPacket data(SMSG_NOTIFICATION, (str.size()+1)); + WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1)); data << str; sWorld->SendGlobalGMMessage(&data); return true; } - // Enable\Dissable accept whispers (for GM) - static bool HandleWhispersCommand(ChatHandler* handler, char const* args) + + // Enable/Disable accepting whispers (for GM) + static bool HandleWhispersCommand(ChatHandler* handler, Optional<Variant<bool, ExactSequence<'r', 'e', 'm', 'o', 'v', 'e'>>> operationArg, Optional<std::string> playerNameArg) { - if (!*args) + if (!operationArg) { handler->PSendSysMessage(LANG_COMMAND_WHISPERACCEPTING, handler->GetSession()->GetPlayer()->isAcceptWhispers() ? handler->GetTrinityString(LANG_ON) : handler->GetTrinityString(LANG_OFF)); return true; } - std::string argStr = strtok((char*)args, " "); - // whisper on - if (argStr == "on") + if (operationArg->holds_alternative<bool>()) { - handler->GetSession()->GetPlayer()->SetAcceptWhispers(true); - handler->SendSysMessage(LANG_COMMAND_WHISPERON); - return true; + if (operationArg->get<bool>()) + { + handler->GetSession()->GetPlayer()->SetAcceptWhispers(true); + handler->SendSysMessage(LANG_COMMAND_WHISPERON); + return true; + } + else + { + // Remove all players from the Gamemaster's whisper whitelist + handler->GetSession()->GetPlayer()->ClearWhisperWhiteList(); + handler->GetSession()->GetPlayer()->SetAcceptWhispers(false); + handler->SendSysMessage(LANG_COMMAND_WHISPEROFF); + return true; + } } - // whisper off - if (argStr == "off") + if (operationArg->holds_alternative<ExactSequence<'r', 'e', 'm', 'o', 'v', 'e'>>()) { - // Remove all players from the Gamemaster's whisper whitelist - handler->GetSession()->GetPlayer()->ClearWhisperWhiteList(); - handler->GetSession()->GetPlayer()->SetAcceptWhispers(false); - handler->SendSysMessage(LANG_COMMAND_WHISPEROFF); - return true; - } + if (!playerNameArg) + return false; - if (argStr == "remove") - { - std::string name = strtok(nullptr, " "); - if (normalizePlayerName(name)) + if (normalizePlayerName(*playerNameArg)) { - if (Player* player = ObjectAccessor::FindPlayerByName(name)) + if (Player* player = ObjectAccessor::FindPlayerByName(*playerNameArg)) { handler->GetSession()->GetPlayer()->RemoveFromWhisperWhiteList(player->GetGUID()); - handler->PSendSysMessage(LANG_COMMAND_WHISPEROFFPLAYER, name.c_str()); + handler->PSendSysMessage(LANG_COMMAND_WHISPEROFFPLAYER, playerNameArg->c_str()); return true; } else { - handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND, name.c_str()); + handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND, playerNameArg->c_str()); handler->SetSentErrorMessage(true); return false; } |