PlayerSocial* SocialMgr::LoadFromDB(QueryResult* result, ObjectGuid guid) { PlayerSocial* social = &m_socialMap[guid.GetCounter()]; social->SetPlayerGuid(guid); if (!result) return social; // used to speed up check below. Using GetNumberOfSocialsWithFlag will cause unneeded iteration uint32 friendCounter = 0, ignoreCounter = 0; do { Field* fields = result->Fetch(); uint32 friend_guid = fields[0].GetUInt32(); uint32 flags = fields[1].GetUInt32(); if ((flags & SOCIAL_FLAG_IGNORED) && ignoreCounter >= SOCIALMGR_IGNORE_LIMIT) continue; if ((flags & SOCIAL_FLAG_FRIEND) && friendCounter >= SOCIALMGR_FRIEND_LIMIT) continue; social->m_playerSocialMap[friend_guid] = FriendInfo(flags); if (flags & SOCIAL_FLAG_IGNORED) ++ignoreCounter; else ++friendCounter; } while (result->NextRow()); delete result; return social; }
PlayerSocial* SocialMgr::LoadFromDB(QueryResult* result, ObjectGuid const& guid) { PlayerSocial* social = &m_socialMap[guid]; social->SetPlayerGuid(guid); if(!result) return social; ObjectGuid friend_guid; uint32 flags = 0; std::string note = ""; // used to speed up check below. Using GetNumberOfSocialsWithFlag will cause unneeded iteration uint32 friendCounter=0, ignoreCounter=0; do { Field* fields = result->Fetch(); friend_guid = ObjectGuid(HIGHGUID_PLAYER,fields[0].GetUInt32()); flags = fields[1].GetUInt32(); note = fields[2].GetCppString(); if((flags & SOCIAL_FLAG_IGNORED) && ignoreCounter >= SOCIALMGR_IGNORE_LIMIT) continue; if((flags & SOCIAL_FLAG_FRIEND) && friendCounter >= SOCIALMGR_FRIEND_LIMIT) continue; social->m_playerSocialMap[friend_guid] = FriendInfo(flags, note); if(flags & SOCIAL_FLAG_IGNORED) ignoreCounter++; else friendCounter++; } while( result->NextRow() ); delete result; return social; }