void Channel::Say(ObjectGuid guid, std::string const& what, uint32 lang) { if (what.empty()) return; // TODO: Add proper RBAC check if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; if (!IsOn(guid)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, guid); return; } if (playersStore[guid].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, guid); return; } WorldPacket data; if (Player* player = ObjectAccessor::FindPlayer(guid)) ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name); else ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, 0, "", "", 0, false, _name); SendToAll(&data, !playersStore[guid].IsModerator() ? guid : ObjectGuid::Empty); }
void Channel::Say(uint64 p, const char *what, uint32 lang) { if (!what) return; if (sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; uint32 sec = 0; Player *plr = objmgr.GetPlayer(p); if (plr) sec = plr->GetSession()->GetSecurity(); if (!IsOn(p)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); } else if (players[p].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); } else if (m_moderate && !players[p].IsModerator() && sec < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, p); } else { // ChatSpy for(PlayerList::iterator itr = players.begin(); itr != players.end(); ++itr) if(Player* pl = objmgr.GetPlayer(itr->first)) pl->HandleChatSpyMessage(what, CHAT_MSG_CHANNEL, lang, plr, GetName()); uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1+4+8+4+m_name.size()+1+8+4+messageLength+1); data << (uint8)CHAT_MSG_CHANNEL; data << (uint32)lang; data << p; // 2.1.0 data << uint32(0); // 2.1.0 data << m_name; data << p; data << messageLength; data << what; data << uint8(plr ? plr->chatTag() : 0); SendToAll(&data, !players[p].IsModerator() ? p : false); } }
void Channel::Say(ObjectGuid p, const char *what, uint32 lang, bool ignoreOn) { if (!what) return; if (sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; uint32 sec = 0; Player *plr = sObjectMgr.GetPlayer(p); if(plr) sec = plr->GetSession()->GetSecurity(); if (!IsOn(p)) { if (!ignoreOn) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); return; } } else if (m_players[p].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); return; } else if (m_moderate && !m_players[p].IsModerator() && sec < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, p); return; } uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1+4+8+4+m_name.size()+1+8+4+messageLength+1); data << uint8(CHAT_MSG_CHANNEL); data << uint32(lang); data << p; // 2.1.0 data << uint32(0); // 2.1.0 data << m_name; data << p; data << uint32(messageLength); data << what; data << uint8(plr ? plr->GetChatTag() : uint8(CHAT_TAG_NONE)); SendToAll(&data, IsOn(p) && !m_players[p].IsModerator() ? p : ObjectGuid()); }
void Channel::Say(ObjectGuid p, const char *what, uint32 lang, bool skipCheck) { if (!what) return; if (sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; uint32 sec = 0; PlayerPointer plr = GetPlayer(p); if (plr) sec = plr->GetSession()->GetSecurity(); if (!skipCheck && !IsOn(p)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); } else if (!skipCheck && m_players[p].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); } else if (!skipCheck && m_moderate && !m_players[p].IsModerator() && sec < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, p); } else { uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1 + 4 + 8 + 4 + m_name.size() + 1 + 8 + 4 + messageLength + 1); data << uint8(CHAT_MSG_CHANNEL); data << uint32(lang); data << m_name; data << uint32(0); data << ObjectGuid(p); data << uint32(messageLength); data << what; data << uint8(plr ? plr->chatTag() : 0); if (!skipCheck && plr && plr->GetSession()->GetAccountFlags() & ACCOUNT_FLAG_MUTED_FROM_PUBLIC_CHANNELS && plr->GetSession()->GetAccountMaxLevel() < sWorld.getConfig(CONFIG_UINT32_PUB_CHANS_MUTE_VANISH_LEVEL)) plr->GetSession()->SendPacket(&data); else SendToAll(&data, (!skipCheck && !m_players[p].IsModerator()) ? p : ObjectGuid()); } }
void Channel::Say(uint64 guid, std::string const& what, uint32 lang) { if (what.empty()) return; if (!IsOn(guid)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, guid); return; } PlayerInfo& pinfo = playersStore[guid]; if (pinfo.IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, guid); return; } Player* player = pinfo.plrPtr; if (player && !player->GetSession()->GetSecurity()) // pussywizard: prevent spam on populated channels { uint32 speakDelay = 0; if (_channelRights.speakDelay > 0) speakDelay = _channelRights.speakDelay; else if (playersStore.size() >= 10) speakDelay = 5; if (!pinfo.IsAllowedToSpeak(speakDelay)) { std::string timeStr = secsToTimeString(pinfo.lastSpeakTime + speakDelay - sWorld->GetGameTime()); if (_channelRights.speakMessage.length() > 0) player->GetSession()->SendNotification(_channelRights.speakMessage.c_str()); player->GetSession()->SendNotification("You must wait %s before speaking again.", timeStr.c_str()); return; } } WorldPacket data; if (player) ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name); else ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, 0, "", "", 0, false, _name); SendToAll(&data, pinfo.IsModerator() ? 0 : guid); }
void Channel::Say(uint64 p, const char *what, uint32 lang) { if (!what) return; if (sWorld.getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; uint32 sec = 0; Player *plr = sObjectMgr.GetPlayer(p); if (plr) sec = plr->GetSession()->GetSecurity(); if (!IsOn(p)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); } else if (players[p].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); } else if (m_moderate && !players[p].IsModerator() && sec < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, p); } else { uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1+4+8+4+m_name.size()+1+8+4+messageLength+1); data << (uint8)CHAT_MSG_CHANNEL; data << (uint32)lang; data << p; // 2.1.0 data << uint32(0); // 2.1.0 data << m_name; data << p; data << messageLength; data << what; data << uint8(plr ? plr->chatTag() : 0); SendToAll(&data, !players[p].IsModerator() ? p : false); } }
void Channel::Say(uint64 p, const char *what, uint32 lang) { std::string worldChatChannelName = sWorld->GetWorldChatChannelName(); if (!what) return; if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; if ( m_name == worldChatChannelName ) lang = LANG_UNIVERSAL; Player* player = ObjectAccessor::FindPlayer(p); if (!IsOn(p)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); } else if (players[p].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); } else { uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1+4+8+4+m_name.size()+1+8+4+messageLength+1); data << (uint8)CHAT_MSG_CHANNEL; data << (uint32)lang; data << p; // 2.1.0 data << uint32(0); // 2.1.0 data << m_name; data << p; data << messageLength; data << what; data << uint8(player ? player->GetChatTag() : 0); SendToAll(&data, !players[p].IsModerator() ? p : false); } }
void Channel::Say(uint64 guid, std::string const& what, uint32 lang) { if (what.empty()) return; uint8 chatTag = 0; if (Player* player = ObjectAccessor::FindPlayer(guid)) chatTag = player->GetChatTag(); // TODO: Add proper RBAC check if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; if (!IsOn(guid)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, guid); return; } if (playersStore[guid].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, guid); return; } WorldPacket data(SMSG_MESSAGECHAT, 1 + 4 + 8 + 4 + _name.size() + 8 + 4 + what.size() + 1); data << uint8(CHAT_MSG_CHANNEL); data << uint32(lang); data << uint64(guid); data << uint32(0); data << _name; data << uint64(guid); data << uint32(what.size() + 1); data << what; data << uint8(chatTag); SendToAll(&data, !playersStore[guid].IsModerator() ? guid : false); }
void Channel::Say(Player* player, const char* text, uint32 lang) { if (!text) return; ObjectGuid guid = player->GetObjectGuid(); if (!IsOn(guid)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, guid); return; } if (m_players[guid].IsMuted() || (GetChannelId() == CHANNEL_ID_LOCAL_DEFENSE && player->GetHonorRankInfo().visualRank < SPEAK_IN_LOCALDEFENSE_RANK) || (GetChannelId() == CHANNEL_ID_WORLD_DEFENSE && player->GetHonorRankInfo().visualRank < SPEAK_IN_WORLDDEFENSE_RANK)) { WorldPacket data; MakeMuted(&data); SendToOne(&data, guid); return; } if (m_moderate && !m_players[guid].IsModerator() && player->GetSession()->GetSecurity() < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, guid); return; } // send channel message if (sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, text, Language(lang), player->GetChatTag(), guid, player->GetName(), ObjectGuid(), "", m_name.c_str(), player->GetHonorRankInfo().rank); SendToAll(&data, !m_players[guid].IsModerator() ? guid : ObjectGuid()); }
void Channel::Say(uint64 guid, std::string const& what, uint32 lang) { if (what.empty()) return; uint8 chatTag = 0; bool isGM = false; if (Player* player = ObjectAccessor::FindPlayer(guid)) { chatTag = player->GetChatTag(); isGM = player->GetSession()->HasPermission(rbac::RBAC_PERM_COMMAND_GM_CHAT); } // TODO: Add proper RBAC check if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; if (!IsOn(guid)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, guid); return; } if (playersStore[guid].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, guid); return; } WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, chatTag, "", "", 0, isGM, _name); SendToAll(&data, !playersStore[guid].IsModerator() ? guid : false); }
void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang) { if (what.empty()) return; // TODO: Add proper RBAC check if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; if (!IsOn(guid)) { WorldPackets::Channel::ChannelNotify notify; MakeNotMember(notify); SendToOne(notify.Write(), guid); return; } if (_playersStore[guid].IsMuted()) { WorldPackets::Channel::ChannelNotify notify; MakeMuted(notify); SendToOne(notify.Write(), guid); return; } WorldPackets::Chat::Chat packet; if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) packet.Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name); else { packet.Initialize(CHAT_MSG_CHANNEL, Language(lang), nullptr, nullptr, what, 0, _name); packet.SenderGUID = guid; packet.TargetGUID = guid; } SendToAll(packet.Write(), !_playersStore[guid].IsModerator() ? guid : ObjectGuid::Empty); }
void Channel::Say(ObjectGuid p, const char* what, uint32 lang) { if (!what) { return; } if (sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) { lang = LANG_UNIVERSAL; } uint32 sec = 0; Player* plr = sObjectMgr.GetPlayer(p); bool speakInLocalDef = false; bool speakInWorldDef = false; if (plr) { sec = plr->GetSession()->GetSecurity(); if (plr->isGameMaster()) { speakInLocalDef = true; // speakInWorldDef = true; } HonorRankInfo honorInfo = plr->GetHonorRankInfo(); //We can speak in local defense if we're above this rank (see .h file) if (honorInfo.rank >= SPEAK_IN_LOCALDEFENSE_RANK) { speakInLocalDef = true; } // Are we not allowed to speak in WorldDefense at all? // if (honorInfo.rank >= SPEAK_IN_WORLDDEFENSE_RANK) // speakInWorldDef = true; } if (!IsOn(p)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); } else if (m_players[p].IsMuted() || (GetChannelId() == CHANNEL_ID_LOCAL_DEFENSE && !speakInLocalDef) || (GetChannelId() == CHANNEL_ID_WORLD_DEFENSE && !speakInWorldDef)) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); } else if (m_moderate && !m_players[p].IsModerator() && sec < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, p); } else { uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1 + 4 + 8 + 4 + m_name.size() + 1 + 8 + 4 + messageLength + 1); data << uint8(CHAT_MSG_CHANNEL); data << uint32(lang); data << m_name; data << uint32(0); data << ObjectGuid(p); data << uint32(messageLength); data << what; data << uint8(plr ? plr->GetChatTag() : uint8(CHAT_TAG_NONE)); SendToAll(&data, !m_players[p].IsModerator() ? p : ObjectGuid()); } }
void Channel::Say(uint64 p, const char *what, uint32 lang) { if (!what) return; if (sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; uint32 sec = 0; Player *plr = sObjectMgr.GetPlayer(p); if (plr) sec = plr->GetSession()->GetPermissions(); if (!IsOn(p)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, p); } else if (players[p].IsMuted()) { WorldPacket data; MakeMuted(&data); SendToOne(&data, p); } else if (m_moderate && !players[p].IsModerator() && !(sec & PERM_GMT)) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, p); } else { uint32 messageLength = strlen(what) + 1; WorldPacket data(SMSG_MESSAGECHAT, 1+4+8+4+m_name.size()+1+8+4+messageLength+1); data << (uint8)CHAT_MSG_CHANNEL; data << (uint32)lang; data << p; // 2.1.0 data << uint32(0); // 2.1.0 data << m_name; data << p; data << messageLength; data << what; data << uint8(plr ? plr->chatTag() : 0); if (!plr || !plr->IsTrollmuted()) { // exclude LFG from two-side channels if (sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL) && IsLFG() && plr) { uint32 fromteam = plr->GetTeam(); for (PlayerList::iterator i = players.begin(); i != players.end(); ++i) { Player *to = sObjectMgr.GetPlayer(i->first); if (!to || to->GetTeam() != fromteam) continue; if (!p || !to->GetSocial()->HasIgnore(GUID_LOPART(p))) to->SendPacketToSelf(&data); } } else SendToAll(&data, !players[p].IsModerator() ? p : false); } else plr->SendPacketToSelf(&data); } }
void Channel::Say(Player* player, const char* text, uint32 lang) { if (!text) return; uint32 sec = 0; ObjectGuid guid = player->GetObjectGuid(); Player* plr = sObjectMgr.GetPlayer(guid); bool speakInLocalDef = false; bool speakInWorldDef = false; if (plr) { sec = plr->GetSession()->GetSecurity(); if (plr->isGameMaster()) { speakInLocalDef = true; speakInWorldDef = true; } HonorRankInfo honorInfo = plr->GetHonorRankInfo(); //We can speak in local defense if we're above this rank (see .h file) if (honorInfo.rank >= SPEAK_IN_LOCALDEFENSE_RANK) speakInLocalDef = true; // Are we not allowed to speak in WorldDefense at all? // if (honorInfo.rank >= SPEAK_IN_WORLDDEFENSE_RANK) // speakInWorldDef = true; } if (!IsOn(guid)) { WorldPacket data; MakeNotMember(&data); SendToOne(&data, guid); return; } else if (m_players[guid].IsMuted() || (GetChannelId() == CHANNEL_ID_LOCAL_DEFENSE && !speakInLocalDef) || (GetChannelId() == CHANNEL_ID_WORLD_DEFENSE && !speakInWorldDef)) { WorldPacket data; MakeMuted(&data); SendToOne(&data, guid); return; } if (m_moderate && !m_players[guid].IsModerator() && player->GetSession()->GetSecurity() < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data, guid); return; } // send channel message if (sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, text, Language(lang), player->GetChatTag(), guid, player->GetName(), ObjectGuid(), "", m_name.c_str(), player->GetHonorRankInfo().rank); SendToAll(&data, !m_players[guid].IsModerator() ? guid : ObjectGuid()); }