/*
* Ascent MMORPG Server
* Copyright (C) 2005-2007 Ascent Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#include "StdAfx.h"
initialiseSingleton( ChannelMgr );
void WorldSession::HandleChannelJoin(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,pass;
uint32 code = 0;
uint8 crap;
recvPacket >> code >> crap;
recvPacket >> channelname;
recvPacket >> pass;
if(channelmgr.GetJoinChannel(channelname.c_str(),GetPlayer())->Join(GetPlayer(),pass.c_str()))
{
WorldPacket data(SMSG_CHANNEL_NOTIFY, 1 + 8 + channelname.size());
data << uint8(2) << channelname;
data << uint64(code);
SendPacket(&data);
}
}
void WorldSession::HandleChannelLeave(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
// if(GetPlayer()->GetTaxiState()) return; // dont allow join while on taxi
//if we leave game etc we should leave this channel, we should not join -- yes,but not leave
string channelname;
uint32 code = 0;
if(client_build >= 6337)
recvPacket >> code;
recvPacket >> channelname;
if(!channelname.length())
return;
if(channelmgr.LeftChannel(channelname.c_str(),_player))
{
WorldPacket data(SMSG_CHANNEL_NOTIFY, 1 + 8 + channelname.size());
data << uint8(0x03) << channelname;
if(client_build >= 6337)
data << uint64(code);
SendPacket(&data);
}
}
void WorldSession::HandleChannelList(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname;
recvPacket >> channelname;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->List(GetPlayer());
}
void WorldSession::HandleChannelPassword(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,pass;
recvPacket >> channelname;
recvPacket >> pass;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->Password(GetPlayer(),pass.c_str());
}
void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,newp;
recvPacket >> channelname;
recvPacket >> newp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer());
if(chn) chn->SetOwner(GetPlayer(),newp.c_str());
}
void WorldSession::HandleChannelOwner(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname;
recvPacket >> channelname;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->GetOwner(GetPlayer());
}
void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->SetModerator(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->UnsetModerator(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelMute(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->SetMute(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->UnsetMute(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelInvite(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->Invite(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelKick(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->Kick(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelBan(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->Ban(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelUnban(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname,otp;
recvPacket >> channelname;
recvPacket >> otp;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->UnBan(GetPlayer(),otp.c_str());
}
void WorldSession::HandleChannelAnnounce(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname;
recvPacket >> channelname;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->Announce(GetPlayer());
}
void WorldSession::HandleChannelModerate(WorldPacket& recvPacket)
{
CHECK_PACKET_SIZE(recvPacket, 1);
string channelname;
recvPacket >> channelname;
Channel *chn = channelmgr.GetChannel(channelname.c_str(),GetPlayer()); if(chn) chn->Moderate(GetPlayer());
}