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); }
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); }
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); }
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); }
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); }
// 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; }
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); }
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); }
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); }
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); }
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); }
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; } } }
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); }
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); }
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); }
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); }
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); }
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; } } }
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); }
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); }
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 }