PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, uint32 guid) { PlayerSocial *social = &m_socialMap[guid]; social->SetPlayerGUID(guid); if (!result) return social; uint32 friendGuid = 0; uint8 flags = 0; std::string note = ""; do { Field* fields = result->Fetch(); friendGuid = fields[0].GetUInt32(); flags = fields[1].GetUInt8(); note = fields[2].GetString(); social->m_playerSocialMap[friendGuid] = FriendInfo(flags, note); // client's friends list and ignore list limit if (social->m_playerSocialMap.size() >= (SOCIALMGR_FRIEND_LIMIT + SOCIALMGR_IGNORE_LIMIT)) break; } while (result->NextRow()); return social; }
PlayerSocial *SocialMgr::LoadFromDB(QueryResult *result, uint32 guid) { PlayerSocial *social = &m_socialMap[guid]; social->SetPlayerGUID(guid); if(!result) return social; uint32 friend_guid = 0; uint32 flags = 0; std::string note = ""; do { Field *fields = result->Fetch(); friend_guid = fields[0].GetUInt32(); flags = fields[1].GetUInt32(); note = fields[2].GetCppString(); social->m_playerSocialMap[friend_guid] = FriendInfo(flags, note); // client limit if(social->m_playerSocialMap.size() >= 50) break; } while( result->NextRow() ); delete result; return social; }
PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid) { PlayerSocial* social = &_socialMap[guid]; social->SetPlayerGUID(guid); if (result) { do { Field* fields = result->Fetch(); ObjectGuid friendGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); uint8 flag = fields[1].GetUInt8(); social->_playerSocialMap[friendGuid] = FriendInfo(flag, fields[2].GetString()); } while (result->NextRow()); } return social; }
PlayerSocial *SocialMgr::LoadFromDB(QueryResult *result, uint32 guid) { PlayerSocial *social = &m_socialMap[guid]; social->SetPlayerGUID(guid); if(!result) return social; uint32 friend_guid = 0; 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 = 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; }