aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index fee87cd6898..dbdefe080a7 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -142,21 +142,31 @@ void PlayerSocial::SendSocialList(Player* player, uint32 flags)
{
ASSERT(player);
+ uint32 friendsCount = 0;
+ uint32 ignoredCount = 0;
+
WorldPackets::Social::ContactList contactList;
- contactList.Flags = flags;
+ contactList.Flags = flags; // 0x1 = Friendlist update. 0x2 = Ignorelist update. 0x4 = Mutelist update.
for (PlayerSocialMap::value_type& v : _playerSocialMap)
{
- if (!(v.second.Flags & flags))
+ uint8 contactFlags = v.second.Flags;
+ if (!(contactFlags & flags))
continue;
+ // Check client limit for friends list
+ if (contactFlags & SOCIAL_FLAG_FRIEND)
+ if (++friendsCount > SOCIALMGR_FRIEND_LIMIT)
+ continue;
+
+ // Check client limit for ignore list
+ if (contactFlags & SOCIAL_FLAG_IGNORED)
+ if (++ignoredCount > SOCIALMGR_IGNORE_LIMIT)
+ continue;
+
sSocialMgr->GetFriendInfo(player, v.first, v.second);
contactList.Contacts.emplace_back(v.first, v.second);
-
- // client's friends list and ignore list limit
- if (contactList.Contacts.size() >= (((flags & SOCIAL_FLAG_FRIEND) != 0) ? SOCIALMGR_FRIEND_LIMIT : SOCIALMGR_IGNORE_LIMIT))
- break;
}
player->SendDirectMessage(contactList.Write());