46itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count),
47totalPlayersRolling(0), totalNeed(0), totalGreed(0), totalPass(0), itemSlot(0),
65m_masterLooterGuid(), m_subGroupsCounts(nullptr), m_guid(), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0), m_isLeaderOffline(false),
76 TC_LOG_DEBUG(
"bg.battleground",
"Group::~Group: battleground group being deleted.");
82 TC_LOG_ERROR(
"misc",
"Group::~Group: battleground group is not linked to the correct battleground.");
96 itr2->second.save->RemoveGroup(
this);
117 Player* newLeader =
nullptr;
155 m_guid = ObjectGuid::Create<HighGuid::Group>(
sGroupMgr->GenerateGroupId());
212 bool addMemberResult =
AddMember(leader);
224 m_guid = ObjectGuid::Create<HighGuid::Group>(
sGroupMgr->GenerateGroupId());
225 m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32());
232 m_looterGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt32());
263 member.
guid = ObjectGuid::Create<HighGuid::Player>(guidLow);
274 member.
group = subgroup;
275 member.
flags = memberFlags;
276 member.
roles = roles;
323 player->UpdateVisibleGameobjectsOrSpellClicks();
370 (*itr)->SetGroupInvite(
nullptr);
379 if ((*itr) && (*itr)->GetGUID() == guid)
389 if ((*itr) && (*itr)->GetName() == name)
401 bool groupFound =
false;
418 member.
group = subGroup;
497 if (itr->GetSource() == player)
500 if (
Player* existingMember = itr->GetSource())
505 existingMember->BuildValuesUpdateBlockForPlayer(&groupData, player);
509 if (existingMember->HaveAtClient(player))
517 existingMember->SendDirectMessage(&newDataPacket);
542 sScriptMgr->OnGroupRemoveMember(
this, guid, method, kicker, reason);
549 if (
Player* groupMember = itr->GetSource())
551 if (groupMember->GetGUID() == guid)
554 groupMember->RemoveAllGroupBuffsFromCaster(guid);
569 bool isOriginalGroup =
false;
580 isOriginalGroup =
true;
599 group->SendUpdateToPlayer(player);
635 for (Rolls::iterator it =
RollId.begin(); it !=
RollId.end(); ++it)
638 Roll::PlayerVote::iterator itr2 = roll->
playerVote.find(guid);
644 else if (itr2->second ==
NEED)
646 else if (itr2->second ==
PASS)
684 if (!mapId || !leader || (leader->
IsAlive() && leader->
GetMapId() != mapId))
730 if (itr->second.perm && !
sMapMgr->FindMap(itr->first, itr->second.save->GetInstanceId()))
734 stmt->
setUInt32(1, itr->second.save->GetInstanceId());
737 itr->second.save->RemoveGroup(
this);
781 if (!switchLeader || !group->
GetBoundInstance(itr->second.save->GetDifficulty(), itr->first))
782 if (itr->second.extendState)
786 if (switchLeader && !itr->second.perm)
799 if (!switchLeader && playerMap->IsNonRaidDungeon())
801 if (save->GetGroupCount() == 0 && save->GetPlayerCount() == 0)
803 TC_LOG_DEBUG(
"maps",
"Group::ConvertLeaderInstancesToGroup: Group for player {} is taking over unbound instance map {} with Id {}", player->
GetName(), playerMap->GetId(), playerMap->GetInstanceId());
820 bool isOriginalGroup =
false;
832 isOriginalGroup =
true;
924 data <<
uint32(countDown);
927 for (Roll::PlayerVote::const_iterator itr=r.
playerVote.begin(); itr != r.
playerVote.end(); ++itr)
951 data <<
uint32(countDown);
954 voteMask &= ~ROLL_FLAG_TYPE_NEED;
955 data <<
uint8(voteMask);
969 data <<
uint8(rollNumber);
970 data <<
uint8(rollType);
971 data <<
uint8(autoPass);
973 for (Roll::PlayerVote::const_iterator itr = roll.
playerVote.begin(); itr != roll.
playerVote.end(); ++itr)
993 data <<
uint8(rollNumber);
994 data <<
uint8(rollType);
996 for (Roll::PlayerVote::const_iterator itr = roll.
playerVote.begin(); itr != roll.
playerVote.end(); ++itr)
1016 for (Roll::PlayerVote::const_iterator itr = roll.
playerVote.begin(); itr != roll.
playerVote.end(); ++itr)
1067 std::vector<LootItem>::iterator i;
1071 for (i = loot->
items.begin(); i != loot->
items.end(); ++i, ++itemSlot)
1076 item =
sObjectMgr->GetItemTemplate(i->itemid);
1087 Roll* r =
new Roll(newitemGUID, *i);
1092 Player* member = itr->GetSource();
1115 loot->
items[itemSlot].is_blocked =
true;
1120 for (Roll::PlayerVote::const_iterator itr=r->
playerVote.begin(); itr != r->
playerVote.end(); ++itr)
1126 if (itr->second ==
PASS)
1141 creature->m_groupLootTimer = 60000;
1142 creature->lootingGroupLowGUID =
GetGUID();
1146 go->m_groupLootTimer = 60000;
1147 go->lootingGroupLowGUID =
GetGUID();
1155 i->is_underthreshold =
true;
1160 if (!i->follow_loot_rules)
1163 item =
sObjectMgr->GetItemTemplate(i->itemid);
1171 Roll* r =
new Roll(newitemGUID, *i);
1176 Player* member = itr->GetSource();
1206 creature->m_groupLootTimer = 60000;
1207 creature->lootingGroupLowGUID =
GetGUID();
1211 go->m_groupLootTimer = 60000;
1212 go->lootingGroupLowGUID =
GetGUID();
1224 for (std::vector<LootItem>::iterator i = loot->
items.begin(); i != loot->
items.end(); ++i, ++itemSlot)
1229 item =
sObjectMgr->GetItemTemplate(i->itemid);
1236 Roll* r =
new Roll(newitemGUID, *i);
1240 Player* playerToRoll = itr->GetSource();
1241 if (!playerToRoll || !playerToRoll->
GetSession())
1267 loot->
items[itemSlot].is_blocked =
true;
1270 for (Roll::PlayerVote::const_iterator itr = r->
playerVote.begin(); itr != r->
playerVote.end(); ++itr)
1276 if (itr->second ==
PASS)
1286 creature->m_groupLootTimer = 60000;
1287 creature->lootingGroupLowGUID =
GetGUID();
1291 go->m_groupLootTimer = 60000;
1292 go->lootingGroupLowGUID =
GetGUID();
1299 i->is_underthreshold =
true;
1302 for (std::vector<LootItem>::iterator i = loot->
quest_items.begin(); i != loot->
quest_items.end(); ++i, ++itemSlot)
1304 if (!i->follow_loot_rules)
1307 item =
sObjectMgr->GetItemTemplate(i->itemid);
1309 Roll* r =
new Roll(newitemGUID, *i);
1313 Player* playerToRoll = itr->GetSource();
1314 if (!playerToRoll || !playerToRoll->
GetSession())
1338 for (Roll::PlayerVote::const_iterator itr = r->
playerVote.begin(); itr != r->
playerVote.end(); ++itr)
1344 if (itr->second ==
PASS)
1354 creature->m_groupLootTimer = 60000;
1355 creature->lootingGroupLowGUID =
GetGUID();
1359 go->m_groupLootTimer = 60000;
1360 go->lootingGroupLowGUID =
GetGUID();
1370 TC_LOG_DEBUG(
"network",
"Group::MasterLoot (SMSG_LOOT_MASTER_LIST)");
1372 for (std::vector<LootItem>::iterator i = loot->
items.begin(); i != loot->
items.end(); ++i)
1377 i->is_blocked = !i->is_underthreshold;
1382 if (!i->follow_loot_rules)
1385 i->is_blocked = !i->is_underthreshold;
1395 Player* looter = itr->GetSource();
1410 Player* looter = itr->GetSource();
1418 Rolls::iterator rollI =
GetRoll(Guid);
1419 if (rollI ==
RollId.end())
1421 Roll* roll = *rollI;
1423 Roll::PlayerVote::iterator itr = roll->
playerVote.find(playerGUID);
1447 itr->second =
GREED;
1465 for (Rolls::iterator itr =
RollId.begin(); itr !=
RollId.end();)
1467 if ((*itr)->getLoot() == pLoot) {
1478 Roll* roll = *rollI;
1493 Player* player =
nullptr;
1495 for (Roll::PlayerVote::const_iterator itr = roll->
playerVote.begin(); itr != roll->
playerVote.end(); ++itr)
1497 if (itr->second !=
NEED)
1501 if (!player || (allowedMap !=
nullptr && player->
FindMap() != allowedMap))
1509 if (maxresul < randomN)
1511 maxguid = itr->first;
1554 Player* player =
nullptr;
1557 Roll::PlayerVote::iterator itr;
1564 if (!player || (allowedMap !=
nullptr && player->
FindMap() != allowedMap))
1572 if (maxresul < randomN)
1574 maxguid = itr->first;
1576 rollvote = itr->second;
1591 if (rollvote ==
GREED)
1628 for (
uint32 i = 0; i < max_slot; ++i)
1746 if (slot->
guid == citr->guid)
1756 data <<
uint8(onlineState);
1757 data <<
uint8(citr->group);
1758 data <<
uint8(citr->flags);
1759 data <<
uint8(citr->roles);
1802 member = itr->GetSource();
1812 Player* player = itr->GetSource();
1813 if (!player || (!ignoredPlayer.
IsEmpty() && player->
GetGUID() == ignoredPlayer) || (ignorePlayersInBGRaid && player->
GetGroup() !=
this))
1816 if (player->
GetSession() && (group == -1 || itr->getSubGroup() == group))
1825 Player* player = itr->GetSource();
1853 slot->group = group;
1872 if (!member1 || !member2)
1895 if (prevSubGroup == group)
1899 slot->group = group;
1921 if (player->GetGroup() ==
this)
1922 player->GetGroupRef().setSubGroup(group);
1926 prevSubGroup = player->GetOriginalSubGroup();
1927 player->GetOriginalGroupRef().setSubGroup(group);
1968 Player* pNewLooter =
nullptr;
1972 if (player->IsAtGroupRewardDistance(pLootedObject))
1974 pNewLooter = player;
1985 if (player->IsAtGroupRewardDistance(pLootedObject))
1987 pNewLooter = player;
1995 if (oldLooterGUID != pNewLooter->
GetGUID())
2043 Player* member = itr->GetSource();
2047 errorGuid = member->
GetGUID();
2052 if (member->
GetTeam() != team)
2056 if (memberBracketEntry != bracketEntry)
2088 if (bgOrTemplate->
isArena() && memberscount != MinPlayerCount)
2119 Player* player = itr->GetSource();
2143 Player* player = itr->GetSource();
2156 Player* player = itr->GetSource();
2195 bool isEmpty =
true;
2214 for (
GroupReference* groupRef = group->GetFirstMember(); groupRef !=
nullptr; groupRef = groupRef->
next())
2215 if (
Player* player = groupRef->GetSource())
2216 player->SendResetInstanceSuccess(instanceSave->
GetMapId());
2229 if (isEmpty && instanceSave->
CanReset())
2231 if (map && map->
IsDungeon() && SendMsgTo)
2235 if (!instanceEntrance)
2254 stmt->
setUInt32(6, member.guid.GetCounter());
2302 if (!mapEntry || !mapEntry->
IsDungeon())
2314 BoundInstancesMap::iterator itr =
m_boundInstances[difficulty].find(mapId);
2316 return &itr->second;
2327 if (!load && (!bind.
save || permanent != bind.
perm || save != bind.
save))
2338 if (bind.
save != save)
2346 bind.
perm = permanent;
2348 TC_LOG_DEBUG(
"maps",
"Group::BindToInstance: {}, storage id: {} is now bound to map {}, instance {}, difficulty {}",
2356 BoundInstancesMap::iterator itr =
m_boundInstances[difficulty].find(mapid);
2364 stmt->
setUInt32(1, itr->second.save->GetInstanceId());
2369 itr->second.save->RemoveGroup(
this);
2399 Player* member =
nullptr;
2403 if (member && m_maxEnchantingLevel < member->GetSkillValue(
SKILL_ENCHANTING))
2434 slot->roles = roles;
2518 if (itr->name == name)
2528 return mslot->flags;
2544 return (mslot1->group == slot2->
group);
2557 return mslot->group;
2633 Rolls::iterator iter;
2634 for (iter =
RollId.begin(); iter !=
RollId.end(); ++iter)
2635 if ((*iter)->itemGUID == Guid && (*iter)->isValid())
2680 if (itr->guid == Guid)
2688 if (itr->guid == Guid)
2708 if (itr->flags & flag)
2709 itr->flags &= ~flag;
2715 slot->flags |= flag;
2717 slot->flags &= ~flag;
@ CHAR_DEL_GROUP_INSTANCE_PERM_BINDING
@ CHAR_DEL_GROUP_MEMBER_ALL
@ CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE
@ CHAR_DEL_GROUP_INSTANCE_BY_GUID
@ CHAR_UPD_GROUP_DIFFICULTY
@ CHAR_UPD_CHARACTER_POSITION_BY_MAPID
@ CHAR_UPD_GROUP_RAID_DIFFICULTY
@ CHAR_UPD_GROUP_MEMBER_FLAG
@ CHAR_REP_GROUP_INSTANCE
@ CHAR_UPD_GROUP_MEMBER_SUBGROUP
@ CREATURE_FLAG_EXTRA_INSTANCE_BIND
#define MAX_RAID_DIFFICULTY
@ RAID_DIFFICULTY_10MAN_NORMAL
@ DUNGEON_DIFFICULTY_NORMAL
@ DUNGEON_DIFFICULTY_HEROIC
@ RAID_DIFFICULTY_10MAN_HEROIC
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT
#define MAX_DUNGEON_DIFFICULTY
MapDifficulty const * GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty)
DBCStorage< BattlemasterListEntry > sBattlemasterListStore(BattlemasterListEntryfmt)
PvPDifficultyEntry const * GetBattlegroundBracketByLevel(uint32 mapid, uint32 level)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define ASSERT_NOTNULL(pointer)
bool CanRollOnItem(const LootItem &item, Player const *player)
@ GROUPTYPE_LFG_RESTRICTED
#define TARGET_ICONS_COUNT
#define MAX_RAID_SUBGROUPS
@ ITEM_FLAG2_CAN_ONLY_ROLL_GREED
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
LootStore LootTemplates_Disenchant("disenchant_loot_template", "item disenchant id", true)
@ ROLL_ALL_TYPE_NO_DISENCHANT
@ ROLL_FLAG_TYPE_DISENCHANT
@ INSTANCE_RESET_GROUP_DISBAND
@ INSTANCE_RESET_GROUP_JOIN
@ INSTANCE_RESET_CHANGE_DIFFICULTY
std::vector< ItemPosCount > ItemPosCountVec
@ PLAYER_FLAGS_GROUP_LEADER
uint32 urand(uint32 min, uint32 max)
GroupJoinBattlegroundResult
@ ERR_BATTLEGROUND_JOIN_TIMED_OUT
@ ERR_BATTLEGROUND_JOIN_FAILED
@ ERR_LFG_CANT_USE_BATTLEGROUND
@ ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS
@ ERR_ARENA_TEAM_PARTY_SIZE
@ ERR_BATTLEGROUND_TOO_MANY_QUEUES
@ ERR_GROUP_JOIN_BATTLEGROUND_FAIL
@ ERR_BATTLEGROUND_JOIN_RANGE_INDEX
@ GROUP_REMOVEMETHOD_KICK_LFG
@ GROUP_REMOVEMETHOD_KICK
@ UNIT_FIELD_FACTIONTEMPLATE
static BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, uint8 bracketId, uint8 arenaType)
BattlegroundTypeId GetTypeID(bool GetRandom=false) const
Group * GetBgRaid(uint32 TeamID) const
void SetBgRaid(uint32 TeamID, Group *bg_raid)
void put(std::size_t pos, T value)
Class used to access individual fields of database query result.
GroupReference * getFirst()
ObjectGuid m_targetIcons[TARGET_ICONS_COUNT]
member_citerator _getMemberCSlot(ObjectGuid Guid) const
MemberSlotList const & GetMemberSlots() const
void BroadcastGroupUpdate(void)
void NeedBeforeGreed(Loot *loot, WorldObject *pLootedObject)
void EndRoll(Loot *loot, Map *allowedMap)
void StartLeaderOfflineTimer()
uint8 GetMemberGroup(ObjectGuid guid) const
ObjectGuid GetMasterLooterGuid() const
void SetRaidDifficulty(Difficulty difficulty)
bool AddLeaderInvite(Player *player)
void SetBattlefieldGroup(Battlefield *bf)
void SendLootAllPassed(Roll const &roll)
void SendTargetIconList(WorldSession *session)
uint32 m_maxEnchantingLevel
bool _setMembersGroup(ObjectGuid guid, uint8 group)
void SubGroupCounterDecrease(uint8 subgroup)
void SetLootMethod(LootMethod method)
void ChangeMembersGroup(ObjectGuid guid, uint8 group)
void SendUpdateToPlayer(Player const *player, MemberSlot const *slot=nullptr)
void SetDungeonDifficulty(Difficulty difficulty)
bool IsAssistant(ObjectGuid guid) const
void _initRaidSubGroupsCounter()
bool isRollLootActive() const
void SetLootThreshold(ItemQualities threshold)
void GroupLoot(Loot *loot, WorldObject *pLootedObject)
void Disband(bool hideDestroy=false)
InstanceGroupBind * BindToInstance(InstanceSave *save, bool permanent, bool load=false)
void LoadGroupFromDB(Field *field)
bool AddMember(Player *player)
void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid)
bool IsLeader(ObjectGuid guid) const
BoundInstancesMap & GetBoundInstances(Difficulty difficulty)
Difficulty m_raidDifficulty
GroupRefManager m_memberMgr
void SetMasterLooterGuid(ObjectGuid guid)
ObjectGuid GetGUID() const
void ResetInstances(uint8 method, bool isRaid, Player *SendMsgTo)
void RemoveInvite(Player *player)
ItemQualities GetLootThreshold() const
MemberSlotList m_memberSlots
void SendOriginalGroupUpdateToPlayer(Player const *player) const
uint32 GetMembersCount() const
void StopLeaderOfflineTimer()
Rolls::iterator GetRoll(ObjectGuid Guid)
void ResetMaxEnchantingLevel()
void ToggleGroupMemberFlag(member_witerator slot, uint8 flag, bool apply)
void _homebindIfInstance(Player *player)
void SendLootStartRoll(uint32 CountDown, uint32 mapid, Roll const &r)
void SetLfgRoles(ObjectGuid guid, uint8 roles)
void SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags flag)
TimeTracker m_leaderOfflineTimer
member_witerator _getMemberWSlot(ObjectGuid Guid)
ObjectGuid GetLooterGuid() const
void DelinkMember(ObjectGuid guid)
Difficulty GetRaidDifficulty() const
void ChangeLeader(ObjectGuid guid)
void SendLootStartRollToPlayer(uint32 countDown, uint32 mapId, Player *p, bool canNeed, Roll const &r)
const char * GetLeaderName() const
void SendLootRollWon(ObjectGuid SourceGuid, ObjectGuid TargetGuid, uint8 RollNumber, uint8 RollType, Roll const &r)
ObjectGuid GetMemberGUID(const std::string &name)
ObjectGuid m_masterLooterGuid
MemberSlotList::iterator member_witerator
void SetBattlegroundGroup(Battleground *bg)
void UpdatePlayerOutOfRange(Player *player)
void BroadcastPacket(WorldPacket const *packet, bool ignorePlayersInBGRaid, int group=-1, ObjectGuid ignoredPlayer=ObjectGuid::Empty)
LootMethod GetLootMethod() const
void UpdateLooterGuid(WorldObject *pLootedObject, bool ifneed=false)
Player * GetInvited(ObjectGuid guid) const
bool HasFreeSlotSubGroup(uint8 subgroup) const
void LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles)
bool IsMember(ObjectGuid guid) const
std::unordered_map< uint32, InstanceGroupBind > BoundInstancesMap
Difficulty GetDifficulty(bool isRaid) const
GroupReference * GetFirstMember()
void SelectNewPartyOrRaidLeader()
bool RemoveMember(ObjectGuid guid, RemoveMethod const &method=GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker=ObjectGuid::Empty, char const *reason=nullptr)
void CountTheRoll(Rolls::iterator roll, Map *allowedMap)
bool SameSubGroup(ObjectGuid guid1, ObjectGuid guid2) const
bool CountRollVote(ObjectGuid playerGUID, ObjectGuid Guid, uint8 Choise)
bool AddInvite(Player *player)
uint8 * m_subGroupsCounts
void BroadcastReadyCheck(WorldPacket const *packet)
MemberSlotList::const_iterator member_citerator
BoundInstancesMap m_boundInstances[MAX_DIFFICULTY]
void SubGroupCounterIncrease(uint8 subgroup)
bool Create(Player *leader)
GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const *bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot, ObjectGuid &errorGuid) const
ObjectGuid GetLeaderGUID() const
Difficulty m_dungeonDifficulty
uint8 GetMemberFlags(ObjectGuid guid) const
void UnbindInstance(uint32 mapid, uint8 difficulty, bool unload=false)
InstanceGroupBind * GetBoundInstance(Player *player)
static void ConvertLeaderInstancesToGroup(Player *player, Group *group, bool switchLeader)
convert the player's binds to the group
void SendLootRoll(ObjectGuid SourceGuid, ObjectGuid TargetGuid, uint8 RollNumber, uint8 RollType, Roll const &r, bool autoPass=false)
Difficulty GetDungeonDifficulty() const
void SetLooterGuid(ObjectGuid guid)
void LinkMember(GroupReference *pRef)
ItemQualities m_lootThreshold
void RemoveUniqueGroupMemberFlag(GroupMemberFlags flag)
bool InCombatToInstance(uint32 instanceId)
void MasterLoot(Loot *loot, WorldObject *pLootedObject)
void SendLooter(Creature *creature, Player *pLooter)
bool RemoveGroup(Group *group)
uint32 GetInstanceId() const
Difficulty GetDifficulty() const
void AddGroup(Group *group)
void insertFirst(LinkedListElement *pElem)
bool IsRaidOrHeroicDungeon() const
LowType GetCounter() const
static ObjectGuid const Empty
PackedGuidWriter WriteAsPacked() const
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player const *target) const
static Creature * ToCreature(Object *o)
PackedGuid const & GetPackGUID() const
static GameObject * ToGameObject(Object *o)
void RemoveFieldNotifyFlag(uint16 flag)
void SetFlag(uint16 index, uint32 newFlag)
static ObjectGuid GetGUID(Object const *o)
void SetFieldNotifyFlag(uint16 flag)
void ForceValuesUpdateAtIndex(uint32)
bool HaveAtClient(Object const *u) const
Difficulty GetRaidDifficulty() const
bool InBattlegroundQueueForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const
BoundInstancesMap m_boundInstances[MAX_DIFFICULTY]
void SetOriginalGroup(Group *group, int8 subgroup=-1)
void UpdateVisibleGameobjectsOrSpellClicks()
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 item, bool update, int32 randomPropertyId=0, GuidSet const &allowedLooters=GuidSet())
void SetGroupUpdateFlag(uint32 flag)
InventoryResult CanRollForItemInLFG(ItemTemplate const *item, WorldObject const *lootedObject) const
void SendDirectMessage(WorldPacket const *data) const
uint16 GetSkillValue(uint32 skill) const
void SetDungeonDifficulty(Difficulty dungeon_difficulty)
void SendRaidDifficulty(bool IsInGroup, int32 forcedDifficulty=-1) const
void SendResetInstanceFailed(uint32 reason, uint32 MapId) const
void SetGroup(Group *group, int8 subgroup=-1)
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, WorldObject *ref=nullptr)
void SetGroupInvite(Group *group)
void SendDungeonDifficulty(bool IsInGroup) const
void RemoveFromBattlegroundOrBattlefieldRaid()
Group * GetOriginalGroup() const
void ResetInstances(uint8 method, bool isRaid)
Reset all solo instances and optionally send a message on success for each.
void SendItemRetrievalMail(uint32 itemEntry, uint32 count)
void SetRaidDifficulty(Difficulty raid_difficulty)
uint32 GetItemCount(uint32 item, bool inBankAlso=false, Item *skipItem=nullptr) const
void UnbindInstance(uint32 mapid, Difficulty difficulty, bool unload=false)
bool IsAtGroupRewardDistance(WorldObject const *pRewardSource) const
bool InBattlegroundQueue(bool ignoreArena=false) const
WorldSession * GetSession() const
uint32 GetArenaTeamId(uint8 slot) const
bool HasFreeBattlegroundQueueId() const
void AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore const &store, bool broadcast=false, bool createdByPlayer=false)
bool IsGameMaster() const
bool CanJoinToBattleground(Battleground const *bg) const
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=nullptr, uint32 itemid=0) const
bool CheckInstanceValidity(bool)
bool GetPassOnGroupLoot() const
void SendResetInstanceSuccess(uint32 MapId) const
uint8 GetSubGroup() const
Difficulty GetDungeonDifficulty() const
Group * GetGroupInvite() const
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup=-1)
void setUInt32(uint8 index, uint32 value)
void setBool(uint8 index, bool value)
void setFloat(uint8 index, float value)
void setUInt64(uint8 index, uint64 value)
void setUInt8(uint8 index, uint8 value)
void link(Loot *toObj, LootValidatorRef *fromObj)
void setLoot(Loot *pLoot)
uint8 totalPlayersRolling
Roll(ObjectGuid _guid, LootItem const &li)
void targetObjectBuildLink() override
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
void RemoveAllGroupBuffsFromCaster(ObjectGuid casterGUID)
AttackerSet const & getAttackers() const
bool BuildPacket(WorldPacket *packet)
uint32 GetInstanceId() const
float GetSightRange(WorldObject const *target=nullptr) const
std::string const & GetName() const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true) const
bool IsInMap(WorldObject const *obj) const
void Initialize(uint16 opcode, size_t newres=200)
Player session in the World.
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
bool PlayerLogout() const
void BuildPartyMemberStatsChangedPacket(Player *player, WorldPacket *data)
@ MSG_RAID_READY_CHECK_CONFIRM
@ CONFIG_INSTANCES_RESET_ANNOUNCE
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
@ LFG_STATE_FINISHED_DUNGEON
uint32 RequiredDisenchantSkill
bool HasFlag(ItemFlags flag) const
ObjectGuid rollWinnerGUID
GuidSet const & GetAllowedLooters() const
bool AllowedForPlayer(Player const *player, bool isGivenByMasterLooter, ObjectGuid ownerGuid) const
uint32 GetMaxSlotInLootFor(Player *player) const
bool hasOverThresholdItem() const
bool FillLoot(uint32 lootId, LootStore const &store, Player *lootOwner, bool personal, bool noEmptyError=false, uint16 lootMode=LOOT_MODE_DEFAULT)
LootItem * LootItemInSlot(uint32 lootslot, Player *player, NotNormalLootItem **qitem=nullptr, NotNormalLootItem **ffaitem=nullptr, NotNormalLootItem **conditem=nullptr)
std::vector< LootItem > items
void addLootValidatorRef(LootValidatorRef *pLootValidatorRef)
void NotifyItemRemoved(uint8 lootIndex)
std::vector< LootItem > quest_items
BattlegroundBracketId GetBracketId() const