Example #1
0
void Channel::AttemptJoin(RPlayerInfo* plr, const char * password)
{
	if(plr == NULL || plr->GetSession() == NULL)
		return;
	Guard mGuard(m_lock);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	uint32 flags = CHANNEL_FLAG_NONE;

	if( !m_general && plr->GetSession()->CanUseCommand("c") )
		flags |= CHANNEL_FLAG_MODERATOR;

	if(!m_password.empty() && strcmp(m_password.c_str(), password) != 0)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_WRONGPASS) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_bannedMembers.find(plr->Guid) != m_bannedMembers.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_YOURBANNED) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_members.find(plr) != m_members.end())
	{
		if( !m_general )
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_ALREADY_ON) << m_name;
			plr->GetSession()->SendPacket(&data);
		}

		return;
	}

	if(m_members.empty() && !m_general)
		flags |= CHANNEL_FLAG_OWNER;

	WorldPacket data2(ISMSG_CHANNEL_ACTION, 9);
	data2 << uint8(CHANNEL_JOIN); // joined channel
	data2 << uint32(plr->Guid);
	data2 << uint32(m_channelId);
	plr->GetSession()->GetServer()->SendPacket(&data2);
	m_members.insert(make_pair(plr, flags));

	if(m_announce)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_JOINED) << m_name << uint64(plr->Guid);
		SendToAll(&data, NULL);
	}

	data.clear();
	if( m_flags & 0x40 && !plr->GetSession()->HasFlag( 0x2 /*ACCOUNT_FLAG_NO_AUTOJOIN*/ ) )
		data << uint8(CHANNEL_NOTIFY_FLAG_YOUJOINED) << m_name << uint8(0x1A) << uint32(0) << uint32(0);
	else
		data << uint8(CHANNEL_NOTIFY_FLAG_YOUJOINED) << m_name << m_flags << m_typeId << uint32(0);

	plr->GetSession()->SendPacket(&data);
}
Example #2
0
void Channel::Unban(Player* plr, PlayerInfo * bplr)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(m_members.end() == itr)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(itr->second & CHANNEL_FLAG_OWNER || itr->second & CHANNEL_FLAG_MODERATOR))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	set<uint32>::iterator it2 = m_bannedMembers.find(bplr->guid);
	if(it2 == m_bannedMembers.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOT_ON_2) << m_name << uint64(bplr->guid);
		plr->GetSession()->SendPacket(&data);
		return;
	}

	data << uint8(CHANNEL_NOTIFY_FLAG_UNBANNED) << m_name << uint64(bplr->guid);
	SendToAll(&data);
	m_bannedMembers.erase(it2);
}
Example #3
0
void Channel::TakeModerator(Player* plr, Player* new_player)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	MemberMap::iterator itr2 = m_members.find(new_player);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(m_members.end() == itr)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_members.end() == itr2)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOT_ON_2) << m_name << new_player->GetGUID();
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(itr->second & CHANNEL_FLAG_OWNER || itr->second & CHANNEL_FLAG_MODERATOR))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	uint32 oldflags = itr2->second;
	itr2->second &= ~CHANNEL_FLAG_MODERATOR;
	data << uint8(CHANNEL_NOTIFY_FLAG_MODE_CHG) << m_name << new_player->GetGUID() << uint8(oldflags) << uint8(itr2->second);
	SendToAll(&data);
}
Example #4
0
void Channel::Mute(RPlayerInfo* plr, RPlayerInfo* die_player)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	MemberMap::iterator itr2 = m_members.find(die_player);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(m_members.end() == itr)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_members.end() == itr2)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOT_ON_2) << m_name << uint64(die_player->Guid);
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(itr->second & CHANNEL_FLAG_OWNER || itr->second & CHANNEL_FLAG_MODERATOR))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	uint32 oldflags = itr2->second;
	itr2->second |= CHANNEL_FLAG_MUTED;
	data << uint8(CHANNEL_NOTIFY_FLAG_MODE_CHG) << m_name << uint64(die_player->Guid) << uint8(oldflags) << uint8(itr2->second);
	SendToAll(&data);
}
Example #5
0
void Channel::AttemptJoin(Player* plr, const char * password)
{
    if(plr == NULL)
        return;
    Guard mGuard(m_lock);
    WorldPacket data(100);
    uint32 flags = CHANNEL_FLAG_NONE;

    if( !m_general && plr->GetSession()->CanUseCommand('c') )
        flags |= CHANNEL_FLAG_MODERATOR;

    if(!m_password.empty() && strcmp(m_password.c_str(), password) != 0)
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_WRONGPASS);
        plr->GetSession()->SendPacket(&data);
        return;
    }

    if(m_bannedMembers.find(plr->GetLowGUID()) != m_bannedMembers.end())
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_YOURBANNED);
        plr->GetSession()->SendPacket(&data);
        return;
    }

    if(m_members.find(plr) != m_members.end())
    {
        if( !m_general )
        {
            MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_ALREADY_ON);
            plr->GetSession()->SendPacket(&data);
        }

        return;
    }

    if(m_members.empty() && !m_general)
        flags |= CHANNEL_FLAG_OWNER;

    plr->JoinedChannel(this);
    m_members.insert(make_pair(plr, flags));

    if(m_announce && !plr->bGMTagOn)
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_JOINED);
        data << plr->GetGUID();
        SendToAll(&data, NULLPLR);
    }

    MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_YOUJOINED);
    data << m_flags << m_typeId << uint32(0);
    plr->GetSession()->SendPacket(&data);

    UserListJoinNotify(plr);
}
Example #6
0
// Initialize threads callbacks
mfxStatus VideoDECODEH265::DecodeFrameCheck(mfxBitstream *bs,
                                              mfxFrameSurface1 *surface_work,
                                              mfxFrameSurface1 **surface_out,
                                              MFX_ENTRY_POINT *pEntryPoint)
{
    UMC::AutomaticUMCMutex guard(m_mGuard);

    mfxStatus mfxSts = DecodeFrameCheck(bs, surface_work, surface_out);

    if (MFX_ERR_NONE == mfxSts || (mfxStatus)MFX_ERR_MORE_DATA_SUBMIT_TASK == mfxSts) // It can be useful to run threads right after first frame receive
    {
        H265DecoderFrame *frame = 0;
        if (*surface_out)
        {
            mfxI32 index = m_FrameAllocator->FindSurface(GetOriginalSurface(*surface_out), m_isOpaq);
            frame = m_pH265VideoDecoder->FindSurface((UMC::FrameMemID)index);
        }
        else
        {
            UMC::AutomaticUMCMutex mGuard(m_mGuardRunThread);
            H265DecoderFrame *pFrame = m_pH265VideoDecoder->GetDPBList()->head();
            for (; pFrame; pFrame = pFrame->future())
            {
                if (!pFrame->m_pic_output && !pFrame->IsDecoded())
                {
                    frame = pFrame;
                    break;
                }
            }

            if (!frame)
            {
                return MFX_WRN_DEVICE_BUSY;
            }
        }

        ThreadTaskInfo * info = new ThreadTaskInfo();

        info->surface_work = GetOriginalSurface(surface_work);

        if (*surface_out)
            info->surface_out = GetOriginalSurface(*surface_out);

        info->pFrame = frame;
        pEntryPoint->pRoutine = &HEVCDECODERoutine;
        pEntryPoint->pCompleteProc = &HEVCCompleteProc;
        pEntryPoint->pState = this;
        pEntryPoint->requiredNumThreads = m_vPar.mfx.NumThread;
        pEntryPoint->pParam = info;

        return mfxSts;
    }

    return mfxSts;
}
Example #7
0
void Channel::Kick(Player* plr, Player* die_player, bool ban)
{
    Guard mGuard(m_lock);
    MemberMap::iterator itr = m_members.find(die_player);
    MemberMap::iterator me_itr = m_members.find(plr);
    WorldPacket data(100);
    uint32 flags;

    if(me_itr == m_members.end())
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_NOTON);
        plr->GetSession()->SendPacket(&data);
        return;
    }

    if(itr == m_members.end())
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_NOT_ON_2);
        data << die_player->GetGUID();
        plr->GetSession()->SendPacket(&data);
        return;
    }

    if(!(me_itr->second & CHANNEL_FLAG_OWNER || me_itr->second & CHANNEL_FLAG_MODERATOR))
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_NOTMOD);
        plr->GetSession()->SendPacket(&data);
        return;
    }

    flags = itr->second;
    MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_KICKED);
    data << die_player->GetGUID();
    SendToAll(&data);

    if(ban)
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_BANNED);
        data << die_player->GetGUID();
        SendToAll(&data);
    }

    m_members.erase(itr);

    if(flags & CHANNEL_FLAG_OWNER)
        SetOwner(NULLPLR, NULLPLR);

    if(ban)
        m_bannedMembers.insert(die_player->GetLowGUID());

    MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_YOULEFT);
    data << m_typeId << uint32(0) << uint8(0);
    die_player->GetSession()->SendPacket(&data);
}
Example #8
0
void Channel::Kick(Player* plr, Player* die_player, bool ban)
{
	if(m_name == "WorldChat")
		return;
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(die_player);
	MemberMap::iterator me_itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	uint32 flags;

	if(me_itr == m_members.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(itr == m_members.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOT_ON_2) << m_name << die_player->GetGUID();
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(me_itr->second & CHANNEL_FLAG_OWNER || me_itr->second & CHANNEL_FLAG_MODERATOR) && !plr->GetSession()->CanUseCommand('a'))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	flags = itr->second;
	data << uint8(CHANNEL_NOTIFY_FLAG_KICKED) << m_name << die_player->GetGUID();
	SendToAll(&data);

	if(ban)
	{
		data.clear();
		data << uint8(CHANNEL_NOTIFY_FLAG_BANNED) << m_name << die_player->GetGUID();
		SendToAll(&data);
	}

	m_members.erase(itr);

	if(flags & CHANNEL_FLAG_OWNER)
		SetOwner(NULL, NULL);

	if(ban)
		m_bannedMembers.insert(die_player->GetLowGUID());

	data.clear();
	data << uint8(CHANNEL_NOTIFY_FLAG_YOULEFT) << m_name << m_id << uint32(0) << uint8(0);
	die_player->GetSession()->SendPacket(&data);
}
Example #9
0
void Channel::AttemptJoin(Player * plr, const char * password)
{
	Guard mGuard(m_lock);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	uint32 flags = CHANNEL_FLAG_NONE;

	if( !m_general && plr->GetSession()->CanUseCommand('c') )
		flags |= CHANNEL_FLAG_MODERATOR;

	if(!m_password.empty() && strcmp(m_password.c_str(), password) != 0)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_WRONGPASS) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_bannedMembers.find(plr->GetLowGUID()) != m_bannedMembers.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_YOURBANNED) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_members.find(plr) != m_members.end())
	{
		if( !m_general )
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_ALREADY_ON) << m_name;
			plr->GetSession()->SendPacket(&data);
		}

		return;
	}

	if(m_members.empty() && !m_general)
		flags |= CHANNEL_FLAG_OWNER;

	plr->JoinedChannel(this);
	m_members.insert(make_pair(plr, flags));

	if(m_announce)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_JOINED) << m_name << plr->GetGUID();
		SendToAll(&data, NULL);
	}
	
	data.clear();
	if( m_flags & 0x40 && !plr->GetSession()->HasFlag( ACCOUNT_FLAG_NO_AUTOJOIN ) )
		data << uint8(CHANNEL_NOTIFY_FLAG_YOUJOINED) << m_name << uint8(0x1A) << uint32(0) << uint32(0);
	else
		data << uint8(CHANNEL_NOTIFY_FLAG_YOUJOINED) << m_name << m_flags << m_typeId << uint32(0);

	plr->GetSession()->SendPacket(&data);
}
Example #10
0
void Channel::Say(Player * plr, const char * message, Player * for_gm_client, bool forced)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, strlen(message)+100);
	if(!forced)
	{
		if(m_members.end() == itr)
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
			plr->GetSession()->SendPacket(&data);
			return;
		}

		if(itr->second & CHANNEL_FLAG_MUTED)
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_YOUCANTSPEAK) << m_name;
			plr->GetSession()->SendPacket(&data);
			return;
		}

		if(m_muted && !(itr->second & CHANNEL_FLAG_VOICED) && !(itr->second & CHANNEL_FLAG_MODERATOR) && !(itr->second & CHANNEL_FLAG_OWNER))
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_YOUCANTSPEAK) << m_name;
			plr->GetSession()->SendPacket(&data);
			return;	
		}
	}

	// not blizzlike but meh
	if( plr->getLevel() < m_minimumLevel )
	{
		plr->BroadcastMessage("You must be level %u to speak in the channel, '%s'.", m_minimumLevel, m_name.c_str());
		return;
	}

	data.SetOpcode(SMSG_MESSAGECHAT);
	data << uint8(CHAT_MSG_CHANNEL);
	data << uint32(0);		// language
	data << plr->GetGUID();	// guid
	data << uint32(0);		// rank?
	data << m_name;			// channel name
	data << plr->GetGUID();	// guid again?
	data << uint32(strlen(message)+1);
	data << message;
	data << (uint8)(plr->bGMTagOn ? 4 : 0);
	if(for_gm_client != NULL)
		for_gm_client->GetSession()->SendPacket(&data);
	else
		SendToAll(&data);
}
Example #11
0
void Channel::Say(Player* plr, const char * message, Player* for_gm_client, bool forced)
{
    Guard mGuard(m_lock);
    MemberMap::iterator itr = m_members.find(plr);
    WorldPacket data(strlen(message)+100);
    if(!forced)
    {
        if(m_members.end() == itr)
        {
            MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_NOTON);
            plr->GetSession()->SendPacket(&data);
            return;
        }

        if(itr->second & CHANNEL_FLAG_MUTED)
        {
            MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_YOUCANTSPEAK);
            plr->GetSession()->SendPacket(&data);
            return;
        }

        if(m_muted && !(itr->second & CHANNEL_FLAG_VOICED) && !(itr->second & CHANNEL_FLAG_MODERATOR) && !(itr->second & CHANNEL_FLAG_OWNER))
        {
            MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_YOUCANTSPEAK);
            plr->GetSession()->SendPacket(&data);
            return;
        }
    }

    data.SetOpcode(SMSG_MESSAGECHAT);
    data << uint8(CHAT_MSG_CHANNEL);
    data << uint32(0);      // language
    data << plr->GetGUID(); // guid
    data << uint32(0);      // rank?
    data << m_name;         // channel name
    data << plr->GetGUID(); // guid again?
    data << uint32(strlen(message)+1);
    data << message;
    data << (uint8)(plr->GetChatTag());
    if(for_gm_client != NULL)
        for_gm_client->GetSession()->SendPacket(&data);
    else
        SendToAll(&data);
}
Example #12
0
void Channel::GetOwner(Player * plr)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(itr == m_members.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	for(itr = m_members.begin(); itr != m_members.end(); ++itr)
	{
		if(itr->second & CHANNEL_FLAG_OWNER)
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_WHO_OWNER) << m_name << itr->first->GetGUID();
			plr->GetSession()->SendPacket(&data);
			return;
		}
	}
}
Example #13
0
void Channel::List(Player * plr)
{
	Guard mGuard(m_lock);
	WorldPacket data(SMSG_CHANNEL_LIST, 50 + (m_members.size()*9));
	MemberMap::iterator itr = m_members.find(plr);
	if(itr == m_members.end())
	{
		data.Initialize(SMSG_CHANNEL_NOTIFY);
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	uint8 flags;
	data << uint8(1) << m_name;
	data << uint8(m_flags);
	data << uint32(m_members.size());
	for(MemberMap::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
	{
		data << itr->first->GetGUID();
		flags = 0;
		if(!(itr->second & CHANNEL_FLAG_MUTED))
			flags |= 0x04;		// voice flag

		if(itr->second & CHANNEL_FLAG_OWNER)
			flags |= 0x01;		// owner flag

		if(itr->second & CHANNEL_FLAG_MODERATOR)
			flags |= 0x02;		// moderator flag

		if(!m_general)
			flags |= 0x10;

		data << flags;
	}

	plr->GetSession()->SendPacket(&data);
}
Example #14
0
void Channel::Password(Player * plr, const char * pass)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(m_members.end() == itr)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(itr->second & CHANNEL_FLAG_OWNER || itr->second & CHANNEL_FLAG_MODERATOR))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	m_password = string(pass);
	data << uint8(CHANNEL_NOTIFY_FLAG_SETPASS) << m_name << plr->GetGUID();
	SendToAll(&data);	
}
Example #15
0
void Channel::Announce(Player * plr)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(m_members.end() == itr)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(itr->second & CHANNEL_FLAG_OWNER || itr->second & CHANNEL_FLAG_MODERATOR))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	m_announce = !m_announce;
	data << uint8(m_announce ? CHANNEL_NOTIFY_FLAG_ENABLE_ANN : CHANNEL_NOTIFY_FLAG_DISABLE_ANN) << m_name << plr->GetGUID();
	SendToAll(&data);
}
Example #16
0
void Channel::Moderate(Player * plr)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(m_members.end() == itr)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(itr->second & CHANNEL_FLAG_OWNER || itr->second & CHANNEL_FLAG_MODERATOR) && !plr->GetSession()->CanUseCommand('c'))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	m_muted = !m_muted;
	data << uint8(m_muted ? CHANNEL_NOTIFY_FLAG_MODERATED : CHANNEL_NOTIFY_FLAG_UNMODERATED) << m_name << plr->GetGUID();
	SendToAll(&data);
}
Example #17
0
void Channel::Invite(Player * plr, Player * new_player)
{
	Guard mGuard(m_lock);
	if(m_members.find(plr) == m_members.end())
	{
		SendNotOn(plr);
		return;
	}

	if(m_members.find(new_player) != m_members.end())
	{
		SendAlreadyOn(plr, new_player);
		return;
	}

	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	data << uint8(CHANNEL_NOTIFY_FLAG_INVITED) << m_name << plr->GetGUID();
	new_player->GetSession()->SendPacket(&data);

	data.clear();
	data << uint8(CHANNEL_NOTIFY_FLAG_YOU_INVITED) << m_name << new_player->GetGUID();
	plr->GetSession()->SendPacket(&data);
}
Example #18
0
void Channel::GetOwner(Player* plr)
{
    Guard mGuard(m_lock);
    MemberMap::iterator itr = m_members.find(plr);
    WorldPacket data(100);
    if(itr == m_members.end())
    {
        MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_NOTON);
        plr->GetSession()->SendPacket(&data);
        return;
    }

    for(itr = m_members.begin(); itr != m_members.end(); itr++)
    {
        if(itr->second & CHANNEL_FLAG_OWNER)
        {
            MakeNotifyPacket(&data, CHANNEL_NOTIFY_FLAG_WHO_OWNER);
            data << itr->first->GetGUID();
            plr->GetSession()->SendPacket(&data);
            return;
        }
    }
}
Example #19
0
void Channel::Kick(Player * plr, Player * die_player, bool ban)
{
	Guard mGuard(m_lock);
	MemberMap::iterator itr = m_members.find(die_player);
	MemberMap::iterator me_itr = m_members.find(plr);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	uint32 flags;

	if(me_itr == m_members.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(itr == m_members.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOT_ON_2) << m_name << die_player->GetGUID();
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(!(me_itr->second & CHANNEL_FLAG_OWNER || me_itr->second & CHANNEL_FLAG_MODERATOR))
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_NOTMOD) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

    flags = itr->second;
	data << uint8(CHANNEL_NOTIFY_FLAG_KICKED) << m_name << die_player->GetGUID();
	SendToAll(&data);

	if(ban)
	{
		data.clear();
		data << uint8(CHANNEL_NOTIFY_FLAG_BANNED) << m_name << die_player->GetGUID();
		SendToAll(&data);
	}

	m_members.erase(itr);
#ifdef VOICE_CHAT
	itr = m_VoiceMembers.find(plr);
	if(itr != m_VoiceMembers.end())
	{
		m_VoiceMembers.erase(itr);
		if(i_voice_channel_id != (uint16)-1)
			SendVoiceUpdate();
	}
#endif

	if(flags & CHANNEL_FLAG_OWNER)
		SetOwner(NULL, NULL);

	if(ban)
		m_bannedMembers.insert(die_player->GetLowGUID());

	data.clear();
	data << uint8(CHANNEL_NOTIFY_FLAG_YOULEFT) << m_name << m_id << uint32(0) << uint8(0);
	die_player->GetSession()->SendPacket(&data);
}
Example #20
0
void Channel::SetOwner(Player * oldpl, Player * plr)
{
	Guard mGuard(m_lock);
	Player * pOwner = NULL;
	uint32 oldflags, oldflags2;
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	if(oldpl != NULL)
	{
		MemberMap::iterator itr = m_members.find(oldpl);
		if(m_members.end() == itr)
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_NOTON) << m_name;
			plr->GetSession()->SendPacket(&data);
			return;
		}

		if(!(itr->second & CHANNEL_FLAG_OWNER))
		{
			data << uint8(CHANNEL_NOTIFY_FLAG_NOT_OWNER) << m_name;
			plr->GetSession()->SendPacket(&data);
			return;
		}
	}

	if(plr == NULL)
	{
		for(MemberMap::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
		{
			if(itr->second & CHANNEL_FLAG_OWNER)
			{
				// remove the old owner
				oldflags2 = itr->second;
				itr->second &= ~CHANNEL_FLAG_OWNER;
				data << uint8(CHANNEL_NOTIFY_FLAG_MODE_CHG) << m_name << itr->first->GetGUID() << uint8(oldflags2) << uint8(itr->second);				
				SendToAll(&data);
			}
			else
			{
				if(pOwner == NULL)
				{
					pOwner = itr->first;
					oldflags = itr->second;
					itr->second |= CHANNEL_FLAG_OWNER;
				}
			}				
		}
	}
	else
	{
		for(MemberMap::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
		{
			if(itr->second & CHANNEL_FLAG_OWNER)
			{
				// remove the old owner
				oldflags2 = itr->second;
				itr->second &= ~CHANNEL_FLAG_OWNER;
				data << uint8(CHANNEL_NOTIFY_FLAG_MODE_CHG) << m_name << itr->first->GetGUID() << uint8(oldflags2) << uint8(itr->second);	
				SendToAll(&data);
			}
			else
			{
				if(plr == itr->first)
				{
					pOwner = itr->first;
					oldflags = itr->second;
					itr->second |= CHANNEL_FLAG_OWNER;
				}
			}				
		}
	}

	if(pOwner == NULL)
		return;		// obviously no members

	data.clear();
	data << uint8(CHANNEL_NOTIFY_FLAG_CHGOWNER) << m_name << pOwner->GetGUID();
	SendToAll(&data);

	// send the mode changes
	data.clear();
	data << uint8(CHANNEL_NOTIFY_FLAG_MODE_CHG) << m_name << pOwner->GetGUID() << uint8(oldflags) << uint8(oldflags | CHANNEL_FLAG_OWNER);
	SendToAll(&data);
}
Example #21
0
void Channel::AttemptJoin(Player * plr, const char * password)
{
	Guard mGuard(m_lock);
	WorldPacket data(SMSG_CHANNEL_NOTIFY, 100);
	uint32 flags = CHANNEL_FLAG_NONE;

	if( !m_general && plr->GetSession()->CanUseCommand('c') )
		flags |= CHANNEL_FLAG_MODERATOR;

	if(!m_password.empty() && strcmp(m_password.c_str(), password) != 0)
	{
        data << uint8(CHANNEL_NOTIFY_FLAG_WRONGPASS) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_bannedMembers.find(plr->GetLowGUID()) != m_bannedMembers.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_YOURBANNED) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_members.find(plr) != m_members.end())
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_ALREADY_ON) << m_name;
		plr->GetSession()->SendPacket(&data);
		return;
	}

	if(m_members.empty() && !m_general)
		flags |= CHANNEL_FLAG_OWNER;

	plr->JoinedChannel(this);
	m_members.insert(make_pair(plr, flags));

	if(m_announce)
	{
		data << uint8(CHANNEL_NOTIFY_FLAG_JOINED) << m_name << plr->GetGUID();
		SendToAll(&data, NULL);
	}
	
	data.clear();
	if( m_flags & 0x40 && !plr->GetSession()->HasFlag( ACCOUNT_FLAG_NO_AUTOJOIN ) )
		data << uint8(CHANNEL_NOTIFY_FLAG_YOUJOINED) << m_name << uint8(0x1A) << uint32(0) << uint32(0);
	else
		data << uint8(CHANNEL_NOTIFY_FLAG_YOUJOINED) << m_name << m_flags << m_id << uint32(0);

	plr->GetSession()->SendPacket(&data);

#ifdef VOICE_CHAT
	if(voice_enabled)
	{
		data.Initialize(SMSG_CHANNEL_NOTIFY);
		data << uint8(CHANNEL_NOTIFY_FLAG_VOICE_ON) << m_name << plr->GetGUID();
		plr->GetSession()->SendPacket(&data);

		//JoinVoiceChannel(plr);

		data.Initialize(0x03d9);
		//data << uint32(0x00002e57);
		//data << uint32(0xe0e10000);

		// this is voice channel id?
		data << uint64(0xe0e10000000032abULL);
		data << uint8(0);		// 00=custom,03=party,04=raid
		data << m_name;
		data << plr->GetGUID();
		plr->GetSession()->SendPacket(&data);
	}
#endif
}