aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 293c170cec7..3275ef26d05 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4570,20 +4570,32 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
}
// Unsummon and delete for pets in world is not required: player deleted from CLI or character list with not loaded pet.
- // Get guids of character's pets, will deleted in transaction
- QueryResult resultPets = CharacterDatabase.PQuery("SELECT id FROM character_pet WHERE owner = '%u'",guid);
-
// NOW we can finally clear other DB data related to character
- if (resultPets)
+ if (QueryResult resultPets = CharacterDatabase.PQuery("SELECT id FROM character_pet WHERE owner = '%u'", guid))
{
do
{
- Field *fields3 = resultPets->Fetch();
- uint32 petguidlow = fields3[0].GetUInt32();
+ uint32 petguidlow = (*resultPets)[0].GetUInt32();
Pet::DeleteFromDB(petguidlow);
} while (resultPets->NextRow());
}
+ // Delete char from social list of online chars
+ if (QueryResult resultFriends = CharacterDatabase.PQuery("SELECT DISTINCT guid FROM character_social WHERE friend = '%u'", guid))
+ {
+ do
+ {
+ if (Player* pFriend = sObjectAccessor.FindPlayer(MAKE_NEW_GUID((*resultFriends)[0].GetUInt32(), 0, HIGHGUID_PLAYER)))
+ {
+ if (pFriend->IsInWorld())
+ {
+ pFriend->GetSocial()->RemoveFromSocialList(guid, false);
+ sSocialMgr.SendFriendStatus(pFriend, FRIEND_REMOVED, guid, false);
+ }
+ }
+ } while (resultFriends->NextRow());
+ }
+
trans->PAppend("DELETE FROM characters WHERE guid = '%u'",guid);
trans->PAppend("DELETE FROM character_account_data WHERE guid = '%u'",guid);
trans->PAppend("DELETE FROM character_declinedname WHERE guid = '%u'",guid);