diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.cpp | 295 | ||||
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.h | 194 | ||||
| -rw-r--r-- | src/server/game/Chat/Channels/ChannelMgr.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Chat/Chat.cpp | 104 | ||||
| -rw-r--r-- | src/server/game/Chat/Chat.h | 30 | ||||
| -rw-r--r-- | src/server/game/Chat/ChatLink.cpp | 26 | ||||
| -rw-r--r-- | src/server/game/Chat/ChatLink.h | 18 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 92 |
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, ¶m1_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 } } } |
