aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorlinencloth <none@none>2010-10-16 12:59:53 +0200
committerlinencloth <none@none>2010-10-16 12:59:53 +0200
commitae213dd5805f9541fe3520c0180aa7b3f323f77a (patch)
tree92ef12722020e20bdad8d4c6be3c68ebc6dafebf /src/server/game/Server
parent3bd1ee0665f8c48bc256fcbe30f447c1fa40bec8 (diff)
Core: Improve constant channel handling
- Implement area restrictions - Disable constant channels in arenas - Implement city requirement - Implement global constant channels - Fix some packets --HG-- branch : trunk
Diffstat (limited to 'src/server/game/Server')
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ChannelHandler.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp
index fbff42c3f8d..2a56dc31e74 100755
--- a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp
@@ -27,7 +27,23 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
uint8 unknown1, unknown2;
std::string channelname, pass;
- recvPacket >> channel_id >> unknown1 >> unknown2;
+ recvPacket >> channel_id;
+
+ if (channel_id)
+ {
+ ChatChannelsEntry const* 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;
recvPacket >> channelname;
if (channelname.empty())