[8483] Implement glyph 43361.
[getmangos.git] / src / game / ChannelHandler.cpp
bloba2d28f2e1c556b0a14b94894e11e55cc4ae0c068
1 /*
2 * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #include "ObjectMgr.h" // for normalizePlayerName
20 #include "ChannelMgr.h"
22 void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
24 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
26 uint32 channel_id;
27 uint8 unknown1, unknown2;
28 std::string channelname, pass;
30 recvPacket >> channel_id >> unknown1 >> unknown2;
31 recvPacket >> channelname;
33 if(channelname.empty())
34 return;
36 recvPacket >> pass;
37 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
38 if(Channel *chn = cMgr->GetJoinChannel(channelname, channel_id))
39 chn->Join(_player->GetGUID(), pass.c_str());
42 void WorldSession::HandleLeaveChannel(WorldPacket& recvPacket)
44 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
45 //recvPacket.hexlike();
47 uint32 unk;
48 std::string channelname;
49 recvPacket >> unk; // channel id?
50 recvPacket >> channelname;
52 if(channelname.empty())
53 return;
55 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
57 if(Channel *chn = cMgr->GetChannel(channelname, _player))
58 chn->Leave(_player->GetGUID(), true);
59 cMgr->LeftChannel(channelname);
63 void WorldSession::HandleChannelList(WorldPacket& recvPacket)
65 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
66 //recvPacket.hexlike();
67 std::string channelname;
68 recvPacket >> channelname;
70 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
71 if(Channel *chn = cMgr->GetChannel(channelname, _player))
72 chn->List(_player);
75 void WorldSession::HandleChannelPassword(WorldPacket& recvPacket)
77 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
78 //recvPacket.hexlike();
79 std::string channelname, pass;
80 recvPacket >> channelname;
82 recvPacket >> pass;
84 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
85 if(Channel *chn = cMgr->GetChannel(channelname, _player))
86 chn->Password(_player->GetGUID(), pass.c_str());
89 void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket)
91 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
92 //recvPacket.hexlike();
93 std::string channelname, newp;
94 recvPacket >> channelname;
96 recvPacket >> newp;
98 if(!normalizePlayerName(newp))
99 return;
101 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
102 if(Channel *chn = cMgr->GetChannel(channelname, _player))
103 chn->SetOwner(_player->GetGUID(), newp.c_str());
106 void WorldSession::HandleChannelOwner(WorldPacket& recvPacket)
108 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
109 //recvPacket.hexlike();
110 std::string channelname;
111 recvPacket >> channelname;
112 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
113 if(Channel *chn = cMgr->GetChannel(channelname, _player))
114 chn->SendWhoOwner(_player->GetGUID());
117 void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
119 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
120 //recvPacket.hexlike();
121 std::string channelname, otp;
122 recvPacket >> channelname;
124 recvPacket >> otp;
126 if(!normalizePlayerName(otp))
127 return;
129 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
130 if(Channel *chn = cMgr->GetChannel(channelname, _player))
131 chn->SetModerator(_player->GetGUID(), otp.c_str());
134 void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket)
136 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
137 //recvPacket.hexlike();
138 std::string channelname, otp;
139 recvPacket >> channelname;
141 recvPacket >> otp;
143 if(!normalizePlayerName(otp))
144 return;
146 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
147 if(Channel *chn = cMgr->GetChannel(channelname, _player))
148 chn->UnsetModerator(_player->GetGUID(), otp.c_str());
151 void WorldSession::HandleChannelMute(WorldPacket& recvPacket)
153 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
154 //recvPacket.hexlike();
155 std::string channelname, otp;
156 recvPacket >> channelname;
158 recvPacket >> otp;
160 if(!normalizePlayerName(otp))
161 return;
163 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
164 if(Channel *chn = cMgr->GetChannel(channelname, _player))
165 chn->SetMute(_player->GetGUID(), otp.c_str());
168 void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket)
170 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
171 //recvPacket.hexlike();
173 std::string channelname, otp;
174 recvPacket >> channelname;
176 recvPacket >> otp;
178 if(!normalizePlayerName(otp))
179 return;
181 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
182 if(Channel *chn = cMgr->GetChannel(channelname, _player))
183 chn->UnsetMute(_player->GetGUID(), otp.c_str());
186 void WorldSession::HandleChannelInvite(WorldPacket& recvPacket)
188 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
189 //recvPacket.hexlike();
190 std::string channelname, otp;
191 recvPacket >> channelname;
193 recvPacket >> otp;
195 if(!normalizePlayerName(otp))
196 return;
198 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
199 if(Channel *chn = cMgr->GetChannel(channelname, _player))
200 chn->Invite(_player->GetGUID(), otp.c_str());
203 void WorldSession::HandleChannelKick(WorldPacket& recvPacket)
205 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
206 //recvPacket.hexlike();
207 std::string channelname, otp;
208 recvPacket >> channelname;
210 recvPacket >> otp;
211 if(!normalizePlayerName(otp))
212 return;
214 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
215 if(Channel *chn = cMgr->GetChannel(channelname, _player))
216 chn->Kick(_player->GetGUID(), otp.c_str());
219 void WorldSession::HandleChannelBan(WorldPacket& recvPacket)
221 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
222 //recvPacket.hexlike();
223 std::string channelname, otp;
224 recvPacket >> channelname;
226 recvPacket >> otp;
228 if(!normalizePlayerName(otp))
229 return;
231 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
232 if(Channel *chn = cMgr->GetChannel(channelname, _player))
233 chn->Ban(_player->GetGUID(), otp.c_str());
236 void WorldSession::HandleChannelUnban(WorldPacket& recvPacket)
238 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
239 //recvPacket.hexlike();
241 std::string channelname, otp;
242 recvPacket >> channelname;
244 recvPacket >> otp;
246 if(!normalizePlayerName(otp))
247 return;
249 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
250 if(Channel *chn = cMgr->GetChannel(channelname, _player))
251 chn->UnBan(_player->GetGUID(), otp.c_str());
254 void WorldSession::HandleChannelAnnouncements(WorldPacket& recvPacket)
256 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
257 //recvPacket.hexlike();
258 std::string channelname;
259 recvPacket >> channelname;
260 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
261 if(Channel *chn = cMgr->GetChannel(channelname, _player))
262 chn->Announce(_player->GetGUID());
265 void WorldSession::HandleChannelModerate(WorldPacket& recvPacket)
267 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
268 //recvPacket.hexlike();
269 std::string channelname;
270 recvPacket >> channelname;
271 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
272 if(Channel *chn = cMgr->GetChannel(channelname, _player))
273 chn->Moderate(_player->GetGUID());
276 void WorldSession::HandleChannelDisplayListQuery(WorldPacket &recvPacket)
278 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
279 //recvPacket.hexlike();
280 std::string channelname;
281 recvPacket >> channelname;
282 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
283 if(Channel *chn = cMgr->GetChannel(channelname, _player))
284 chn->List(_player);
287 void WorldSession::HandleGetChannelMemberCount(WorldPacket &recvPacket)
289 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
290 //recvPacket.hexlike();
291 std::string channelname;
292 recvPacket >> channelname;
293 if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
295 if(Channel *chn = cMgr->GetChannel(channelname, _player))
297 WorldPacket data(SMSG_CHANNEL_MEMBER_COUNT, chn->GetName().size()+1+1+4);
298 data << chn->GetName();
299 data << uint8(chn->GetFlags());
300 data << uint32(chn->GetNumPlayers());
301 SendPacket(&data);
306 void WorldSession::HandleSetChannelWatch(WorldPacket &recvPacket)
308 sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
309 //recvPacket.hexlike();
310 std::string channelname;
311 recvPacket >> channelname;
312 /*if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
313 if(Channel *chn = cMgr->GetChannel(channelname, _player))
314 chn->JoinNotify(_player->GetGUID());*/