diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/Chat/Channels/Channel.h | 9 | ||||
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 20 | ||||
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp | 18 |
3 files changed, 22 insertions, 25 deletions
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 12f26022f59..c5466d65d3f 100755 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -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 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8742deb2eb5..7052615e9c1 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -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) diff --git a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp index 0ccfce64045..3f9609bc0e0 100755 --- a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp @@ -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(); |
