aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp650
-rw-r--r--src/server/game/Chat/Channels/Channel.h185
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp53
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h21
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp16
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp103
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp56
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp7
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.cpp15
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.h38
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h21
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp16
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp37
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h51
-rw-r--r--src/server/game/Server/WorldSession.h54
-rw-r--r--src/server/scripts/Commands/cs_message.cpp2
23 files changed, 721 insertions, 629 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index 7695ab45de0..e2b6b16c9f2 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -31,18 +31,16 @@ Channel::Channel(std::string const& name, uint32 channelId, uint32 team):
_IsSaved(false),
_flags(0),
_channelId(channelId),
- _Team(team),
- _ownerGUID(),
- _name(name),
- _password("")
+ _team(team),
+ _name(name)
{
// 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
+ _announce = false; // no join/leave announces
+ _ownership = false; // no ownership handout
- _flags |= CHANNEL_FLAG_GENERAL; // for all built-in channels
+ _flags |= CHANNEL_FLAG_GENERAL; // for all built-in channels
if (ch->Flags & CHANNEL_DBC_FLAG_TRADE) // for trade channel
_flags |= CHANNEL_FLAG_TRADE;
@@ -62,31 +60,31 @@ Channel::Channel(std::string const& name, uint32 channelId, uint32 team):
// 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);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHANNEL);
+ stmt->setString(0, _name);
+ stmt->setUInt32(1, _team);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
- if (result) //load
+ 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();
+ std::string bannedList = fields[3].GetString();
- if (db_BannedList)
+ if (!bannedList.empty())
{
- Tokenizer tokens(db_BannedList, ' ');
+ Tokenizer tokens(bannedList, ' ');
for (Tokenizer::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
{
std::string bannedGuidStr(*i);
- ObjectGuid banned_guid;
- banned_guid.SetRawValue(uint64(strtoull(bannedGuidStr.substr(0, 16).c_str(), NULL, 16)), uint64(strtoull(bannedGuidStr.substr(16).c_str(), NULL, 16)));
- if (!banned_guid.IsEmpty())
+ ObjectGuid bannedGuid;
+ bannedGuid.SetRawValue(uint64(strtoull(bannedGuidStr.substr(0, 16).c_str(), nullptr, 16)), uint64(strtoull(bannedGuidStr.substr(16).c_str(), nullptr, 16)));
+ if (!bannedGuid.IsEmpty())
{
- TC_LOG_DEBUG("chat.system", "Channel(%s) loaded bannedStore %s", name.c_str(), banned_guid.ToString().c_str());
- bannedStore.insert(banned_guid);
+ TC_LOG_DEBUG("chat.system", "Channel (%s) loaded bannedStore %s", _name.c_str(), bannedGuid.ToString().c_str());
+ _bannedStore.insert(bannedGuid);
}
}
}
@@ -94,10 +92,10 @@ Channel::Channel(std::string const& name, uint32 channelId, uint32 team):
else // save
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHANNEL);
- stmt->setString(0, name);
- stmt->setUInt32(1, _Team);
+ stmt->setString(0, _name);
+ stmt->setUInt32(1, _team);
CharacterDatabase.Execute(stmt);
- TC_LOG_DEBUG("chat.system", "Channel(%s) saved in database", name.c_str());
+ TC_LOG_DEBUG("chat.system", "Channel (%s) saved in database", _name.c_str());
}
_IsSaved = true;
@@ -110,22 +108,19 @@ void Channel::UpdateChannelInDB() const
if (_IsSaved)
{
std::ostringstream banlist;
- BannedContainer::const_iterator iter;
- for (iter = bannedStore.begin(); iter != bannedStore.end(); ++iter)
- banlist << *iter << ' ';
-
- std::string banListStr = banlist.str();
+ for (ObjectGuid const& guid : _bannedStore)
+ banlist << guid << ' ';
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL);
stmt->setBool(0, _announce);
stmt->setBool(1, _ownership);
stmt->setString(2, _password);
- stmt->setString(3, banListStr);
+ stmt->setString(3, banlist.str());
stmt->setString(4, _name);
- stmt->setUInt32(5, _Team);
+ stmt->setUInt32(5, _team);
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", _name.c_str());
}
}
@@ -133,7 +128,7 @@ void Channel::UpdateChannelUseageInDB() const
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_USAGE);
stmt->setString(0, _name);
- stmt->setUInt32(1, _Team);
+ stmt->setUInt32(1, _team);
CharacterDatabase.Execute(stmt);
}
@@ -151,32 +146,32 @@ void Channel::CleanOldChannelsInDB()
void Channel::JoinChannel(Player* player, std::string const& pass)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
if (IsOn(guid))
{
// Do not send error message for built-in channels
if (!IsConstant())
{
- WorldPacket data;
- MakePlayerAlreadyMember(&data, guid);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerAlreadyMember(notify, guid);
+ player->SendDirectMessage(notify.Write());
}
return;
}
if (IsBanned(guid))
{
- WorldPacket data;
- MakeBanned(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeBanned(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
if (!_password.empty() && pass != _password)
{
- WorldPacket data;
- MakeWrongPassword(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeWrongPassword(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -185,9 +180,9 @@ void Channel::JoinChannel(Player* player, std::string const& pass)
AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) && //FIXME: Move to RBAC
player->GetGroup())
{
- WorldPacket data;
- MakeNotInLfg(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotInLfg(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -195,73 +190,90 @@ void Channel::JoinChannel(Player* player, std::string const& pass)
if (_announce && !player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
{
- WorldPacket data;
- MakeJoined(&data, guid);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeJoined(notify, guid);
+ SendToAll(notify.Write());
}
- PlayerInfo pinfo;
- pinfo.player = guid;
- pinfo.flags = MEMBER_FLAG_NONE;
- playersStore[guid] = pinfo;
+ PlayerInfo playerInfo;
+ playerInfo.PlayerGuid = guid;
+ _playersStore[guid] = playerInfo;
- WorldPacket data;
- MakeYouJoined(&data);
- SendToOne(&data, guid);
+ /*
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeYouJoined(notify);
+ player->SendDirectMessage(notify.Write());
+ */
- JoinNotify(guid);
+ WorldPackets::Channel::ChannelNotifyJoined notify;
+ //notify.ChannelWelcomeMsg = "";
+ notify.ChatChannelID = _channelId;
+ //notify.InstanceID = 0;
+ notify.ChannelFlags = _flags;
+ notify.Channel = _name;
+ player->SendDirectMessage(notify.Write());
+
+ JoinNotify(player);
// Custom channel handling
if (!IsConstant())
{
// Update last_used timestamp in db
- if (!playersStore.empty())
+ if (!_playersStore.empty())
UpdateChannelUseageInDB();
// If the channel has no owner yet and ownership is allowed, set the new owner.
- if (!_ownerGUID && _ownership)
+ if (_ownerGUID.IsEmpty() && _ownership)
{
- SetOwner(guid, playersStore.size() > 1);
- playersStore[guid].SetModerator(true);
+ SetOwner(guid, _playersStore.size() > 1);
+ _playersStore[guid].SetModerator(true);
}
}
}
void Channel::LeaveChannel(Player* player, bool send)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
if (!IsOn(guid))
{
if (send)
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
}
return;
}
+ player->LeftChannel(this);
+
if (send)
{
- WorldPacket data;
- MakeYouLeft(&data);
- SendToOne(&data, guid);
- player->LeftChannel(this);
- data.clear();
+ /*
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeYouLeft(notify);
+ player->SendDirectMessage(notify.Write());
+ */
+
+ WorldPackets::Channel::ChannelNotifyLeft notify;
+ notify.Channel = _name;
+ notify.ChatChannelID = 0;
+ //notify.Suspended = false;
+ player->SendDirectMessage(notify.Write());
}
- bool changeowner = playersStore[guid].IsOwner();
+ bool changeowner = _playersStore[guid].IsOwner();
- playersStore.erase(guid);
+ _playersStore.erase(guid);
if (_announce && !player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
{
- WorldPacket data;
- MakeLeft(&data, guid);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeLeft(notify, guid);
+ SendToAll(notify.Write());
}
- LeaveNotify(guid);
+ LeaveNotify(player);
if (!IsConstant())
{
@@ -269,10 +281,10 @@ void Channel::LeaveChannel(Player* player, bool send)
UpdateChannelUseageInDB();
// If the channel owner left and there are still playersStore inside, pick a new owner
- if (changeowner && _ownership && !playersStore.empty())
+ if (changeowner && _ownership && !_playersStore.empty())
{
- ObjectGuid newowner = playersStore.begin()->second.player;
- playersStore[newowner].SetModerator(true);
+ ObjectGuid const& newowner = _playersStore.begin()->second.PlayerGuid;
+ _playersStore[newowner].SetModerator(true);
SetOwner(newowner);
}
}
@@ -280,21 +292,21 @@ void Channel::LeaveChannel(Player* player, bool send)
void Channel::KickOrBan(Player const* player, std::string const& badname, bool ban)
{
- ObjectGuid good = player->GetGUID();
+ ObjectGuid const& good = player->GetGUID();
if (!IsOn(good))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
- if (!playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ if (!_playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
- WorldPacket data;
- MakeNotModerator(&data);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotModerator(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -302,9 +314,9 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b
ObjectGuid victim = bad ? bad->GetGUID() : ObjectGuid::Empty;
if (!victim || !IsOn(victim))
{
- WorldPacket data;
- MakePlayerNotFound(&data, badname);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerNotFound(notify, badname);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -312,154 +324,152 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b
if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && changeowner && good != _ownerGUID)
{
- WorldPacket data;
- MakeNotOwner(&data);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotOwner(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
if (ban && !IsBanned(victim))
{
- bannedStore.insert(victim);
+ _bannedStore.insert(victim);
UpdateChannelInDB();
if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
{
- WorldPacket data;
- MakePlayerBanned(&data, victim, good);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerBanned(notify, victim, good);
+ SendToAll(notify.Write());
}
}
else if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL))
{
- WorldPacket data;
- MakePlayerKicked(&data, victim, good);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerKicked(notify, victim, good);
+ SendToAll(notify.Write());
}
- playersStore.erase(victim);
+ _playersStore.erase(victim);
bad->LeftChannel(this);
- if (changeowner && _ownership && !playersStore.empty())
+ if (changeowner && _ownership && !_playersStore.empty())
{
- ObjectGuid newowner = good;
- playersStore[newowner].SetModerator(true);
- SetOwner(newowner);
+ _playersStore[good].SetModerator(true);
+ SetOwner(good);
}
}
void Channel::UnBan(Player const* player, std::string const& badname)
{
- ObjectGuid good = player->GetGUID();
+ ObjectGuid const& good = player->GetGUID();
if (!IsOn(good))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
- if (!playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ if (!_playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
- WorldPacket data;
- MakeNotModerator(&data);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotModerator(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
Player* bad = ObjectAccessor::FindConnectedPlayerByName(badname);
ObjectGuid victim = bad ? bad->GetGUID() : ObjectGuid::Empty;
- if (!victim || !IsBanned(victim))
+ if (victim.IsEmpty() || !IsBanned(victim))
{
- WorldPacket data;
- MakePlayerNotFound(&data, badname);
- SendToOne(&data, good);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerNotFound(notify, badname);
+ player->SendDirectMessage(notify.Write());
return;
}
- bannedStore.erase(victim);
+ _bannedStore.erase(victim);
- WorldPacket data;
- MakePlayerUnbanned(&data, victim, good);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerUnbanned(notify, victim, good);
+ SendToAll(notify.Write());
UpdateChannelInDB();
}
void Channel::Password(Player const* player, std::string const& pass)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
- ChatHandler chat(player->GetSession());
if (!IsOn(guid))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
- if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ if (!_playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
- WorldPacket data;
- MakeNotModerator(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotModerator(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
_password = pass;
- WorldPacket data;
- MakePasswordChanged(&data, guid);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePasswordChanged(notify, guid);
+ SendToAll(notify.Write());
UpdateChannelInDB();
}
void Channel::SetMode(Player const* player, std::string const& p2n, bool mod, bool set)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
if (!IsOn(guid))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
- if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ if (!_playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
- WorldPacket data;
- MakeNotModerator(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotModerator(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
- if (guid == _ownerGUID && std::string(p2n) == player->GetName() && mod)
+ if (guid == _ownerGUID && p2n == player->GetName() && mod)
return;
Player* newp = ObjectAccessor::FindConnectedPlayerByName(p2n);
ObjectGuid victim = newp ? newp->GetGUID() : ObjectGuid::Empty;
- if (!victim || !IsOn(victim) ||
+ if (victim.IsEmpty() || !IsOn(victim) ||
(player->GetTeam() != newp->GetTeam() &&
(!player->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL) ||
!newp->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL))))
{
- WorldPacket data;
- MakePlayerNotFound(&data, p2n);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerNotFound(notify, p2n);
+ player->SendDirectMessage(notify.Write());
return;
}
if (_ownerGUID == victim && _ownerGUID != guid)
{
- WorldPacket data;
- MakeNotOwner(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotOwner(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -471,21 +481,21 @@ void Channel::SetMode(Player const* player, std::string const& p2n, bool mod, bo
void Channel::SetOwner(Player const* player, std::string const& newname)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
if (!IsOn(guid))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && guid != _ownerGUID)
{
- WorldPacket data;
- MakeNotOwner(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotOwner(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -497,55 +507,49 @@ void Channel::SetOwner(Player const* player, std::string const& newname)
(!player->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL) ||
!newp->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL))))
{
- WorldPacket data;
- MakePlayerNotFound(&data, newname);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerNotFound(notify, newname);
+ player->SendDirectMessage(notify.Write());
return;
}
- playersStore[victim].SetModerator(true);
+ _playersStore[victim].SetModerator(true);
SetOwner(victim);
}
-void Channel::SendWhoOwner(ObjectGuid guid)
+void Channel::SendWhoOwner(Player const* player)
{
- WorldPacket data;
- if (IsOn(guid))
- MakeChannelOwner(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ if (IsOn(player->GetGUID()))
+ MakeChannelOwner(notify);
else
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
}
void Channel::List(Player const* player)
{
- ObjectGuid guid = player->GetGUID();
-
- if (!IsOn(guid))
+ if (!IsOn(player->GetGUID()))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
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));
- data << uint8(1); // channel type?
- data << GetName(); // channel name
- data << uint8(GetFlags()); // channel flags?
-
- size_t pos = data.wpos();
- data << uint32(0); // size of list, placeholder
+ WorldPackets::Channel::ChannelListResponse list;
+ list.Display = true; /// always true?
+ list.Channel = GetName();
+ list.ChannelFlags = GetFlags();
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::value_type const& i : _playersStore)
{
- Player* member = ObjectAccessor::FindConnectedPlayer(i->first);
+ Player* member = ObjectAccessor::FindConnectedPlayer(i.first);
// PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
@@ -554,50 +558,46 @@ void Channel::List(Player const* player)
member->GetSession()->GetSecurity() <= AccountTypes(gmLevelInWhoList)) &&
member->IsVisibleGloballyFor(player))
{
- data << i->first;
- data << uint8(i->second.flags); // flags seems to be changed...
- ++count;
+ list.Members.emplace_back(i.second.PlayerGuid, GetVirtualRealmAddress(), i.second.GetFlags());
}
}
- data.put<uint32>(pos, count);
-
- SendToOne(&data, guid);
+ player->SendDirectMessage(list.Write());
}
void Channel::Announce(Player const* player)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
if (!IsOn(guid))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
- if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
+ if (!_playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
{
- WorldPacket data;
- MakeNotModerator(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotModerator(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
_announce = !_announce;
- WorldPacket data;
+ WorldPackets::Channel::ChannelNotify notify;
if (_announce)
- MakeAnnouncementsOn(&data, guid);
+ MakeAnnouncementsOn(notify, guid);
else
- MakeAnnouncementsOff(&data, guid);
- SendToAll(&data);
+ MakeAnnouncementsOff(notify, guid);
+ SendToAll(notify.Write());
UpdateChannelInDB();
}
-void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang)
+void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang)
{
if (what.empty())
return;
@@ -608,17 +608,17 @@ void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang)
if (!IsOn(guid))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ SendToOne(notify.Write(), guid);
return;
}
- if (playersStore[guid].IsMuted())
+ if (_playersStore[guid].IsMuted())
{
- WorldPacket data;
- MakeMuted(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeMuted(notify);
+ SendToOne(notify.Write(), guid);
return;
}
@@ -632,35 +632,35 @@ void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang)
packet.TargetGUID = guid;
}
- SendToAll(packet.Write(), !playersStore[guid].IsModerator() ? guid : ObjectGuid::Empty);
+ SendToAll(packet.Write(), !_playersStore[guid].IsModerator() ? guid : ObjectGuid::Empty);
}
void Channel::Invite(Player const* player, std::string const& newname)
{
- ObjectGuid guid = player->GetGUID();
+ ObjectGuid const& guid = player->GetGUID();
if (!IsOn(guid))
{
- WorldPacket data;
- MakeNotMember(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeNotMember(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
Player* newp = ObjectAccessor::FindConnectedPlayerByName(newname);
if (!newp || !newp->isGMVisible())
{
- WorldPacket data;
- MakePlayerNotFound(&data, newname);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerNotFound(notify, newname);
+ player->SendDirectMessage(notify.Write());
return;
}
if (IsBanned(newp->GetGUID()))
{
- WorldPacket data;
- MakePlayerInviteBanned(&data, newname);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerInviteBanned(notify, newname);
+ player->SendDirectMessage(notify.Write());
return;
}
@@ -668,169 +668,167 @@ void Channel::Invite(Player const* player, std::string const& newname)
(!player->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL) ||
!newp->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL)))
{
- WorldPacket data;
- MakeInviteWrongFaction(&data);
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeInviteWrongFaction(notify);
+ player->SendDirectMessage(notify.Write());
return;
}
if (IsOn(newp->GetGUID()))
{
- WorldPacket data;
- MakePlayerAlreadyMember(&data, newp->GetGUID());
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerAlreadyMember(notify, newp->GetGUID());
+ player->SendDirectMessage(notify.Write());
return;
}
if (!newp->GetSocial()->HasIgnore(guid))
{
- WorldPacket data;
- MakeInvite(&data, guid);
- SendToOne(&data, newp->GetGUID());
- data.clear();
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeInvite(notify, guid);
+ newp->SendDirectMessage(notify.Write());
}
- WorldPacket data;
- MakePlayerInvited(&data, newp->GetName());
- SendToOne(&data, guid);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakePlayerInvited(notify, newp->GetName());
+ player->SendDirectMessage(notify.Write());
}
-void Channel::SetOwner(ObjectGuid guid, bool exclaim)
+void Channel::SetOwner(ObjectGuid const& guid, bool exclaim)
{
if (!_ownerGUID.IsEmpty())
{
// [] 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);
+ PlayerContainer::iterator itr = _playersStore.find(_ownerGUID);
+ if (itr != _playersStore.end())
+ itr->second.SetOwner(false);
}
_ownerGUID = guid;
if (!_ownerGUID.IsEmpty())
{
- uint8 oldFlag = GetPlayerFlags(_ownerGUID);
- playersStore[_ownerGUID].SetModerator(true);
- playersStore[_ownerGUID].SetOwner(true);
+ uint8 oldFlag = _playersStore[_ownerGUID].GetFlags();
+ _playersStore[_ownerGUID].SetModerator(true);
+ _playersStore[_ownerGUID].SetOwner(true);
- WorldPacket data;
- MakeModeChange(&data, _ownerGUID, oldFlag);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify notify;
+ MakeModeChange(notify, _ownerGUID, oldFlag, _playersStore[_ownerGUID].GetFlags());
+ SendToAll(notify.Write());
if (exclaim)
{
- MakeOwnerChanged(&data, _ownerGUID);
- SendToAll(&data);
+ MakeOwnerChanged(notify, _ownerGUID);
+ SendToAll(notify.Write());
}
UpdateChannelInDB();
}
}
-void Channel::SendToAll(WorldPacket const* data, ObjectGuid guid)
+void Channel::SendToAll(WorldPacket const* data, ObjectGuid const& guid)
{
- for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
- if (Player* player = ObjectAccessor::FindConnectedPlayer(i->first))
- if (!guid || !player->GetSocial()->HasIgnore(guid))
- player->GetSession()->SendPacket(data);
+ for (PlayerContainer::value_type const& i : _playersStore)
+ if (Player* player = ObjectAccessor::FindConnectedPlayer(i.first))
+ if (guid.IsEmpty() || !player->GetSocial()->HasIgnore(guid))
+ player->SendDirectMessage(data);
}
-void Channel::SendToAllButOne(WorldPacket const* data, ObjectGuid who)
+void Channel::SendToAllButOne(WorldPacket const* data, ObjectGuid const& who)
{
- 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);
+ for (PlayerContainer::value_type const& i : _playersStore)
+ if (i.first != who)
+ if (Player* player = ObjectAccessor::FindConnectedPlayer(i.first))
+ player->SendDirectMessage(data);
}
-void Channel::SendToOne(WorldPacket const* data, ObjectGuid who)
+void Channel::SendToOne(WorldPacket const* data, ObjectGuid const& who)
{
if (Player* player = ObjectAccessor::FindConnectedPlayer(who))
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
}
-void Channel::Voice(ObjectGuid /*guid1*/, ObjectGuid /*guid2*/)
+void Channel::Voice(ObjectGuid const& /*guid1*/, ObjectGuid const& /*guid2*/)
{
}
-void Channel::DeVoice(ObjectGuid /*guid1*/, ObjectGuid /*guid2*/)
+void Channel::DeVoice(ObjectGuid const& /*guid1*/, ObjectGuid const& /*guid2*/)
{
}
-void Channel::MakeNotifyPacket(WorldPacket* data, uint8 notify_type)
+void Channel::MakeNotifyPacket(WorldPackets::Channel::ChannelNotify& data, uint8 notifyType)
{
- data->Initialize(SMSG_CHANNEL_NOTIFY, 1 + _name.size());
- *data << uint8(notify_type);
- *data << _name;
+ data.Type = notifyType;
+ data.Channel = _name;
}
-void Channel::MakeJoined(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeJoined(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_JOINED_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeLeft(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeLeft(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_LEFT_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeYouJoined(WorldPacket* data)
+void Channel::MakeYouJoined(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_YOU_JOINED_NOTICE);
- *data << uint8(GetFlags());
- *data << uint32(GetChannelId());
- *data << uint32(0);
+ //*data << uint8(GetFlags());
+ data.ChatChannelID = GetChannelId();
+ //*data << uint32(0);
}
-void Channel::MakeYouLeft(WorldPacket* data)
+void Channel::MakeYouLeft(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_YOU_LEFT_NOTICE);
- *data << uint32(GetChannelId());
- *data << uint8(IsConstant());
+ data.ChatChannelID = GetChannelId();
+ //*data << uint8(IsConstant());
}
-void Channel::MakeWrongPassword(WorldPacket* data)
+void Channel::MakeWrongPassword(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_WRONG_PASSWORD_NOTICE);
}
-void Channel::MakeNotMember(WorldPacket* data)
+void Channel::MakeNotMember(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_NOT_MEMBER_NOTICE);
}
-void Channel::MakeNotModerator(WorldPacket* data)
+void Channel::MakeNotModerator(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_NOT_MODERATOR_NOTICE);
}
-void Channel::MakePasswordChanged(WorldPacket* data, ObjectGuid guid)
+void Channel::MakePasswordChanged(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_PASSWORD_CHANGED_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeOwnerChanged(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeOwnerChanged(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_OWNER_CHANGED_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakePlayerNotFound(WorldPacket* data, std::string const& name)
+void Channel::MakePlayerNotFound(WorldPackets::Channel::ChannelNotify& data, std::string const& name)
{
MakeNotifyPacket(data, CHAT_PLAYER_NOT_FOUND_NOTICE);
- *data << name;
+ data.Sender = name;
}
-void Channel::MakeNotOwner(WorldPacket* data)
+void Channel::MakeNotOwner(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_NOT_OWNER_NOTICE);
}
-void Channel::MakeChannelOwner(WorldPacket* data)
+void Channel::MakeChannelOwner(WorldPackets::Channel::ChannelNotify& data)
{
std::string name;
@@ -838,139 +836,140 @@ void Channel::MakeChannelOwner(WorldPacket* data)
name = "PLAYER_NOT_FOUND";
MakeNotifyPacket(data, CHAT_CHANNEL_OWNER_NOTICE);
- *data << ((IsConstant() || !_ownerGUID) ? "Nobody" : name);
+ data.Sender = ((IsConstant() || !_ownerGUID) ? "Nobody" : name);
}
-void Channel::MakeModeChange(WorldPacket* data, ObjectGuid guid, uint8 oldflags)
+void Channel::MakeModeChange(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid, uint8 oldFlags, uint8 newFlags)
{
MakeNotifyPacket(data, CHAT_MODE_CHANGE_NOTICE);
- *data << guid;
- *data << uint8(oldflags);
- *data << uint8(GetPlayerFlags(guid));
+ data.SenderGuid = guid;
+ data.OldFlags = oldFlags;
+ data.NewFlags = newFlags;
}
-void Channel::MakeAnnouncementsOn(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeAnnouncementsOn(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_ANNOUNCEMENTS_ON_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeAnnouncementsOff(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeAnnouncementsOff(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_ANNOUNCEMENTS_OFF_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeMuted(WorldPacket* data)
+void Channel::MakeMuted(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_MUTED_NOTICE);
}
-void Channel::MakePlayerKicked(WorldPacket* data, ObjectGuid bad, ObjectGuid good)
+void Channel::MakePlayerKicked(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& bad, ObjectGuid const& good)
{
MakeNotifyPacket(data, CHAT_PLAYER_KICKED_NOTICE);
- *data << bad;
- *data << good;
+ data.SenderGuid = good;
+ data.TargetGuid = bad;
}
-void Channel::MakeBanned(WorldPacket* data)
+void Channel::MakeBanned(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_BANNED_NOTICE);
}
-void Channel::MakePlayerBanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good)
+void Channel::MakePlayerBanned(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& bad, ObjectGuid const& good)
{
MakeNotifyPacket(data, CHAT_PLAYER_BANNED_NOTICE);
- *data << bad;
- *data << good;
+ data.SenderGuid = good;
+ data.TargetGuid = bad;
}
-void Channel::MakePlayerUnbanned(WorldPacket* data, ObjectGuid bad, ObjectGuid good)
+void Channel::MakePlayerUnbanned(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& bad, ObjectGuid const& good)
{
MakeNotifyPacket(data, CHAT_PLAYER_UNBANNED_NOTICE);
- *data << bad;
- *data << good;
+ data.SenderGuid = good;
+ data.TargetGuid = bad;
}
-void Channel::MakePlayerNotBanned(WorldPacket* data, const std::string &name)
+void Channel::MakePlayerNotBanned(WorldPackets::Channel::ChannelNotify& data, std::string const& name)
{
MakeNotifyPacket(data, CHAT_PLAYER_NOT_BANNED_NOTICE);
- *data << name;
+ data.Sender = name;
}
-void Channel::MakePlayerAlreadyMember(WorldPacket* data, ObjectGuid guid)
+void Channel::MakePlayerAlreadyMember(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_PLAYER_ALREADY_MEMBER_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeInvite(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeInvite(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_INVITE_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeInviteWrongFaction(WorldPacket* data)
+void Channel::MakeInviteWrongFaction(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_INVITE_WRONG_FACTION_NOTICE);
}
-void Channel::MakeWrongFaction(WorldPacket* data)
+void Channel::MakeWrongFaction(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_WRONG_FACTION_NOTICE);
}
-void Channel::MakeInvalidName(WorldPacket* data)
+void Channel::MakeInvalidName(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_INVALID_NAME_NOTICE);
}
-void Channel::MakeNotModerated(WorldPacket* data)
+void Channel::MakeNotModerated(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_NOT_MODERATED_NOTICE);
}
-void Channel::MakePlayerInvited(WorldPacket* data, const std::string& name)
+void Channel::MakePlayerInvited(WorldPackets::Channel::ChannelNotify& data, std::string const& name)
{
MakeNotifyPacket(data, CHAT_PLAYER_INVITED_NOTICE);
- *data << name;
+ data.Sender = name;
}
-void Channel::MakePlayerInviteBanned(WorldPacket* data, const std::string& name)
+void Channel::MakePlayerInviteBanned(WorldPackets::Channel::ChannelNotify& data, std::string const& name)
{
MakeNotifyPacket(data, CHAT_PLAYER_INVITE_BANNED_NOTICE);
- *data << name;
+ data.Sender = name;
}
-void Channel::MakeThrottled(WorldPacket* data)
+void Channel::MakeThrottled(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_THROTTLED_NOTICE);
}
-void Channel::MakeNotInArea(WorldPacket* data)
+void Channel::MakeNotInArea(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_NOT_IN_AREA_NOTICE);
}
-void Channel::MakeNotInLfg(WorldPacket* data)
+void Channel::MakeNotInLfg(WorldPackets::Channel::ChannelNotify& data)
{
MakeNotifyPacket(data, CHAT_NOT_IN_LFG_NOTICE);
}
-void Channel::MakeVoiceOn(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeVoiceOn(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_VOICE_ON_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::MakeVoiceOff(WorldPacket* data, ObjectGuid guid)
+void Channel::MakeVoiceOff(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid)
{
MakeNotifyPacket(data, CHAT_VOICE_OFF_NOTICE);
- *data << guid;
+ data.SenderGuid = guid;
}
-void Channel::JoinNotify(ObjectGuid guid)
+void Channel::JoinNotify(Player const* player)
{
+ ObjectGuid const& guid = player->GetGUID();
WorldPacket data(IsConstant() ? SMSG_USERLIST_ADD : SMSG_USERLIST_UPDATE, 8 + 1 + 1 + 4 + GetName().size());
data << guid;
data << uint8(GetPlayerFlags(guid));
@@ -984,8 +983,9 @@ void Channel::JoinNotify(ObjectGuid guid)
SendToAll(&data);
}
-void Channel::LeaveNotify(ObjectGuid guid)
+void Channel::LeaveNotify(Player const* player)
{
+ ObjectGuid const& guid = player->GetGUID();
WorldPacket data(SMSG_USERLIST_REMOVE, 8 + 1 + 4 + GetName().size());
data << guid;
data << uint8(GetFlags());
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index f1f01e64f44..4ee83b8fbb2 100644
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -19,14 +19,11 @@
#ifndef _CHANNEL_H
#define _CHANNEL_H
-#include <list>
-#include <map>
-#include <string>
-
#include "Common.h"
#include "WorldSession.h"
-#include "WorldPacket.h"
+
+#include "Packets/ChannelPackets.h"
class Player;
@@ -122,33 +119,47 @@ class Channel
{
struct PlayerInfo
{
- ObjectGuid player;
- uint8 flags;
+ ObjectGuid PlayerGuid;
+
+ uint8 GetFlags() const { return _flags; }
+ inline bool HasFlag(uint8 flag) const { return (_flags & flag) != 0; }
+ inline void SetFlag(uint8 flag) { _flags |= flag; }
+ inline void RemoveFlag(uint8 flag) { _flags &= ~flag; }
- bool HasFlag(uint8 flag) const { return (flags & flag) != 0; }
- void SetFlag(uint8 flag) { flags |= flag; }
- bool IsOwner() const { return (flags & MEMBER_FLAG_OWNER) != 0; }
+ bool IsOwner() const { return HasFlag(MEMBER_FLAG_OWNER); }
void SetOwner(bool state)
{
- if (state) flags |= MEMBER_FLAG_OWNER;
- else flags &= ~MEMBER_FLAG_OWNER;
+ if (state)
+ SetFlag(MEMBER_FLAG_OWNER);
+ else
+ RemoveFlag(MEMBER_FLAG_OWNER);
}
- bool IsModerator() const { return (flags & MEMBER_FLAG_MODERATOR) != 0; }
+
+ bool IsModerator() const { return HasFlag(MEMBER_FLAG_MODERATOR); }
void SetModerator(bool state)
{
- if (state) flags |= MEMBER_FLAG_MODERATOR;
- else flags &= ~MEMBER_FLAG_MODERATOR;
+ if (state)
+ SetFlag(MEMBER_FLAG_MODERATOR);
+ else
+ RemoveFlag(MEMBER_FLAG_MODERATOR);
}
- bool IsMuted() const { return (flags & MEMBER_FLAG_MUTED) != 0; }
+
+ bool IsMuted() const { return HasFlag(MEMBER_FLAG_MUTED); }
void SetMuted(bool state)
{
- if (state) flags |= MEMBER_FLAG_MUTED;
- else flags &= ~MEMBER_FLAG_MUTED;
+ if (state)
+ SetFlag(MEMBER_FLAG_MUTED);
+ else
+ RemoveFlag(MEMBER_FLAG_MUTED);
}
+
+ private:
+ uint8 _flags = MEMBER_FLAG_NONE;
};
public:
Channel(std::string const& name, uint32 channel_id, uint32 Team = 0);
+
std::string const& GetName() const { return _name; }
uint32 GetChannelId() const { return _channelId; }
bool IsConstant() const { return _channelId != 0; }
@@ -157,7 +168,7 @@ class Channel
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(); }
+ uint32 GetNumPlayers() const { return _playersStore.size(); }
uint8 GetFlags() const { return _flags; }
bool HasFlag(uint8 flag) const { return (_flags & flag) != 0; }
@@ -169,102 +180,102 @@ class Channel
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(ObjectGuid const& guid, bool exclaim = true);
void SetOwner(Player const* player, std::string const& name);
- void SendWhoOwner(ObjectGuid guid);
+ void SendWhoOwner(Player const* player);
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 Announce(Player const* player);
- void Say(ObjectGuid guid, std::string const& what, uint32 lang);
+ void Say(ObjectGuid const& guid, std::string const& what, uint32 lang);
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 Voice(ObjectGuid const& guid1, ObjectGuid const& guid2);
+ void DeVoice(ObjectGuid const& guid1, ObjectGuid const& guid2);
+ void JoinNotify(Player const* player);
+ void LeaveNotify(Player const* player);
void SetOwnership(bool ownership) { _ownership = ownership; };
static void CleanOldChannelsInDB();
private:
// initial packet data (notify type and channel name)
- void MakeNotifyPacket(WorldPacket* data, uint8 notify_type);
+ void MakeNotifyPacket(WorldPackets::Channel::ChannelNotify& data, uint8 notifyType);
// 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 MakeJoined(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x00
+ void MakeLeft(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x01
+ void MakeYouJoined(WorldPackets::Channel::ChannelNotify& data); //+ 0x02
+ void MakeYouLeft(WorldPackets::Channel::ChannelNotify& data); //+ 0x03
+ void MakeWrongPassword(WorldPackets::Channel::ChannelNotify& data); //? 0x04
+ void MakeNotMember(WorldPackets::Channel::ChannelNotify& data); //? 0x05
+ void MakeNotModerator(WorldPackets::Channel::ChannelNotify& data); //? 0x06
+ void MakePasswordChanged(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x07
+ void MakeOwnerChanged(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //? 0x08
+ void MakePlayerNotFound(WorldPackets::Channel::ChannelNotify& data, std::string const& name); //+ 0x09
+ void MakeNotOwner(WorldPackets::Channel::ChannelNotify& data); //? 0x0A
+ void MakeChannelOwner(WorldPackets::Channel::ChannelNotify& data); //? 0x0B
+ void MakeModeChange(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid, uint8 oldFlags, uint8 newFlags); //+ 0x0C
+ void MakeAnnouncementsOn(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x0D
+ void MakeAnnouncementsOff(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x0E
+ void MakeMuted(WorldPackets::Channel::ChannelNotify& data); //? 0x11
+ void MakePlayerKicked(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& bad, ObjectGuid const& good); //? 0x12
+ void MakeBanned(WorldPackets::Channel::ChannelNotify& data); //? 0x13
+ void MakePlayerBanned(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& bad, ObjectGuid const& good); //? 0x14
+ void MakePlayerUnbanned(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& bad, ObjectGuid const& good); //? 0x15
+ void MakePlayerNotBanned(WorldPackets::Channel::ChannelNotify& data, std::string const& name); //? 0x16
+ void MakePlayerAlreadyMember(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x17
+ void MakeInvite(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //? 0x18
+ void MakeInviteWrongFaction(WorldPackets::Channel::ChannelNotify& data); //? 0x19
+ void MakeWrongFaction(WorldPackets::Channel::ChannelNotify& data); //? 0x1A
+ void MakeInvalidName(WorldPackets::Channel::ChannelNotify& data); //? 0x1B
+ void MakeNotModerated(WorldPackets::Channel::ChannelNotify& data); //? 0x1C
+ void MakePlayerInvited(WorldPackets::Channel::ChannelNotify& data, std::string const& name); //+ 0x1D
+ void MakePlayerInviteBanned(WorldPackets::Channel::ChannelNotify& data, std::string const& name); //? 0x1E
+ void MakeThrottled(WorldPackets::Channel::ChannelNotify& data); //? 0x1F
+ void MakeNotInArea(WorldPackets::Channel::ChannelNotify& data); //? 0x20
+ void MakeNotInLfg(WorldPackets::Channel::ChannelNotify& data); //? 0x21
+ void MakeVoiceOn(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x22
+ void MakeVoiceOff(WorldPackets::Channel::ChannelNotify& data, ObjectGuid const& guid); //+ 0x23
- void SendToAll(WorldPacket const* data, ObjectGuid guid = ObjectGuid::Empty);
- void SendToAllButOne(WorldPacket const* data, ObjectGuid who);
- void SendToOne(WorldPacket const* data, ObjectGuid who);
+ void SendToAll(WorldPacket const* data, ObjectGuid const& guid = ObjectGuid::Empty);
+ void SendToAllButOne(WorldPacket const* data, ObjectGuid const& who);
+ void SendToOne(WorldPacket const* data, ObjectGuid const& who);
- bool IsOn(ObjectGuid who) const { return playersStore.find(who) != playersStore.end(); }
- bool IsBanned(ObjectGuid guid) const { return bannedStore.find(guid) != bannedStore.end(); }
+ bool IsOn(ObjectGuid const& who) const { return _playersStore.find(who) != _playersStore.end(); }
+ bool IsBanned(ObjectGuid const& guid) const { return _bannedStore.find(guid) != _bannedStore.end(); }
void UpdateChannelInDB() const;
void UpdateChannelUseageInDB() const;
- uint8 GetPlayerFlags(ObjectGuid guid) const
+ uint8 GetPlayerFlags(ObjectGuid const& 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.GetFlags() : 0;
}
- void SetModerator(ObjectGuid guid, bool set)
+ void SetModerator(ObjectGuid const& guid, bool set)
{
- if (playersStore[guid].IsModerator() != set)
+ if (_playersStore[guid].IsModerator() != set)
{
- uint8 oldFlag = GetPlayerFlags(guid);
- playersStore[guid].SetModerator(set);
+ uint8 oldFlag = _playersStore[guid].GetFlags();
+ _playersStore[guid].SetModerator(set);
- WorldPacket data;
- MakeModeChange(&data, guid, oldFlag);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify data;
+ MakeModeChange(data, guid, oldFlag, _playersStore[guid].GetFlags());
+ SendToAll(data.Write());
}
}
- void SetMute(ObjectGuid guid, bool set)
+ void SetMute(ObjectGuid const& guid, bool set)
{
- if (playersStore[guid].IsMuted() != set)
+ if (_playersStore[guid].IsMuted() != set)
{
- uint8 oldFlag = GetPlayerFlags(guid);
- playersStore[guid].SetMuted(set);
+ uint8 oldFlag = _playersStore[guid].GetFlags();
+ _playersStore[guid].SetMuted(set);
- WorldPacket data;
- MakeModeChange(&data, guid, oldFlag);
- SendToAll(&data);
+ WorldPackets::Channel::ChannelNotify data;
+ MakeModeChange(data, guid, oldFlag, _playersStore[guid].GetFlags());
+ SendToAll(data.Write());
}
}
@@ -276,12 +287,12 @@ class Channel
bool _IsSaved;
uint8 _flags;
uint32 _channelId;
- uint32 _Team;
+ uint32 _team;
ObjectGuid _ownerGUID;
std::string _name;
std::string _password;
- PlayerContainer playersStore;
- BannedContainer bannedStore;
+ PlayerContainer _playersStore;
+ BannedContainer _bannedStore;
};
-#endif
+#endif
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index a3a4ef69e63..ca664abffd9 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -23,11 +23,11 @@
ChannelMgr::~ChannelMgr()
{
- for (ChannelMap::iterator itr = channels.begin(); itr != channels.end(); ++itr)
+ for (ChannelMap::iterator itr = _channels.begin(); itr != _channels.end(); ++itr)
delete itr->second;
}
-ChannelMgr* ChannelMgr::forTeam(uint32 team)
+ChannelMgr* ChannelMgr::ForTeam(uint32 team)
{
static ChannelMgr allianceChannelMgr;
static ChannelMgr hordeChannelMgr;
@@ -40,49 +40,43 @@ 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);
- ChannelMap::const_iterator i = channels.find(wname);
-
- if (i == channels.end())
+ ChannelMap::const_iterator i = _channels.find(wname);
+ if (i == _channels.end())
{
- Channel* nchan = new Channel(name, channelId, team);
- channels[wname] = nchan;
+ Channel* nchan = new Channel(name, channelId, _team);
+ _channels[wname] = nchan;
return nchan;
}
return i->second;
}
-Channel* ChannelMgr::GetChannel(std::string const& name, Player* player, bool pkt)
+Channel* ChannelMgr::GetChannel(std::string const& name, Player* player, bool notify /*= true*/)
{
std::wstring wname;
if (!Utf8toWStr(name, wname))
- return NULL;
+ return nullptr;
wstrToLower(wname);
- ChannelMap::const_iterator i = channels.find(wname);
-
- if (i == channels.end())
+ ChannelMap::const_iterator i = _channels.find(wname);
+ if (i == _channels.end())
{
- if (pkt)
- {
- WorldPacket data;
- MakeNotOnPacket(&data, name);
- player->GetSession()->SendPacket(&data);
- }
-
- return NULL;
+ if (notify)
+ SendNotOnChannelNotify(player, name);
+
+ return nullptr;
}
return i->second;
@@ -96,22 +90,23 @@ void ChannelMgr::LeftChannel(std::string const& name)
wstrToLower(wname);
- ChannelMap::const_iterator i = channels.find(wname);
-
- if (i == channels.end())
+ ChannelMap::const_iterator i = _channels.find(wname);
+ if (i == _channels.end())
return;
Channel* channel = i->second;
if (!channel->GetNumPlayers() && !channel->IsConstant())
{
- channels.erase(wname);
+ _channels.erase(i);
delete channel;
}
}
-void ChannelMgr::MakeNotOnPacket(WorldPacket* data, std::string const& name)
+void ChannelMgr::SendNotOnChannelNotify(Player const* player, std::string const& name)
{
- data->Initialize(SMSG_CHANNEL_NOTIFY, 1 + name.size());
- (*data) << uint8(5) << name;
+ WorldPackets::Channel::ChannelNotify notify;
+ notify.Type = CHAT_NOT_MEMBER_NOTICE;
+ notify.Channel = name;
+ player->SendDirectMessage(notify.Write());
}
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index eee45ba5b97..9a8fdb10767 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -21,11 +21,6 @@
#include "Common.h"
#include "Channel.h"
-#include <map>
-#include <string>
-
-#include "World.h"
-
#define MAX_CHANNEL_PASS_STR 31
class ChannelMgr
@@ -33,22 +28,22 @@ class ChannelMgr
typedef std::map<std::wstring, Channel*> ChannelMap;
protected:
- ChannelMgr() : team(0) { }
+ ChannelMgr() : _team(0) { }
~ChannelMgr();
public:
- static ChannelMgr* forTeam(uint32 team);
- void setTeam(uint32 newTeam) { team = newTeam; }
+ static ChannelMgr* ForTeam(uint32 team);
+ void SetTeam(uint32 newTeam) { _team = newTeam; }
- Channel* GetJoinChannel(std::string const& name, uint32 channel_id);
- Channel* GetChannel(std::string const& name, Player* p, bool pkt = true);
+ Channel* GetJoinChannel(std::string const& name, uint32 channelId);
+ Channel* GetChannel(std::string const& name, Player* player, bool notify = true);
void LeftChannel(std::string const& name);
private:
- ChannelMap channels;
- uint32 team;
+ ChannelMap _channels;
+ uint32 _team;
- void MakeNotOnPacket(WorldPacket* data, std::string const& name);
+ static void SendNotOnChannelNotify(Player const* player, std::string const& name);
};
#endif
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 3a74d2cc045..6bf579fff14 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2574,7 +2574,7 @@ void Creature::SetDisplayId(uint32 modelId)
}
}
-void Creature::SetTarget(ObjectGuid guid)
+void Creature::SetTarget(ObjectGuid const& guid)
{
if (!_focusSpell)
SetGuidValue(UNIT_FIELD_TARGET, guid);
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index ef171e311ae..4f805088548 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -674,7 +674,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
bool m_isTempWorldObject; //true when possessed
// Handling caster facing during spellcast
- void SetTarget(ObjectGuid guid) override;
+ void SetTarget(ObjectGuid const& guid) override;
void FocusTarget(Spell const* focusSpell, WorldObject const* target);
void ReleaseFocus(Spell const* focusSpell);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 7e6d56279b2..29d4e12604c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -5225,8 +5225,8 @@ void Player::CleanupChannels()
{
Channel* ch = *m_channels.begin();
m_channels.erase(m_channels.begin()); // remove from player's channel list
- ch->LeaveChannel(this, false); // not send to client, not remove from player's channel list
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetTeam()))
+ ch->LeaveChannel(this, false); // not send to client, not remove from player's channel list
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetTeam()))
cMgr->LeftChannel(ch->GetName()); // deleted channel if empty
}
TC_LOG_DEBUG("chat.system", "Player %s: channels cleaned up!", GetName().c_str());
@@ -5241,12 +5241,10 @@ void Player::UpdateLocalChannels(uint32 newZone)
if (!current_zone)
return;
- ChannelMgr* cMgr = ChannelMgr::forTeam(GetTeam());
+ ChannelMgr* cMgr = ChannelMgr::ForTeam(GetTeam());
if (!cMgr)
return;
- std::string current_zone_name = current_zone->ZoneName;
-
for (uint32 i = 0; i < sChatChannelsStore.GetNumRows(); ++i)
{
if (ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(i))
@@ -5279,7 +5277,7 @@ void Player::UpdateLocalChannels(uint32 newZone)
if (channel->Flags & CHANNEL_DBC_FLAG_CITY_ONLY)
currentNameExt = sObjectMgr->GetTrinityStringForDBCLocale(LANG_CHANNEL_CITY);
else
- currentNameExt = current_zone_name.c_str();
+ currentNameExt = current_zone->ZoneName;
snprintf(new_channel_name_buf, 100, channel->Name_lang, currentNameExt);
@@ -16757,7 +16755,8 @@ void Player::_LoadEquipmentSets(PreparedQueryResult result)
eqSet.State = EQUIPMENT_SET_UNCHANGED;
for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
- eqSet.Data.Pieces[i] = ObjectGuid::Create<HighGuid::Item>(fields[5 + i].GetUInt64());
+ if (uint64 guid = fields[5 + i].GetUInt64())
+ eqSet.Data.Pieces[i] = ObjectGuid::Create<HighGuid::Item>(guid);
if (eqSet.Data.SetID >= MAX_EQUIPMENT_SET_INDEX) // client limit
continue;
@@ -22997,6 +22996,9 @@ void Player::SendInitialPacketsBeforeAddToMap()
/// SMSG_SEND_UNLEARN_SPELLS
SendDirectMessage(WorldPackets::Spell::SendUnlearnSpells().Write());
+ /// @todo: SMSG_SEND_SPELL_HISTORY
+ /// @todo: SMSG_SEND_SPELL_CHARGES
+
/// SMSG_ACTION_BUTTONS
SendInitialActionButtons();
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 8a90204b70f..1dcd75a156e 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1758,8 +1758,8 @@ class Player : public Unit, public GridObject<Player>
Unit* GetSelectedUnit() const;
Player* GetSelectedPlayer() const;
- void SetTarget(ObjectGuid /*guid*/) override { } /// Used for serverside target changes, does not apply to players
- void SetSelection(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_TARGET, guid); }
+ void SetTarget(ObjectGuid const& /*guid*/) override { } /// Used for serverside target changes, does not apply to players
+ void SetSelection(ObjectGuid const& guid) { SetGuidValue(UNIT_FIELD_TARGET, guid); }
uint8 GetComboPoints() const { return m_comboPoints; }
ObjectGuid GetComboTarget() const { return m_comboTarget; }
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 1905f41e84e..1418dc2ad35 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -2164,7 +2164,7 @@ class Unit : public WorldObject
TempSummon const* ToTempSummon() const { if (IsSummon()) return reinterpret_cast<TempSummon const*>(this); else return NULL; }
ObjectGuid GetTarget() const { return GetGuidValue(UNIT_FIELD_TARGET); }
- virtual void SetTarget(ObjectGuid /*guid*/) = 0;
+ virtual void SetTarget(ObjectGuid const& /*guid*/) = 0;
// Movement info
Movement::MoveSpline * movespline;
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp
index 5826415a201..c6cd5337c5b 100644
--- a/src/server/game/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Handlers/ChannelHandler.cpp
@@ -18,31 +18,20 @@
#include "ObjectMgr.h" // for normalizePlayerName
#include "ChannelMgr.h"
+#include "ChannelPackets.h"
#include "Player.h"
#include "WorldSession.h"
#include <cctype>
-void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
+void WorldSession::HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet)
{
- uint32 channelId;
- uint32 channelLength, passLength;
- std::string channelName, password;
+ TC_LOG_DEBUG("chat.system", "CMSG_JOIN_CHANNEL %s ChatChannelId: %u, CreateVoiceSession: %u, Internal: %u, ChannelName: %s, Password: %s",
+ GetPlayerInfo().c_str(), packet.ChatChannelId, packet.CreateVoiceSession, packet.Internal, packet.ChannelName.c_str(), packet.Password.c_str());
- recvPacket >> channelId;
- uint8 unknown1 = recvPacket.ReadBit(); // unknowns
- uint8 unknown2 = recvPacket.ReadBit();
- channelLength = recvPacket.ReadBits(8);
- passLength = recvPacket.ReadBits(8);
- channelName = recvPacket.ReadString(channelLength);
- password = recvPacket.ReadString(passLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_JOIN_CHANNEL %s Channel: %u, unk1: %u, unk2: %u, channel: %s, password: %s",
- GetPlayerInfo().c_str(), channelId, unknown1, unknown2, channelName.c_str(), password.c_str());
-
- if (channelId)
+ if (packet.ChatChannelId)
{
- ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(channelId);
+ ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(packet.ChatChannelId);
if (!channel)
return;
@@ -51,53 +40,43 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
return;
}
- if (channelName.empty())
+ if (packet.ChannelName.empty())
return;
- if (isdigit(channelName[0]))
+ if (isdigit(packet.ChannelName[0]))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
{
- cMgr->setTeam(GetPlayer()->GetTeam());
- if (Channel* channel = cMgr->GetJoinChannel(channelName, channelId))
- channel->JoinChannel(GetPlayer(), password);
+ cMgr->SetTeam(GetPlayer()->GetTeam());
+ if (Channel* channel = cMgr->GetJoinChannel(packet.ChannelName, packet.ChatChannelId))
+ channel->JoinChannel(GetPlayer(), packet.Password);
}
}
-void WorldSession::HandleLeaveChannel(WorldPacket& recvPacket)
+void WorldSession::HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packet)
{
- uint32 unk;
- std::string channelName;
- recvPacket >> unk; // channel id?
- uint32 length = recvPacket.ReadBits(8);
- channelName = recvPacket.ReadString(length);
+ TC_LOG_DEBUG("chat.system", "CMSG_LEAVE_CHANNEL %s ChannelName: %s, ZoneChannelID: %u",
+ GetPlayerInfo().c_str(), packet.ChannelName.c_str(), packet.ZoneChannelID);
- TC_LOG_DEBUG("chat.system", "CMSG_LEAVE_CHANNEL %s Channel: %s, unk1: %u",
- GetPlayerInfo().c_str(), channelName.c_str(), unk);
-
- if (channelName.empty())
+ if (packet.ChannelName.empty())
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
{
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
+ if (Channel* channel = cMgr->GetChannel(packet.ChannelName, GetPlayer()))
channel->LeaveChannel(GetPlayer(), true);
- cMgr->LeftChannel(channelName);
+ cMgr->LeftChannel(packet.ChannelName);
}
}
-void WorldSession::HandleChannelList(WorldPacket& recvPacket)
+void WorldSession::HandleChannelList(WorldPackets::Channel::ChannelListRequest& packet)
{
- uint32 length = recvPacket.ReadBits(8);
- std::string channelName = recvPacket.ReadString(length);
-
- TC_LOG_DEBUG("chat.system", "%s %s Channel: %s",
- recvPacket.GetOpcode() == CMSG_CHANNEL_DISPLAY_LIST ? "CMSG_CHANNEL_DISPLAY_LIST" : "CMSG_CHANNEL_LIST",
- GetPlayerInfo().c_str(), channelName.c_str());
+ TC_LOG_DEBUG("chat.system", "%s %s ChannelName: %s",
+ GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), GetPlayerInfo().c_str(), packet.ChannelName.c_str());
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
+ if (Channel* channel = cMgr->GetChannel(packet.ChannelName, GetPlayer()))
channel->List(GetPlayer());
}
@@ -115,7 +94,7 @@ void WorldSession::HandleChannelPassword(WorldPacket& recvPacket)
if (password.length() > MAX_CHANNEL_PASS_STR)
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->Password(GetPlayer(), password);
}
@@ -134,7 +113,7 @@ void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->SetOwner(GetPlayer(), targetName);
}
@@ -147,9 +126,9 @@ void WorldSession::HandleChannelOwner(WorldPacket& recvPacket)
TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_OWNER %s Channel: %s",
GetPlayerInfo().c_str(), channelName.c_str());
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->SendWhoOwner(GetPlayer()->GetGUID());
+ channel->SendWhoOwner(GetPlayer());
}
void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
@@ -166,7 +145,7 @@ void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->SetModerator(GetPlayer(), targetName);
}
@@ -185,7 +164,7 @@ void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->UnsetModerator(GetPlayer(), targetName);
}
@@ -204,7 +183,7 @@ void WorldSession::HandleChannelMute(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->SetMute(GetPlayer(), targetName);
}
@@ -223,7 +202,7 @@ void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->UnsetMute(GetPlayer(), targetName);
}
@@ -242,7 +221,7 @@ void WorldSession::HandleChannelInvite(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->Invite(GetPlayer(), targetName);
}
@@ -261,7 +240,7 @@ void WorldSession::HandleChannelKick(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->Kick(GetPlayer(), targetName);
}
@@ -283,7 +262,7 @@ void WorldSession::HandleChannelBan(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->Ban(GetPlayer(), targetName);
}
@@ -302,7 +281,7 @@ void WorldSession::HandleChannelUnban(WorldPacket& recvPacket)
if (!normalizePlayerName(targetName))
return;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->UnBan(GetPlayer(), targetName);
}
@@ -315,17 +294,11 @@ void WorldSession::HandleChannelAnnouncements(WorldPacket& recvPacket)
TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_ANNOUNCEMENTS %s Channel: %s",
GetPlayerInfo().c_str(), channelName.c_str());
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
channel->Announce(GetPlayer());
}
-void WorldSession::HandleChannelDisplayListQuery(WorldPacket &recvPacket)
-{
- // this should be OK because the 2 function _were_ the same
- HandleChannelList(recvPacket);
-}
-
void WorldSession::HandleGetChannelMemberCount(WorldPacket &recvPacket)
{
std::string channelName;
@@ -334,7 +307,7 @@ void WorldSession::HandleGetChannelMemberCount(WorldPacket &recvPacket)
TC_LOG_DEBUG("chat.system", "CMSG_GET_CHANNEL_MEMBER_COUNT %s Channel: %s",
GetPlayerInfo().c_str(), channelName.c_str());
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
{
if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
{
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 83844a257cc..2c98d6c1bd6 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -37,6 +37,7 @@
#include "Language.h"
#include "LFGMgr.h"
#include "Log.h"
+#include "MiscPackets.h"
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Opcodes.h"
@@ -836,6 +837,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
return;
}
+ SendTutorialsData();
+
pCurrChar->GetMotionMaster()->Initialize();
pCurrChar->SendDungeonDifficulty(false);
@@ -1107,32 +1110,35 @@ void WorldSession::HandleSetFactionCheat(WorldPacket& /*recvData*/)
GetPlayer()->GetReputationMgr().SendStates();
}
-void WorldSession::HandleTutorialFlag(WorldPacket& recvData)
-{
- uint32 data;
- recvData >> data;
-
- uint8 index = uint8(data / 32);
- if (index >= MAX_ACCOUNT_TUTORIAL_VALUES)
- return;
-
- uint32 value = (data % 32);
-
- uint32 flag = GetTutorialInt(index);
- flag |= (1 << value);
- SetTutorialInt(index, flag);
-}
-
-void WorldSession::HandleTutorialClear(WorldPacket& /*recvData*/)
-{
- for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
- SetTutorialInt(i, 0xFFFFFFFF);
-}
-
-void WorldSession::HandleTutorialReset(WorldPacket& /*recvData*/)
+void WorldSession::HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packet)
{
- for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
- SetTutorialInt(i, 0x00000000);
+ switch (packet.Action)
+ {
+ case TUTORIAL_ACTION_UPDATE:
+ {
+ uint8 index = uint8(packet.TutorialBit >> 5);
+ if (index >= MAX_ACCOUNT_TUTORIAL_VALUES)
+ {
+ TC_LOG_ERROR("network", "CMSG_TUTORIAL_FLAG received bad TutorialBit %u.", packet.TutorialBit);
+ return;
+ }
+ uint32 flag = GetTutorialInt(index);
+ flag |= (1 << (packet.TutorialBit & 0x1F));
+ SetTutorialInt(index, flag);
+ break;
+ }
+ case TUTORIAL_ACTION_CLEAR:
+ for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
+ SetTutorialInt(i, 0xFFFFFFFF);
+ break;
+ case TUTORIAL_ACTION_RESET:
+ for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
+ SetTutorialInt(i, 0x00000000);
+ break;
+ default:
+ TC_LOG_ERROR("network", "CMSG_TUTORIAL_FLAG received unknown TutorialAction %u.", packet.Action);
+ return;
+ }
}
void WorldSession::HandleSetWatchedFactionOpcode(WorldPacket& recvData)
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index a2485d7854b..b51f0d52480 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -354,7 +354,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
}
}
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(sender->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(sender->GetTeam()))
{
if (Channel* chn = cMgr->GetChannel(target, sender))
{
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 613f1e46d7b..91ffa3aff87 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -538,12 +538,9 @@ void WorldSession::HandleRequestCemeteryList(WorldPacket& /*recvPacket*/)
SendPacket(&data);
}
-void WorldSession::HandleSetSelectionOpcode(WorldPacket& recvData)
+void WorldSession::HandleSetSelectionOpcode(WorldPackets::Misc::SetSelection& packet)
{
- ObjectGuid guid;
- recvData >> guid;
-
- _player->SetSelection(guid);
+ _player->SetSelection(packet.Selection);
}
void WorldSession::HandleStandStateChangeOpcode(WorldPacket& recvData)
diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp
index 28a50a6c9aa..2ece521b42b 100644
--- a/src/server/game/Server/Packets/ChannelPackets.cpp
+++ b/src/server/game/Server/Packets/ChannelPackets.cpp
@@ -18,7 +18,12 @@
#include "ChannelPackets.h"
#include "Channel.h"
-WorldPacket const* WorldPackets::Channel::ChannelList::Write()
+void WorldPackets::Channel::ChannelListRequest::Read()
+{
+ ChannelName = _worldPacket.ReadString(_worldPacket.ReadBits(7));
+}
+
+WorldPacket const* WorldPackets::Channel::ChannelListResponse::Write()
{
_worldPacket.WriteBit(Display);
_worldPacket.WriteBits(Channel.length(), 7);
@@ -43,7 +48,7 @@ WorldPacket const* WorldPackets::Channel::ChannelNotify::Write()
_worldPacket.WriteBits(Sender.length(), 6);
_worldPacket << SenderGuid;
- _worldPacket << SenderBnetAccountID;
+ _worldPacket << SenderAccountID;
_worldPacket << uint32(SenderVirtualRealm);
_worldPacket << TargetGuid;
_worldPacket << uint32(TargetVirtualRealm);
@@ -94,3 +99,9 @@ void WorldPackets::Channel::JoinChannel::Read()
ChannelName = _worldPacket.ReadString(channelLength);
Password = _worldPacket.ReadString(passwordLength);
}
+
+void WorldPackets::Channel::LeaveChannel::Read()
+{
+ _worldPacket >> ZoneChannelID;
+ ChannelName = _worldPacket.ReadString(_worldPacket.ReadBits(7));
+}
diff --git a/src/server/game/Server/Packets/ChannelPackets.h b/src/server/game/Server/Packets/ChannelPackets.h
index 3fe2a353070..36a0a516928 100644
--- a/src/server/game/Server/Packets/ChannelPackets.h
+++ b/src/server/game/Server/Packets/ChannelPackets.h
@@ -25,7 +25,20 @@ namespace WorldPackets
{
namespace Channel
{
- class ChannelList final : public ServerPacket
+ class ChannelListRequest final : public ClientPacket
+ {
+ public:
+ ChannelListRequest(WorldPacket&& packet) : ClientPacket(std::move(packet))
+ {
+ ASSERT(packet.GetOpcode() == CMSG_CHANNEL_LIST || packet.GetOpcode() == CMSG_CHANNEL_DISPLAY_LIST);
+ }
+
+ void Read() override;
+
+ std::string ChannelName;
+ };
+
+ class ChannelListResponse final : public ServerPacket
{
public:
struct ChannelPlayer
@@ -38,7 +51,7 @@ namespace WorldPackets
uint8 Flags = 0; ///< @see enum ChannelMemberFlags
};
- ChannelList() : ServerPacket(SMSG_CHANNEL_LIST) { }
+ ChannelListResponse() : ServerPacket(SMSG_CHANNEL_LIST) { }
WorldPacket const* Write() override;
@@ -57,11 +70,11 @@ namespace WorldPackets
std::string Sender;
ObjectGuid SenderGuid;
- ObjectGuid SenderBnetAccountID;
+ ObjectGuid SenderAccountID;
uint8 Type = 0; ///< @see enum ChatNotify
uint8 OldFlags = 0; ///< @see enum ChannelMemberFlags
uint8 NewFlags = 0; ///< @see enum ChannelMemberFlags
- std::string Channel;
+ std::string Channel; ///< Channel Name
uint32 SenderVirtualRealm = 0;
ObjectGuid TargetGuid;
uint32 TargetVirtualRealm = 0;
@@ -79,7 +92,7 @@ namespace WorldPackets
int32 ChatChannelID = 0;
int32 InstanceID = 0;
uint8 ChannelFlags = 0; ///< @see enum ChannelFlags
- std::string Channel;
+ std::string Channel; ///< Channel Name
};
class ChannelNotifyLeft final : public ServerPacket
@@ -89,9 +102,9 @@ namespace WorldPackets
WorldPacket const* Write() override;
- std::string Channel;
+ std::string Channel; ///< Channel Name
int32 ChatChannelID = 0;
- bool Suspended = false;
+ bool Suspended = false; ///< User Leave - false, On Zone Change - true
};
class JoinChannel final : public ClientPacket
@@ -107,6 +120,17 @@ namespace WorldPackets
int32 ChatChannelId = 0;
bool Internal = false;
};
+
+ class LeaveChannel final : public ClientPacket
+ {
+ public:
+ LeaveChannel(WorldPacket&& packet) : ClientPacket(CMSG_LEAVE_CHANNEL, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 ZoneChannelID = 0;
+ std::string ChannelName;
+ };
}
}
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index e406829a760..154ff134a6a 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -46,6 +46,11 @@ WorldPacket const* WorldPackets::Misc::LoginSetTimeSpeed::Write()
return &_worldPacket;
}
+void WorldPackets::Misc::SetSelection::Read()
+{
+ _worldPacket >> Selection;
+}
+
void WorldPackets::Misc::ViolenceLevel::Read()
{
_worldPacket >> ViolenceLvl;
@@ -78,6 +83,12 @@ WorldPacket const* WorldPackets::Misc::TutorialFlags::Write()
return &_worldPacket;
}
+void WorldPackets::Misc::TutorialSetFlag::Read()
+{
+ Action = _worldPacket.ReadBits(2);
+ _worldPacket >> TutorialBit;
+}
+
WorldPacket const* WorldPackets::Misc::WorldServerInfo::Write()
{
_worldPacket << uint32(DifficultyID);
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 7bb2cb3fb9b..c25370505d3 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -62,6 +62,16 @@ namespace WorldPackets
int32 GameTimeHolidayOffset = 0;
};
+ class SetSelection final : public ClientPacket
+ {
+ public:
+ SetSelection(WorldPacket&& packet) : ClientPacket(CMSG_SET_SELECTION, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Selection; ///< Target
+ };
+
class ViolenceLevel final : public ClientPacket
{
public:
@@ -116,6 +126,17 @@ namespace WorldPackets
uint32 TutorialData[MAX_ACCOUNT_TUTORIAL_VALUES];
};
+ class TutorialSetFlag final : public ClientPacket
+ {
+ public:
+ TutorialSetFlag(WorldPacket&& packet) : ClientPacket(CMSG_TUTORIAL_FLAG, std::move(packet)) { }
+
+ void Read() override;
+
+ uint8 Action = 0;
+ uint32 TutorialBit = 0;
+ };
+
class WorldServerInfo final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index c3f7906e0fd..bab7ad89ce4 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -242,6 +242,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MovementMonster
data << movementMonsterSpline.Destination;
data << movementMonsterSpline.Move;
data.WriteBit(movementMonsterSpline.CrzTeleport);
+
+ // Unk bits. 0 if monster is moving, 1 or 2 if stopped
+ if (movementMonsterSpline.Move.Flags)
+ data.WriteBits(0, 2);
+ else
+ data.WriteBits(2, 2);
+
data.FlushBits();
return data;
@@ -252,15 +259,6 @@ WorldPacket const* WorldPackets::Movement::MonsterMove::Write()
_worldPacket << MoverGUID;
_worldPacket << Pos;
_worldPacket << SplineData;
-
- // Unk bits. 0 if monster is moving, 1 or 2 if stopped
- if (SplineData.Move.Flags)
- _worldPacket.WriteBits(0, 2);
- else
- _worldPacket.WriteBits(2, 2);
-
- _worldPacket.FlushBits();
-
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 2b92fe4fed9..6f3b19a661d 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -171,7 +171,7 @@ namespace WorldPackets
class WorldPortAck final : public ClientPacket
{
public:
- WorldPortAck(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
+ WorldPortAck(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_WORLDPORT_ACK, std::move(packet)) { }
void Read() override { }
};
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index acc3b67f12c..9d6ab2514b8 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -215,10 +215,10 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle);
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_ANNOUNCEMENTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelAnnouncements );
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_BAN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelBan );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_DISPLAY_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelDisplayListQuery );
+ DEFINE_HANDLER(CMSG_CHANNEL_DISPLAY_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Channel::ChannelListRequest, &WorldSession::HandleChannelList);
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelInvite );
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_KICK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelKick );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelList );
+ DEFINE_HANDLER(CMSG_CHANNEL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Channel::ChannelListRequest, &WorldSession::HandleChannelList);
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_MODERATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_MODERATOR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelModerator );
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANNEL_MUTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelMute );
@@ -364,12 +364,12 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_ITEM_REFUND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleItemRefund );
DEFINE_OPCODE_HANDLER_OLD(CMSG_ITEM_REFUND_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleItemRefundInfoRequest );
DEFINE_OPCODE_HANDLER_OLD(CMSG_ITEM_TEXT_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleItemTextQuery );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_JOIN_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleJoinChannel );
+ DEFINE_HANDLER(CMSG_JOIN_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Channel::JoinChannel, &WorldSession::HandleJoinChannel);
DEFINE_OPCODE_HANDLER_OLD(CMSG_KEEP_ALIVE, STATUS_NEVER, PROCESS_THREADUNSAFE, &WorldSession::Handle_EarlyProccess );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LEARN_PREVIEW_TALENTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnPreviewTalents );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LEARN_PREVIEW_TALENTS_PET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnPreviewTalentsPet );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LEARN_TALENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnTalentOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LEAVE_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel );
+ DEFINE_HANDLER(CMSG_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Channel::LeaveChannel, &WorldSession::HandleLeaveChannel);
DEFINE_OPCODE_HANDLER_OLD(CMSG_LFG_GET_STATUS, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleLfgGetStatus );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LFG_JOIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgJoinOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LFG_LEAVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgLeaveOpcode );
@@ -594,7 +594,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PREFERED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_RELATIVE_POSITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSavedInstanceExtend );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_SELECTION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleSetSelectionOpcode );
+ DEFINE_HANDLER(CMSG_SET_SELECTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetSelection, &WorldSession::HandleSetSelectionOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_SKILL_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_SET_SPECIALIZATION, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Talent::SetSpecialization, &WorldSession::HandleSetSpecializationOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_TAXI_BENCHMARK_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTaxiBenchmarkOpcode );
@@ -634,16 +634,14 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_TRAINER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerListOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_TRANSMOGRIFY_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems );
DEFINE_OPCODE_HANDLER_OLD(CMSG_TURN_IN_PETITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetitionOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_TUTORIAL_CLEAR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialClear );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_TUTORIAL_FLAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_TUTORIAL_RESET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialReset );
+ DEFINE_HANDLER(CMSG_TUTORIAL_FLAG, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::TutorialSetFlag, &WorldSession::HandleTutorialFlag);
DEFINE_OPCODE_HANDLER_OLD(CMSG_UNACCEPT_TRADE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUnacceptTradeOpcode );
DEFINE_HANDLER(CMSG_UNDELETE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::UndeleteCharacter, &WorldSession::HandleCharUndeleteOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_UNDELETE_COOLDOWN_STATUS_QUERY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUndeleteCooldownStatusQuery);
DEFINE_OPCODE_HANDLER_OLD(CMSG_UNLEARN_SKILL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUnlearnSkillOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_UNLEARN_SPECIALIZATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAddonPrefixesOpcode);
- DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::ClientConfig::UserClientUpdateAccountData, &WorldSession::HandleUpdateAccountData );
+ DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::ClientConfig::UserClientUpdateAccountData, &WorldSession::HandleUpdateAccountData);
DEFINE_OPCODE_HANDLER_OLD(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory );
DEFINE_OPCODE_HANDLER_OLD(CMSG_UPDATE_PROJECTILE_POSITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateProjectilePosition );
DEFINE_OPCODE_HANDLER_OLD(CMSG_USED_FOLLOW, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -697,12 +695,14 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_INFO_RESPONSE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_RESTRICTED_WARNING, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_TOYS_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACHIEVEMENT_DELETED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACHIEVEMENT_EARNED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTION_BUTTONS, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVATETAXIREPLY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADDON_INFO, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_RUNE_POWER, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADJUST_SPLINE_DURATION, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AI_REACTION, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_ACHIEVEMENT_DATA, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_SPIRIT_HEALER_TIME, STATUS_UNHANDLED);
@@ -762,6 +762,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEGROUND_INFO_THROTTLED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEGROUND_PLAYER_JOINED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEGROUND_PLAYER_LEFT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE, STATUS_UNHANDLED);
@@ -800,11 +801,11 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_LIST, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_LIST, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_MEMBER_COUNT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_JOINED, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_LEFT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_JOINED, STATUS_NEVER);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_LEFT, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_START, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_LOGIN_FAILED, STATUS_UNHANDLED);
@@ -921,6 +922,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAMETIME_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_EVENT_DEBUG_LOG, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COMPLETE_MISSION_RESULT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REMOTE_INFO, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GMRESPONSE_DB_ERROR, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GMRESPONSE_RECEIVED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GMRESPONSE_STATUS_UPDATE, STATUS_UNHANDLED);
@@ -933,6 +935,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_PLAYER_INFO, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_CASE_STATUS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_STATUS_UPDATE, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_SYSTEM_STATUS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GODMODE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_UNHANDLED);
@@ -964,6 +967,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_DECLINE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_LOG_QUERY_RESULT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PRESENCE_CHANGE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_FLAGGED_FOR_RENAME, STATUS_UNHANDLED);
@@ -1075,6 +1079,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_SLOT_CHANGED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_START_ROLL, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_LIST_RESULT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_QUERY_NEXT_TIME_RESULT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJ_EVENTS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MEETINGSTONE_IN_PROGRESS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MESSAGECHAT, STATUS_NEVER);
@@ -1244,6 +1249,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_EXPIRED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_FAILURE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFORGE_RESULT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_SPELL_HISTORY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVED_SPELL, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REPORT_PVP_AFK_RESULT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, STATUS_UNHANDLED);
@@ -1261,6 +1267,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RWHOIS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SELL_ITEM, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_MAIL_RESULT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_CHARGES, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_HISTORY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_UNLEARN_SPELLS, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVERTIME, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENT, STATUS_UNHANDLED);
@@ -1268,6 +1276,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_MESSAGE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_PERF, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ALL_TASK_PROGRESS, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_ATWAR, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_NOT_VISIBLE, STATUS_UNHANDLED);
@@ -1275,6 +1285,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_VISIBLE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FORCED_REACTIONS, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MAX_WEEKLY_QUANTITY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MELEE_ANIM_KIT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MOVEMENT_ANIM_KIT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PCT_SPELL_MODIFIER, STATUS_UNHANDLED);
@@ -1341,6 +1352,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_UNSET_HOVER, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_STABLE_RESULT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_STANDSTATE_UPDATE, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_ELAPSED_TIMERS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_MIRROR_TIMER, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_TIMER, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_DANCE, STATUS_UNHANDLED);
@@ -1391,6 +1403,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_LAST_INSTANCE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_SERVER_PLAYER_POSITION, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TASK_PROGRESS, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WORLD_STATE, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_UNHANDLED);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 06654acb0bc..cf98d5335db 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -149,10 +149,10 @@ enum OpcodeClient : uint32
CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE = 0xBADD,
CMSG_CHANNEL_ANNOUNCEMENTS = 0xBADD,
CMSG_CHANNEL_BAN = 0xBADD,
- CMSG_CHANNEL_DISPLAY_LIST = 0xBADD,
+ CMSG_CHANNEL_DISPLAY_LIST = 0x093B,
CMSG_CHANNEL_INVITE = 0xBADD,
CMSG_CHANNEL_KICK = 0xBADD,
- CMSG_CHANNEL_LIST = 0xBADD,
+ CMSG_CHANNEL_LIST = 0x093B,
CMSG_CHANNEL_MODERATE = 0xBADD,
CMSG_CHANNEL_MODERATOR = 0xBADD,
CMSG_CHANNEL_MUTE = 0xBADD,
@@ -193,7 +193,7 @@ enum OpcodeClient : uint32
CMSG_COMPLAIN = 0xBADD,
CMSG_COMPLETE_CINEMATIC = 0xBADD,
CMSG_COMPLETE_MOVIE = 0xBADD,
- CMSG_CONNECT_TO_FAILED = 0xBADD,
+ CMSG_CONNECT_TO_FAILED = 0x0135,
CMSG_CONTACT_LIST = 0xBADD,
CMSG_CORPSE_MAP_POSITION_QUERY = 0xBADD,
CMSG_CREATURE_QUERY = 0x0505,
@@ -315,7 +315,7 @@ enum OpcodeClient : uint32
CMSG_LEARN_PREVIEW_TALENTS = 0xBADD,
CMSG_LEARN_PREVIEW_TALENTS_PET = 0xBADD,
CMSG_LEARN_TALENT = 0xBADD,
- CMSG_LEAVE_CHANNEL = 0xBADD,
+ CMSG_LEAVE_CHANNEL = 0x19F2,
CMSG_LFG_GET_STATUS = 0xBADD,
CMSG_LFG_JOIN = 0xBADD,
CMSG_LFG_LEAVE = 0xBADD,
@@ -459,7 +459,7 @@ enum OpcodeClient : uint32
CMSG_PET_SPELL_AUTOCAST = 0xBADD,
CMSG_PET_STOP_ATTACK = 0xBADD,
CMSG_PING = 0x0416,
- CMSG_PLAYED_TIME = 0xBADD,
+ CMSG_PLAYED_TIME = 0x1BB2,
CMSG_PLAYER_DIFFICULTY_CHANGE = 0xBADD,
CMSG_PLAYER_LOGIN = 0x0B1D,
CMSG_PLAYER_LOGOUT = 0xBADD,
@@ -508,7 +508,7 @@ enum OpcodeClient : uint32
CMSG_REPORT_PVP_AFK = 0xBADD,
CMSG_REQUEST_ACCOUNT_DATA = 0x0F3E,
CMSG_REQUEST_CATEGORY_COOLDOWNS = 0xBADD,
- CMSG_REQUEST_CEMETERY_LIST = 0xBADD,
+ CMSG_REQUEST_CEMETERY_LIST = 0x10A2,
CMSG_REQUEST_HOTFIX = 0xBADD,
CMSG_REQUEST_INSPECT_RATED_BG_STATS = 0xBADD,
CMSG_REQUEST_PARTY_MEMBER_STATS = 0xBADD,
@@ -543,7 +543,7 @@ enum OpcodeClient : uint32
CMSG_SET_ACTIONBAR_TOGGLES = 0xBADD,
CMSG_SET_ACTION_BUTTON = 0x0599,
CMSG_SET_ACTIVE_MOVER = 0xBADD,
- CMSG_SET_ACTIVE_VOICE_CHANNEL = 0xBADD,
+ CMSG_SET_ACTIVE_VOICE_CHANNEL = 0x031E,
CMSG_SET_ALLOW_LOW_LEVEL_RAID1 = 0xBADD,
CMSG_SET_ALLOW_LOW_LEVEL_RAID2 = 0xBADD,
CMSG_SET_CHANNEL_WATCH = 0xBADD,
@@ -608,9 +608,7 @@ enum OpcodeClient : uint32
CMSG_TRANSMOGRIFY_ITEMS = 0x0A85,
CMSG_TRIGGER_CINEMATIC_CHEAT = 0xBADD,
CMSG_TURN_IN_PETITION = 0xBADD,
- CMSG_TUTORIAL_CLEAR = 0xBADD,
- CMSG_TUTORIAL_FLAG = 0xBADD,
- CMSG_TUTORIAL_RESET = 0xBADD,
+ CMSG_TUTORIAL_FLAG = 0x0B16,
CMSG_UNACCEPT_TRADE = 0xBADD,
CMSG_UNDELETE_CHARACTER = 0x0D99,
CMSG_UNDELETE_COOLDOWN_STATUS_QUERY = 0x19A9,
@@ -623,7 +621,7 @@ enum OpcodeClient : uint32
CMSG_USED_FOLLOW = 0xBADD,
CMSG_USE_ITEM = 0x08B6,
CMSG_VIOLENCE_LEVEL = 0x098D,
- CMSG_VOICE_SESSION_ENABLE = 0xBADD,
+ CMSG_VOICE_SESSION_ENABLE = 0x1102,
CMSG_VOID_STORAGE_QUERY = 0x019E,
CMSG_VOID_STORAGE_TRANSFER = 0x0463,
CMSG_VOID_STORAGE_UNLOCK = 0x13BB,
@@ -685,12 +683,14 @@ enum OpcodeServer : uint32
SMSG_ACCOUNT_INFO_RESPONSE = 0xBADD,
SMSG_ACCOUNT_MOUNT_UPDATE = 0x0140,
SMSG_ACCOUNT_RESTRICTED_WARNING = 0xBADD,
+ SMSG_ACCOUNT_TOYS_UPDATE = 0x0590,
SMSG_ACHIEVEMENT_DELETED = 0xBADD,
SMSG_ACHIEVEMENT_EARNED = 0xBADD,
SMSG_ACTION_BUTTONS = 0x1D1F,
SMSG_ACTIVATETAXIREPLY = 0xBADD,
SMSG_ADDON_INFO = 0x1D9F,
SMSG_ADD_RUNE_POWER = 0xBADD,
+ SMSG_ADJUST_SPLINE_DURATION = 0x0104,
SMSG_AI_REACTION = 0x0BA1,
SMSG_ALL_ACHIEVEMENT_DATA = 0xBADD,
SMSG_ALL_ACHIEVEMENT_DATA_ACCOUNT = 0x0123,
@@ -724,12 +724,12 @@ enum OpcodeServer : uint32
SMSG_AUCTION_OWNER_NOTIFICATION = 0xBADD,
SMSG_AUCTION_REMOVED_NOTIFICATION = 0xBADD,
SMSG_AURACASTLOG = 0xBADD,
- SMSG_AURA_POINTS_DEPLETED = 0xBADD,
+ SMSG_AURA_POINTS_DEPLETED = 0x093B,
SMSG_AURA_UPDATE = 0x091C,
SMSG_AURA_UPDATE_ALL = 0xBADD,
SMSG_AUTH_CHALLENGE = 0x1759,
SMSG_AUTH_RESPONSE = 0x0DA9,
- SMSG_AVAILABLE_VOICE_CHANNEL = 0xBADD,
+ SMSG_AVAILABLE_VOICE_CHANNEL = 0x04D4,
SMSG_AVERAGE_ITEM_LEVEL_INFORM = 0xBADD,
SMSG_BARBER_SHOP_RESULT = 0xBADD,
SMSG_BATTLEFIELD_LIST = 0xBADD,
@@ -753,6 +753,7 @@ enum OpcodeServer : uint32
SMSG_BATTLEGROUND_INFO_THROTTLED = 0xBADD,
SMSG_BATTLEGROUND_PLAYER_JOINED = 0xBADD,
SMSG_BATTLEGROUND_PLAYER_LEFT = 0xBADD,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x0BE3,
SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x0F2A,
SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x12A4,
SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x168A,
@@ -787,7 +788,7 @@ enum OpcodeServer : uint32
SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0xBADD,
SMSG_CALENDAR_SEND_CALENDAR = 0xBADD,
SMSG_CALENDAR_SEND_EVENT = 0xBADD,
- SMSG_CALENDAR_SEND_NUM_PENDING = 0xBADD,
+ SMSG_CALENDAR_SEND_NUM_PENDING = 0x1B3A,
SMSG_CALENDAR_UPDATE_INVITE_LIST = 0xBADD,
SMSG_CAMERA_SHAKE = 0xBADD,
SMSG_CANCEL_AUTO_REPEAT = 0xBADD,
@@ -922,6 +923,7 @@ enum OpcodeServer : uint32
SMSG_GAMETIME_UPDATE = 0xBADD,
SMSG_GAME_EVENT_DEBUG_LOG = 0xBADD,
SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x0952,
+ SMSG_GARRISON_REMOTE_INFO = 0x0151,
SMSG_GMRESPONSE_DB_ERROR = 0xBADD,
SMSG_GMRESPONSE_RECEIVED = 0xBADD,
SMSG_GMRESPONSE_STATUS_UPDATE = 0xBADD,
@@ -934,6 +936,7 @@ enum OpcodeServer : uint32
SMSG_GM_PLAYER_INFO = 0xBADD,
SMSG_GM_TICKET_CASE_STATUS = 0x1D8D,
SMSG_GM_TICKET_STATUS_UPDATE = 0xBADD,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x1229,
SMSG_GODMODE = 0xBADD,
SMSG_GOSSIP_COMPLETE = 0x15D1,
SMSG_GOSSIP_MESSAGE = 0x1746,
@@ -966,6 +969,7 @@ enum OpcodeServer : uint32
SMSG_GUILD_CRITERIA_UPDATE = 0x1208,
SMSG_GUILD_DECLINE = 0xBADD,
SMSG_GUILD_EVENT = 0x1027,
+ SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x1077,
SMSG_GUILD_EVENT_LOG_QUERY_RESULT = 0xBADD,
SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x1228,
SMSG_GUILD_FLAGGED_FOR_RENAME = 0xBADD,
@@ -992,7 +996,7 @@ enum OpcodeServer : uint32
SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0xBADD,
SMSG_GUILD_REPUTATION_WEEKLY_CAP = 0xBADD,
SMSG_GUILD_RESET = 0xBADD,
- SMSG_GUILD_REWARDS_LIST = 0xBADD,
+ SMSG_GUILD_REWARDS_LIST = 0x1818,
SMSG_GUILD_ROSTER = 0x1026,
SMSG_GUILD_SET_NOTE = 0xBADD,
SMSG_GUILD_TRADESKILL_UPDATE = 0xBADD,
@@ -1088,6 +1092,7 @@ enum OpcodeServer : uint32
SMSG_LOOT_SLOT_CHANGED = 0xBADD,
SMSG_LOOT_START_ROLL = 0xBADD,
SMSG_MAIL_LIST_RESULT = 0x0B3F,
+ SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x153D,
SMSG_MAP_OBJ_EVENTS = 0xBADD,
SMSG_MEETINGSTONE_COMPLETE = 0xBADD,
SMSG_MEETINGSTONE_IN_PROGRESS = 0xBADD,
@@ -1267,9 +1272,10 @@ enum OpcodeServer : uint32
SMSG_REFER_A_FRIEND_EXPIRED = 0xBADD,
SMSG_REFER_A_FRIEND_FAILURE = 0xBADD,
SMSG_REFORGE_RESULT = 0xBADD,
+ SMSG_REFRESH_SPELL_HISTORY = 0x0A2A,
SMSG_REMOVED_SPELL = 0xBADD,
SMSG_REPORT_PVP_AFK_RESULT = 0xBADD,
- SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0xBADD,
+ SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x059E,
SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0xBADD,
SMSG_RESEARCH_COMPLETE = 0xBADD,
SMSG_RESEARCH_SETUP_HISTORY = 0x0A25,
@@ -1285,13 +1291,17 @@ enum OpcodeServer : uint32
SMSG_RWHOIS = 0xBADD,
SMSG_SELL_ITEM = 0xBADD,
SMSG_SEND_MAIL_RESULT = 0x0302,
- SMSG_SEND_UNLEARN_SPELLS = 0x1A82,
+ SMSG_SEND_SPELL_CHARGES = 0x1A82,
+ SMSG_SEND_SPELL_HISTORY = 0x1933,
+ SMSG_SEND_UNLEARN_SPELLS = 0x0BCB,
SMSG_SERVERTIME = 0xBADD,
SMSG_SERVER_FIRST_ACHIEVEMENT = 0xBADD,
SMSG_SERVER_INFO_RESPONSE = 0xBADD,
SMSG_SERVER_MESSAGE = 0x0683,
SMSG_SERVER_PERF = 0xBADD,
SMSG_SET_AI_ANIM_KIT = 0x0335,
+ SMSG_SET_ALL_TASK_PROGRESS = 0x1B52,
+ SMSG_SET_CURRENCY = 0x17BE,
SMSG_SET_DF_FAST_LAUNCH_RESULT = 0xBADD,
SMSG_SET_FACTION_ATWAR = 0xBADD,
SMSG_SET_FACTION_NOT_VISIBLE = 0xBADD,
@@ -1299,6 +1309,7 @@ enum OpcodeServer : uint32
SMSG_SET_FACTION_VISIBLE = 0x138B,
SMSG_SET_FLAT_SPELL_MODIFIER = 0x1884,
SMSG_SET_FORCED_REACTIONS = 0x09A9,
+ SMSG_SET_MAX_WEEKLY_QUANTITY = 0x1489,
SMSG_SET_MELEE_ANIM_KIT = 0xBADD,
SMSG_SET_MOVEMENT_ANIM_KIT = 0xBADD,
SMSG_SET_PCT_SPELL_MODIFIER = 0x113C,
@@ -1367,6 +1378,7 @@ enum OpcodeServer : uint32
SMSG_SPLINE_MOVE_WATER_WALK = 0xBADD,
SMSG_STABLE_RESULT = 0xBADD,
SMSG_STANDSTATE_UPDATE = 0x1311,
+ SMSG_START_ELAPSED_TIMERS = 0x093F,
SMSG_START_MIRROR_TIMER = 0xBADD,
SMSG_START_TIMER = 0xBADD,
SMSG_STOP_DANCE = 0xBADD,
@@ -1381,7 +1393,7 @@ enum OpcodeServer : uint32
SMSG_TALENTS_ERROR = 0xBADD,
SMSG_TALENTS_INFO = 0x012D,
SMSG_TALENTS_INVOLUNTARILY_RESET = 0xBADD,
- SMSG_TAXINODE_STATUS = 0xBADD,
+ SMSG_TAXINODE_STATUS = 0x0338,
SMSG_TEST_DROP_RATE_RESULT = 0xBADD,
SMSG_TEXT_EMOTE = 0x0383,
SMSG_THREAT_CLEAR = 0xBADD,
@@ -1417,6 +1429,7 @@ enum OpcodeServer : uint32
SMSG_UPDATE_LAST_INSTANCE = 0xBADD,
SMSG_UPDATE_OBJECT = 0x122C,
SMSG_UPDATE_SERVER_PLAYER_POSITION = 0xBADD,
+ SMSG_UPDATE_TASK_PROGRESS = 0x1209,
SMSG_UPDATE_WORLD_STATE = 0x03EC,
SMSG_USERLIST_ADD = 0xBADD,
SMSG_USERLIST_REMOVE = 0xBADD,
@@ -1424,7 +1437,7 @@ enum OpcodeServer : uint32
SMSG_VOICESESSION_FULL = 0xBADD,
SMSG_VOICE_CHAT_STATUS = 0xBADD,
SMSG_VOICE_PARENTAL_CONTROLS = 0xBADD,
- SMSG_VOICE_SESSION_LEAVE = 0xBADD,
+ SMSG_VOICE_SESSION_LEAVE = 0x0403,
SMSG_VOICE_SESSION_ROSTER_UPDATE = 0xBADD,
SMSG_VOICE_SET_TALKER_MUTED = 0xBADD,
SMSG_VOID_ITEM_SWAP_RESPONSE = 0x1131,
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index eae081f2b74..6bb4daf9fc3 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -104,7 +104,9 @@ namespace WorldPackets
namespace Channel
{
+ class ChannelListRequest;
class JoinChannel;
+ class LeaveChannel;
}
namespace Chat
@@ -148,8 +150,10 @@ namespace WorldPackets
namespace Misc
{
+ class SetSelection;
class ViolenceLevel;
class TimeSyncResponse;
+ class TutorialSetFlag;
}
namespace Query
@@ -191,17 +195,38 @@ enum AccountDataType
#define REGISTERED_ADDON_PREFIX_SOFTCAP 64
+enum TutorialAction
+{
+ TUTORIAL_ACTION_UPDATE = 0,
+ TUTORIAL_ACTION_CLEAR = 1,
+ TUTORIAL_ACTION_RESET = 2
+};
+
+/*
enum Tutorials
{
- TUTORIAL_TALENT = 0,
- TUTORIAL_SPEC = 1,
- TUTORIAL_GLYPH = 2,
- TUTORIAL_SPELLBOOK = 3,
- TUTORIAL_PROFESSIONS = 4,
- TUTORIAL_CORE_ABILITITES = 5,
- TUTORIAL_PET_JOURNAL = 6,
- TUTORIAL_WHAT_HAS_CHANGED = 7
+ TUTORIAL_TALENT = 0,
+ TUTORIAL_SPEC = 1,
+ TUTORIAL_GLYPH = 2,
+ TUTORIAL_SPELLBOOK = 3,
+ TUTORIAL_PROFESSIONS = 4,
+ TUTORIAL_CORE_ABILITITES = 5,
+ TUTORIAL_PET_JOURNAL = 6,
+ TUTORIAL_WHAT_HAS_CHANGED = 7,
+ TUTORIAL_GARRISON_BUILDING = 8,
+ TUTORIAL_GARRISON_MISSION_LIST = 9,
+ TUTORIAL_GARRISON_MISSION_PAGE = 10,
+ TUTORIAL_GARRISON_LANDING = 11,
+ TUTORIAL_GARRISON_ZONE_ABILITY = 12,
+ TUTORIAL_WORLD_MAP_FRAME = 13,
+ TUTORIAL_CLEAN_UP_BAGS = 14,
+ TUTORIAL_BAG_SETTINGS = 15,
+ TUTORIAL_REAGENT_BANK_UNLOCK = 16,
+ TUTORIAL_TOYBOX_FAVORITE = 17,
+ TUTORIAL_TOYBOX_MOUSEWHEEL_PAGING = 18,
+ TUTORIAL_LFG_LIST = 19
};
+*/
#define MAX_ACCOUNT_TUTORIAL_VALUES 8
@@ -621,7 +646,7 @@ class WorldSession
void HandleTogglePvP(WorldPacket& recvPacket);
void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
- void HandleSetSelectionOpcode(WorldPacket& recvPacket);
+ void HandleSetSelectionOpcode(WorldPackets::Misc::SetSelection& packet);
void HandleStandStateChangeOpcode(WorldPacket& recvPacket);
void HandleEmoteOpcode(WorldPacket& recvPacket);
void HandleContactListOpcode(WorldPacket& recvPacket);
@@ -887,9 +912,9 @@ class WorldSession
void HandleResurrectResponseOpcode(WorldPacket& recvPacket);
void HandleSummonResponseOpcode(WorldPacket& recvData);
- void HandleJoinChannel(WorldPacket& recvPacket);
- void HandleLeaveChannel(WorldPacket& recvPacket);
- void HandleChannelList(WorldPacket& recvPacket);
+ void HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet);
+ void HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packet);
+ void HandleChannelList(WorldPackets::Channel::ChannelListRequest& packet);
void HandleChannelPassword(WorldPacket& recvPacket);
void HandleChannelSetOwner(WorldPacket& recvPacket);
void HandleChannelOwner(WorldPacket& recvPacket);
@@ -904,7 +929,6 @@ class WorldSession
void HandleChannelAnnouncements(WorldPacket& recvPacket);
void HandleChannelModerate(WorldPacket& recvPacket);
void HandleChannelDeclineInvite(WorldPacket& recvPacket);
- void HandleChannelDisplayListQuery(WorldPacket& recvPacket);
void HandleGetChannelMemberCount(WorldPacket& recvPacket);
void HandleSetChannelWatch(WorldPacket& recvPacket);
@@ -913,9 +937,7 @@ class WorldSession
void HandlePageTextQueryOpcode(WorldPackets::Query::QueryPageText& packet);
- void HandleTutorialFlag (WorldPacket& recvData);
- void HandleTutorialClear(WorldPacket& recvData);
- void HandleTutorialReset(WorldPacket& recvData);
+ void HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packet);
//Pet
void HandlePetAction(WorldPacket& recvData);
diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp
index 715487eff99..664c8f3d216 100644
--- a/src/server/scripts/Commands/cs_message.cpp
+++ b/src/server/scripts/Commands/cs_message.cpp
@@ -74,7 +74,7 @@ public:
Player* player = handler->GetSession()->GetPlayer();
Channel* channcel = NULL;
- if (ChannelMgr* cMgr = ChannelMgr::forTeam(player->GetTeam()))
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(player->GetTeam()))
channcel = cMgr->GetChannel(channelStr, player);
if (strcmp(argStr, "on") == 0)