diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2020-09-09 18:33:18 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-02-05 16:21:54 +0100 |
| commit | 42be7836dfacd9e8d6b0c2b5d5f230ed6a55f088 (patch) | |
| tree | cadb901067b72887d9c385814b4e74e7e6a1aa5e /src/server/scripts/Commands | |
| parent | fbcd71ecd8a351ce777a7f440d5c553d7a6cff80 (diff) | |
Chat/Commands: Eradicate ChatHandler::extractOptFirstArg
(cherry picked from commit 4f636b80e4942c4c9c4811496d1c1b77f767378d)
Diffstat (limited to 'src/server/scripts/Commands')
| -rw-r--r-- | src/server/scripts/Commands/cs_guild.cpp | 22 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 69 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_tele.cpp | 42 |
3 files changed, 53 insertions, 80 deletions
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index b34c604b595..d7245f22fb6 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -35,6 +35,7 @@ EndScriptData */ #include "RBAC.h" #include <iomanip> +using namespace Trinity::ChatCommands; class guild_commandscript : public CommandScript { public: @@ -191,21 +192,14 @@ public: return true; } - static bool HandleGuildRankCommand(ChatHandler* handler, char const* args) + static bool HandleGuildRankCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, uint8 rank) { - char* nameStr; - char* rankStr; - handler->extractOptFirstArg((char*)args, &nameStr, &rankStr); - if (!rankStr) + if (!player) + player = PlayerIdentifier::FromTargetOrSelf(handler); + if (!player) return false; - Player* target; - ObjectGuid targetGuid; - std::string target_name; - if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &target_name)) - return false; - - ObjectGuid::LowType guildId = target ? target->GetGuildId() : sCharacterCache->GetCharacterGuildIdByGuid(targetGuid); + ObjectGuid::LowType guildId = player->IsConnected() ? player->GetConnectedPlayer()->GetGuildId() : sCharacterCache->GetCharacterGuildIdByGuid(*player); if (!guildId) return false; @@ -213,9 +207,7 @@ public: if (!targetGuild) return false; - uint8 newRank = uint8(atoi(rankStr)); - CharacterDatabaseTransaction trans(nullptr); - return targetGuild->ChangeMemberRank(trans, targetGuid, GuildRankId(newRank)); + return targetGuild->ChangeMemberRank(nullptr, *player, GuildRankId(rank)); } static bool HandleGuildRenameCommand(ChatHandler* handler, char const* _args) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index b4e68d5a8c3..97942206edb 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1913,63 +1913,51 @@ public: } // mute player for the specified duration - static bool HandleMuteCommand(ChatHandler* handler, char const* args) + static bool HandleMuteCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, uint32 muteTime, Tail muteReason) { - char* nameStr; - char* delayStr; - handler->extractOptFirstArg((char*)args, &nameStr, &delayStr); - if (!delayStr) - return false; - - char const* muteReason = strtok(nullptr, "\r"); - std::string muteReasonStr = handler->GetTrinityString(LANG_NO_REASON); - if (muteReason != nullptr) - muteReasonStr = muteReason; + std::string muteReasonStr{ muteReason }; + if (muteReason.empty()) + muteReasonStr = handler->GetTrinityString(LANG_NO_REASON); - Player* target; - ObjectGuid targetGuid; - std::string targetName; - if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &targetName)) + if (!player) + player = PlayerIdentifier::FromTarget(handler); + if (!player) + { + handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); + handler->SetSentErrorMessage(true); return false; + } - uint32 accountId = target ? target->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(targetGuid); + Player* target = player->GetConnectedPlayer(); + uint32 accountId = target ? target->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(*player); // find only player from same account if any if (!target) if (WorldSession* session = sWorld->FindSession(accountId)) target = session->GetPlayer(); - uint32 notSpeakTime = uint32(atoi(delayStr)); - // must have strong lesser security level - if (handler->HasLowerSecurity (target, targetGuid, true)) + if (handler->HasLowerSecurity(target, player->GetGUID(), true)) return false; LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME); std::string muteBy = ""; - if (handler->GetSession()) - muteBy = handler->GetSession()->GetPlayerName(); + if (Player* gmPlayer = handler->GetPlayer()) + muteBy = gmPlayer->GetName(); else muteBy = handler->GetTrinityString(LANG_CONSOLE); if (target) { // Target is online, mute will be in effect right away. - int64 muteTime = GameTime::GetGameTime() + notSpeakTime * MINUTE; - target->GetSession()->m_muteTime = muteTime; - stmt->setInt64(0, muteTime); - std::string nameLink = handler->playerLink(targetName); - - if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD)) - sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str()); - - ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str()); + int64 mutedUntil = GameTime::GetGameTime() + static_cast<int64>(muteTime) * MINUTE; + target->GetSession()->m_muteTime = mutedUntil; + stmt->setInt64(0, mutedUntil); } else { // Target is offline, mute will be in effect starting from the next login. - int32 muteTime = -int32(notSpeakTime * MINUTE); - stmt->setInt64(0, muteTime); + stmt->setInt64(0, -static_cast<int64>(muteTime) * MINUTE); } stmt->setString(1, muteReasonStr); @@ -1978,16 +1966,23 @@ public: LoginDatabase.Execute(stmt); stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE); stmt->setUInt32(0, accountId); - stmt->setUInt32(1, notSpeakTime); + stmt->setUInt32(1, muteTime); stmt->setString(2, muteBy); stmt->setString(3, muteReasonStr); LoginDatabase.Execute(stmt); - std::string nameLink = handler->playerLink(targetName); - if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target) - sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str()); + std::string nameLink = handler->playerLink(player->GetName()); + if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD)) + sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), muteTime, muteReasonStr.c_str()); + if (target) + { + ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, muteTime, muteBy.c_str(), muteReasonStr.c_str()); + handler->PSendSysMessage(LANG_YOU_DISABLE_CHAT, nameLink.c_str(), muteTime, muteReasonStr.c_str()); + } else - handler->PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notSpeakTime, muteReasonStr.c_str()); + { + handler->PSendSysMessage(LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), muteTime, muteReasonStr.c_str()); + } return true; } diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 16e08b52ed3..1ea36d72dda 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -109,28 +109,21 @@ public: } // teleport player to given game_tele.entry - static bool HandleTeleNameCommand(ChatHandler* handler, char const* args) + static bool HandleTeleNameCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, Variant<GameTele const*, ExactSequence<'$','h','o','m','e'>> where) { - char* nameStr; - char* teleStr; - handler->extractOptFirstArg((char*)args, &nameStr, &teleStr); - if (!teleStr) - return false; - - Player* target; - ObjectGuid target_guid; - std::string target_name; - if (!handler->extractPlayerTarget(nameStr, &target, &target_guid, &target_name)) + if (!player) + player = PlayerIdentifier::FromTargetOrSelf(handler); + if (!player) return false; - if (strcmp(teleStr, "$home") == 0) // References target's homebind + if (where.index() == 1) // References target's homebind { - if (target) + if (Player* target = player->GetConnectedPlayer()) target->TeleportTo(target->m_homebind); else { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_HOMEBIND); - stmt->setUInt64(0, target_guid.GetCounter()); + stmt->setUInt64(0, player->GetGUID().GetCounter()); PreparedQueryResult resultDB = CharacterDatabase.Query(stmt); if (resultDB) @@ -140,7 +133,7 @@ public: uint32 zoneId = fieldsDB[1].GetUInt16(); CharacterDatabaseTransaction dummy; - Player::SavePositionInDB(loc, zoneId, target_guid, dummy); + Player::SavePositionInDB(loc, zoneId, player->GetGUID(), dummy); } } @@ -148,21 +141,14 @@ public: } // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r - GameTele const* tele = handler->extractGameTeleFromLink(teleStr); - if (!tele) - { - handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); - handler->SetSentErrorMessage(true); - return false; - } - - if (target) + GameTele const* tele = where.get<GameTele const*>(); + if (Player* target = player->GetConnectedPlayer()) { // check online security if (handler->HasLowerSecurity(target, ObjectGuid::Empty)) return false; - std::string chrNameLink = handler->playerLink(target_name); + std::string chrNameLink = handler->playerLink(target->GetName()); if (target->IsBeingTeleported() == true) { @@ -186,16 +172,16 @@ public: else { // check offline security - if (handler->HasLowerSecurity(nullptr, target_guid)) + if (handler->HasLowerSecurity(nullptr, player->GetGUID())) return false; - std::string nameLink = handler->playerLink(target_name); + std::string nameLink = handler->playerLink(player->GetName()); handler->PSendSysMessage(LANG_TELEPORTING_TO, nameLink.c_str(), handler->GetTrinityString(LANG_OFFLINE), tele->name.c_str()); CharacterDatabaseTransaction dummy; Player::SavePositionInDB(WorldLocation(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation), - sMapMgr->GetZoneId(PhasingHandler::GetEmptyPhaseShift(), tele->mapId, tele->position_x, tele->position_y, tele->position_z), target_guid, dummy); + sMapMgr->GetZoneId(PhasingHandler::GetEmptyPhaseShift(), tele->mapId, tele->position_x, tele->position_y, tele->position_z), player->GetGUID(), dummy); } return true; |
