32 _flags |= CHANNEL_FLAG_GENERAL;
34 if (ch->flags & CHANNEL_DBC_FLAG_TRADE)
35 _flags |= CHANNEL_FLAG_TRADE;
37 if (ch->flags & CHANNEL_DBC_FLAG_CITY_ONLY2)
38 _flags |= CHANNEL_FLAG_CITY;
40 if (ch->flags & CHANNEL_DBC_FLAG_LFG)
41 _flags |= CHANNEL_FLAG_LFG;
43 _flags |= CHANNEL_FLAG_NOT_LFG;
47 _flags |= CHANNEL_FLAG_CUSTOM;
50 if (sWorld->GetBoolConfig(WorldBoolConfigs::CONFIG_PRESERVE_CUSTOM_CHANNELS))
52 PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHANNEL);
53 stmt->setString(0, name);
54 stmt->setUInt32(1, _Team);
55 PreparedQueryResult result = CharacterDatabase.Query(stmt);
59 Field* fields = result->Fetch();
60 _announce = fields[0].GetBool();
61 _ownership = fields[1].GetBool();
62 _password = fields[2].GetString();
63 const char* db_BannedList = fields[3].GetCString();
67 Tokenizer tokens(db_BannedList,
' ');
68 for (Tokenizer::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
70 uint64 banned_guid = atol(*i);
73 SF_LOG_DEBUG(
"chat.system",
"Channel(%s) loaded bannedStore guid:" UI64FMTD
"", name.c_str(), banned_guid);
74 bannedStore.insert(banned_guid);
81 stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHANNEL);
82 stmt->setString(0, name);
83 stmt->setUInt32(1, _Team);
84 CharacterDatabase.Execute(stmt);
85 SF_LOG_DEBUG(
"chat.system",
"Channel(%s) saved in database", name.c_str());
97 std::ostringstream banlist;
98 BannedContainer::const_iterator iter;
100 banlist << (*iter) <<
' ';
102 std::string banListStr = banlist.str();
133 SF_LOG_DEBUG(
"chat.system",
"Cleaned out unused custom chat channels.");
288 if (!victim || !
IsOn(victim))
432 if (!victim || !
IsOn(victim) ||
480 if (!victim || !
IsOn(victim) ||
517 SF_LOG_DEBUG(
"chat.system",
"SMSG_CHANNEL_LIST %s Channel: %s",
525 size_t pos = data.
wpos();
543 data <<
uint8(i->second.flags);
595 chatTag = player->GetChatTag();
620 ChatHandler::BuildChatPacket(data,
ChatMsg::CHAT_MSG_CHANNEL, lang, guid, guid, what, chatTag,
"",
"", 0, isGM,
_name);
692 p_itr->second.SetOwner(
false);
719 if (!guid || !player->GetSocial()->HasIgnore(
GUID_LOPART(guid)))
720 player->GetSession()->SendPacket(data);
728 player->GetSession()->SendPacket(data);
734 player->GetSession()->SendPacket(data);
744 *data <<
uint8(notify_type);
815 std::string name =
"";
818 name =
"PLAYER_NOT_FOUND";
828 *data <<
uint8(oldflags);
957 data <<
uint32(ChannelID);
959 data <<
uint8(UserFlags);
977 data <<
uint32(ChannelID);
980 data <<
uint8(UserFlags);
995 data <<
uint32(ChannelID);
@ CHAT_WRONG_FACTION_NOTICE
@ CHAT_NOT_MODERATOR_NOTICE
@ CHAT_PLAYER_UNBANNED_NOTICE
@ CHAT_PLAYER_NOT_FOUND_NOTICE
@ CHAT_PLAYER_NOT_BANNED_NOTICE
@ CHAT_PLAYER_INVITED_NOTICE
@ CHAT_PLAYER_KICKED_NOTICE
@ CHAT_MODE_CHANGE_NOTICE
@ CHAT_ANNOUNCEMENTS_ON_NOTICE
@ CHAT_INVITE_WRONG_FACTION_NOTICE
@ CHAT_PLAYER_BANNED_NOTICE
@ CHAT_PLAYER_ALREADY_MEMBER_NOTICE
@ CHAT_OWNER_CHANGED_NOTICE
@ CHAT_ANNOUNCEMENTS_OFF_NOTICE
@ CHAT_NOT_IN_AREA_NOTICE
@ CHAT_NOT_MODERATED_NOTICE
@ CHAT_CHANNEL_OWNER_NOTICE
@ CHAT_WRONG_PASSWORD_NOTICE
@ CHAT_PLAYER_INVITE_BANNED_NOTICE
@ CHAT_PASSWORD_CHANGED_NOTICE
@ CHAT_INVALID_NAME_NOTICE
DBCStorage< ChatChannelsEntry > sChatChannelsStore(ChatChannelsEntryfmt)
#define SF_LOG_DEBUG(filterType__,...)
uint32 GUID_LOPART(uint64 x)
static bool IsPlayerAccount(AccountTypes gmlevel)
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
void put(size_t pos, T value)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
void WriteBits(T value, size_t bits)
void MakePlayerNotFound(WorldPacket *data, std::string const &name)
void LeaveNotify(ObjectGuid UserGUID, uint32 ChannelID, uint8 ChannelFlags, std::string const &ChannelName)
void Password(Player const *player, std::string const &pass)
void MakeNotifyPacket(WorldPacket *data, uint8 notify_type)
void List(Player const *player)
void SetOwner(uint64 guid, bool exclaim=true)
void MakeChannelOwner(WorldPacket *data)
void MakePlayerBanned(WorldPacket *data, uint64 bad, uint64 good)
void MakeNotMember(WorldPacket *data)
void MakeVoiceOn(WorldPacket *data, uint64 guid)
void MakePlayerInvited(WorldPacket *data, std::string const &name)
void MakePlayerInviteBanned(WorldPacket *data, std::string const &name)
void MakeNotModerated(WorldPacket *data)
void SendToAll(WorldPacket *data, uint64 guid=0)
bool HasFlag(uint8 flag) const
void MakePasswordChanged(WorldPacket *data, uint64 guid)
void JoinChannel(Player *player, std::string const &pass)
void MakePlayerKicked(WorldPacket *data, uint64 bad, uint64 good)
void UpdateChannelInDB() const
void MakeInviteWrongFaction(WorldPacket *data)
void MakeNotOwner(WorldPacket *data)
void SetMute(Player const *player, std::string const &newname)
void DeVoice(uint64 guid1, uint64 guid2)
void SetModerator(Player const *player, std::string const &newname)
Channel(std::string const &name, uint32 channel_id, uint32 Team=0)
PlayerContainer playersStore
void MakeNotModerator(WorldPacket *data)
void SendToOne(WorldPacket *data, uint64 who)
void MakeVoiceOff(WorldPacket *data, uint64 guid)
void KickOrBan(Player const *player, std::string const &badname, bool ban)
void MakeMuted(WorldPacket *data)
void MakeYouLeft(WorldPacket *data)
bool IsOn(uint64 who) const
uint32 GetChannelId() const
void MakeInvalidName(WorldPacket *data)
bool IsBanned(uint64 guid) const
void MakeYouJoined(WorldPacket *data)
void LeaveChannel(Player *player, bool send=true)
void JoinNotify(ObjectGuid UserGUID, uint32 ChannelID, uint8 ChannelFlags, uint8 UserFlags, std::string const &ChannelName)
void UnBan(Player const *player, std::string const &badname)
static void CleanOldChannelsInDB()
void Say(uint64 guid, std::string const &what, Language lang)
void SetMode(Player const *player, std::string const &p2n, bool mod, bool set)
void MakeInvite(WorldPacket *data, uint64 guid)
void MakeLeft(WorldPacket *data, uint64 guid)
void MakeNotInArea(WorldPacket *data)
void MakeModeChange(WorldPacket *data, uint64 guid, uint8 oldflags)
void MakeNotInLfg(WorldPacket *data)
void MakePlayerAlreadyMember(WorldPacket *data, uint64 guid)
void MakePlayerNotBanned(WorldPacket *data, std::string const &name)
void MakeAnnouncementsOn(WorldPacket *data, uint64 guid)
void MakePlayerUnbanned(WorldPacket *data, uint64 bad, uint64 good)
void SendToAllButOne(WorldPacket *data, uint64 who)
void Voice(uint64 guid1, uint64 guid2)
std::string const & GetName() const
void Announce(Player const *player)
void MakeBanned(WorldPacket *data)
void MakeAnnouncementsOff(WorldPacket *data, uint64 guid)
void MakeThrottled(WorldPacket *data)
void Invite(Player const *player, std::string const &newp)
void MakeOwnerChanged(WorldPacket *data, uint64 guid)
void MakeWrongPassword(WorldPacket *data)
void MakeWrongFaction(WorldPacket *data)
void UpdateChannelUseageInDB() const
void MakeJoined(WorldPacket *data, uint64 guid)
void SendWhoOwner(uint64 guid)
uint8 GetPlayerFlags(uint64 guid) const
BannedContainer bannedStore
static size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string const &message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="", std::string const &addonPrefix="")
static Player * FindPlayer(uint64)
WorldSession * GetSession() const
bool IsVisibleGloballyFor(Player const *player) const
PlayerSocial * GetSocial()
void LeftChannel(Channel *c)
void JoinedChannel(Channel *c)
bool HasIgnore(uint32 ignore_guid)
void setBool(const uint8 index, const bool value)
void setString(const uint8 index, const std::string &value)
void setUInt32(const uint8 index, const uint32 value)
std::string const & GetName() const
void Initialize(Opcodes opcode, size_t newres=200)
AccountTypes GetSecurity() const
std::string GetPlayerInfo() const
bool HasPermission(uint32 permissionId)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION
@ CONFIG_GM_LEVEL_IN_WHO_LIST
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL
@ CONFIG_RESTRICTED_LFG_CHANNEL
@ RBAC_PERM_COMMAND_GM_CHAT
@ RBAC_PERM_SILENTLY_JOIN_CHANNEL
@ RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS
@ RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR
@ RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL