33#include <boost/algorithm/string/replace.hpp>
62 if (!target_session && !target_account)
86 else if (target_account)
104 std::string msg{ str };
107 if (escapeCharacters && msg.find(
'|') != std::string::npos)
110 std::ostringstream stream;
111 for (
size_t i = 0; i < tokens.size() - 1; ++i)
112 stream << tokens[i] <<
"||";
113 stream << tokens[tokens.size() - 1];
153 return fmt::vsprintf<char>(messageFormat, messageFormatArgs);
176 if ((text[0] !=
'!') && (text[0] !=
'.'))
180 if (text.length() < 2)
184 if (text[1] == text[0])
263 while (*text ==
' '||*text ==
'\t'||*text ==
'\b')
271 return strtok(text,
" ");
277 char* check = strtok(text,
"|");
281 char* cLinkType = strtok(
nullptr,
":");
285 if (strcmp(cLinkType, linkType) != 0)
287 strtok(
nullptr,
" ");
292 char* cKeys = strtok(
nullptr,
"|");
293 char* cKeysTail = strtok(
nullptr,
"");
295 char* cKey = strtok(cKeys,
":|");
297 *something1 = strtok(
nullptr,
":|");
299 strtok(cKeysTail,
"]");
300 strtok(
nullptr,
" ");
311 while (*text ==
' '||*text ==
'\t'||*text ==
'\b')
319 return strtok(text,
" ");
331 char* check = strtok(text,
"|");
335 tail = strtok(
nullptr,
"");
340 char* cLinkType = strtok(tail,
":");
344 for (
int i = 0; linkTypes[i]; ++i)
346 if (strcmp(cLinkType, linkTypes[i]) == 0)
348 char* cKeys = strtok(
nullptr,
"|");
349 char* cKeysTail = strtok(
nullptr,
"");
351 char* cKey = strtok(cKeys,
":|");
353 *something1 = strtok(
nullptr,
":|");
355 strtok(cKeysTail,
"]");
356 strtok(
nullptr,
" ");
363 strtok(
nullptr,
" ");
386 if (bounds.first != bounds.second)
387 return bounds.first->second;
398 for (
auto it = bounds.first; it != bounds.second; ++it)
400 creature = it->second;
401 if (it->second->IsAlive())
438 std::string name = idS;
443 return player->GetGUID().GetCounter();
474 std::string name = name_str;
504 *player_guid = pl ? pl->
GetGUID() : guid;
507 *player_name = pl || !guid.
IsEmpty() ? name :
"";
512 static char dummy[1] =
"";
524 *player_name = pl ? pl->
GetName() :
"";
528 if ((!player || !*player) && (!player_guid || !*player_guid) && (!player_name || player_name->empty()))
544 return strtok(args+1,
"\"");
563 if (*(args + 1) ==
'"')
571 return strtok(args + 1,
"\"");
601 return sObjectMgr->GetTrinityStringForDBCLocale(entry);
615 if (str[0] ==
'.' || str[0] ==
'!')
637 std::string name = cname;
656 if (!guid || !offline)
666 if (!guid || !offline)
676 return sWorld->GetDefaultDbcLocale();
688 if (str.length() < 17)
692 char opcode = str[12];
706 std::string_view cmd = str.substr(17);
739 memcpy(ack + 1,
echo, 4);
740 Send(std::string_view(ack, 5));
748 memcpy(ok + 1,
echo, 4);
749 Send(std::string_view(ok, 5));
756 memcpy(fail + 1,
echo, 4);
757 Send(std::string_view(fail, 5));
767 std::string msg =
"m";
769 std::string body(str);
770 if (escapeCharacters)
771 boost::replace_all(body,
"|",
"||");
773 for (lastpos = 0, pos = body.find(
'\n', lastpos); pos != std::string::npos; lastpos = pos + 1, pos = body.find(
'\n', lastpos))
775 std::string line(msg);
776 line.append(body, lastpos, pos - lastpos);
779 msg.append(body, lastpos, pos - lastpos);
static char const *const guidKeys[]
#define STRING_VIEW_FMT_ARG(str)
@ LANG_YOURS_SECURITY_IS_LOW
bool normalizePlayerName(std::string &name)
bool StringStartsWith(std::string_view haystack, std::string_view needle)
static uint32 GetSecurity(uint32 accountId, int32 realmId)
void SendSysMessage(std::string_view, bool escapeCharacters) override
bool ParseCommands(std::string_view str) override
static std::string_view const PREFIX
void Send(std::string_view msg)
char * extractKeyFromLink(char *text, char const *linkType, char **something1=nullptr)
Player * getSelectedPlayerOrSelf()
bool GetPlayerGroupAndGUIDByName(char const *cname, Player *&player, Group *&group, ObjectGuid &guid, bool offline=false)
virtual bool HasPermission(uint32 permission) const
std::string playerLink(std::string const &name) const
char * extractQuotedArg(char *args)
void SendGlobalGMSysMessage(const char *str)
virtual LocaleConstant GetSessionDbLocaleIndex() const
Player * getSelectedPlayer()
WorldSession * GetSession()
void SendGlobalSysMessage(const char *str)
bool HasSentErrorMessage() const
virtual LocaleConstant GetSessionDbcLocale() const
virtual std::string GetNameLink() const
Creature * GetCreatureFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
static std::string StringVPrintf(std::string_view messageFormat, fmt::printf_args messageFormatArgs)
bool HasLowerSecurity(Player *target, ObjectGuid guid, bool strong=false)
Creature * getSelectedCreature()
GameObject * GetObjectFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
void SetSentErrorMessage(bool val)
Player * GetPlayer() const
void PSendSysMessage(char const *fmt, Args &&... args)
WorldObject * getSelectedObject()
virtual bool ParseCommands(std::string_view text)
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
virtual bool needReportToTarget(Player *chr) const
bool extractPlayerTarget(char *args, Player **player, ObjectGuid *player_guid=nullptr, std::string *player_name=nullptr)
std::string extractPlayerNameFromLink(char *text)
bool _ParseCommands(std::string_view text)
GameObject * GetNearbyGameObject()
ObjectGuid::LowType extractLowGuidFromLink(char *text, HighGuid &guidHigh)
bool HasLowerSecurityAccount(WorldSession *target, uint32 account, bool strong=false)
virtual char const * GetTrinityString(uint32 entry) const
LocaleConstant GetSessionDbLocaleIndex() const override
LocaleConstant GetSessionDbcLocale() const override
void SendSysMessage(std::string_view, bool escapeCharacters) override
bool ParseCommands(std::string_view str) override
char const * GetTrinityString(uint32 entry) const override
bool needReportToTarget(Player *chr) const override
std::string GetNameLink() const override
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
CreatureBySpawnIdContainer & GetCreatureBySpawnIdStore()
LowType GetCounter() const
static ObjectGuid const Empty
static ObjectGuid GetGUID(Object const *o)
WorldSession * GetSession() const
bool IsVisibleGloballyFor(Player const *player) const
Unit * GetSelectedUnit() const
ObjectGuid GetTarget() const
std::string const & GetName() const
void Initialize(ChatMsg chatType, Language language, WorldObject const *sender, WorldObject const *receiver, std::string_view message, uint32 achievementId=0, std::string_view channelName="", LocaleConstant locale=DEFAULT_LOCALE, std::string_view addonPrefix="")
WorldPacket const * Write() override
Player session in the World.
char const * GetTrinityString(uint32 entry) const
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
AccountTypes GetSecurity() const
LocaleConstant GetSessionDbLocaleIndex() const
LocaleConstant GetSessionDbcLocale() const
Player * GetPlayer() const
bool HasPermission(uint32 permissionId)
@ CONFIG_GM_LOWER_SECURITY
TC_GAME_API Player * FindPlayerByName(std::string_view name)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
TC_GAME_API Creature * GetCreatureOrPetOrVehicle(WorldObject const &, ObjectGuid const &)
TC_GAME_API bool TryExecuteCommand(ChatHandler &handler, std::string_view cmd)
static constexpr char COMMAND_DELIMITER
TC_COMMON_API std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
@ RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR
@ RBAC_PERM_CAN_IGNORE_LOWER_SECURITY_CHECK
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)