root/trunk/src/game/ChannelHandler.cpp @ 83

Revision 44, 11.3 kB (checked in by yumileroy, 17 years ago)

[svn] * Merge Temp dev SVN with Assembla.
* Changes include:

  • Implementation of w12x's Outdoor PvP and Game Event Systems.
  • Temporary removal of IRC Chat Bot (until infinite loop when disabled is fixed).
  • All mangos -> trinity (to convert your mangos_string table, please run mangos_string_to_trinity_string.sql).
  • Improved Config cleanup.
  • And many more changes.

Original author: Seline
Date: 2008-10-14 11:57:03-05:00

Line 
1/*
2 * Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
3 *
4 * Thanks to the original authors: MaNGOS <http://www.mangosproject.org/>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#include "ObjectMgr.h"                                      // for normalizePlayerName
22#include "ChannelMgr.h"
23#include "Policies/SingletonImp.h"
24
25INSTANTIATE_SINGLETON_1( AllianceChannelMgr );
26INSTANTIATE_SINGLETON_1( HordeChannelMgr );
27
28void WorldSession::HandleChannelJoin(WorldPacket& recvPacket)
29{
30    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
31    //recvPacket.hexlike();
32    CHECK_PACKET_SIZE(recvPacket, 4+1+1+1);
33
34    uint32 channel_id;
35    uint8 unknown1, unknown2;
36    std::string channelname, pass;
37
38    recvPacket >> channel_id >> unknown1 >> unknown2;
39    recvPacket >> channelname;
40
41    if(channelname.empty())
42        return;
43
44    // recheck
45    CHECK_PACKET_SIZE(recvPacket, 4+1+1+(channelname.size()+1)+1);
46
47    recvPacket >> pass;
48    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
49        if(Channel *chn = cMgr->GetJoinChannel(channelname, channel_id))
50            chn->Join(_player->GetGUID(), pass.c_str());
51}
52
53void WorldSession::HandleChannelLeave(WorldPacket& recvPacket)
54{
55    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
56    //recvPacket.hexlike();
57    CHECK_PACKET_SIZE(recvPacket, 4+1);
58
59    uint32 unk;
60    std::string channelname;
61    recvPacket >> unk;                                      // channel id?
62    recvPacket >> channelname;
63
64    if(channelname.empty())
65        return;
66
67    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
68    {
69        if(Channel *chn = cMgr->GetChannel(channelname, _player))
70            chn->Leave(_player->GetGUID(), true);
71        cMgr->LeftChannel(channelname);
72    }
73}
74
75void WorldSession::HandleChannelList(WorldPacket& recvPacket)
76{
77    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
78    //recvPacket.hexlike();
79    CHECK_PACKET_SIZE(recvPacket, 1);
80
81    std::string channelname;
82    recvPacket >> channelname;
83
84    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
85        if(Channel *chn = cMgr->GetChannel(channelname, _player))
86            chn->List(_player);
87}
88
89void WorldSession::HandleChannelPassword(WorldPacket& recvPacket)
90{
91    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
92    //recvPacket.hexlike();
93    CHECK_PACKET_SIZE(recvPacket, 1+1);
94
95    std::string channelname, pass;
96    recvPacket >> channelname;
97
98    // recheck
99    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
100
101    recvPacket >> pass;
102
103    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
104        if(Channel *chn = cMgr->GetChannel(channelname, _player))
105            chn->Password(_player->GetGUID(), pass.c_str());
106}
107
108void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket)
109{
110    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
111    //recvPacket.hexlike();
112    CHECK_PACKET_SIZE(recvPacket, 1+1);
113
114    std::string channelname, newp;
115    recvPacket >> channelname;
116
117    // recheck
118    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
119
120    recvPacket >> newp;
121
122    if(!normalizePlayerName(newp))
123        return;
124
125    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
126        if(Channel *chn = cMgr->GetChannel(channelname, _player))
127            chn->SetOwner(_player->GetGUID(), newp.c_str());
128}
129
130void WorldSession::HandleChannelOwner(WorldPacket& recvPacket)
131{
132    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
133    //recvPacket.hexlike();
134    CHECK_PACKET_SIZE(recvPacket, 1);
135
136    std::string channelname;
137    recvPacket >> channelname;
138    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
139        if(Channel *chn = cMgr->GetChannel(channelname, _player))
140            chn->SendWhoOwner(_player->GetGUID());
141}
142
143void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
144{
145    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
146    //recvPacket.hexlike();
147    CHECK_PACKET_SIZE(recvPacket, 1+1);
148
149    std::string channelname, otp;
150    recvPacket >> channelname;
151
152    // recheck
153    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
154
155    recvPacket >> otp;
156
157    if(!normalizePlayerName(otp))
158        return;
159
160    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
161        if(Channel *chn = cMgr->GetChannel(channelname, _player))
162            chn->SetModerator(_player->GetGUID(), otp.c_str());
163}
164
165void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket)
166{
167    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
168    //recvPacket.hexlike();
169    CHECK_PACKET_SIZE(recvPacket, 1+1);
170
171    std::string channelname, otp;
172    recvPacket >> channelname;
173
174    // recheck
175    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
176
177    recvPacket >> otp;
178
179    if(!normalizePlayerName(otp))
180        return;
181
182    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
183        if(Channel *chn = cMgr->GetChannel(channelname, _player))
184            chn->UnsetModerator(_player->GetGUID(), otp.c_str());
185}
186
187void WorldSession::HandleChannelMute(WorldPacket& recvPacket)
188{
189    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
190    //recvPacket.hexlike();
191    CHECK_PACKET_SIZE(recvPacket, 1+1);
192
193    std::string channelname, otp;
194    recvPacket >> channelname;
195
196    // recheck
197    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
198
199    recvPacket >> otp;
200
201    if(!normalizePlayerName(otp))
202        return;
203
204    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
205        if(Channel *chn = cMgr->GetChannel(channelname, _player))
206            chn->SetMute(_player->GetGUID(), otp.c_str());
207}
208
209void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket)
210{
211    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
212    //recvPacket.hexlike();
213    CHECK_PACKET_SIZE(recvPacket, 1+1);
214
215    std::string channelname, otp;
216    recvPacket >> channelname;
217
218    // recheck
219    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
220
221    recvPacket >> otp;
222
223    if(!normalizePlayerName(otp))
224        return;
225
226    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
227        if(Channel *chn = cMgr->GetChannel(channelname, _player))
228            chn->UnsetMute(_player->GetGUID(), otp.c_str());
229}
230
231void WorldSession::HandleChannelInvite(WorldPacket& recvPacket)
232{
233    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
234    //recvPacket.hexlike();
235    CHECK_PACKET_SIZE(recvPacket, 1+1);
236
237    std::string channelname, otp;
238    recvPacket >> channelname;
239
240    // recheck
241    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
242
243    recvPacket >> otp;
244
245    if(!normalizePlayerName(otp))
246        return;
247
248    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
249        if(Channel *chn = cMgr->GetChannel(channelname, _player))
250            chn->Invite(_player->GetGUID(), otp.c_str());
251}
252
253void WorldSession::HandleChannelKick(WorldPacket& recvPacket)
254{
255    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
256    //recvPacket.hexlike();
257    CHECK_PACKET_SIZE(recvPacket, 1+1);
258
259    std::string channelname, otp;
260    recvPacket >> channelname;
261
262    // recheck
263    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
264
265    recvPacket >> otp;
266    if(!normalizePlayerName(otp))
267        return;
268
269    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
270        if(Channel *chn = cMgr->GetChannel(channelname, _player))
271            chn->Kick(_player->GetGUID(), otp.c_str());
272}
273
274void WorldSession::HandleChannelBan(WorldPacket& recvPacket)
275{
276    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
277    //recvPacket.hexlike();
278    CHECK_PACKET_SIZE(recvPacket, 1+1);
279
280    std::string channelname, otp;
281    recvPacket >> channelname;
282
283    // recheck
284    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
285
286    recvPacket >> otp;
287
288    if(!normalizePlayerName(otp))
289        return;
290
291    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
292        if(Channel *chn = cMgr->GetChannel(channelname, _player))
293            chn->Ban(_player->GetGUID(), otp.c_str());
294}
295
296void WorldSession::HandleChannelUnban(WorldPacket& recvPacket)
297{
298    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
299    //recvPacket.hexlike();
300    CHECK_PACKET_SIZE(recvPacket, 1+1);
301
302    std::string channelname, otp;
303    recvPacket >> channelname;
304
305    // recheck
306    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
307
308    recvPacket >> otp;
309
310    if(!normalizePlayerName(otp))
311        return;
312
313    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
314        if(Channel *chn = cMgr->GetChannel(channelname, _player))
315            chn->UnBan(_player->GetGUID(), otp.c_str());
316}
317
318void WorldSession::HandleChannelAnnounce(WorldPacket& recvPacket)
319{
320    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
321    //recvPacket.hexlike();
322    CHECK_PACKET_SIZE(recvPacket, 1);
323
324    std::string channelname;
325    recvPacket >> channelname;
326    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
327        if(Channel *chn = cMgr->GetChannel(channelname, _player))
328            chn->Announce(_player->GetGUID());
329}
330
331void WorldSession::HandleChannelModerate(WorldPacket& recvPacket)
332{
333    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
334    //recvPacket.hexlike();
335    CHECK_PACKET_SIZE(recvPacket, 1);
336
337    std::string channelname;
338    recvPacket >> channelname;
339    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
340        if(Channel *chn = cMgr->GetChannel(channelname, _player))
341            chn->Moderate(_player->GetGUID());
342}
343
344void WorldSession::HandleChannelRosterQuery(WorldPacket &recvPacket)
345{
346    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
347    //recvPacket.hexlike();
348    CHECK_PACKET_SIZE(recvPacket, 1);
349
350    std::string channelname;
351    recvPacket >> channelname;
352    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
353        if(Channel *chn = cMgr->GetChannel(channelname, _player))
354            chn->List(_player);
355}
356
357void WorldSession::HandleChannelInfoQuery(WorldPacket &recvPacket)
358{
359    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
360    //recvPacket.hexlike();
361    CHECK_PACKET_SIZE(recvPacket, 1);
362
363    std::string channelname;
364    recvPacket >> channelname;
365    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
366    {
367        if(Channel *chn = cMgr->GetChannel(channelname, _player))
368        {
369            WorldPacket data(SMSG_CHANNEL_MEMBER_COUNT, chn->GetName().size()+1+1+4);
370            data << chn->GetName();
371            data << uint8(chn->GetFlags());
372            data << uint32(chn->GetNumPlayers());
373            SendPacket(&data);
374        }
375    }
376}
377
378void WorldSession::HandleChannelJoinNotify(WorldPacket &recvPacket)
379{
380    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
381    //recvPacket.hexlike();
382    CHECK_PACKET_SIZE(recvPacket, 1);
383
384    std::string channelname;
385    recvPacket >> channelname;
386    /*if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
387        if(Channel *chn = cMgr->GetChannel(channelname, _player))
388            chn->JoinNotify(_player->GetGUID());*/
389}
Note: See TracBrowser for help on using the browser.