aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Chat/Channels/Channel.h9
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp20
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ChannelHandler.cpp18
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();