diff options
author | azazel <none@none> | 2010-12-15 14:44:41 +0600 |
---|---|---|
committer | azazel <none@none> | 2010-12-15 14:44:41 +0600 |
commit | ddf06c086ecd3e9446a8358988f9c0f23a2722be (patch) | |
tree | 2b81d05ee19701b59c0b0190dbe3363935e92cf5 | |
parent | 0fdea34a8abf3d04aabde6d4c8a7fdcdbde30464 (diff) |
Core/Social: properly remove deleted character from social list of online players (by Emtec)
--HG--
branch : trunk
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 24 |
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); |