diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-11-02 18:35:26 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-11-02 18:35:26 +0100 |
| commit | f40c0dfd5588798115bfa61236be1804a32ba24f (patch) | |
| tree | ff9749fe8cbbbaed8dc6ed398523fbc3576d9c80 /src/server/game/Chat | |
| parent | d52c00a8fe79186013980af0e2caa3fd13c0c5fa (diff) | |
Core/Social: Implemented account ignores
Diffstat (limited to 'src/server/game/Chat')
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.cpp | 25 | ||||
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.h | 4 |
2 files changed, 18 insertions, 11 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index f91b2aeca59..08994da8cbe 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -734,13 +734,15 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang) return; } + Player* player = ObjectAccessor::FindConnectedPlayer(guid); + auto builder = [&](LocaleConstant locale) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>(); packet->Data.ChannelGUID = _channelGuid; - if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) + if (player) packet->Data.Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, GetName(localeIdx)); else { @@ -754,7 +756,8 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang) return packet; }; - SendToAll(builder, !playerInfo.IsModerator() ? guid : ObjectGuid::Empty); + SendToAll(builder, !playerInfo.IsModerator() ? guid : ObjectGuid::Empty, + !playerInfo.IsModerator() && player ? player->GetSession()->GetAccountGUID() : ObjectGuid::Empty); } void Channel::AddonSay(ObjectGuid const& guid, std::string const& prefix, std::string const& what, bool isLogged) const @@ -779,13 +782,15 @@ void Channel::AddonSay(ObjectGuid const& guid, std::string const& prefix, std::s return; } + Player* player = ObjectAccessor::FindConnectedPlayer(guid); + auto builder = [&](LocaleConstant locale) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>(); packet->Data.ChannelGUID = _channelGuid; - if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) + if (player) packet->Data.Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, player, player, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix); else { @@ -799,7 +804,8 @@ void Channel::AddonSay(ObjectGuid const& guid, std::string const& prefix, std::s return packet; }; - SendToAllWithAddon(builder, prefix, !playerInfo.IsModerator() ? guid : ObjectGuid::Empty); + SendToAllWithAddon(builder, prefix, !playerInfo.IsModerator() ? guid : ObjectGuid::Empty, + !playerInfo.IsModerator() && player ? player->GetSession()->GetAccountGUID() : ObjectGuid::Empty); } void Channel::Invite(Player const* player, std::string const& newname) @@ -849,7 +855,7 @@ void Channel::Invite(Player const* player, std::string const& newname) return; } - if (!newp->GetSocial()->HasIgnore(guid)) + if (!newp->GetSocial()->HasIgnore(guid, player->GetSession()->GetAccountGUID())) { InviteAppend appender(guid); ChannelNameBuilder<InviteAppend> builder(this, appender); @@ -1009,13 +1015,13 @@ void Channel::SetMute(ObjectGuid const& guid, bool set) } template <class Builder> -void Channel::SendToAll(Builder& builder, ObjectGuid const& guid) const +void Channel::SendToAll(Builder& builder, ObjectGuid const& guid, ObjectGuid const& accountGuid) const { Trinity::LocalizedDo<Builder> localizer(builder); for (PlayerContainer::value_type const& i : _playersStore) if (Player* player = ObjectAccessor::FindConnectedPlayer(i.first)) - if (guid.IsEmpty() || !player->GetSocial()->HasIgnore(guid)) + if (guid.IsEmpty() || !player->GetSocial()->HasIgnore(guid, accountGuid)) localizer(player); } @@ -1040,12 +1046,13 @@ void Channel::SendToOne(Builder& builder, ObjectGuid const& who) const } template <class Builder> -void Channel::SendToAllWithAddon(Builder& builder, std::string const& addonPrefix, ObjectGuid const& guid /*= ObjectGuid::Empty*/) const +void Channel::SendToAllWithAddon(Builder& builder, std::string const& addonPrefix, ObjectGuid const& guid /*= ObjectGuid::Empty*/, + ObjectGuid const& accountGuid /*= ObjectGuid::Empty*/) const { Trinity::LocalizedDo<Builder> localizer(builder); for (PlayerContainer::value_type const& i : _playersStore) if (Player* player = ObjectAccessor::FindConnectedPlayer(i.first)) - if (player->GetSession()->IsAddonRegistered(addonPrefix) && (guid.IsEmpty() || !player->GetSocial()->HasIgnore(guid))) + if (player->GetSession()->IsAddonRegistered(addonPrefix) && (guid.IsEmpty() || !player->GetSocial()->HasIgnore(guid, accountGuid))) localizer(player); } diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 9d6eb906a50..9a8399054c2 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -233,7 +233,7 @@ class TC_GAME_API Channel private: template <class Builder> - void SendToAll(Builder& builder, ObjectGuid const& guid = ObjectGuid::Empty) const; + void SendToAll(Builder& builder, ObjectGuid const& guid = ObjectGuid::Empty, ObjectGuid const& accountGuid = ObjectGuid::Empty) const; template <class Builder> void SendToAllButOne(Builder& builder, ObjectGuid const& who) const; @@ -242,7 +242,7 @@ class TC_GAME_API Channel void SendToOne(Builder& builder, ObjectGuid const& who) const; template <class Builder> - void SendToAllWithAddon(Builder& builder, std::string const& addonPrefix, ObjectGuid const& guid = ObjectGuid::Empty) const; + void SendToAllWithAddon(Builder& builder, std::string const& addonPrefix, ObjectGuid const& guid = ObjectGuid::Empty, ObjectGuid const& accountGuid = ObjectGuid::Empty) const; bool IsOn(ObjectGuid const& who) const { return _playersStore.count(who) != 0; } bool IsBanned(ObjectGuid const& guid) const { return _bannedStore.count(guid) != 0; } |
