36#include <boost/algorithm/string/replace.hpp>
43 char* start = strtok(pos,
"\n");
73 if (!target_session && !target_account)
97 else if (target_account)
115 std::string msg{ str };
118 if (escapeCharacters && msg.find(
'|') != std::string::npos)
121 std::ostringstream stream;
122 for (
size_t i = 0; i < tokens.size() - 1; ++i)
123 stream << tokens[i] <<
"||";
124 stream << tokens[tokens.size() - 1];
182 if ((text[0] !=
'!') && (text[0] !=
'.'))
186 if (text.length() < 2)
190 if (text[1] == text[0])
269 while (*text ==
' '||*text ==
'\t'||*text ==
'\b')
277 return strtok(text,
" ");
283 char* check = strtok(text,
"|");
287 char* cLinkType = strtok(
nullptr,
":");
291 if (strcmp(cLinkType, linkType) != 0)
293 strtok(
nullptr,
" ");
298 char* cKeys = strtok(
nullptr,
"|");
299 char* cKeysTail = strtok(
nullptr,
"");
301 char* cKey = strtok(cKeys,
":|");
303 *something1 = strtok(
nullptr,
":|");
305 strtok(cKeysTail,
"]");
306 strtok(
nullptr,
" ");
317 while (*text ==
' '||*text ==
'\t'||*text ==
'\b')
325 return strtok(text,
" ");
337 char* check = strtok(text,
"|");
341 tail = strtok(
nullptr,
"");
346 char* cLinkType = strtok(tail,
":");
350 for (
int i = 0; linkTypes[i]; ++i)
352 if (strcmp(cLinkType, linkTypes[i]) == 0)
354 char* cKeys = strtok(
nullptr,
"|");
355 char* cKeysTail = strtok(
nullptr,
"");
357 char* cKey = strtok(cKeys,
":|");
359 *something1 = strtok(
nullptr,
":|");
361 strtok(cKeysTail,
"]");
362 strtok(
nullptr,
" ");
369 strtok(
nullptr,
" ");
392 if (bounds.first != bounds.second)
393 return bounds.first->second;
404 for (
auto it = bounds.first; it != bounds.second; ++it)
406 creature = it->second;
407 if (it->second->IsAlive())
444 std::string name = idS;
449 return player->GetGUID().GetCounter();
482 std::string name = name_str;
512 *player_guid = pl ? pl->
GetGUID() : guid;
515 *player_name = pl || !guid.
IsEmpty() ? name :
"";
520 static char dummy[1] =
"";
532 *player_name = pl ? pl->
GetName() :
"";
536 if ((!player || !*player) && (!player_guid || !*player_guid) && (!player_name || player_name->empty()))
552 return strtok(args+1,
"\"");
571 if (*(args + 1) ==
'"')
579 return strtok(args + 1,
"\"");
604 return m_session ?
"|cffffffff|Hplayer:" + name +
"|h[" + name +
"]|h|r" : name;
614 return sObjectMgr->GetTrinityStringForDBCLocale(entry);
628 if (str[0] ==
'.' || str[0] ==
'!')
650 std::string name = cname;
669 if (!guid || !offline)
679 if (!guid || !offline)
689 return sWorld->GetDefaultDbcLocale();
701 if (str.length() < 5)
703 char opcode = str[0];
717 std::string_view cmd = str.substr(5);
750 memcpy(ack + 1,
echo, 4);
760 memcpy(ok + 1,
echo, 4);
769 memcpy(fail + 1,
echo, 4);
781 std::string msg =
"m";
783 std::string body(str);
784 if (escapeCharacters)
785 boost::replace_all(body,
"|",
"||");
787 for (lastpos = 0, pos = body.find(
'\n', lastpos); pos != std::string::npos; lastpos = pos + 1, pos = body.find(
'\n', lastpos))
789 std::string line(msg);
790 line.append(body, lastpos, pos - lastpos);
793 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)
static uint32 GetSecurity(uint32 accountId, int32 realmId)
void Send(std::string const &msg)
void SendSysMessage(std::string_view, bool escapeCharacters) override
static std::string const PREFIX
bool ParseCommands(std::string_view str) override
char * extractKeyFromLink(char *text, char const *linkType, char **something1=nullptr)
Player * getSelectedPlayerOrSelf()
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)
void PSendSysMessage(const char *fmt, Args &&... args)
bool HasLowerSecurity(Player *target, ObjectGuid guid, bool strong=false)
Creature * getSelectedCreature()
GameObject * GetObjectFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
void SetSentErrorMessage(bool val)
Player * GetPlayer() const
WorldObject * getSelectedObject()
virtual bool ParseCommands(std::string_view text)
bool GetPlayerGroupAndGUIDByName(const char *cname, Player *&player, Group *&group, ObjectGuid &guid, bool offline=false)
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()
static char * LineFromMessage(char *&pos)
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
Group * GetGroup(Optional< uint8 > partyIndex)
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
AccountTypes GetSecurity() const
LocaleConstant GetSessionDbLocaleIndex() const
LocaleConstant GetSessionDbcLocale() const
Player * GetPlayer() const
bool HasPermission(uint32 permissionId)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
@ 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_CHECK_FOR_LOWER_SECURITY
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)