aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2015-02-08 02:51:49 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2015-02-08 02:51:49 +0100
commite01bb918875f88ede211fc13ff3908e30249de33 (patch)
treeb4f97cdae4b08103833b5cabd6f9773d2f452721 /src/server/game/Entities/Player
parent8fd7f80b6b20071227e849365709ab3f6403efb4 (diff)
Core/Packets: updated some contactlist packets
Diffstat (limited to 'src/server/game/Entities/Player')
-rw-r--r--src/server/game/Entities/Player/Player.cpp19
-rw-r--r--src/server/game/Entities/Player/Player.h7
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp228
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h76
4 files changed, 138 insertions, 192 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 84197b90626..a26a728de81 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4498,16 +4498,15 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
// Delete char from social list of online chars
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_SOCIAL);
stmt->setUInt64(0, guid);
- PreparedQueryResult resultFriends = CharacterDatabase.Query(stmt);
- if (resultFriends)
+ if (PreparedQueryResult resultFriends = CharacterDatabase.Query(stmt))
{
do
{
- if (Player* pFriend = ObjectAccessor::FindPlayer(ObjectGuid::Create<HighGuid::Player>((*resultFriends)[0].GetUInt64())))
+ if (Player* playerFriend = ObjectAccessor::FindPlayer(ObjectGuid::Create<HighGuid::Player>((*resultFriends)[0].GetUInt64())))
{
- pFriend->GetSocial()->RemoveFromSocialList(playerguid, false);
- sSocialMgr->SendFriendStatus(pFriend, FRIEND_REMOVED, playerguid, false);
+ playerFriend->GetSocial()->RemoveFromSocialList(playerguid, SOCIAL_FLAG_ALL);
+ sSocialMgr->SendFriendStatus(playerFriend, FRIEND_REMOVED, playerguid);
}
} while (resultFriends->NextRow());
}
@@ -17580,7 +17579,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields))
{
ObjectGuid bagGuid = fields[15].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[15].GetUInt64()) : ObjectGuid::Empty;
- uint8 slot = fields[16].GetUInt8();
+ uint8 slot = fields[16].GetUInt8();
uint8 err = EQUIP_ERR_OK;
// Item is not in bag
@@ -22811,7 +22810,7 @@ void Player::SetGroup(Group* group, int8 subgroup)
void Player::SendInitialPacketsBeforeAddToMap()
{
/// Pass 'this' as argument because we're not stored in ObjectAccessor yet
- GetSocial()->SendSocialList(this);
+ GetSocial()->SendSocialList(this, SOCIAL_FLAG_ALL);
/// SMSG_SPELL_CATEGORY_COOLDOWN
GetSession()->SendSpellCategoryCooldowns();
@@ -27233,3 +27232,9 @@ void Player::RemoveSpecializationSpells()
}
}
}
+
+void Player::RemoveSocial()
+{
+ sSocialMgr->RemovePlayerSocial(GetGUID());
+ m_social = nullptr;
+}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index ec8c5933e25..e3e927bee7b 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1384,7 +1384,8 @@ class Player : public Unit, public GridObject<Player>
uint32 GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 newfacialhair, BarberShopStyleEntry const* newSkin=NULL);
- PlayerSocial *GetSocial() { return m_social; }
+ PlayerSocial* GetSocial() { return m_social; }
+ void RemoveSocial();
PlayerTaxi m_taxi;
void InitTaxiNodesForLevel() { m_taxi.InitTaxiNodesForLevel(getRace(), getClass(), getLevel()); }
@@ -1835,7 +1836,7 @@ class Player : public Unit, public GridObject<Player>
uint32 GetMailSize() { return m_mail.size();}
Mail* GetMail(uint32 id);
- PlayerMails const& GetMails() const { return m_mail; }
+ PlayerMails const& GetMails() const { return m_mail; }
void SendItemRetrievalMail(uint32 itemEntry, uint32 count); // Item retrieval mails sent by The Postmaster (34337), used in multiple places.
@@ -2912,7 +2913,7 @@ class Player : public Unit, public GridObject<Player>
////////////////////Rest System/////////////////////
// Social
- PlayerSocial *m_social;
+ PlayerSocial* m_social;
// Groups
GroupReference m_group;
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 3b7eba89b58..9d91f8792a4 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -17,60 +17,45 @@
*/
#include "SocialMgr.h"
-
#include "DatabaseEnv.h"
-#include "WorldSession.h"
-#include "WorldPacket.h"
#include "Player.h"
-#include "ObjectMgr.h"
+#include "SocialPackets.h"
#include "World.h"
-#include "Util.h"
-#include "AccountMgr.h"
#include "WorldSession.h"
uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag)
{
uint32 counter = 0;
- for (PlayerSocialMap::const_iterator itr = m_playerSocialMap.begin(); itr != m_playerSocialMap.end(); ++itr)
- if (itr->second.Flags & flag)
+ for (PlayerSocialMap::const_iterator itr = _playerSocialMap.begin(); itr != _playerSocialMap.end(); ++itr)
+ if ((itr->second.Flags & flag) != 0)
++counter;
return counter;
}
-bool PlayerSocial::AddToSocialList(ObjectGuid const& friendGuid, bool ignore)
+bool PlayerSocial::AddToSocialList(ObjectGuid const& friendGuid, SocialFlag flag)
{
// check client limits
- if (ignore)
- {
- if (GetNumberOfSocialsWithFlag(SOCIAL_FLAG_IGNORED) >= SOCIALMGR_IGNORE_LIMIT)
- return false;
- }
- else
- {
- if (GetNumberOfSocialsWithFlag(SOCIAL_FLAG_FRIEND) >= SOCIALMGR_FRIEND_LIMIT)
- return false;
- }
+ if (GetNumberOfSocialsWithFlag(flag) >= (((flag & SOCIAL_FLAG_FRIEND) != 0) ? SOCIALMGR_FRIEND_LIMIT : SOCIALMGR_IGNORE_LIMIT))
+ return false;
- uint8 flag = SOCIAL_FLAG_FRIEND;
- if (ignore)
- flag = SOCIAL_FLAG_IGNORED;
-
- PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
- if (itr != m_playerSocialMap.end())
+ PlayerSocialMap::iterator itr = _playerSocialMap.find(friendGuid);
+ if (itr != _playerSocialMap.end())
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_CHARACTER_SOCIAL_FLAGS);
+ itr->second.Flags |= flag;
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_SOCIAL_FLAGS);
- stmt->setUInt8(0, flag);
+ stmt->setUInt8(0, itr->second.Flags);
stmt->setUInt64(1, GetPlayerGUID().GetCounter());
stmt->setUInt64(2, friendGuid.GetCounter());
CharacterDatabase.Execute(stmt);
-
- m_playerSocialMap[friendGuid].Flags |= flag;
}
else
{
+ _playerSocialMap[friendGuid].Flags |= flag;
+
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_SOCIAL);
stmt->setUInt64(0, GetPlayerGUID().GetCounter());
@@ -78,26 +63,20 @@ bool PlayerSocial::AddToSocialList(ObjectGuid const& friendGuid, bool ignore)
stmt->setUInt8(2, flag);
CharacterDatabase.Execute(stmt);
-
- FriendInfo fi;
- fi.Flags |= flag;
- m_playerSocialMap[friendGuid] = fi;
}
+
return true;
}
-void PlayerSocial::RemoveFromSocialList(ObjectGuid const& friendGuid, bool ignore)
+void PlayerSocial::RemoveFromSocialList(ObjectGuid const& friendGuid, SocialFlag flag)
{
- PlayerSocialMap::iterator itr = m_playerSocialMap.find(friendGuid);
- if (itr == m_playerSocialMap.end()) // not exist
+ PlayerSocialMap::iterator itr = _playerSocialMap.find(friendGuid);
+ if (itr == _playerSocialMap.end())
return;
- uint8 flag = SOCIAL_FLAG_FRIEND;
- if (ignore)
- flag = SOCIAL_FLAG_IGNORED;
-
itr->second.Flags &= ~flag;
- if (itr->second.Flags == 0)
+
+ if (!itr->second.Flags)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SOCIAL);
@@ -106,13 +85,13 @@ void PlayerSocial::RemoveFromSocialList(ObjectGuid const& friendGuid, bool ignor
CharacterDatabase.Execute(stmt);
- m_playerSocialMap.erase(itr);
+ _playerSocialMap.erase(itr);
}
else
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_REM_CHARACTER_SOCIAL_FLAGS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_SOCIAL_FLAGS);
- stmt->setUInt8(0, flag);
+ stmt->setUInt8(0, itr->second.Flags);
stmt->setUInt64(1, GetPlayerGUID().GetCounter());
stmt->setUInt64(2, friendGuid.GetCounter());
@@ -120,80 +99,68 @@ void PlayerSocial::RemoveFromSocialList(ObjectGuid const& friendGuid, bool ignor
}
}
-void PlayerSocial::SetFriendNote(ObjectGuid const& friendGuid, std::string note)
+void PlayerSocial::SetFriendNote(ObjectGuid const& friendGuid, std::string const& note)
{
- PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
- if (itr == m_playerSocialMap.end()) // not exist
+ PlayerSocialMap::iterator itr = _playerSocialMap.find(friendGuid);
+ if (itr == _playerSocialMap.end()) // not exist
return;
- utf8truncate(note, 48); // DB and client size limitation
+ itr->second.Note = note;
+ utf8truncate(itr->second.Note, 48); // DB and client size limitation
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_SOCIAL_NOTE);
- stmt->setString(0, note);
+ stmt->setString(0, itr->second.Note);
stmt->setUInt64(1, GetPlayerGUID().GetCounter());
stmt->setUInt64(2, friendGuid.GetCounter());
CharacterDatabase.Execute(stmt);
-
- m_playerSocialMap[friendGuid].Note = note;
}
-void PlayerSocial::SendSocialList(Player* player)
+void PlayerSocial::SendSocialList(Player* player, uint32 flags)
{
- if (!player)
- return;
+ ASSERT(player);
- uint32 size = m_playerSocialMap.size();
+ WorldPackets::Social::ContactList contactList;
+ contactList.Flags = flags;
- WorldPacket data(SMSG_CONTACT_LIST, (4+4+size*25)); // just can guess size
- data << uint32(7); // 0x1 = Friendlist update. 0x2 = Ignorelist update. 0x4 = Mutelist update.
- data << uint32(size); // friends count
-
- for (PlayerSocialMap::iterator itr = m_playerSocialMap.begin(); itr != m_playerSocialMap.end(); ++itr)
+ for (PlayerSocialMap::value_type& v : _playerSocialMap)
{
- sSocialMgr->GetFriendInfo(player, itr->first, itr->second);
+ if (!(v.second.Flags & flags))
+ continue;
- data << itr->first; // player guid
- data << uint32(itr->second.Flags); // player flag (0x1 = Friend, 0x2 = Ignored, 0x4 = Muted)
- data << itr->second.Note; // string note
- if (itr->second.Flags & SOCIAL_FLAG_FRIEND) // if IsFriend()
- {
- data << uint8(itr->second.Status); // online/offline/etc?
- if (itr->second.Status) // if online
- {
- data << uint32(itr->second.Area); // player area
- data << uint32(itr->second.Level); // player level
- data << uint32(itr->second.Class); // player class
- }
- }
+ sSocialMgr->GetFriendInfo(player, v.first, v.second);
+
+ contactList.Contacts.emplace_back(v.first, v.second);
+
+ // client's friends list and ignore list limit
+ if (contactList.Contacts.size() >= (((flags & SOCIAL_FLAG_FRIEND) != 0) ? SOCIALMGR_FRIEND_LIMIT : SOCIALMGR_IGNORE_LIMIT))
+ break;
}
- player->GetSession()->SendPacket(&data);
- TC_LOG_DEBUG("network", "WORLD: Sent SMSG_CONTACT_LIST");
+ player->SendDirectMessage(contactList.Write());
}
-bool PlayerSocial::HasFriend(ObjectGuid const& friendGuid)
+bool PlayerSocial::_HasContact(ObjectGuid const& guid, SocialFlag flags)
{
- PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
- if (itr != m_playerSocialMap.end())
- return itr->second.Flags & SOCIAL_FLAG_FRIEND;
+ PlayerSocialMap::const_iterator itr = _playerSocialMap.find(guid);
+ if (itr != _playerSocialMap.end())
+ return (itr->second.Flags & flags) != 0;
+
return false;
}
-bool PlayerSocial::HasIgnore(ObjectGuid const& ignore_guid)
+bool PlayerSocial::HasFriend(ObjectGuid const& friendGuid)
{
- PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(ignore_guid);
- if (itr != m_playerSocialMap.end())
- return (itr->second.Flags & SOCIAL_FLAG_IGNORED) != 0;
- return false;
+ return _HasContact(friendGuid, SOCIAL_FLAG_FRIEND);
}
-SocialMgr::SocialMgr() { }
-
-SocialMgr::~SocialMgr() { }
+bool PlayerSocial::HasIgnore(ObjectGuid const& ignoreGuid)
+{
+ return _HasContact(ignoreGuid, SOCIAL_FLAG_IGNORED);
+}
-void SocialMgr::GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo &friendInfo)
+void SocialMgr::GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo& friendInfo)
{
if (!player)
return;
@@ -207,8 +174,8 @@ void SocialMgr::GetFriendInfo(Player* player, ObjectGuid const& friendGUID, Frie
if (!target)
return;
- PlayerSocialMap::iterator itr = player->GetSocial()->m_playerSocialMap.find(friendGUID);
- if (itr != player->GetSocial()->m_playerSocialMap.end())
+ PlayerSocial::PlayerSocialMap::iterator itr = player->GetSocial()->_playerSocialMap.find(friendGUID);
+ if (itr != player->GetSocial()->_playerSocialMap.end())
friendInfo.Note = itr->second.Note;
// PLAYER see his team only and PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
@@ -237,59 +204,29 @@ void SocialMgr::GetFriendInfo(Player* player, ObjectGuid const& friendGUID, Frie
}
}
-void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid const& guid, WorldPacket* data)
-{
- data->Initialize(SMSG_FRIEND_STATUS, 9);
- *data << uint8(result);
- *data << guid;
-}
-
-void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friendGuid, bool broadcast)
+void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friendGuid, bool broadcast /*= false*/)
{
FriendInfo fi;
-
- WorldPacket data;
- MakeFriendStatusPacket(result, friendGuid, &data);
GetFriendInfo(player, friendGuid, fi);
- switch (result)
- {
- case FRIEND_ADDED_OFFLINE:
- case FRIEND_ADDED_ONLINE:
- data << fi.Note;
- break;
- default:
- break;
- }
- switch (result)
- {
- case FRIEND_ADDED_ONLINE:
- case FRIEND_ONLINE:
- data << uint8(fi.Status);
- data << uint32(fi.Area);
- data << uint32(fi.Level);
- data << uint32(fi.Class);
- break;
- default:
- break;
- }
+ WorldPackets::Social::FriendStatus friendStatus;
+ friendStatus.Initialize(friendGuid, result, fi);
if (broadcast)
- BroadcastToFriendListers(player, &data);
+ BroadcastToFriendListers(player, friendStatus.Write());
else
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(friendStatus.Write());
}
-void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet)
+void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket const* packet)
{
- if (!player)
- return;
+ ASSERT(player);
AccountTypes gmSecLevel = AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_IN_WHO_LIST));
- for (SocialMap::const_iterator itr = m_socialMap.begin(); itr != m_socialMap.end(); ++itr)
+ for (SocialMap::const_iterator itr = _socialMap.begin(); itr != _socialMap.end(); ++itr)
{
- PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(player->GetGUID());
- if (itr2 != itr->second.m_playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND))
+ PlayerSocial::PlayerSocialMap::const_iterator itr2 = itr->second._playerSocialMap.find(player->GetGUID());
+ if (itr2 != itr->second._playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND) != 0)
{
Player* target = ObjectAccessor::FindPlayer(itr->first);
if (!target)
@@ -310,31 +247,22 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet)
PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid)
{
- PlayerSocial *social = &m_socialMap[guid];
+ PlayerSocial* social = &_socialMap[guid];
social->SetPlayerGUID(guid);
- if (!result)
- return social;
-
- ObjectGuid friendGuid;
- uint8 flags = 0;
- std::string note = "";
-
- do
+ if (result)
{
- Field* fields = result->Fetch();
-
- friendGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
- flags = fields[1].GetUInt8();
- note = fields[2].GetString();
+ do
+ {
+ Field* fields = result->Fetch();
- social->m_playerSocialMap[friendGuid] = FriendInfo(flags, note);
+ ObjectGuid friendGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
- // client's friends list and ignore list limit
- if (social->m_playerSocialMap.size() >= (SOCIALMGR_FRIEND_LIMIT + SOCIALMGR_IGNORE_LIMIT))
- break;
+ uint8 flag = fields[1].GetUInt8();
+ social->_playerSocialMap[friendGuid] = FriendInfo(flag, fields[2].GetString());
+ }
+ while (result->NextRow());
}
- while (result->NextRow());
return social;
}
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index 8f389d4afdf..d4ac04b08ed 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -23,10 +23,7 @@
#include "Common.h"
#include "ObjectGuid.h"
-class SocialMgr;
-class PlayerSocial;
class Player;
-class WorldPacket;
enum FriendStatus
{
@@ -42,7 +39,9 @@ enum SocialFlag
SOCIAL_FLAG_FRIEND = 0x01,
SOCIAL_FLAG_IGNORED = 0x02,
SOCIAL_FLAG_MUTED = 0x04, // guessed
- SOCIAL_FLAG_UNK = 0x08 // Unknown - does not appear to be RaF
+ SOCIAL_FLAG_UNK = 0x08, // Unknown - does not appear to be RaF
+
+ SOCIAL_FLAG_ALL = SOCIAL_FLAG_FRIEND | SOCIAL_FLAG_IGNORED | SOCIAL_FLAG_MUTED
};
struct FriendInfo
@@ -61,11 +60,8 @@ struct FriendInfo
{ }
};
-typedef std::map<ObjectGuid, FriendInfo> PlayerSocialMap;
-typedef std::map<ObjectGuid, PlayerSocial> SocialMap;
-
/// Results of friend related commands
-enum FriendsResult
+enum FriendsResult : uint8
{
FRIEND_DB_ERROR = 0x00,
FRIEND_LIST_FULL = 0x01,
@@ -92,39 +88,51 @@ enum FriendsResult
FRIEND_MUTE_ADDED = 0x16,
FRIEND_MUTE_REMOVED = 0x17,
FRIEND_MUTE_AMBIGUOUS = 0x18, // That name is ambiguous, type more of the player's server name
- FRIEND_UNK7 = 0x19, // no message at client
- FRIEND_UNKNOWN = 0x1A // Unknown friend response from server
+ FRIEND_UNK1 = 0x19, // no message at client
+ FRIEND_UNK2 = 0x1A,
+ FRIEND_UNK3 = 0x1B,
+ FRIEND_UNKNOWN = 0x1C // Unknown friend response from server
};
-#define SOCIALMGR_FRIEND_LIMIT 50
-#define SOCIALMGR_IGNORE_LIMIT 50
+#define SOCIALMGR_FRIEND_LIMIT 50u
+#define SOCIALMGR_IGNORE_LIMIT 50u
class PlayerSocial
{
friend class SocialMgr;
+
public:
// adding/removing
- bool AddToSocialList(ObjectGuid const& friend_guid, bool ignore);
- void RemoveFromSocialList(ObjectGuid const& friend_guid, bool ignore);
- void SetFriendNote(ObjectGuid const& friendGuid, std::string note);
+ bool AddToSocialList(ObjectGuid const& guid, SocialFlag flag);
+ void RemoveFromSocialList(ObjectGuid const& guid, SocialFlag flag);
+ void SetFriendNote(ObjectGuid const& guid, std::string const& note);
+
// Packet send's
- void SendSocialList(Player* player);
+ void SendSocialList(Player* player, uint32 flags);
+
// Misc
- bool HasFriend(ObjectGuid const& friend_guid);
- bool HasIgnore(ObjectGuid const& ignore_guid);
- ObjectGuid const& GetPlayerGUID() const { return m_playerGUID; }
- void SetPlayerGUID(ObjectGuid const& guid) { m_playerGUID = guid; }
+ bool HasFriend(ObjectGuid const& friendGuid);
+ bool HasIgnore(ObjectGuid const& ignoreGuid);
+
+ ObjectGuid const& GetPlayerGUID() const { return _playerGUID; }
+ void SetPlayerGUID(ObjectGuid const& guid) { _playerGUID = guid; }
+
uint32 GetNumberOfSocialsWithFlag(SocialFlag flag);
+
private:
- PlayerSocialMap m_playerSocialMap;
- ObjectGuid m_playerGUID;
+ bool _HasContact(ObjectGuid const& guid, SocialFlag flags);
+
+ typedef std::map<ObjectGuid, FriendInfo> PlayerSocialMap;
+ PlayerSocialMap _playerSocialMap;
+
+ ObjectGuid _playerGUID;
};
class SocialMgr
{
private:
- SocialMgr();
- ~SocialMgr();
+ SocialMgr() { }
+ ~SocialMgr() { }
public:
static SocialMgr* instance()
@@ -134,18 +142,22 @@ class SocialMgr
}
// Misc
- void RemovePlayerSocial(ObjectGuid const& guid) { m_socialMap.erase(guid); }
+ void RemovePlayerSocial(ObjectGuid const& guid) { _socialMap.erase(guid); }
+
+ void GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo& friendInfo);
+
+ // Packet send's
+ void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friendGuid, bool broadcast = false);
+ void BroadcastToFriendListers(Player* player, WorldPacket const* packet);
- void GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo &friendInfo);
- // Packet management
- void MakeFriendStatusPacket(FriendsResult result, ObjectGuid const& friend_guid, WorldPacket* data);
- void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friend_guid, bool broadcast);
- void BroadcastToFriendListers(Player* player, WorldPacket* packet);
// Loading
- PlayerSocial *LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid);
+ PlayerSocial* LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid);
+
private:
- SocialMap m_socialMap;
+ typedef std::map<ObjectGuid, PlayerSocial> SocialMap;
+ SocialMap _socialMap;
};
#define sSocialMgr SocialMgr::instance()
+
#endif