diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2020-09-09 18:33:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-09 18:33:18 +0200 |
| commit | 4f636b80e4942c4c9c4811496d1c1b77f767378d (patch) | |
| tree | 7154f2dce87220cdb30121d158764c902d27c918 /src/server/scripts/Commands | |
| parent | 6b10f0cfd41201565de3b5fb5295a3566bbafb05 (diff) | |
Chat/Commands: Eradicate ChatHandler::extractOptFirstArg
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 55049d3b11f..9cc03aa5e2a 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -33,6 +33,7 @@ EndScriptData */ #include "Player.h" #include "RBAC.h" +using namespace Trinity::ChatCommands; class guild_commandscript : public CommandScript { public: @@ -189,21 +190,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; @@ -211,9 +205,7 @@ public: if (!targetGuild) return false; - uint8 newRank = uint8(atoi(rankStr)); - CharacterDatabaseTransaction trans(nullptr); - return targetGuild->ChangeMemberRank(trans, targetGuid, newRank); + return targetGuild->ChangeMemberRank(nullptr, *player, 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 bc877af3697..3fbda540a10 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1843,63 +1843,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); @@ -1908,16 +1896,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 2800c186f28..cd44b3faba0 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -108,28 +108,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_homebindMapId, target->m_homebindX, target->m_homebindY, target->m_homebindZ, target->GetOrientation()); else { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_HOMEBIND); - stmt->setUInt32(0, target_guid.GetCounter()); + stmt->setUInt32(0, player->GetGUID().GetCounter()); PreparedQueryResult resultDB = CharacterDatabase.Query(stmt); if (resultDB) @@ -139,7 +132,7 @@ public: uint32 zoneId = fieldsDB[1].GetUInt16(); CharacterDatabaseTransaction dummy; - Player::SavePositionInDB(loc, zoneId, target_guid, dummy); + Player::SavePositionInDB(loc, zoneId, player->GetGUID(), dummy); } } @@ -147,21 +140,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) { @@ -185,16 +171,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(PHASEMASK_NORMAL, tele->mapId, tele->position_x, tele->position_y, tele->position_z), target_guid, dummy); + sMapMgr->GetZoneId(PHASEMASK_NORMAL, tele->mapId, tele->position_x, tele->position_y, tele->position_z), player->GetGUID(), dummy); } return true; |
