mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-24 19:06:49 +01:00
Core/Channels: Fix the console error "opcode CMSG_MESSAGECHAT have unprocessed tail data" and some logic problems when joining/leaving some channels (like only be able to join LFG inside a city)
This commit is contained in:
@@ -95,12 +95,13 @@ enum ChannelDBCFlags
|
||||
CHANNEL_DBC_FLAG_INITIAL = 0x00001, // General, Trade, LocalDefense, LFG
|
||||
CHANNEL_DBC_FLAG_ZONE_DEP = 0x00002, // General, Trade, LocalDefense, GuildRecruitment
|
||||
CHANNEL_DBC_FLAG_GLOBAL = 0x00004, // WorldDefense
|
||||
CHANNEL_DBC_FLAG_TRADE = 0x00008, // Trade
|
||||
CHANNEL_DBC_FLAG_CITY_ONLY = 0x00010, // Trade, GuildRecruitment
|
||||
CHANNEL_DBC_FLAG_CITY_ONLY2 = 0x00020, // Trade, GuildRecruitment
|
||||
CHANNEL_DBC_FLAG_TRADE = 0x00008, // Trade, LFG
|
||||
CHANNEL_DBC_FLAG_CITY_ONLY = 0x00010, // Trade, GuildRecruitment, LFG
|
||||
CHANNEL_DBC_FLAG_CITY_ONLY2 = 0x00020, // Trade, GuildRecruitment, LFG
|
||||
CHANNEL_DBC_FLAG_DEFENSE = 0x10000, // LocalDefense, WorldDefense
|
||||
CHANNEL_DBC_FLAG_GUILD_REQ = 0x20000, // GuildRecruitment
|
||||
CHANNEL_DBC_FLAG_LFG = 0x40000 // LookingForGroup
|
||||
CHANNEL_DBC_FLAG_LFG = 0x40000, // LFG
|
||||
CHANNEL_DBC_FLAG_UNK1 = 0x80000, // General
|
||||
};
|
||||
|
||||
enum ChannelMemberFlags
|
||||
|
||||
@@ -5522,14 +5522,14 @@ void Player::RepopAtGraveyard()
|
||||
|
||||
bool Player::CanJoinConstantChannelInZone(ChatChannelsEntry const* channel, AreaTableEntry const* zone)
|
||||
{
|
||||
if (channel->flags & CHANNEL_DBC_FLAG_ZONE_DEP)
|
||||
{
|
||||
if (zone->flags & AREA_FLAG_ARENA_INSTANCE)
|
||||
return false;
|
||||
if (channel->flags & CHANNEL_DBC_FLAG_ZONE_DEP && zone->flags & AREA_FLAG_ARENA_INSTANCE)
|
||||
return false;
|
||||
|
||||
if ((channel->flags & CHANNEL_DBC_FLAG_CITY_ONLY) && !(zone->flags & AREA_FLAG_CAPITAL))
|
||||
return false;
|
||||
}
|
||||
if ((channel->flags & CHANNEL_DBC_FLAG_CITY_ONLY) && (!(zone->flags & AREA_FLAG_SLAVE_CAPITAL)))
|
||||
return false;
|
||||
|
||||
if ((channel->flags & CHANNEL_DBC_FLAG_GUILD_REQ) && GetGuildId())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -5577,12 +5577,6 @@ void Player::UpdateLocalChannels(uint32 newZone)
|
||||
{
|
||||
if (ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(i))
|
||||
{
|
||||
if (!(channel->flags & CHANNEL_DBC_FLAG_ZONE_DEP))
|
||||
continue; // Not zone dependent, don't handle it here
|
||||
|
||||
if ((channel->flags & CHANNEL_DBC_FLAG_GUILD_REQ) && GetGuildId())
|
||||
continue; // Should not join to these channels automatically
|
||||
|
||||
Channel* usedChannel = NULL;
|
||||
|
||||
for (JoinedChannelsList::iterator itr = m_channels.begin(); itr != m_channels.end(); ++itr)
|
||||
|
||||
@@ -26,21 +26,15 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
|
||||
uint32 channel_id;
|
||||
uint8 unknown1, unknown2;
|
||||
std::string channelname, pass;
|
||||
ChatChannelsEntry const* channel;
|
||||
|
||||
recvPacket >> channel_id;
|
||||
|
||||
if (channel_id)
|
||||
{
|
||||
ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(channel_id);
|
||||
channel = sChatChannelsStore.LookupEntry(channel_id);
|
||||
if (!channel)
|
||||
return;
|
||||
|
||||
AreaTableEntry const* current_zone = GetAreaEntryByAreaID(_player->GetZoneId());
|
||||
if (!current_zone)
|
||||
return;
|
||||
|
||||
if (!_player->CanJoinConstantChannelInZone(channel, current_zone))
|
||||
return;
|
||||
}
|
||||
|
||||
recvPacket >> unknown1 >> unknown2;
|
||||
@@ -50,6 +44,14 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
|
||||
return;
|
||||
|
||||
recvPacket >> pass;
|
||||
|
||||
AreaTableEntry const* current_zone = GetAreaEntryByAreaID(_player->GetZoneId());
|
||||
if (!current_zone)
|
||||
return;
|
||||
|
||||
if (!_player->CanJoinConstantChannelInZone(channel, current_zone))
|
||||
return;
|
||||
|
||||
if (ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
|
||||
{
|
||||
cMgr->team = _player->GetTeam();
|
||||
|
||||
Reference in New Issue
Block a user