aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp295
-rw-r--r--src/server/game/Chat/Channels/Channel.h194
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp8
-rw-r--r--src/server/game/Chat/Chat.cpp104
-rw-r--r--src/server/game/Chat/Chat.h30
-rw-r--r--src/server/game/Chat/ChatLink.cpp26
-rw-r--r--src/server/game/Chat/ChatLink.h18
-rw-r--r--src/server/game/Entities/Player/Player.cpp92
8 files changed, 395 insertions, 372 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index 0875ceefff5..5a49b691d41 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -25,66 +25,66 @@
#include "AccountMgr.h"
#include "Player.h"
-Channel::Channel(std::string const& name, uint32 channelId, uint32 team):
- _announce(true),
- _ownership(true),
- _IsSaved(false),
- _flags(0),
+Channel::Channel(std::string const& name, uint32 channelId, uint32 team /*= 0*/):
+ _announceEnabled(true),
+ _ownershipEnabled(true),
+ _persistentChannel(false),
+ _channelFlags(0),
_channelId(channelId),
- _Team(team),
- _ownerGUID(),
- _name(name),
- _password("")
+ _channelTeam(team),
+ _ownerGuid(),
+ _channelName(name),
+ _channelPassword()
{
// set special flags if built-in channel
if (ChatChannelsEntry const* ch = sChatChannelsStore.LookupEntry(channelId)) // check whether it's a built-in channel
{
- _announce = false; // no join/leave announces
- _ownership = false; // no ownership handout
+ _announceEnabled = false; // no join/leave announces
+ _ownershipEnabled = false; // no ownership handout
- _flags |= CHANNEL_FLAG_GENERAL; // for all built-in channels
+ _channelFlags |= CHANNEL_FLAG_GENERAL; // for all built-in channels
if (ch->flags & CHANNEL_DBC_FLAG_TRADE) // for trade channel
- _flags |= CHANNEL_FLAG_TRADE;
+ _channelFlags |= CHANNEL_FLAG_TRADE;
if (ch->flags & CHANNEL_DBC_FLAG_CITY_ONLY2) // for city only channels
- _flags |= CHANNEL_FLAG_CITY;
+ _channelFlags |= CHANNEL_FLAG_CITY;
if (ch->flags & CHANNEL_DBC_FLAG_LFG) // for LFG channel
- _flags |= CHANNEL_FLAG_LFG;
+ _channelFlags |= CHANNEL_FLAG_LFG;
else // for all other channels
- _flags |= CHANNEL_FLAG_NOT_LFG;
+ _channelFlags |= CHANNEL_FLAG_NOT_LFG;
}
else // it's custom channel
{
- _flags |= CHANNEL_FLAG_CUSTOM;
+ _channelFlags |= CHANNEL_FLAG_CUSTOM;
// If storing custom channels in the db is enabled either load or save the channel
if (sWorld->getBoolConfig(CONFIG_PRESERVE_CUSTOM_CHANNELS))
{
PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHANNEL);
stmt->setString(0, name);
- stmt->setUInt32(1, _Team);
+ stmt->setUInt32(1, _channelTeam);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result) //load
{
Field* fields = result->Fetch();
- _announce = fields[0].GetBool();
- _ownership = fields[1].GetBool();
- _password = fields[2].GetString();
- const char* db_BannedList = fields[3].GetCString();
+ _announceEnabled = fields[0].GetBool();
+ _ownershipEnabled = fields[1].GetBool();
+ _channelPassword = fields[2].GetString();
+ char const* db_BannedList = fields[3].GetCString();
if (db_BannedList)
{
Tokenizer tokens(db_BannedList, ' ');
for (Tokenizer::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
{
- ObjectGuid banned_guid(uint64(strtoull(*i, NULL, 10)));
+ ObjectGuid banned_guid(uint64(atoull(*i)));
if (banned_guid)
{
TC_LOG_DEBUG("chat.system", "Channel(%s) loaded bannedStore %s", name.c_str(), banned_guid.ToString().c_str());
- bannedStore.insert(banned_guid);
+ _bannedStore.insert(banned_guid);
}
}
}
@@ -93,45 +93,44 @@ Channel::Channel(std::string const& name, uint32 channelId, uint32 team):
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHANNEL);
stmt->setString(0, name);
- stmt->setUInt32(1, _Team);
+ stmt->setUInt32(1, _channelTeam);
CharacterDatabase.Execute(stmt);
TC_LOG_DEBUG("chat.system", "Channel(%s) saved in database", name.c_str());
}
- _IsSaved = true;
+ _persistentChannel = true;
}
}
}
void Channel::UpdateChannelInDB() const
{
- if (_IsSaved)
+ if (_persistentChannel)
{
std::ostringstream banlist;
- BannedContainer::const_iterator iter;
- for (iter = bannedStore.begin(); iter != bannedStore.end(); ++iter)
+ for (BannedContainer::const_iterator iter = _bannedStore.begin(); iter != _bannedStore.end(); ++iter)
banlist << iter->GetRawValue() << ' ';
std::string banListStr = banlist.str();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL);
- stmt->setBool(0, _announce);
- stmt->setBool(1, _ownership);
- stmt->setString(2, _password);
+ stmt->setBool(0, _announceEnabled);
+ stmt->setBool(1, _ownershipEnabled);
+ stmt->setString(2, _channelPassword);
stmt->setString(3, banListStr);
- stmt->setString(4, _name);
- stmt->setUInt32(5, _Team);
+ stmt->setString(4, _channelName);
+ stmt->setUInt32(5, _channelTeam);
CharacterDatabase.Execute(stmt);
- TC_LOG_DEBUG("chat.system", "Channel(%s) updated in database", _name.c_str());
+ TC_LOG_DEBUG("chat.system", "Channel(%s) updated in database", _channelName.c_str());
}
}
void Channel::UpdateChannelUseageInDB() const
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_USAGE);
- stmt->setString(0, _name);
- stmt->setUInt32(1, _Team);
+ stmt->setString(0, _channelName);
+ stmt->setUInt32(1, _channelTeam);
CharacterDatabase.Execute(stmt);
}
@@ -170,7 +169,7 @@ void Channel::JoinChannel(Player* player, std::string const& pass)
return;
}
- if (!_password.empty() && pass != _password)
+ if (!_channelPassword.empty() && pass != _channelPassword)
{
WorldPacket data;
MakeWrongPassword(&data);
@@ -191,17 +190,15 @@ void Channel::JoinChannel(Player* player, std::string const& pass)
player->JoinedChannel(this);
- if (_announce && !player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
+ if (_announceEnabled && !player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
{
WorldPacket data;
MakeJoined(&data, guid);
SendToAll(&data);
}
- PlayerInfo pinfo;
- pinfo.player = guid;
+ PlayerInfo& pinfo = _playersStore[guid];
pinfo.flags = MEMBER_FLAG_NONE;
- playersStore[guid] = pinfo;
WorldPacket data;
MakeYouJoined(&data);
@@ -213,14 +210,12 @@ void Channel::JoinChannel(Player* player, std::string const& pass)
if (!IsConstant())
{
// Update last_used timestamp in db
- if (!playersStore.empty())
- UpdateChannelUseageInDB();
+ UpdateChannelUseageInDB();
// If the channel has no owner yet and ownership is allowed, set the new owner.
- if (!_ownerGUID && _ownership)
{
- SetOwner(guid, playersStore.size() > 1);
- playersStore[guid].SetModerator(true);
+ SetOwner(guid, _playersStore.size() > 1);
+ pinfo.SetModerator(true);
}
}
}
@@ -248,11 +243,11 @@ void Channel::LeaveChannel(Player* player, bool send)
data.clear();
}
- bool changeowner = playersStore[guid].IsOwner();
-
- playersStore.erase(guid);
+ PlayerInfo& info = _playersStore.at(guid);
+ bool changeowner = info.IsOwner();
+ _playersStore.erase(guid);
- if (_announce && !player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
+ if (_announceEnabled && !player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
{
WorldPacket data;
MakeLeft(&data, guid);
@@ -266,11 +261,12 @@ void Channel::LeaveChannel(Player* player, bool send)
// Update last_used timestamp in db
UpdateChannelUseageInDB();
- // If the channel owner left and there are still playersStore inside, pick a new owner
- if (changeowner && _ownership && !playersStore.empty())
+ // If the channel owner left and there are still players inside, pick a new owner
+ if (changeowner && _ownershipEnabled && !_playersStore.empty())
{
- ObjectGuid newowner = playersStore.begin()->second.player;
- playersStore[newowner].SetModerator(true);
+ auto itr = _playersStore.begin();
+ ObjectGuid newowner = itr->first;
+ itr->second.SetModerator(true);
SetOwner(newowner);
}
}
@@ -288,7 +284,8 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b
return;
}
- if (!playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ PlayerInfo& info = _playersStore.at(good);
+ if (!info.IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
WorldPacket data;
MakeNotModerator(&data);
@@ -306,9 +303,9 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b
return;
}
- bool changeowner = _ownerGUID == victim;
+ bool changeowner = _ownerGuid == victim;
- if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && changeowner && good != _ownerGUID)
+ if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && changeowner && good != _ownerGuid)
{
WorldPacket data;
MakeNotOwner(&data);
@@ -318,7 +315,7 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b
if (ban && !IsBanned(victim))
{
- bannedStore.insert(victim);
+ _bannedStore.insert(victim);
UpdateChannelInDB();
if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
@@ -335,13 +332,13 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b
SendToAll(&data);
}
- playersStore.erase(victim);
+ _playersStore.erase(victim);
bad->LeftChannel(this);
- if (changeowner && _ownership && !playersStore.empty())
+ if (changeowner && _ownershipEnabled && !_playersStore.empty())
{
ObjectGuid newowner = good;
- playersStore[newowner].SetModerator(true);
+ info.SetModerator(true);
SetOwner(newowner);
}
}
@@ -358,7 +355,8 @@ void Channel::UnBan(Player const* player, std::string const& badname)
return;
}
- if (!playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ PlayerInfo& info = _playersStore.at(good);
+ if (!info.IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
WorldPacket data;
MakeNotModerator(&data);
@@ -377,7 +375,7 @@ void Channel::UnBan(Player const* player, std::string const& badname)
return;
}
- bannedStore.erase(victim);
+ _bannedStore.erase(victim);
WorldPacket data;
MakePlayerUnbanned(&data, victim, good);
@@ -399,7 +397,8 @@ void Channel::Password(Player const* player, std::string const& pass)
return;
}
- if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ PlayerInfo& info = _playersStore.at(guid);
+ if (!info.IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
WorldPacket data;
MakeNotModerator(&data);
@@ -407,7 +406,7 @@ void Channel::Password(Player const* player, std::string const& pass)
return;
}
- _password = pass;
+ _channelPassword = pass;
WorldPacket data;
MakePasswordChanged(&data, guid);
@@ -428,7 +427,8 @@ void Channel::SetMode(Player const* player, std::string const& p2n, bool mod, bo
return;
}
- if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ PlayerInfo& info = _playersStore.at(guid);
+ if (!info.IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
WorldPacket data;
MakeNotModerator(&data);
@@ -436,7 +436,7 @@ void Channel::SetMode(Player const* player, std::string const& p2n, bool mod, bo
return;
}
- if (guid == _ownerGUID && std::string(p2n) == player->GetName() && mod)
+ if (guid == _ownerGuid && std::string(p2n) == player->GetName() && mod)
return;
Player* newp = ObjectAccessor::FindConnectedPlayerByName(p2n);
@@ -453,7 +453,7 @@ void Channel::SetMode(Player const* player, std::string const& p2n, bool mod, bo
return;
}
- if (_ownerGUID == victim && _ownerGUID != guid)
+ if (_ownerGuid == victim && _ownerGuid != guid)
{
WorldPacket data;
MakeNotOwner(&data);
@@ -479,7 +479,7 @@ void Channel::SetOwner(Player const* player, std::string const& newname)
return;
}
- if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && guid != _ownerGUID)
+ if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && guid != _ownerGuid)
{
WorldPacket data;
MakeNotOwner(&data);
@@ -501,7 +501,8 @@ void Channel::SetOwner(Player const* player, std::string const& newname)
return;
}
- playersStore[victim].SetModerator(true);
+ PlayerInfo& info = _playersStore.at(victim);
+ info.SetModerator(true);
SetOwner(victim);
}
@@ -515,7 +516,7 @@ void Channel::SendWhoOwner(ObjectGuid guid)
SendToOne(&data, guid);
}
-void Channel::List(Player const* player)
+void Channel::List(Player const* player) const
{
ObjectGuid guid = player->GetGUID();
@@ -530,7 +531,7 @@ void Channel::List(Player const* player)
TC_LOG_DEBUG("chat.system", "SMSG_CHANNEL_LIST %s Channel: %s",
player->GetSession()->GetPlayerInfo().c_str(), GetName().c_str());
- WorldPacket data(SMSG_CHANNEL_LIST, 1+(GetName().size()+1)+1+4+playersStore.size()*(8+1));
+ WorldPacket data(SMSG_CHANNEL_LIST, 1+(GetName().size()+1)+1+4+_playersStore.size()*(8+1));
data << uint8(1); // channel type?
data << GetName(); // channel name
data << uint8(GetFlags()); // channel flags?
@@ -541,7 +542,7 @@ void Channel::List(Player const* player)
uint32 gmLevelInWhoList = sWorld->getIntConfig(CONFIG_GM_LEVEL_IN_WHO_LIST);
uint32 count = 0;
- for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
+ for (PlayerContainer::const_iterator i = _playersStore.begin(); i != _playersStore.end(); ++i)
{
Player* member = ObjectAccessor::FindConnectedPlayer(i->first);
@@ -575,7 +576,8 @@ void Channel::Announce(Player const* player)
return;
}
- if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ PlayerInfo& info = _playersStore.at(guid);
+ if (!info.IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
WorldPacket data;
MakeNotModerator(&data);
@@ -583,10 +585,10 @@ void Channel::Announce(Player const* player)
return;
}
- _announce = !_announce;
+ _announceEnabled = !_announceEnabled;
WorldPacket data;
- if (_announce)
+ if (_announceEnabled)
MakeAnnouncementsOn(&data, guid);
else
MakeAnnouncementsOff(&data, guid);
@@ -595,7 +597,7 @@ void Channel::Announce(Player const* player)
UpdateChannelInDB();
}
-void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang)
+void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang) const
{
if (what.empty())
return;
@@ -612,7 +614,8 @@ void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang)
return;
}
- if (playersStore[guid].IsMuted())
+ PlayerInfo const& info = _playersStore.at(guid);
+ if (info.IsMuted())
{
WorldPacket data;
MakeMuted(&data);
@@ -622,11 +625,11 @@ void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang)
WorldPacket data;
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
- ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name);
+ ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _channelName);
else
- ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, 0, "", "", 0, false, _name);
+ ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, 0, "", "", 0, false, _channelName);
- SendToAll(&data, !playersStore[guid].IsModerator() ? guid : ObjectGuid::Empty);
+ SendToAll(&data, !info.IsModerator() ? guid : ObjectGuid::Empty);
}
void Channel::Invite(Player const* player, std::string const& newname)
@@ -691,28 +694,31 @@ void Channel::Invite(Player const* player, std::string const& newname)
void Channel::SetOwner(ObjectGuid guid, bool exclaim)
{
- if (_ownerGUID)
+ if (_ownerGuid)
{
- // [] will re-add player after it possible removed
- PlayerContainer::iterator p_itr = playersStore.find(_ownerGUID);
- if (p_itr != playersStore.end())
- p_itr->second.SetOwner(false);
+ auto itr = _playersStore.find(_ownerGuid);
+ if (itr != _playersStore.end())
+ itr->second.SetOwner(false);
}
- _ownerGUID = guid;
- if (_ownerGUID)
+ _ownerGuid = guid;
+ if (_ownerGuid)
{
- uint8 oldFlag = GetPlayerFlags(_ownerGUID);
- playersStore[_ownerGUID].SetModerator(true);
- playersStore[_ownerGUID].SetOwner(true);
+ uint8 oldFlag = GetPlayerFlags(_ownerGuid);
+ auto itr = _playersStore.find(_ownerGuid);
+ if (itr == _playersStore.end())
+ return;
+
+ itr->second.SetModerator(true);
+ itr->second.SetOwner(true);
WorldPacket data;
- MakeModeChange(&data, _ownerGUID, oldFlag);
+ MakeModeChange(&data, _ownerGuid, oldFlag);
SendToAll(&data);
if (exclaim)
{
- MakeOwnerChanged(&data, _ownerGUID);
+ MakeOwnerChanged(&data, _ownerGuid);
SendToAll(&data);
}
@@ -720,58 +726,58 @@ void Channel::SetOwner(ObjectGuid guid, bool exclaim)
}
}
-void Channel::SendToAll(WorldPacket* data, ObjectGuid guid)
+void Channel::SendToAll(WorldPacket* data, ObjectGuid guid) const
{
- for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
+ for (PlayerContainer::const_iterator i = _playersStore.begin(); i != _playersStore.end(); ++i)
if (Player* player = ObjectAccessor::FindConnectedPlayer(i->first))
if (!guid || !player->GetSocial()->HasIgnore(guid.GetCounter()))
player->GetSession()->SendPacket(data);
}
-void Channel::SendToAllButOne(WorldPacket* data, ObjectGuid who)
+void Channel::SendToAllButOne(WorldPacket* data, ObjectGuid who) const
{
- for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
+ for (PlayerContainer::const_iterator i = _playersStore.begin(); i != _playersStore.end(); ++i)
if (i->first != who)
if (Player* player = ObjectAccessor::FindConnectedPlayer(i->first))
player->GetSession()->SendPacket(data);
}
-void Channel::SendToOne(WorldPacket* data, ObjectGuid who)
+void Channel::SendToOne(WorldPacket* data, ObjectGuid who) const
{
if (Player* player = ObjectAccessor::FindConnectedPlayer(who))
player->GetSession()->SendPacket(data);
}
-void Channel::Voice(ObjectGuid /*guid1*/, ObjectGuid /*guid2*/)
+void Channel::Voice(ObjectGuid /*guid1*/, ObjectGuid /*guid2*/) const
{
}
-void Channel::DeVoice(ObjectGuid /*guid1*/, ObjectGuid /*guid2*/)
+void Channel::DeVoice(ObjectGuid /*guid1*/, ObjectGuid /*guid2*/) const
{
}
-void Channel::MakeNotifyPacket(WorldPacket* data, uint8 notify_type)
+void Channel::MakeNotifyPacket(WorldPacket* data, uint8 notify_type) const
{
- data->Initialize(SMSG_CHANNEL_NOTIFY, 1 + _name.size());
+ data->Initialize(SMSG_CHANNEL_NOTIFY, 1 + _channelName.size());
*data << uint8(notify_type);
- *data << _name;
+ *data << _channelName;
}
-void Channel::MakeJoined(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeJoined(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_JOINED_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeLeft(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeLeft(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_LEFT_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeYouJoined(WorldPacket* data)
+void Channel::MakeYouJoined(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_YOU_JOINED_NOTICE);
*data << uint8(GetFlags());
@@ -779,63 +785,66 @@ void Channel::MakeYouJoined(WorldPacket* data)
*data << uint32(0);
}
-void Channel::MakeYouLeft(WorldPacket* data)
+void Channel::MakeYouLeft(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_YOU_LEFT_NOTICE);
*data << uint32(GetChannelId());
*data << uint8(IsConstant());
}
-void Channel::MakeWrongPassword(WorldPacket* data)
+void Channel::MakeWrongPassword(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_WRONG_PASSWORD_NOTICE);
}
-void Channel::MakeNotMember(WorldPacket* data)
+void Channel::MakeNotMember(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_NOT_MEMBER_NOTICE);
}
-void Channel::MakeNotModerator(WorldPacket* data)
+void Channel::MakeNotModerator(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_NOT_MODERATOR_NOTICE);
}
-void Channel::MakePasswordChanged(WorldPacket* data, ObjectGuid guid)
+void Channel::MakePasswordChanged(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_PASSWORD_CHANGED_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeOwnerChanged(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeOwnerChanged(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_OWNER_CHANGED_NOTICE);
*data << uint64(guid);
}
-void Channel::MakePlayerNotFound(WorldPacket* data, std::string const& name)
+void Channel::MakePlayerNotFound(WorldPacket* data, std::string const& name) const
{
MakeNotifyPacket(data, CHAT_PLAYER_NOT_FOUND_NOTICE);
*data << name;
}
-void Channel::MakeNotOwner(WorldPacket* data)
+void Channel::MakeNotOwner(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_NOT_OWNER_NOTICE);
}
-void Channel::MakeChannelOwner(WorldPacket* data)
+void Channel::MakeChannelOwner(WorldPacket* data) const
{
- std::string name = "";
+ std::string name;
- if (!sObjectMgr->GetPlayerNameByGUID(_ownerGUID, name) || name.empty())
+ CharacterInfo const* cInfo = sWorld->GetCharacterInfo(_ownerGuid);
+ if (!cInfo || cInfo->Name.empty())
name = "PLAYER_NOT_FOUND";
+ else
+ name = cInfo->Name;
MakeNotifyPacket(data, CHAT_CHANNEL_OWNER_NOTICE);
- *data << ((IsConstant() || !_ownerGUID) ? "Nobody" : name);
+ *data << ((IsConstant() || !_ownerGuid) ? "Nobody" : name);
}
-void Channel::MakeModeChange(WorldPacket* data, ObjectGuid guid, uint8 oldflags)
+void Channel::MakeModeChange(WorldPacket* data, ObjectGuid guid, uint8 oldflags) const
{
MakeNotifyPacket(data, CHAT_MODE_CHANGE_NOTICE);
*data << uint64(guid);
@@ -843,127 +852,127 @@ void Channel::MakeModeChange(WorldPacket* data, ObjectGuid guid, uint8 oldflags)
*data << uint8(GetPlayerFlags(guid));
}
-void Channel::MakeAnnouncementsOn(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeAnnouncementsOn(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_ANNOUNCEMENTS_ON_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeAnnouncementsOff(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeAnnouncementsOff(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_ANNOUNCEMENTS_OFF_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeMuted(WorldPacket* data)
+void Channel::MakeMuted(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_MUTED_NOTICE);
}
-void Channel::MakePlayerKicked(WorldPacket* data, ObjectGuid bad, ObjectGuid good)
+void Channel::MakePlayerKicked(WorldPacket* data, ObjectGuid bad, ObjectGuid good) const
{
MakeNotifyPacket(data, CHAT_PLAYER_KICKED_NOTICE);
*data << uint64(bad);
*data << uint64(good);
}
-void Channel::MakeBanned(WorldPacket* data)
+void Channel::MakeBanned(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_BANNED_NOTICE);
}
-void Channel::MakePlayerBanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good)
+void Channel::MakePlayerBanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good) const
{
MakeNotifyPacket(data, CHAT_PLAYER_BANNED_NOTICE);
*data << uint64(bad);
*data << uint64(good);
}
-void Channel::MakePlayerUnbanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good)
+void Channel::MakePlayerUnbanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good) const
{
MakeNotifyPacket(data, CHAT_PLAYER_UNBANNED_NOTICE);
*data << uint64(bad);
*data << uint64(good);
}
-void Channel::MakePlayerNotBanned(WorldPacket* data, const std::string &name)
+void Channel::MakePlayerNotBanned(WorldPacket* data, const std::string &name) const
{
MakeNotifyPacket(data, CHAT_PLAYER_NOT_BANNED_NOTICE);
*data << name;
}
-void Channel::MakePlayerAlreadyMember(WorldPacket* data, ObjectGuid guid)
+void Channel::MakePlayerAlreadyMember(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_PLAYER_ALREADY_MEMBER_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeInvite(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeInvite(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_INVITE_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeInviteWrongFaction(WorldPacket* data)
+void Channel::MakeInviteWrongFaction(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_INVITE_WRONG_FACTION_NOTICE);
}
-void Channel::MakeWrongFaction(WorldPacket* data)
+void Channel::MakeWrongFaction(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_WRONG_FACTION_NOTICE);
}
-void Channel::MakeInvalidName(WorldPacket* data)
+void Channel::MakeInvalidName(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_INVALID_NAME_NOTICE);
}
-void Channel::MakeNotModerated(WorldPacket* data)
+void Channel::MakeNotModerated(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_NOT_MODERATED_NOTICE);
}
-void Channel::MakePlayerInvited(WorldPacket* data, const std::string& name)
+void Channel::MakePlayerInvited(WorldPacket* data, std::string const& name) const
{
MakeNotifyPacket(data, CHAT_PLAYER_INVITED_NOTICE);
*data << name;
}
-void Channel::MakePlayerInviteBanned(WorldPacket* data, const std::string& name)
+void Channel::MakePlayerInviteBanned(WorldPacket* data, std::string const& name) const
{
MakeNotifyPacket(data, CHAT_PLAYER_INVITE_BANNED_NOTICE);
*data << name;
}
-void Channel::MakeThrottled(WorldPacket* data)
+void Channel::MakeThrottled(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_THROTTLED_NOTICE);
}
-void Channel::MakeNotInArea(WorldPacket* data)
+void Channel::MakeNotInArea(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_NOT_IN_AREA_NOTICE);
}
-void Channel::MakeNotInLfg(WorldPacket* data)
+void Channel::MakeNotInLfg(WorldPacket* data) const
{
MakeNotifyPacket(data, CHAT_NOT_IN_LFG_NOTICE);
}
-void Channel::MakeVoiceOn(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeVoiceOn(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_VOICE_ON_NOTICE);
*data << uint64(guid);
}
-void Channel::MakeVoiceOff(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeVoiceOff(WorldPacket* data, ObjectGuid guid) const
{
MakeNotifyPacket(data, CHAT_VOICE_OFF_NOTICE);
*data << uint64(guid);
}
-void Channel::JoinNotify(ObjectGuid guid)
+void Channel::JoinNotify(ObjectGuid guid) const
{
WorldPacket data(IsConstant() ? SMSG_USERLIST_ADD : SMSG_USERLIST_UPDATE, 8 + 1 + 1 + 4 + GetName().size());
data << uint64(guid);
@@ -978,7 +987,7 @@ void Channel::JoinNotify(ObjectGuid guid)
SendToAll(&data);
}
-void Channel::LeaveNotify(ObjectGuid guid)
+void Channel::LeaveNotify(ObjectGuid guid) const
{
WorldPacket data(SMSG_USERLIST_REMOVE, 8 + 1 + 4 + GetName().size());
data << uint64(guid);
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index 319105d2a8d..23f9e5ae28f 100644
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -19,10 +19,6 @@
#ifndef _CHANNEL_H
#define _CHANNEL_H
-#include <list>
-#include <map>
-#include <string>
-
#include "Common.h"
#include "WorldSession.h"
@@ -53,10 +49,10 @@ enum ChatNotify
CHAT_MODERATION_OFF_NOTICE = 0x10, //+ "[%s] Channel moderation disabled by %s.";
CHAT_MUTED_NOTICE = 0x11, //+ "[%s] You do not have permission to speak.";
CHAT_PLAYER_KICKED_NOTICE = 0x12, //? "[%s] Player %s kicked by %s.";
- CHAT_BANNED_NOTICE = 0x13, //+ "[%s] You are bannedStore from that channel.";
- CHAT_PLAYER_BANNED_NOTICE = 0x14, //? "[%s] Player %s bannedStore by %s.";
+ CHAT_BANNED_NOTICE = 0x13, //+ "[%s] You are banned from that channel.";
+ CHAT_PLAYER_BANNED_NOTICE = 0x14, //? "[%s] Player %s banned by %s.";
CHAT_PLAYER_UNBANNED_NOTICE = 0x15, //? "[%s] Player %s unbanned by %s.";
- CHAT_PLAYER_NOT_BANNED_NOTICE = 0x16, //+ "[%s] Player %s is not bannedStore.";
+ CHAT_PLAYER_NOT_BANNED_NOTICE = 0x16, //+ "[%s] Player %s is not banned.";
CHAT_PLAYER_ALREADY_MEMBER_NOTICE = 0x17, //+ "[%s] Player %s is already on the channel.";
CHAT_INVITE_NOTICE = 0x18, //+ "%2$s has invited you to join the channel '%1$s'.";
CHAT_INVITE_WRONG_FACTION_NOTICE = 0x19, //+ "Target is in the wrong alliance for %s.";
@@ -64,7 +60,7 @@ enum ChatNotify
CHAT_INVALID_NAME_NOTICE = 0x1B, //+ "Invalid channel name";
CHAT_NOT_MODERATED_NOTICE = 0x1C, //+ "%s is not moderated";
CHAT_PLAYER_INVITED_NOTICE = 0x1D, //+ "[%s] You invited %s to join the channel";
- CHAT_PLAYER_INVITE_BANNED_NOTICE = 0x1E, //+ "[%s] %s has been bannedStore.";
+ CHAT_PLAYER_INVITE_BANNED_NOTICE = 0x1E, //+ "[%s] %s has been banned.";
CHAT_THROTTLED_NOTICE = 0x1F, //+ "[%s] The number of messages that can be sent to this channel is limited, please wait to send another message.";
CHAT_NOT_IN_AREA_NOTICE = 0x20, //+ "[%s] You are not in the correct area for this channel."; -- The user is trying to send a chat to a zone specific channel, and they're not physically in that zone.
CHAT_NOT_IN_LFG_NOTICE = 0x21, //+ "[%s] You must be queued in looking for group before joining this channel."; -- The user must be in the looking for group system to join LFG chat channels.
@@ -85,7 +81,7 @@ enum ChannelFlags
CHANNEL_FLAG_VOICE = 0x80
// General 0x18 = 0x10 | 0x08
// Trade 0x3C = 0x20 | 0x10 | 0x08 | 0x04
- // LocalDefence 0x18 = 0x10 | 0x08
+ // LocalDefense 0x18 = 0x10 | 0x08
// GuildRecruitment 0x38 = 0x20 | 0x10 | 0x08
// LookingForGroup 0x50 = 0x40 | 0x10
};
@@ -122,23 +118,25 @@ class TC_GAME_API Channel
{
struct PlayerInfo
{
- ObjectGuid player;
uint8 flags;
bool HasFlag(uint8 flag) const { return (flags & flag) != 0; }
void SetFlag(uint8 flag) { flags |= flag; }
+
bool IsOwner() const { return (flags & MEMBER_FLAG_OWNER) != 0; }
void SetOwner(bool state)
{
if (state) flags |= MEMBER_FLAG_OWNER;
else flags &= ~MEMBER_FLAG_OWNER;
}
+
bool IsModerator() const { return (flags & MEMBER_FLAG_MODERATOR) != 0; }
void SetModerator(bool state)
{
if (state) flags |= MEMBER_FLAG_MODERATOR;
else flags &= ~MEMBER_FLAG_MODERATOR;
}
+
bool IsMuted() const { return (flags & MEMBER_FLAG_MUTED) != 0; }
void SetMuted(bool state)
{
@@ -148,106 +146,121 @@ class TC_GAME_API Channel
};
public:
- Channel(std::string const& name, uint32 channel_id, uint32 Team = 0);
- std::string const& GetName() const { return _name; }
+ Channel(std::string const& name, uint32 channel_id, uint32 team = 0);
+
+ std::string const& GetName() const { return _channelName; }
+
uint32 GetChannelId() const { return _channelId; }
bool IsConstant() const { return _channelId != 0; }
- bool IsAnnounce() const { return _announce; }
bool IsLFG() const { return (GetFlags() & CHANNEL_FLAG_LFG) != 0; }
- std::string const& GetPassword() const { return _password; }
- void SetPassword(std::string const& npassword) { _password = npassword; }
- void SetAnnounce(bool nannounce) { _announce = nannounce; }
- uint32 GetNumPlayers() const { return playersStore.size(); }
- uint8 GetFlags() const { return _flags; }
- bool HasFlag(uint8 flag) const { return (_flags & flag) != 0; }
+
+ bool IsAnnounce() const { return _announceEnabled; }
+ void SetAnnounce(bool nannounce) { _announceEnabled = nannounce; }
+
+ std::string const& GetPassword() const { return _channelPassword; }
+ void SetPassword(std::string const& npassword) { _channelPassword = npassword; }
+
+ uint32 GetNumPlayers() const { return _playersStore.size(); }
+
+ uint8 GetFlags() const { return _channelFlags; }
+ bool HasFlag(uint8 flag) const { return (_channelFlags & flag) != 0; }
void JoinChannel(Player* player, std::string const& pass);
void LeaveChannel(Player* player, bool send = true);
+
void KickOrBan(Player const* player, std::string const& badname, bool ban);
void Kick(Player const* player, std::string const& badname) { KickOrBan(player, badname, false); }
void Ban(Player const* player, std::string const& badname) { KickOrBan(player, badname, true); }
+
void UnBan(Player const* player, std::string const& badname);
void Password(Player const* player, std::string const& pass);
void SetMode(Player const* player, std::string const& p2n, bool mod, bool set);
- void SetOwner(ObjectGuid guid, bool exclaim = true);
- void SetOwner(Player const* player, std::string const& name);
- void SendWhoOwner(ObjectGuid guid);
+
void SetModerator(Player const* player, std::string const& newname) { SetMode(player, newname, true, true); }
void UnsetModerator(Player const* player, std::string const& newname) { SetMode(player, newname, true, false); }
void SetMute(Player const* player, std::string const& newname) { SetMode(player, newname, false, true); }
void UnsetMute(Player const* player, std::string const& newname) { SetMode(player, newname, false, false); }
- void List(Player const* player);
+
+ void SetOwner(ObjectGuid guid, bool exclaim = true);
+ void SetOwner(Player const* player, std::string const& name);
+ void SendWhoOwner(ObjectGuid guid);
+
+ void List(Player const* player) const;
void Announce(Player const* player);
- void Say(ObjectGuid guid, std::string const& what, uint32 lang);
+ void Say(ObjectGuid guid, std::string const& what, uint32 lang) const;
void Invite(Player const* player, std::string const& newp);
- void Voice(ObjectGuid guid1, ObjectGuid guid2);
- void DeVoice(ObjectGuid guid1, ObjectGuid guid2);
- void JoinNotify(ObjectGuid guid); // invisible notify
- void LeaveNotify(ObjectGuid guid); // invisible notify
- void SetOwnership(bool ownership) { _ownership = ownership; }
+ void Voice(ObjectGuid guid1, ObjectGuid guid2) const;
+ void DeVoice(ObjectGuid guid1, ObjectGuid guid2) const;
+ void JoinNotify(ObjectGuid guid) const; // invisible notify
+ void LeaveNotify(ObjectGuid guid) const; // invisible notify
+ void SetOwnership(bool ownership) { _ownershipEnabled = ownership; }
static void CleanOldChannelsInDB();
private:
// initial packet data (notify type and channel name)
- void MakeNotifyPacket(WorldPacket* data, uint8 notify_type);
+ void MakeNotifyPacket(WorldPacket* data, uint8 notify_type) const;
// type specific packet data
- void MakeJoined(WorldPacket* data, ObjectGuid guid); //+ 0x00
- void MakeLeft(WorldPacket* data, ObjectGuid guid); //+ 0x01
- void MakeYouJoined(WorldPacket* data); //+ 0x02
- void MakeYouLeft(WorldPacket* data); //+ 0x03
- void MakeWrongPassword(WorldPacket* data); //? 0x04
- void MakeNotMember(WorldPacket* data); //? 0x05
- void MakeNotModerator(WorldPacket* data); //? 0x06
- void MakePasswordChanged(WorldPacket* data, ObjectGuid guid); //+ 0x07
- void MakeOwnerChanged(WorldPacket* data, ObjectGuid guid); //? 0x08
- void MakePlayerNotFound(WorldPacket* data, std::string const& name); //+ 0x09
- void MakeNotOwner(WorldPacket* data); //? 0x0A
- void MakeChannelOwner(WorldPacket* data); //? 0x0B
- void MakeModeChange(WorldPacket* data, ObjectGuid guid, uint8 oldflags);//+ 0x0C
- void MakeAnnouncementsOn(WorldPacket* data, ObjectGuid guid); //+ 0x0D
- void MakeAnnouncementsOff(WorldPacket* data, ObjectGuid guid); //+ 0x0E
- void MakeMuted(WorldPacket* data); //? 0x11
- void MakePlayerKicked(WorldPacket* data, ObjectGuid bad, ObjectGuid good);//? 0x12
- void MakeBanned(WorldPacket* data); //? 0x13
- void MakePlayerBanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good);//? 0x14
- void MakePlayerUnbanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good);//? 0x15
- void MakePlayerNotBanned(WorldPacket* data, std::string const& name); //? 0x16
- void MakePlayerAlreadyMember(WorldPacket* data, ObjectGuid guid); //+ 0x17
- void MakeInvite(WorldPacket* data, ObjectGuid guid); //? 0x18
- void MakeInviteWrongFaction(WorldPacket* data); //? 0x19
- void MakeWrongFaction(WorldPacket* data); //? 0x1A
- void MakeInvalidName(WorldPacket* data); //? 0x1B
- void MakeNotModerated(WorldPacket* data); //? 0x1C
- void MakePlayerInvited(WorldPacket* data, std::string const& name); //+ 0x1D
- void MakePlayerInviteBanned(WorldPacket* data, std::string const& name);//? 0x1E
- void MakeThrottled(WorldPacket* data); //? 0x1F
- void MakeNotInArea(WorldPacket* data); //? 0x20
- void MakeNotInLfg(WorldPacket* data); //? 0x21
- void MakeVoiceOn(WorldPacket* data, ObjectGuid guid); //+ 0x22
- void MakeVoiceOff(WorldPacket* data, ObjectGuid guid); //+ 0x23
-
- void SendToAll(WorldPacket* data, ObjectGuid guid = ObjectGuid::Empty);
- void SendToAllButOne(WorldPacket* data, ObjectGuid who);
- void SendToOne(WorldPacket* data, ObjectGuid who);
-
- bool IsOn(ObjectGuid who) const { return playersStore.find(who) != playersStore.end(); }
- bool IsBanned(ObjectGuid guid) const { return bannedStore.find(guid) != bannedStore.end(); }
+ void MakeJoined(WorldPacket* data, ObjectGuid guid) const; //+ 0x00
+ void MakeLeft(WorldPacket* data, ObjectGuid guid) const; //+ 0x01
+ void MakeYouJoined(WorldPacket* data) const; //+ 0x02
+ void MakeYouLeft(WorldPacket* data) const; //+ 0x03
+ void MakeWrongPassword(WorldPacket* data) const; //? 0x04
+ void MakeNotMember(WorldPacket* data) const; //? 0x05
+ void MakeNotModerator(WorldPacket* data) const; //? 0x06
+ void MakePasswordChanged(WorldPacket* data, ObjectGuid guid) const; //+ 0x07
+ void MakeOwnerChanged(WorldPacket* data, ObjectGuid guid) const; //? 0x08
+ void MakePlayerNotFound(WorldPacket* data, std::string const& name) const; //+ 0x09
+ void MakeNotOwner(WorldPacket* data) const; //? 0x0A
+ void MakeChannelOwner(WorldPacket* data) const; //? 0x0B
+ void MakeModeChange(WorldPacket* data, ObjectGuid guid, uint8 oldflags) const; //+ 0x0C
+ void MakeAnnouncementsOn(WorldPacket* data, ObjectGuid guid) const; //+ 0x0D
+ void MakeAnnouncementsOff(WorldPacket* data, ObjectGuid guid) const; //+ 0x0E
+ void MakeMuted(WorldPacket* data) const; //? 0x11
+ void MakePlayerKicked(WorldPacket* data, ObjectGuid bad, ObjectGuid good) const; //? 0x12
+ void MakeBanned(WorldPacket* data) const; //? 0x13
+ void MakePlayerBanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good) const; //? 0x14
+ void MakePlayerUnbanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good) const; //? 0x15
+ void MakePlayerNotBanned(WorldPacket* data, std::string const& name) const; //? 0x16
+ void MakePlayerAlreadyMember(WorldPacket* data, ObjectGuid guid) const; //+ 0x17
+ void MakeInvite(WorldPacket* data, ObjectGuid guid) const; //? 0x18
+ void MakeInviteWrongFaction(WorldPacket* data) const; //? 0x19
+ void MakeWrongFaction(WorldPacket* data) const; //? 0x1A
+ void MakeInvalidName(WorldPacket* data) const; //? 0x1B
+ void MakeNotModerated(WorldPacket* data) const; //? 0x1C
+ void MakePlayerInvited(WorldPacket* data, std::string const& name) const; //+ 0x1D
+ void MakePlayerInviteBanned(WorldPacket* data, std::string const& name) const; //? 0x1E
+ void MakeThrottled(WorldPacket* data) const; //? 0x1F
+ void MakeNotInArea(WorldPacket* data) const; //? 0x20
+ void MakeNotInLfg(WorldPacket* data) const; //? 0x21
+ void MakeVoiceOn(WorldPacket* data, ObjectGuid guid) const; //+ 0x22
+ void MakeVoiceOff(WorldPacket* data, ObjectGuid guid) const; //+ 0x23
+
+ void SendToAll(WorldPacket* data, ObjectGuid guid = ObjectGuid::Empty) const;
+ void SendToAllButOne(WorldPacket* data, ObjectGuid who) const;
+ void SendToOne(WorldPacket* data, ObjectGuid who) const;
+
+ bool IsOn(ObjectGuid who) const { return _playersStore.count(who) != 0; }
+ bool IsBanned(ObjectGuid guid) const { return _bannedStore.count(guid) != 0; }
void UpdateChannelInDB() const;
void UpdateChannelUseageInDB() const;
uint8 GetPlayerFlags(ObjectGuid guid) const
{
- PlayerContainer::const_iterator itr = playersStore.find(guid);
- return itr != playersStore.end() ? itr->second.flags : 0;
+ PlayerContainer::const_iterator itr = _playersStore.find(guid);
+ return itr != _playersStore.end() ? itr->second.flags : 0;
}
void SetModerator(ObjectGuid guid, bool set)
{
- if (playersStore[guid].IsModerator() != set)
+ if (!IsOn(guid))
+ return;
+
+ PlayerInfo& playerInfo = _playersStore.at(guid);
+ if (playerInfo.IsModerator() != set)
{
uint8 oldFlag = GetPlayerFlags(guid);
- playersStore[guid].SetModerator(set);
+ playerInfo.SetModerator(set);
WorldPacket data;
MakeModeChange(&data, guid, oldFlag);
@@ -257,10 +270,14 @@ class TC_GAME_API Channel
void SetMute(ObjectGuid guid, bool set)
{
- if (playersStore[guid].IsMuted() != set)
+ if (!IsOn(guid))
+ return;
+
+ PlayerInfo& playerInfo = _playersStore.at(guid);
+ if (playerInfo.IsMuted() != set)
{
uint8 oldFlag = GetPlayerFlags(guid);
- playersStore[guid].SetMuted(set);
+ playerInfo.SetMuted(set);
WorldPacket data;
MakeModeChange(&data, guid, oldFlag);
@@ -269,19 +286,20 @@ class TC_GAME_API Channel
}
typedef std::map<ObjectGuid, PlayerInfo> PlayerContainer;
- typedef GuidSet BannedContainer;
+ typedef GuidUnorderedSet BannedContainer;
+
+ bool _announceEnabled; //< Whether we should broadcast a packet whenever a player joins/exits the channel
+ bool _ownershipEnabled; //< Whether the channel has to maintain an owner
+ bool _persistentChannel; //< Whether the channel is saved to DB
- bool _announce;
- bool _ownership;
- bool _IsSaved;
- uint8 _flags;
+ uint8 _channelFlags;
uint32 _channelId;
- uint32 _Team;
- ObjectGuid _ownerGUID;
- std::string _name;
- std::string _password;
- PlayerContainer playersStore;
- BannedContainer bannedStore;
+ uint32 _channelTeam;
+ ObjectGuid _ownerGuid;
+ std::string _channelName;
+ std::string _channelPassword;
+ PlayerContainer _playersStore;
+ BannedContainer _bannedStore;
};
#endif
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 3e9a633729a..043d4bdc2bc 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -39,14 +39,14 @@ ChannelMgr* ChannelMgr::forTeam(uint32 team)
if (team == HORDE)
return &hordeChannelMgr;
- return NULL;
+ return nullptr;
}
Channel* ChannelMgr::GetJoinChannel(std::string const& name, uint32 channelId)
{
std::wstring wname;
if (!Utf8toWStr(name, wname))
- return NULL;
+ return nullptr;
wstrToLower(wname);
@@ -66,7 +66,7 @@ Channel* ChannelMgr::GetChannel(std::string const& name, Player* player, bool pk
{
std::wstring wname;
if (!Utf8toWStr(name, wname))
- return NULL;
+ return nullptr;
wstrToLower(wname);
@@ -81,7 +81,7 @@ Channel* ChannelMgr::GetChannel(std::string const& name, Player* player, bool pk
player->GetSession()->SendPacket(&data);
}
- return NULL;
+ return nullptr;
}
return i->second;
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index ec90a5f7efb..27fa7ffb409 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -81,7 +81,7 @@ bool ChatHandler::isAvailable(ChatCommand const& cmd) const
bool ChatHandler::HasLowerSecurity(Player* target, ObjectGuid guid, bool strong)
{
- WorldSession* target_session = NULL;
+ WorldSession* target_session = nullptr;
uint32 target_account = 0;
if (target)
@@ -116,7 +116,7 @@ bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_ac
else if (target_account)
target_sec = AccountMgr::GetSecurity(target_account, realm.Id.Realm);
else
- return true; // caller must report error for (target == NULL && target_account == 0)
+ return true; // caller must report error for (target == nullptr && target_account == 0)
AccountTypes target_ac_sec = AccountTypes(target_sec);
if (m_session->GetSecurity() < target_ac_sec || (strong && m_session->GetSecurity() <= target_ac_sec))
@@ -129,7 +129,7 @@ bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_ac
return false;
}
-bool ChatHandler::hasStringAbbr(const char* name, const char* part)
+bool ChatHandler::hasStringAbbr(char const* name, char const* part)
{
// non "" command
if (*name)
@@ -166,7 +166,7 @@ void ChatHandler::SendSysMessage(const char *str, bool escapeCharacters)
{
size_t startPos = 0;
std::ostringstream o;
- while (const char* charPos = strchr(str + startPos, '|'))
+ while (char const* charPos = strchr(str + startPos, '|'))
{
o.write(str + startPos, charPos - str - startPos);
o << "||";
@@ -184,7 +184,7 @@ void ChatHandler::SendSysMessage(const char *str, bool escapeCharacters)
while (char* line = LineFromMessage(pos))
{
- BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
+ BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
m_session->SendPacket(&data);
}
@@ -202,7 +202,7 @@ void ChatHandler::SendGlobalSysMessage(const char *str)
while (char* line = LineFromMessage(pos))
{
- BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
+ BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
sWorld->SendGlobalMessage(&data);
}
@@ -220,7 +220,7 @@ void ChatHandler::SendGlobalGMSysMessage(const char *str)
while (char* line = LineFromMessage(pos))
{
- BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
+ BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
sWorld->SendGlobalGMMessage(&data);
}
@@ -232,7 +232,7 @@ void ChatHandler::SendSysMessage(uint32 entry)
SendSysMessage(GetTrinityString(entry));
}
-bool ChatHandler::ExecuteCommandInTable(std::vector<ChatCommand> const& table, const char* text, std::string const& fullcmd)
+bool ChatHandler::ExecuteCommandInTable(std::vector<ChatCommand> const& table, char const* text, std::string const& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
@@ -450,7 +450,7 @@ Valid examples:
if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) < 3)
{
const char validSequence[6] = "cHhhr";
- const char* validSequenceIterator = validSequence;
+ char const* validSequenceIterator = validSequence;
const std::string validCommands = "cHhr|";
while (*message)
@@ -525,7 +525,7 @@ bool ChatHandler::ShowHelpForSubCommands(std::vector<ChatCommand> const& table,
return true;
}
-bool ChatHandler::ShowHelpForCommand(std::vector<ChatCommand> const& table, const char* cmd)
+bool ChatHandler::ShowHelpForCommand(std::vector<ChatCommand> const& table, char const* cmd)
{
if (*cmd)
{
@@ -539,7 +539,7 @@ bool ChatHandler::ShowHelpForCommand(std::vector<ChatCommand> const& table, cons
continue;
// have subcommand
- char const* subcmd = (*cmd) ? strtok(NULL, " ") : "";
+ char const* subcmd = (*cmd) ? strtok(nullptr, " ") : "";
if (!table[i].ChildCommands.empty() && subcmd && *subcmd)
{
@@ -694,7 +694,7 @@ size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Languag
Player* ChatHandler::getSelectedPlayer()
{
if (!m_session)
- return NULL;
+ return nullptr;
ObjectGuid selected = m_session->GetPlayer()->GetTarget();
if (!selected)
@@ -706,7 +706,7 @@ Player* ChatHandler::getSelectedPlayer()
Unit* ChatHandler::getSelectedUnit()
{
if (!m_session)
- return NULL;
+ return nullptr;
if (Unit* selected = m_session->GetPlayer()->GetSelectedUnit())
return selected;
@@ -717,7 +717,7 @@ Unit* ChatHandler::getSelectedUnit()
WorldObject* ChatHandler::getSelectedObject()
{
if (!m_session)
- return NULL;
+ return nullptr;
ObjectGuid guid = m_session->GetPlayer()->GetTarget();
@@ -730,7 +730,7 @@ WorldObject* ChatHandler::getSelectedObject()
Creature* ChatHandler::getSelectedCreature()
{
if (!m_session)
- return NULL;
+ return nullptr;
return ObjectAccessor::GetCreatureOrPetOrVehicle(*m_session->GetPlayer(), m_session->GetPlayer()->GetTarget());
}
@@ -738,7 +738,7 @@ Creature* ChatHandler::getSelectedCreature()
Player* ChatHandler::getSelectedPlayerOrSelf()
{
if (!m_session)
- return NULL;
+ return nullptr;
ObjectGuid selected = m_session->GetPlayer()->GetTarget();
if (!selected)
@@ -757,14 +757,14 @@ char* ChatHandler::extractKeyFromLink(char* text, char const* linkType, char** s
{
// skip empty
if (!text)
- return NULL;
+ return nullptr;
// skip spaces
while (*text == ' '||*text == '\t'||*text == '\b')
++text;
if (!*text)
- return NULL;
+ return nullptr;
// return non link case
if (text[0] != '|')
@@ -776,28 +776,28 @@ char* ChatHandler::extractKeyFromLink(char* text, char const* linkType, char** s
char* check = strtok(text, "|"); // skip color
if (!check)
- return NULL; // end of data
+ return nullptr; // end of data
- char* cLinkType = strtok(NULL, ":"); // linktype
+ char* cLinkType = strtok(nullptr, ":"); // linktype
if (!cLinkType)
- return NULL; // end of data
+ return nullptr; // end of data
if (strcmp(cLinkType, linkType) != 0)
{
- strtok(NULL, " "); // skip link tail (to allow continue strtok(NULL, s) use after retturn from function
+ strtok(nullptr, " "); // skip link tail (to allow continue strtok(nullptr, s) use after retturn from function
SendSysMessage(LANG_WRONG_LINK_TYPE);
- return NULL;
+ return nullptr;
}
- char* cKeys = strtok(NULL, "|"); // extract keys and values
- char* cKeysTail = strtok(NULL, "");
+ char* cKeys = strtok(nullptr, "|"); // extract keys and values
+ char* cKeysTail = strtok(nullptr, "");
char* cKey = strtok(cKeys, ":|"); // extract key
if (something1)
- *something1 = strtok(NULL, ":|"); // extract something
+ *something1 = strtok(nullptr, ":|"); // extract something
strtok(cKeysTail, "]"); // restart scan tail and skip name with possible spaces
- strtok(NULL, " "); // skip link tail (to allow continue strtok(NULL, s) use after return from function
+ strtok(nullptr, " "); // skip link tail (to allow continue strtok(nullptr, s) use after return from function
return cKey;
}
@@ -805,14 +805,14 @@ char* ChatHandler::extractKeyFromLink(char* text, char const* const* linkTypes,
{
// skip empty
if (!text)
- return NULL;
+ return nullptr;
// skip spaces
while (*text == ' '||*text == '\t'||*text == '\b')
++text;
if (!*text)
- return NULL;
+ return nullptr;
// return non link case
if (text[0] != '|')
@@ -830,48 +830,48 @@ char* ChatHandler::extractKeyFromLink(char* text, char const* const* linkTypes,
{
char* check = strtok(text, "|"); // skip color
if (!check)
- return NULL; // end of data
+ return nullptr; // end of data
- tail = strtok(NULL, ""); // tail
+ tail = strtok(nullptr, ""); // tail
}
else
tail = text+1; // skip first |
char* cLinkType = strtok(tail, ":"); // linktype
if (!cLinkType)
- return NULL; // end of data
+ return nullptr; // end of data
for (int i = 0; linkTypes[i]; ++i)
{
if (strcmp(cLinkType, linkTypes[i]) == 0)
{
- char* cKeys = strtok(NULL, "|"); // extract keys and values
- char* cKeysTail = strtok(NULL, "");
+ char* cKeys = strtok(nullptr, "|"); // extract keys and values
+ char* cKeysTail = strtok(nullptr, "");
char* cKey = strtok(cKeys, ":|"); // extract key
if (something1)
- *something1 = strtok(NULL, ":|"); // extract something
+ *something1 = strtok(nullptr, ":|"); // extract something
strtok(cKeysTail, "]"); // restart scan tail and skip name with possible spaces
- strtok(NULL, " "); // skip link tail (to allow continue strtok(NULL, s) use after return from function
+ strtok(nullptr, " "); // skip link tail (to allow continue strtok(nullptr, s) use after return from function
if (found_idx)
*found_idx = i;
return cKey;
}
}
- strtok(NULL, " "); // skip link tail (to allow continue strtok(NULL, s) use after return from function
+ strtok(nullptr, " "); // skip link tail (to allow continue strtok(nullptr, s) use after return from function
SendSysMessage(LANG_WRONG_LINK_TYPE);
- return NULL;
+ return nullptr;
}
GameObject* ChatHandler::GetNearbyGameObject()
{
if (!m_session)
- return NULL;
+ return nullptr;
Player* pl = m_session->GetPlayer();
- GameObject* obj = NULL;
+ GameObject* obj = nullptr;
Trinity::NearestGameObjectCheck check(*pl);
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectCheck> searcher(pl, obj, check);
pl->VisitNearbyGridObject(SIZE_OF_GRIDS, searcher);
@@ -881,7 +881,7 @@ GameObject* ChatHandler::GetNearbyGameObject()
GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(ObjectGuid::LowType lowguid, uint32 entry)
{
if (!m_session)
- return NULL;
+ return nullptr;
Player* pl = m_session->GetPlayer();
@@ -926,7 +926,7 @@ uint32 ChatHandler::extractSpellIdFromLink(char* text)
// number or [name] Shift-click form |color|Htalent:talent_id, rank|h[name]|h|r
// number or [name] Shift-click form |color|Htrade:spell_id, skill_id, max_value, cur_value|h[name]|h|r
int type = 0;
- char* param1_str = NULL;
+ char* param1_str = nullptr;
char* idS = extractKeyFromLink(text, spellKeys, &type, &param1_str);
if (!idS)
return 0;
@@ -974,7 +974,7 @@ GameTele const* ChatHandler::extractGameTeleFromLink(char* text)
// id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r
char* cId = extractKeyFromLink(text, "Htele");
if (!cId)
- return NULL;
+ return nullptr;
// id case (explicit or from shift link)
if (cId[0] >= '0' || cId[0] >= '9')
@@ -1064,7 +1064,7 @@ std::string ChatHandler::extractPlayerNameFromLink(char* text)
return name;
}
-bool ChatHandler::extractPlayerTarget(char* args, Player** player, ObjectGuid* player_guid /*=NULL*/, std::string* player_name /*= NULL*/)
+bool ChatHandler::extractPlayerTarget(char* args, Player** player, ObjectGuid* player_guid /*=nullptr*/, std::string* player_name /*= nullptr*/)
{
if (args && *args)
{
@@ -1120,12 +1120,12 @@ bool ChatHandler::extractPlayerTarget(char* args, Player** player, ObjectGuid* p
void ChatHandler::extractOptFirstArg(char* args, char** arg1, char** arg2)
{
char* p1 = strtok(args, " ");
- char* p2 = strtok(NULL, " ");
+ char* p2 = strtok(nullptr, " ");
if (!p2)
{
p2 = p1;
- p1 = NULL;
+ p1 = nullptr;
}
if (arg1)
@@ -1138,7 +1138,7 @@ void ChatHandler::extractOptFirstArg(char* args, char** arg1, char** arg2)
char* ChatHandler::extractQuotedArg(char* args)
{
if (!args || !*args)
- return NULL;
+ return nullptr;
if (*args == '"')
return strtok(args+1, "\"");
@@ -1151,9 +1151,9 @@ char* ChatHandler::extractQuotedArg(char* args)
continue;
}
- // return NULL if we reached the end of the string
+ // return nullptr if we reached the end of the string
if (!*args)
- return NULL;
+ return nullptr;
// since we skipped all spaces, we expect another token now
if (*args == '"')
@@ -1171,7 +1171,7 @@ char* ChatHandler::extractQuotedArg(char* args)
return strtok(args + 1, "\"");
}
else
- return NULL;
+ return nullptr;
}
}
@@ -1223,9 +1223,9 @@ bool CliHandler::needReportToTarget(Player* /*chr*/) const
return true;
}
-bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player*& player, Group*& group, ObjectGuid& guid, bool offline)
+bool ChatHandler::GetPlayerGroupAndGUIDByName(char const* cname, Player*& player, Group*& group, ObjectGuid& guid, bool offline)
{
- player = NULL;
+ player = nullptr;
guid.Clear();
if (cname)
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 1c9368275ad..a700afdf97d 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -67,7 +67,7 @@ class TC_GAME_API ChatHandler
// Builds chat packet and returns receiver guid position in the packet to substitute in whisper builders
static size_t BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, uint32 achievementId = 0, std::string const& channelName = "", LocaleConstant locale = DEFAULT_LOCALE);
- static char* LineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; }
+ static char* LineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = nullptr; return start; }
// function with different implementation for chat/console
virtual char const* GetTrinityString(uint32 entry) const;
@@ -76,7 +76,7 @@ class TC_GAME_API ChatHandler
void SendSysMessage(uint32 entry);
template<typename... Args>
- void PSendSysMessage(const char* fmt, Args&&... args)
+ void PSendSysMessage(char const* fmt, Args&&... args)
{
SendSysMessage(Trinity::StringFormat(fmt, std::forward<Args>(args)...).c_str());
}
@@ -93,15 +93,15 @@ class TC_GAME_API ChatHandler
return Trinity::StringFormat(GetTrinityString(entry), std::forward<Args>(args)...);
}
- bool ParseCommands(const char* text);
+ bool ParseCommands(char const* text);
static std::vector<ChatCommand> const& getCommandTable();
static void invalidateCommandTable();
- bool isValidChatMessage(const char* msg);
+ bool isValidChatMessage(char const* msg);
void SendGlobalSysMessage(const char *str);
- bool hasStringAbbr(const char* name, const char* part);
+ bool hasStringAbbr(char const* name, char const* part);
// function with different implementation for chat/console
virtual bool isAvailable(ChatCommand const& cmd) const;
@@ -122,20 +122,20 @@ class TC_GAME_API ChatHandler
// Returns either the selected player or self if there is no selected player
Player* getSelectedPlayerOrSelf();
- char* extractKeyFromLink(char* text, char const* linkType, char** something1 = NULL);
- char* extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1 = NULL);
+ char* extractKeyFromLink(char* text, char const* linkType, char** something1 = nullptr);
+ char* extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1 = nullptr);
- // if args have single value then it return in arg2 and arg1 == NULL
+ // if args have single value then it return in arg2 and arg1 == nullptr
void extractOptFirstArg(char* args, char** arg1, char** arg2);
char* extractQuotedArg(char* args);
uint32 extractSpellIdFromLink(char* text);
ObjectGuid extractGuidFromLink(char* text);
GameTele const* extractGameTeleFromLink(char* text);
- bool GetPlayerGroupAndGUIDByName(const char* cname, Player*& player, Group*& group, ObjectGuid& guid, bool offline = false);
+ bool GetPlayerGroupAndGUIDByName(char const* cname, Player*& player, Group*& group, ObjectGuid& guid, bool offline = false);
std::string extractPlayerNameFromLink(char* text);
// select by arg (name/link) or in-game selection online/offline player or self if a creature is selected
- bool extractPlayerTarget(char* args, Player** player, ObjectGuid* player_guid = NULL, std::string* player_name = NULL);
+ bool extractPlayerTarget(char* args, Player** player, ObjectGuid* player_guid = nullptr, std::string* player_name = nullptr);
std::string playerLink(std::string const& name) const { return m_session ? "|cffffffff|Hplayer:"+name+"|h["+name+"]|h|r" : name; }
std::string GetNameLink(Player* chr) const;
@@ -145,15 +145,15 @@ class TC_GAME_API ChatHandler
bool HasSentErrorMessage() const { return sentErrorMessage; }
void SetSentErrorMessage(bool val){ sentErrorMessage = val; }
- bool ShowHelpForCommand(std::vector<ChatCommand> const& table, const char* cmd);
+ bool ShowHelpForCommand(std::vector<ChatCommand> const& table, char const* cmd);
protected:
- explicit ChatHandler() : m_session(NULL), sentErrorMessage(false) { } // for CLI subclass
- static bool SetDataForCommandInTable(std::vector<ChatCommand>& table, const char* text, uint32 permission, std::string const& help, std::string const& fullcommand);
- bool ExecuteCommandInTable(std::vector<ChatCommand> const& table, const char* text, std::string const& fullcmd);
+ explicit ChatHandler() : m_session(nullptr), sentErrorMessage(false) { } // for CLI subclass
+ static bool SetDataForCommandInTable(std::vector<ChatCommand>& table, char const* text, uint32 permission, std::string const& help, std::string const& fullcommand);
+ bool ExecuteCommandInTable(std::vector<ChatCommand> const& table, char const* text, std::string const& fullcmd);
bool ShowHelpForSubCommands(std::vector<ChatCommand> const& table, char const* cmd, char const* subcmd);
private:
- WorldSession* m_session; // != NULL for chat command call and NULL for CLI command
+ WorldSession* m_session; // != nullptr for chat command call and nullptr for CLI command
// common global flag
bool sentErrorMessage;
diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp
index 3602b54bc44..92d69edb5e8 100644
--- a/src/server/game/Chat/ChatLink.cpp
+++ b/src/server/game/Chat/ChatLink.cpp
@@ -71,7 +71,7 @@ inline std::string ReadSkip(std::istringstream& iss, char term)
return res;
}
-inline bool CheckDelimiter(std::istringstream& iss, char delimiter, const char* context)
+inline bool CheckDelimiter(std::istringstream& iss, char delimiter, char const* context)
{
char c = iss.peek();
if (c != delimiter)
@@ -96,7 +96,7 @@ inline bool ReadHex(std::istringstream& iss, uint32& res, uint32 length)
#define DELIMITER ':'
#define PIPE_CHAR '|'
-bool ChatLink::ValidateName(char* buffer, const char* /*context*/)
+bool ChatLink::ValidateName(char* buffer, char const* /*context*/)
{
_name = buffer;
return true;
@@ -170,7 +170,7 @@ bool ItemChatLink::Initialize(std::istringstream& iss)
inline std::string ItemChatLink::FormatName(uint8 index, ItemLocale const* locale, char* const* suffixStrings) const
{
std::stringstream ss;
- if (locale == NULL || index >= locale->Name.size())
+ if (locale == nullptr || index >= locale->Name.size())
ss << _item->Name1;
else
ss << locale->Name[index];
@@ -179,13 +179,13 @@ inline std::string ItemChatLink::FormatName(uint8 index, ItemLocale const* local
return ss.str();
}
-bool ItemChatLink::ValidateName(char* buffer, const char* context)
+bool ItemChatLink::ValidateName(char* buffer, char const* context)
{
ChatLink::ValidateName(buffer, context);
- char* const* suffixStrings = _suffix ? _suffix->nameSuffix : (_property ? _property->nameSuffix : NULL);
+ char* const* suffixStrings = _suffix ? _suffix->nameSuffix : (_property ? _property->nameSuffix : nullptr);
- bool res = (FormatName(LOCALE_enUS, NULL, suffixStrings) == buffer);
+ bool res = (FormatName(LOCALE_enUS, nullptr, suffixStrings) == buffer);
if (!res)
{
ItemLocale const* il = sObjectMgr->GetItemLocale(_item->ItemId);
@@ -239,7 +239,7 @@ bool QuestChatLink::Initialize(std::istringstream& iss)
return true;
}
-bool QuestChatLink::ValidateName(char* buffer, const char* context)
+bool QuestChatLink::ValidateName(char* buffer, char const* context)
{
ChatLink::ValidateName(buffer, context);
@@ -280,7 +280,7 @@ bool SpellChatLink::Initialize(std::istringstream& iss)
return true;
}
-bool SpellChatLink::ValidateName(char* buffer, const char* context)
+bool SpellChatLink::ValidateName(char* buffer, char const* context)
{
ChatLink::ValidateName(buffer, context);
@@ -373,7 +373,7 @@ bool AchievementChatLink::Initialize(std::istringstream& iss)
return true;
}
-bool AchievementChatLink::ValidateName(char* buffer, const char* context)
+bool AchievementChatLink::ValidateName(char* buffer, char const* context)
{
ChatLink::ValidateName(buffer, context);
@@ -537,7 +537,7 @@ bool GlyphChatLink::Initialize(std::istringstream& iss)
return true;
}
-LinkExtractor::LinkExtractor(const char* msg) : _iss(msg) { }
+LinkExtractor::LinkExtractor(char const* msg) : _iss(msg) { }
LinkExtractor::~LinkExtractor()
{
@@ -549,19 +549,19 @@ LinkExtractor::~LinkExtractor()
bool LinkExtractor::IsValidMessage()
{
const char validSequence[6] = "cHhhr";
- const char* validSequenceIterator = validSequence;
+ char const* validSequenceIterator = validSequence;
char buffer[256];
std::istringstream::pos_type startPos = 0;
uint32 color = 0;
- ChatLink* link = NULL;
+ ChatLink* link = nullptr;
while (!_iss.eof())
{
if (validSequence == validSequenceIterator)
{
- link = NULL;
+ link = nullptr;
_iss.ignore(255, PIPE_CHAR);
startPos = _iss.tellg() - std::istringstream::pos_type(1);
}
diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h
index 0d413ce49df..32ea4b73698 100644
--- a/src/server/game/Chat/ChatLink.h
+++ b/src/server/game/Chat/ChatLink.h
@@ -44,7 +44,7 @@ public:
void SetBounds(std::istringstream::pos_type startPos, std::istringstream::pos_type endPos) { _startPos = startPos; _endPos = endPos; }
virtual bool Initialize(std::istringstream& iss) = 0;
- virtual bool ValidateName(char* buffer, const char* context) = 0;
+ virtual bool ValidateName(char* buffer, char const* context) = 0;
protected:
uint32 _color;
@@ -57,12 +57,12 @@ protected:
class TC_GAME_API ItemChatLink : public ChatLink
{
public:
- ItemChatLink() : ChatLink(), _item(NULL), _suffix(NULL), _property(NULL)
+ ItemChatLink() : ChatLink(), _item(nullptr), _suffix(nullptr), _property(nullptr)
{
memset(_data, 0, sizeof(_data));
}
virtual bool Initialize(std::istringstream& iss) override;
- virtual bool ValidateName(char* buffer, const char* context) override;
+ virtual bool ValidateName(char* buffer, char const* context) override;
protected:
std::string FormatName(uint8 index, ItemLocale const* locale, char* const* suffixStrings) const;
@@ -79,7 +79,7 @@ class TC_GAME_API QuestChatLink : public ChatLink
public:
QuestChatLink() : ChatLink(), _quest(nullptr), _questLevel(0) { }
virtual bool Initialize(std::istringstream& iss) override;
- virtual bool ValidateName(char* buffer, const char* context) override;
+ virtual bool ValidateName(char* buffer, char const* context) override;
protected:
Quest const* _quest;
@@ -92,7 +92,7 @@ class TC_GAME_API SpellChatLink : public ChatLink
public:
SpellChatLink() : ChatLink(), _spell(nullptr) { }
virtual bool Initialize(std::istringstream& iss) override;
- virtual bool ValidateName(char* buffer, const char* context) override;
+ virtual bool ValidateName(char* buffer, char const* context) override;
protected:
SpellInfo const* _spell;
@@ -102,12 +102,12 @@ protected:
class TC_GAME_API AchievementChatLink : public ChatLink
{
public:
- AchievementChatLink() : ChatLink(), _guid(0), _achievement(NULL)
+ AchievementChatLink() : ChatLink(), _guid(0), _achievement(nullptr)
{
memset(_data, 0, sizeof(_data));
}
virtual bool Initialize(std::istringstream& iss) override;
- virtual bool ValidateName(char* buffer, const char* context) override;
+ virtual bool ValidateName(char* buffer, char const* context) override;
protected:
uint32 _guid;
@@ -152,7 +152,7 @@ public:
class TC_GAME_API GlyphChatLink : public SpellChatLink
{
public:
- GlyphChatLink() : SpellChatLink(), _slotId(0), _glyph(NULL) { }
+ GlyphChatLink() : SpellChatLink(), _slotId(0), _glyph(nullptr) { }
virtual bool Initialize(std::istringstream& iss) override;
private:
uint32 _slotId;
@@ -162,7 +162,7 @@ private:
class TC_GAME_API LinkExtractor
{
public:
- explicit LinkExtractor(const char* msg);
+ explicit LinkExtractor(char const* msg);
~LinkExtractor();
bool IsValidMessage();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 0345e679ac3..ad20ba07773 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -5176,71 +5176,67 @@ void Player::UpdateLocalChannels(uint32 newZone)
return;
std::string current_zone_name = current_zone->area_name[GetSession()->GetSessionDbcLocale()];
-
for (uint32 i = 0; i < sChatChannelsStore.GetNumRows(); ++i)
{
- if (ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(i))
- {
- Channel* usedChannel = nullptr;
+ ChatChannelsEntry const* channelEntry = sChatChannelsStore.LookupEntry(i);
+ if (!channelEntry)
+ continue;
- for (JoinedChannelsList::iterator itr = m_channels.begin(); itr != m_channels.end(); ++itr)
+ Channel* usedChannel = nullptr;
+ for (Channel* channel : m_channels)
+ {
+ if (channel->GetChannelId() == i)
{
- if ((*itr)->GetChannelId() == i)
- {
- usedChannel = *itr;
- break;
- }
+ usedChannel = channel;
+ break;
}
+ }
- Channel* removeChannel = nullptr;
- Channel* joinChannel = nullptr;
- bool sendRemove = true;
+ Channel* removeChannel = nullptr;
+ Channel* joinChannel = nullptr;
+ bool sendRemove = true;
- if (CanJoinConstantChannelInZone(channel, current_zone))
+ if (CanJoinConstantChannelInZone(channelEntry, current_zone))
+ {
+ if (!(channelEntry->flags & CHANNEL_DBC_FLAG_GLOBAL))
{
- if (!(channel->flags & CHANNEL_DBC_FLAG_GLOBAL))
- {
- if (channel->flags & CHANNEL_DBC_FLAG_CITY_ONLY && usedChannel)
- continue; // Already on the channel, as city channel names are not changing
-
- char new_channel_name_buf[100];
- char const* currentNameExt;
-
- if (channel->flags & CHANNEL_DBC_FLAG_CITY_ONLY)
- currentNameExt = sObjectMgr->GetTrinityStringForDBCLocale(LANG_CHANNEL_CITY);
- else
- currentNameExt = current_zone_name.c_str();
+ if (channelEntry->flags & CHANNEL_DBC_FLAG_CITY_ONLY && usedChannel)
+ continue; // Already on the channel, as city channel names are not changing
- snprintf(new_channel_name_buf, 100, channel->pattern[m_session->GetSessionDbcLocale()], currentNameExt);
+ std::string currentNameExt;
+ if (channelEntry->flags & CHANNEL_DBC_FLAG_CITY_ONLY)
+ currentNameExt = sObjectMgr->GetTrinityStringForDBCLocale(LANG_CHANNEL_CITY);
+ else
+ currentNameExt = current_zone_name;
- joinChannel = cMgr->GetJoinChannel(new_channel_name_buf, channel->ChannelID);
- if (usedChannel)
+ std::string newChannelName = Trinity::StringFormat(channelEntry->pattern[m_session->GetSessionDbcLocale()], currentNameExt.c_str());
+ joinChannel = cMgr->GetJoinChannel(newChannelName, channelEntry->ChannelID);
+ if (usedChannel)
+ {
+ if (joinChannel != usedChannel)
{
- if (joinChannel != usedChannel)
- {
- removeChannel = usedChannel;
- sendRemove = false; // Do not send leave channel, it already replaced at client
- }
- else
- joinChannel = nullptr;
+ removeChannel = usedChannel;
+ sendRemove = false; // Do not send leave channel, it already replaced at client
}
+ else
+ joinChannel = nullptr;
}
- else
- joinChannel = cMgr->GetJoinChannel(channel->pattern[m_session->GetSessionDbcLocale()], channel->ChannelID);
}
else
- removeChannel = usedChannel;
+ joinChannel = cMgr->GetJoinChannel(channelEntry->pattern[m_session->GetSessionDbcLocale()], channelEntry->ChannelID);
+ }
+ else
+ removeChannel = usedChannel;
- if (joinChannel)
- joinChannel->JoinChannel(this, ""); // Changed Channel: ... or Joined Channel: ...
+ if (joinChannel)
+ joinChannel->JoinChannel(this, ""); // Changed Channel: ... or Joined Channel: ...
- if (removeChannel)
- {
- removeChannel->LeaveChannel(this, sendRemove); // Leave old channel
- std::string name = removeChannel->GetName(); // Store name, (*i)erase in LeftChannel
- LeftChannel(removeChannel); // Remove from player's channel list
- cMgr->LeftChannel(name); // Delete if empty
- }
+ if (removeChannel)
+ {
+ removeChannel->LeaveChannel(this, sendRemove); // Leave old channel
+ std::string name = removeChannel->GetName(); // Store name, (*i)erase in LeftChannel
+ LeftChannel(removeChannel); // Remove from player's channel list
+ cMgr->LeftChannel(name); // Delete if empty
}
}
}