18#ifndef TRINITYCORE_GROUP_H
19#define TRINITYCORE_GROUP_H
43#define MAX_GROUP_SIZE 5
44#define MAX_RAID_SIZE 40
45#define MAX_RAID_SUBGROUPS MAX_RAID_SIZE / MAX_GROUP_SIZE
47#define TARGET_ICONS_COUNT 8
125#define GROUP_UPDATE_FLAGS_COUNT 20
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};
192 bool Create(
Player* leader);
193 void LoadGroupFromDB(
Field* field);
195 bool AddInvite(
Player* player);
196 void RemoveInvite(
Player* player);
197 void RemoveAllInvites();
198 bool AddLeaderInvite(
Player* player);
199 bool AddMember(
Player* player);
202 static void ConvertLeaderInstancesToGroup(
Player* player,
Group* group,
bool switchLeader);
206 void UpdateLooterGuid(
WorldObject* pLootedObject,
bool ifneed =
false);
208 void Disband(
bool hideDestroy =
false);
213 bool isLFGGroup()
const;
214 bool isRaidGroup()
const;
215 bool isBGGroup()
const;
216 bool isBFGroup()
const;
217 bool IsCreated()
const;
220 const char * GetLeaderName()
const;
231 ObjectGuid GetMemberGUID(
const std::string& name);
239 Player* GetInvited(
const std::string& name)
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;
256 void ConvertToRaid();
270 void SetDungeonDifficulty(
Difficulty difficulty);
271 void SetRaidDifficulty(
Difficulty difficulty);
273 bool InCombatToInstance(
uint32 instanceId);
274 void ResetInstances(
uint8 method,
bool isRaid,
Player* SendMsgTo);
280 void SendUpdateToPlayer(
Player const* player,
MemberSlot const* slot =
nullptr);
281 void SendOriginalGroupUpdateToPlayer(
Player const* player)
const;
282 void UpdatePlayerOutOfRange(
Player* player);
284 template<
class Worker>
288 worker(itr->GetSource());
291 template<
class Worker>
295 worker(itr->GetSource());
299 void BroadcastReadyCheck(
WorldPacket const* packet);
300 void OfflineReadyCheck();
306 bool isRollLootActive()
const;
311 void SendLootAllPassed(
Roll const& roll);
317 void CountTheRoll(Rolls::iterator roll,
Map* allowedMap);
319 void EndRoll(
Loot* loot,
Map* allowedMap);
322 void ResetMaxEnchantingLevel();
328 void UnbindInstance(
uint32 mapid,
uint8 difficulty,
bool unload =
false);
333 BoundInstancesMap& GetBoundInstances(
Difficulty difficulty);
335 void StartLeaderOfflineTimer();
336 void StopLeaderOfflineTimer();
337 void SelectNewPartyOrRaidLeader();
340 void BroadcastGroupUpdate(
void);
346 void _homebindIfInstance(
Player* player);
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);
@ GROUP_ASSIGN_MAINASSIST
@ GROUPTYPE_LFG_RESTRICTED
static const uint8 GroupUpdateLength[GROUP_UPDATE_FLAGS_COUNT]
@ GROUP_UPDATE_FLAG_CUR_HP
@ GROUP_UPDATE_FLAG_PET_CUR_HP
@ GROUP_UPDATE_FLAG_POWER_TYPE
@ GROUP_UPDATE_FLAG_PET_CUR_POWER
@ GROUP_UPDATE_FLAG_PET_MAX_POWER
@ GROUP_UPDATE_FLAG_MAX_HP
@ GROUP_UPDATE_FLAG_VEHICLE_SEAT
@ GROUP_UPDATE_FLAG_STATUS
@ GROUP_UPDATE_FLAG_PET_POWER_TYPE
@ GROUP_UPDATE_FLAG_MAX_POWER
@ GROUP_UPDATE_FLAG_POSITION
@ GROUP_UPDATE_FLAG_PET_MODEL_ID
@ GROUP_UPDATE_FLAG_PET_NAME
@ GROUP_UPDATE_FLAG_PET_AURAS
@ GROUP_UPDATE_FLAG_AURAS
@ GROUP_UPDATE_FLAG_LEVEL
@ GROUP_UPDATE_FLAG_PET_GUID
@ GROUP_UPDATE_FLAG_PET_MAX_HP
@ GROUP_UPDATE_FLAG_CUR_POWER
#define TARGET_ICONS_COUNT
#define GROUP_UPDATE_FLAGS_COUNT
GroupJoinBattlegroundResult
@ GROUP_REMOVEMETHOD_DEFAULT
Class used to access individual fields of database query result.
MemberSlotList const & GetMemberSlots() const
uint32 m_maxEnchantingLevel
bool IsAssistant(ObjectGuid guid) const
std::list< MemberSlot > MemberSlotList
Difficulty m_raidDifficulty
GroupRefManager m_memberMgr
std::set< Player * > InvitesList
Trinity::unique_trackable_ptr< Group > m_scriptRef
MemberSlotList m_memberSlots
uint32 GetMembersCount() const
std::vector< Roll * > Rolls
Trinity::unique_weak_ptr< Group > GetWeakPtr() const
void BroadcastWorker(Worker const &worker) const
GroupReference const * GetFirstMember() const
TimeTracker m_leaderOfflineTimer
ObjectGuid m_masterLooterGuid
MemberSlotList::iterator member_witerator
GroupType GetGroupType() const
uint32 GetInviteeCount() const
std::unordered_map< uint32, InstanceGroupBind > BoundInstancesMap
GroupReference * GetFirstMember()
uint8 * m_subGroupsCounts
MemberSlotList::const_iterator member_citerator
Difficulty m_dungeonDifficulty
void BroadcastWorker(Worker &worker)
uint32 GetDbStoreId() const
ItemQualities m_lootThreshold
static ObjectGuid const Empty
void setLoot(Loot *pLoot)
uint8 totalPlayersRolling
std::map< ObjectGuid, RollVote > PlayerVote
void targetObjectBuildLink() override
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.
Player session in the World.
void operator()(Group *) const