aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-09-09 18:33:18 +0200
committerGitHub <noreply@github.com>2020-09-09 18:33:18 +0200
commit4f636b80e4942c4c9c4811496d1c1b77f767378d (patch)
tree7154f2dce87220cdb30121d158764c902d27c918 /src/server/scripts/Commands
parent6b10f0cfd41201565de3b5fb5295a3566bbafb05 (diff)
Chat/Commands: Eradicate ChatHandler::extractOptFirstArg
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp22
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp69
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp42
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;