diff options
| author | linencloth <none@none> | 2010-10-16 12:59:53 +0200 |
|---|---|---|
| committer | linencloth <none@none> | 2010-10-16 12:59:53 +0200 |
| commit | ae213dd5805f9541fe3520c0180aa7b3f323f77a (patch) | |
| tree | 92ef12722020e20bdad8d4c6be3c68ebc6dafebf /src/server/game/Server | |
| parent | 3bd1ee0665f8c48bc256fcbe30f447c1fa40bec8 (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-x | src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp | 18 |
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()) |
