TrinityCore
Loading...
Searching...
No Matches
Group.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_GROUP_H
19#define TRINITYCORE_GROUP_H
20
21#include "DBCEnums.h"
22#include "DatabaseEnvFwd.h"
23#include "GroupRefManager.h"
24#include "Loot.h"
25#include "SharedDefines.h"
26#include "Timer.h"
27#include "UniqueTrackablePtr.h"
28#include <map>
29
30class Battlefield;
31class Battleground;
32class Creature;
33class InstanceSave;
34class Map;
35class Player;
36class Unit;
37class WorldObject;
38class WorldPacket;
39class WorldSession;
40
41struct MapEntry;
42
43#define MAX_GROUP_SIZE 5
44#define MAX_RAID_SIZE 40
45#define MAX_RAID_SUBGROUPS MAX_RAID_SIZE / MAX_GROUP_SIZE
46
47#define TARGET_ICONS_COUNT 8
48
50{
51 PASS = 0,
52 NEED = 1,
53 GREED = 2,
56 NOT_VALID = 5
57};
58
60{
62 MEMBER_STATUS_ONLINE = 0x0001, // Lua_UnitIsConnected
63 MEMBER_STATUS_PVP = 0x0002, // Lua_UnitIsPVP
64 MEMBER_STATUS_DEAD = 0x0004, // Lua_UnitIsDead
65 MEMBER_STATUS_GHOST = 0x0008, // Lua_UnitIsGhost
66 MEMBER_STATUS_PVP_FFA = 0x0010, // Lua_UnitIsPVPFreeForAll
67 MEMBER_STATUS_UNK3 = 0x0020, // used in calls from Lua_GetPlayerMapPosition/Lua_GetBattlefieldFlagPosition
68 MEMBER_STATUS_AFK = 0x0040, // Lua_UnitIsAFK
69 MEMBER_STATUS_DND = 0x0080 // Lua_UnitIsDND
70};
71
78
84
86{
91 GROUPTYPE_LFG_RESTRICTED = 0x04, // Script_HasLFGRestrictions()
93 // 0x10, leave/change group?, I saw this flag when leaving group and after leaving BG while in group
94 // GROUPTYPE_ONE_PERSON_PARTY = 0x20, 4.x Script_IsOnePersonParty()
95 // GROUPTYPE_EVERYONE_ASSISTANT = 0x40 4.x Script_IsEveryoneAssistant()
96};
97
99{
100 GROUP_UPDATE_FLAG_NONE = 0x00000000, // nothing
101 GROUP_UPDATE_FLAG_STATUS = 0x00000001, // uint16, flags
102 GROUP_UPDATE_FLAG_CUR_HP = 0x00000002, // uint32
103 GROUP_UPDATE_FLAG_MAX_HP = 0x00000004, // uint32
104 GROUP_UPDATE_FLAG_POWER_TYPE = 0x00000008, // uint8
105 GROUP_UPDATE_FLAG_CUR_POWER = 0x00000010, // uint16
106 GROUP_UPDATE_FLAG_MAX_POWER = 0x00000020, // uint16
107 GROUP_UPDATE_FLAG_LEVEL = 0x00000040, // uint16
108 GROUP_UPDATE_FLAG_ZONE = 0x00000080, // uint16
109 GROUP_UPDATE_FLAG_POSITION = 0x00000100, // uint16, uint16
110 GROUP_UPDATE_FLAG_AURAS = 0x00000200, // uint64 mask, for each bit set uint32 spellid + uint8 unk
111 GROUP_UPDATE_FLAG_PET_GUID = 0x00000400, // uint64 pet guid
112 GROUP_UPDATE_FLAG_PET_NAME = 0x00000800, // pet name, NULL terminated string
113 GROUP_UPDATE_FLAG_PET_MODEL_ID = 0x00001000, // uint16, model id
114 GROUP_UPDATE_FLAG_PET_CUR_HP = 0x00002000, // uint32 pet cur health
115 GROUP_UPDATE_FLAG_PET_MAX_HP = 0x00004000, // uint32 pet max health
116 GROUP_UPDATE_FLAG_PET_POWER_TYPE = 0x00008000, // uint8 pet power type
117 GROUP_UPDATE_FLAG_PET_CUR_POWER = 0x00010000, // uint16 pet cur power
118 GROUP_UPDATE_FLAG_PET_MAX_POWER = 0x00020000, // uint16 pet max power
119 GROUP_UPDATE_FLAG_PET_AURAS = 0x00040000, // uint64 mask, for each bit set uint32 spellid + uint8 unk, pet auras...
120 GROUP_UPDATE_FLAG_VEHICLE_SEAT = 0x00080000, // uint32 vehicle_seat_id (index from VehicleSeat.dbc)
121 GROUP_UPDATE_PET = 0x0007FC00, // all pet flags
122 GROUP_UPDATE_FULL = 0x0007FFFF // all known flags
124
125#define GROUP_UPDATE_FLAGS_COUNT 20
126 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
127static const uint8 GroupUpdateLength[GROUP_UPDATE_FLAGS_COUNT] = { 0, 2, 2, 2, 1, 2, 2, 2, 2, 4, 8, 8, 1, 2, 2, 2, 1, 2, 2, 8};
128
129class Roll : public LootValidatorRef
130{
131 public:
132 Roll(ObjectGuid _guid, LootItem const& li);
133 ~Roll();
134 void setLoot(Loot* pLoot);
135 Loot* getLoot();
136 void targetObjectBuildLink() override;
137
143 typedef std::map<ObjectGuid, RollVote> PlayerVote;
144 PlayerVote playerVote; //vote position correspond with player position (in group)
151};
152
154{
156 bool perm;
157 /* permanent InstanceGroupBinds exist if the leader has a permanent
158 PlayerInstanceBind for the same instance. */
159 InstanceGroupBind() : save(nullptr), perm(false) { }
160};
161
165{
166 public:
175 typedef std::list<MemberSlot> MemberSlotList;
176 typedef MemberSlotList::const_iterator member_citerator;
177
178 typedef std::unordered_map< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap;
179 protected:
180 typedef MemberSlotList::iterator member_witerator;
181 typedef std::set<Player*> InvitesList;
182
183 typedef std::vector<Roll*> Rolls;
184
185 public:
186 Group();
187 ~Group();
188
189 void Update(uint32 diff);
190
191 // group manipulation methods
192 bool Create(Player* leader);
193 void LoadGroupFromDB(Field* field);
194 void LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles);
195 bool AddInvite(Player* player);
196 void RemoveInvite(Player* player);
197 void RemoveAllInvites();
198 bool AddLeaderInvite(Player* player);
199 bool AddMember(Player* player);
200 bool RemoveMember(ObjectGuid guid, RemoveMethod const& method = GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker = ObjectGuid::Empty, char const* reason = nullptr);
201 void ChangeLeader(ObjectGuid guid);
202 static void ConvertLeaderInstancesToGroup(Player* player, Group* group, bool switchLeader);
203 void SetLootMethod(LootMethod method);
204 void SetLooterGuid(ObjectGuid guid);
205 void SetMasterLooterGuid(ObjectGuid guid);
206 void UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed = false);
207 void SetLootThreshold(ItemQualities threshold);
208 void Disband(bool hideDestroy = false);
209 void SetLfgRoles(ObjectGuid guid, uint8 roles);
210
211 // properties accessories
212 bool IsFull() const;
213 bool isLFGGroup() const;
214 bool isRaidGroup() const;
215 bool isBGGroup() const;
216 bool isBFGroup() const;
217 bool IsCreated() const;
218 ObjectGuid GetLeaderGUID() const;
219 ObjectGuid GetGUID() const;
220 const char * GetLeaderName() const;
221 LootMethod GetLootMethod() const;
222 ObjectGuid GetLooterGuid() const;
223 ObjectGuid GetMasterLooterGuid() const;
224 ItemQualities GetLootThreshold() const;
225
226 uint32 GetDbStoreId() const { return m_dbStoreId; }
227
228 // member manipulation methods
229 bool IsMember(ObjectGuid guid) const;
230 bool IsLeader(ObjectGuid guid) const;
231 ObjectGuid GetMemberGUID(const std::string& name);
232 uint8 GetMemberFlags(ObjectGuid guid) const;
233 bool IsAssistant(ObjectGuid guid) const
234 {
235 return (GetMemberFlags(guid) & MEMBER_FLAG_ASSISTANT) == MEMBER_FLAG_ASSISTANT;
236 }
237
238 Player* GetInvited(ObjectGuid guid) const;
239 Player* GetInvited(const std::string& name) const;
240
241 bool SameSubGroup(ObjectGuid guid1, ObjectGuid guid2) const;
242 bool SameSubGroup(ObjectGuid guid1, MemberSlot const* slot2) const;
243 bool SameSubGroup(Player const* member1, Player const* member2) const;
244 bool HasFreeSlotSubGroup(uint8 subgroup) const;
245
246 MemberSlotList const& GetMemberSlots() const { return m_memberSlots; }
247 GroupReference* GetFirstMember() { return m_memberMgr.getFirst(); }
248 GroupReference const* GetFirstMember() const { return m_memberMgr.getFirst(); }
249 uint32 GetMembersCount() const { return m_memberSlots.size(); }
250 uint32 GetInviteeCount() const { return m_invitees.size(); }
251 GroupType GetGroupType() const { return m_groupType; }
252
253 uint8 GetMemberGroup(ObjectGuid guid) const;
254
255 void ConvertToLFG();
256 void ConvertToRaid();
257
258 void SetBattlegroundGroup(Battleground* bg);
259 void SetBattlefieldGroup(Battlefield* bf);
260 GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot, ObjectGuid& errorGuid) const;
261
262 void ChangeMembersGroup(ObjectGuid guid, uint8 group);
263 void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid);
264 void SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags flag);
265 void RemoveUniqueGroupMemberFlag(GroupMemberFlags flag);
266
267 Difficulty GetDifficulty(bool isRaid) const;
268 Difficulty GetDungeonDifficulty() const;
269 Difficulty GetRaidDifficulty() const;
270 void SetDungeonDifficulty(Difficulty difficulty);
271 void SetRaidDifficulty(Difficulty difficulty);
273 bool InCombatToInstance(uint32 instanceId);
274 void ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo);
275
276 // -no description-
277 //void SendInit(WorldSession* session);
278 void SendTargetIconList(WorldSession* session);
279 void SendUpdate();
280 void SendUpdateToPlayer(Player const* player, MemberSlot const* slot = nullptr);
281 void SendOriginalGroupUpdateToPlayer(Player const* player) const;
282 void UpdatePlayerOutOfRange(Player* player);
283
284 template<class Worker>
285 void BroadcastWorker(Worker& worker)
286 {
287 for (GroupReference* itr = GetFirstMember(); itr != nullptr; itr = itr->next())
288 worker(itr->GetSource());
289 }
290
291 template<class Worker>
292 void BroadcastWorker(Worker const& worker) const
293 {
294 for (GroupReference const* itr = GetFirstMember(); itr != nullptr; itr = itr->next())
295 worker(itr->GetSource());
296 }
297
298 void BroadcastPacket(WorldPacket const* packet, bool ignorePlayersInBGRaid, int group = -1, ObjectGuid ignoredPlayer = ObjectGuid::Empty);
299 void BroadcastReadyCheck(WorldPacket const* packet);
300 void OfflineReadyCheck();
301
302 /*********************************************************/
303 /*** LOOT SYSTEM ***/
304 /*********************************************************/
305
306 bool isRollLootActive() const;
307 void SendLootStartRoll(uint32 CountDown, uint32 mapid, Roll const& r);
308 void SendLootStartRollToPlayer(uint32 countDown, uint32 mapId, Player* p, bool canNeed, Roll const& r);
309 void SendLootRoll(ObjectGuid SourceGuid, ObjectGuid TargetGuid, uint8 RollNumber, uint8 RollType, Roll const& r, bool autoPass = false);
310 void SendLootRollWon(ObjectGuid SourceGuid, ObjectGuid TargetGuid, uint8 RollNumber, uint8 RollType, Roll const& r);
311 void SendLootAllPassed(Roll const& roll);
312 void SendLooter(Creature* creature, Player* pLooter);
313 void GroupLoot(Loot* loot, WorldObject* pLootedObject);
314 void NeedBeforeGreed(Loot* loot, WorldObject* pLootedObject);
315 void MasterLoot(Loot* loot, WorldObject* pLootedObject);
316 Rolls::iterator GetRoll(ObjectGuid Guid);
317 void CountTheRoll(Rolls::iterator roll, Map* allowedMap);
318 bool CountRollVote(ObjectGuid playerGUID, ObjectGuid Guid, uint8 Choise);
319 void EndRoll(Loot* loot, Map* allowedMap);
320
321 // related to disenchant rolls
322 void ResetMaxEnchantingLevel();
323
324 void LinkMember(GroupReference* pRef);
325 void DelinkMember(ObjectGuid guid);
326
327 InstanceGroupBind* BindToInstance(InstanceSave* save, bool permanent, bool load = false);
328 void UnbindInstance(uint32 mapid, uint8 difficulty, bool unload = false);
329 InstanceGroupBind* GetBoundInstance(Player* player);
330 InstanceGroupBind* GetBoundInstance(Map* aMap);
331 InstanceGroupBind* GetBoundInstance(MapEntry const* mapEntry);
332 InstanceGroupBind* GetBoundInstance(Difficulty difficulty, uint32 mapId);
333 BoundInstancesMap& GetBoundInstances(Difficulty difficulty);
334
335 void StartLeaderOfflineTimer();
336 void StopLeaderOfflineTimer();
337 void SelectNewPartyOrRaidLeader();
338
339 // FG: evil hacks
340 void BroadcastGroupUpdate(void);
341
342 Trinity::unique_weak_ptr<Group> GetWeakPtr() const { return m_scriptRef; }
343
344 protected:
345 bool _setMembersGroup(ObjectGuid guid, uint8 group);
346 void _homebindIfInstance(Player* player);
347
348 void _initRaidSubGroupsCounter();
349 member_citerator _getMemberCSlot(ObjectGuid Guid) const;
350 member_witerator _getMemberWSlot(ObjectGuid Guid);
351 void SubGroupCounterIncrease(uint8 subgroup);
352 void SubGroupCounterDecrease(uint8 subgroup);
353 void ToggleGroupMemberFlag(member_witerator slot, uint8 flag, bool apply);
354
359 std::string m_leaderName;
374 uint32 m_counter; // used only in SMSG_GROUP_LIST
376 uint32 m_dbStoreId; // Represents the ID used in database (Can be reused by other groups if group was disbanded)
379
380 struct NoopGroupDeleter { void operator()(Group*) const { /*noop - not managed*/ } };
382};
383#endif
Difficulty
Definition DBCEnums.h:279
#define MAX_DIFFICULTY
Definition DBCEnums.h:296
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
GroupMemberAssignment
Definition Group.h:80
@ GROUP_ASSIGN_MAINASSIST
Definition Group.h:82
@ GROUP_ASSIGN_MAINTANK
Definition Group.h:81
GroupMemberOnlineStatus
Definition Group.h:60
@ MEMBER_STATUS_AFK
Definition Group.h:68
@ MEMBER_STATUS_OFFLINE
Definition Group.h:61
@ MEMBER_STATUS_PVP
Definition Group.h:63
@ MEMBER_STATUS_ONLINE
Definition Group.h:62
@ MEMBER_STATUS_DEAD
Definition Group.h:64
@ MEMBER_STATUS_UNK3
Definition Group.h:67
@ MEMBER_STATUS_GHOST
Definition Group.h:65
@ MEMBER_STATUS_DND
Definition Group.h:69
@ MEMBER_STATUS_PVP_FFA
Definition Group.h:66
GroupType
Definition Group.h:86
@ GROUPTYPE_NORMAL
Definition Group.h:87
@ GROUPTYPE_LFG_RESTRICTED
Definition Group.h:91
@ GROUPTYPE_RAID
Definition Group.h:89
@ GROUPTYPE_LFG
Definition Group.h:92
@ GROUPTYPE_BGRAID
Definition Group.h:90
@ GROUPTYPE_BG
Definition Group.h:88
static const uint8 GroupUpdateLength[GROUP_UPDATE_FLAGS_COUNT]
Definition Group.h:127
GroupMemberFlags
Definition Group.h:73
@ MEMBER_FLAG_ASSISTANT
Definition Group.h:74
@ MEMBER_FLAG_MAINASSIST
Definition Group.h:76
@ MEMBER_FLAG_MAINTANK
Definition Group.h:75
GroupUpdateFlags
Definition Group.h:99
@ GROUP_UPDATE_FLAG_CUR_HP
Definition Group.h:102
@ GROUP_UPDATE_FLAG_PET_CUR_HP
Definition Group.h:114
@ GROUP_UPDATE_FLAG_POWER_TYPE
Definition Group.h:104
@ GROUP_UPDATE_FULL
Definition Group.h:122
@ GROUP_UPDATE_FLAG_PET_CUR_POWER
Definition Group.h:117
@ GROUP_UPDATE_FLAG_PET_MAX_POWER
Definition Group.h:118
@ GROUP_UPDATE_FLAG_MAX_HP
Definition Group.h:103
@ GROUP_UPDATE_FLAG_VEHICLE_SEAT
Definition Group.h:120
@ GROUP_UPDATE_FLAG_STATUS
Definition Group.h:101
@ GROUP_UPDATE_FLAG_PET_POWER_TYPE
Definition Group.h:116
@ GROUP_UPDATE_FLAG_MAX_POWER
Definition Group.h:106
@ GROUP_UPDATE_FLAG_ZONE
Definition Group.h:108
@ GROUP_UPDATE_FLAG_NONE
Definition Group.h:100
@ GROUP_UPDATE_FLAG_POSITION
Definition Group.h:109
@ GROUP_UPDATE_FLAG_PET_MODEL_ID
Definition Group.h:113
@ GROUP_UPDATE_FLAG_PET_NAME
Definition Group.h:112
@ GROUP_UPDATE_FLAG_PET_AURAS
Definition Group.h:119
@ GROUP_UPDATE_FLAG_AURAS
Definition Group.h:110
@ GROUP_UPDATE_FLAG_LEVEL
Definition Group.h:107
@ GROUP_UPDATE_PET
Definition Group.h:121
@ GROUP_UPDATE_FLAG_PET_GUID
Definition Group.h:111
@ GROUP_UPDATE_FLAG_PET_MAX_HP
Definition Group.h:115
@ GROUP_UPDATE_FLAG_CUR_POWER
Definition Group.h:105
RollVote
Definition Group.h:50
@ PASS
Definition Group.h:51
@ NOT_EMITED_YET
Definition Group.h:55
@ NEED
Definition Group.h:52
@ NOT_VALID
Definition Group.h:56
@ DISENCHANT
Definition Group.h:54
@ GREED
Definition Group.h:53
#define TARGET_ICONS_COUNT
Definition Group.h:47
#define GROUP_UPDATE_FLAGS_COUNT
Definition Group.h:125
LootMethod
Definition Loot.h:61
RollType
Definition Loot.h:36
GroupJoinBattlegroundResult
ItemQualities
RemoveMethod
@ GROUP_REMOVEMETHOD_DEFAULT
Class used to access individual fields of database query result.
Definition Field.h:92
GroupReference * next()
Definition Group.h:165
MemberSlotList const & GetMemberSlots() const
Definition Group.h:246
uint32 m_counter
Definition Group.h:374
uint16 InInstance()
bool m_isLeaderOffline
Definition Group.h:377
Battlefield * m_bfGroup
Definition Group.h:364
InvitesList m_invitees
Definition Group.h:357
uint32 m_maxEnchantingLevel
Definition Group.h:375
ObjectGuid m_leaderGuid
Definition Group.h:358
std::string m_leaderName
Definition Group.h:359
bool IsAssistant(ObjectGuid guid) const
Definition Group.h:233
ObjectGuid m_looterGuid
Definition Group.h:368
std::list< MemberSlot > MemberSlotList
Definition Group.h:175
Battleground * m_bgGroup
Definition Group.h:363
Difficulty m_raidDifficulty
Definition Group.h:362
GroupRefManager m_memberMgr
Definition Group.h:356
Rolls RollId
Definition Group.h:370
std::set< Player * > InvitesList
Definition Group.h:181
Trinity::unique_trackable_ptr< Group > m_scriptRef
Definition Group.h:381
MemberSlotList m_memberSlots
Definition Group.h:355
uint32 GetMembersCount() const
Definition Group.h:249
std::vector< Roll * > Rolls
Definition Group.h:183
Trinity::unique_weak_ptr< Group > GetWeakPtr() const
Definition Group.h:342
void BroadcastWorker(Worker const &worker) const
Definition Group.h:292
GroupReference const * GetFirstMember() const
Definition Group.h:248
TimeTracker m_leaderOfflineTimer
Definition Group.h:378
uint32 m_dbStoreId
Definition Group.h:376
ObjectGuid m_masterLooterGuid
Definition Group.h:369
MemberSlotList::iterator member_witerator
Definition Group.h:180
GroupType GetGroupType() const
Definition Group.h:251
uint32 GetInviteeCount() const
Definition Group.h:250
std::unordered_map< uint32, InstanceGroupBind > BoundInstancesMap
Definition Group.h:178
GroupReference * GetFirstMember()
Definition Group.h:247
LootMethod m_lootMethod
Definition Group.h:366
ObjectGuid m_guid
Definition Group.h:373
uint8 * m_subGroupsCounts
Definition Group.h:372
MemberSlotList::const_iterator member_citerator
Definition Group.h:176
Difficulty m_dungeonDifficulty
Definition Group.h:361
void BroadcastWorker(Worker &worker)
Definition Group.h:285
uint32 GetDbStoreId() const
Definition Group.h:226
ItemQualities m_lootThreshold
Definition Group.h:367
GroupType m_groupType
Definition Group.h:360
Definition Map.h:281
static ObjectGuid const Empty
Definition ObjectGuid.h:140
uint32 LowType
Definition ObjectGuid.h:142
Definition Group.h:130
void setLoot(Loot *pLoot)
Definition Group.cpp:52
int32 itemRandomPropId
Definition Group.h:140
uint8 totalGreed
Definition Group.h:147
uint8 totalPlayersRolling
Definition Group.h:145
uint8 itemSlot
Definition Group.h:149
uint32 itemid
Definition Group.h:139
uint8 itemCount
Definition Group.h:142
~Roll()
Definition Group.cpp:50
std::map< ObjectGuid, RollVote > PlayerVote
Definition Group.h:143
uint8 rollVoteMask
Definition Group.h:150
uint32 itemRandomSuffix
Definition Group.h:141
uint8 totalNeed
Definition Group.h:146
void targetObjectBuildLink() override
Definition Group.cpp:2098
uint8 totalPass
Definition Group.h:148
Loot * getLoot()
Definition Group.cpp:57
ObjectGuid itemGUID
Definition Group.h:138
PlayerVote playerVote
Definition Group.h:144
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
Definition Unit.h:769
Player session in the World.
ObjectGuid guid
Definition Group.h:169
std::string name
Definition Group.h:170
void operator()(Group *) const
Definition Group.h:380
InstanceSave * save
Definition Group.h:155
Definition Loot.h:207