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/Handlers/SocialHandler.cpp | |
parent | d52c00a8fe79186013980af0e2caa3fd13c0c5fa (diff) |
Core/Social: Implemented account ignores
Diffstat (limited to 'src/server/game/Handlers/SocialHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/SocialHandler.cpp | 63 |
1 files changed, 33 insertions, 30 deletions
diff --git a/src/server/game/Handlers/SocialHandler.cpp b/src/server/game/Handlers/SocialHandler.cpp index 115ee6bf84f..98fddfb491f 100644 --- a/src/server/game/Handlers/SocialHandler.cpp +++ b/src/server/game/Handlers/SocialHandler.cpp @@ -44,35 +44,35 @@ void WorldSession::HandleAddFriendOpcode(WorldPackets::Social::AddFriend& packet GetPlayerInfo().c_str(), packet.Name.c_str()); FriendsResult friendResult = FRIEND_NOT_FOUND; - ObjectGuid friendGuid = sCharacterCache->GetCharacterGuidByName(packet.Name); - if (!friendGuid.IsEmpty()) + ObjectGuid friendGuid; + + if (CharacterCacheEntry const* characterInfo = sCharacterCache->GetCharacterCacheByName(packet.Name)) { - if (CharacterCacheEntry const* characterInfo = sCharacterCache->GetCharacterCacheByGuid(friendGuid)) - { - uint32 team = Player::TeamForRace(characterInfo->Race); - uint32 friendAccountId = characterInfo->AccountId; + friendGuid = characterInfo->Guid; + ObjectGuid friendAccountGuid = ObjectGuid::Create<HighGuid::WowAccount>(characterInfo->AccountId); + uint32 team = Player::TeamForRace(characterInfo->Race); + uint32 friendAccountId = characterInfo->AccountId; - if (HasPermission(rbac::RBAC_PERM_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAccountId, realm.Id.Realm))) + if (HasPermission(rbac::RBAC_PERM_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAccountId, realm.Id.Realm))) + { + if (friendGuid == GetPlayer()->GetGUID()) + friendResult = FRIEND_SELF; + else if (GetPlayer()->GetTeam() != team && !HasPermission(rbac::RBAC_PERM_TWO_SIDE_ADD_FRIEND)) + friendResult = FRIEND_ENEMY; + else if (GetPlayer()->GetSocial()->HasFriend(friendGuid)) + friendResult = FRIEND_ALREADY; + else { - if (friendGuid == GetPlayer()->GetGUID()) - friendResult = FRIEND_SELF; - else if (GetPlayer()->GetTeam() != team && !HasPermission(rbac::RBAC_PERM_TWO_SIDE_ADD_FRIEND)) - friendResult = FRIEND_ENEMY; - else if (GetPlayer()->GetSocial()->HasFriend(friendGuid)) - friendResult = FRIEND_ALREADY; + Player* playerFriend = ObjectAccessor::FindPlayer(friendGuid); + if (playerFriend && playerFriend->IsVisibleGloballyFor(GetPlayer())) + friendResult = FRIEND_ADDED_ONLINE; else - { - Player* playerFriend = ObjectAccessor::FindPlayer(friendGuid); - if (playerFriend && playerFriend->IsVisibleGloballyFor(GetPlayer())) - friendResult = FRIEND_ADDED_ONLINE; - else - friendResult = FRIEND_ADDED_OFFLINE; - - if (GetPlayer()->GetSocial()->AddToSocialList(friendGuid, SOCIAL_FLAG_FRIEND)) - GetPlayer()->GetSocial()->SetFriendNote(friendGuid, packet.Notes); - else - friendResult = FRIEND_LIST_FULL; - } + friendResult = FRIEND_ADDED_OFFLINE; + + if (GetPlayer()->GetSocial()->AddToSocialList(friendGuid, friendAccountGuid, SOCIAL_FLAG_FRIEND)) + GetPlayer()->GetSocial()->SetFriendNote(friendGuid, packet.Notes); + else + friendResult = FRIEND_LIST_FULL; } } } @@ -98,25 +98,28 @@ void WorldSession::HandleAddIgnoreOpcode(WorldPackets::Social::AddIgnore& packet TC_LOG_DEBUG("network", "WorldSession::HandleAddIgnoreOpcode: %s asked to Ignore: %s", GetPlayer()->GetName().c_str(), packet.Name.c_str()); - ObjectGuid ignoreGuid = sCharacterCache->GetCharacterGuidByName(packet.Name); + ObjectGuid ignoreGuid; FriendsResult ignoreResult = FRIEND_IGNORE_NOT_FOUND; - if (!ignoreGuid.IsEmpty()) + + if (CharacterCacheEntry const* characterInfo = sCharacterCache->GetCharacterCacheByName(packet.Name)) { + ignoreGuid = characterInfo->Guid; + ObjectGuid ignoreAccountGuid = ObjectGuid::Create<HighGuid::WowAccount>(characterInfo->AccountId); if (ignoreGuid == GetPlayer()->GetGUID()) //not add yourself ignoreResult = FRIEND_IGNORE_SELF; - else if (GetPlayer()->GetSocial()->HasIgnore(ignoreGuid)) + else if (GetPlayer()->GetSocial()->HasIgnore(ignoreGuid, ignoreAccountGuid)) ignoreResult = FRIEND_IGNORE_ALREADY; else { ignoreResult = FRIEND_IGNORE_ADDED; // ignore list full - if (!GetPlayer()->GetSocial()->AddToSocialList(ignoreGuid, SOCIAL_FLAG_IGNORED)) + if (!GetPlayer()->GetSocial()->AddToSocialList(ignoreGuid, ignoreAccountGuid, SOCIAL_FLAG_IGNORED)) ignoreResult = FRIEND_IGNORE_FULL; } } - sSocialMgr->SendFriendStatus(GetPlayer(), ignoreResult, ignoreGuid); + sSocialMgr->SendFriendStatus(GetPlayer(), ignoreResult, ObjectGuid::Empty); } void WorldSession::HandleDelIgnoreOpcode(WorldPackets::Social::DelIgnore& packet) |