46itemRandomPropId(li.randomPropertyId), itemRandomPropertySeed(li.randomPropertySeed), 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());
254 member.
guid = ObjectGuid::Create<HighGuid::Player>(guidLow);
265 member.
group = subgroup;
266 member.
flags = memberFlags;
267 member.
roles = roles;
314 player->UpdateVisibleGameobjectsOrSpellClicks();
361 (*itr)->SetGroupInvite(
nullptr);
370 if ((*itr) && (*itr)->GetGUID() == guid)
380 if ((*itr) && (*itr)->GetName() == name)
392 bool groupFound =
false;
409 member.
group = subGroup;
477 if (itr->GetSource() == player)
480 if (
Player* existingMember = itr->GetSource())
485 existingMember->BuildValuesUpdateBlockForPlayer(&groupData, player);
489 if (existingMember->HaveAtClient(player))
497 existingMember->SendDirectMessage(&newDataPacket);
522 sScriptMgr->OnGroupRemoveMember(
this, guid, method, kicker, reason);
529 if (
Player* groupMember = itr->GetSource())
531 if (groupMember->GetGUID() == guid)
534 groupMember->RemoveAllGroupBuffsFromCaster(guid);
549 bool isOriginalGroup =
false;
560 isOriginalGroup =
true;
579 group->SendUpdateToPlayer(player);
615 for (Rolls::iterator it =
RollId.begin(); it !=
RollId.end(); ++it)
618 Roll::PlayerVote::iterator itr2 = roll->
playerVote.find(guid);
624 else if (itr2->second ==
NEED)
626 else if (itr2->second ==
PASS)
664 if (!mapId || !leader || (leader->
IsAlive() && leader->
GetMapId() != mapId))
710 if (itr->second.perm && !
sMapMgr->FindMap(itr->first, itr->second.save->GetInstanceId()))
714 stmt->
setUInt32(1, itr->second.save->GetInstanceId());
717 itr->second.save->RemoveGroup(
this);
761 if (!switchLeader || !group->
GetBoundInstance(itr->second.save->GetDifficultyID(), itr->first))
762 if (itr->second.extendState)
766 if (switchLeader && !itr->second.perm)
779 if (!switchLeader && playerMap->IsNonRaidDungeon())
781 if (save->GetGroupCount() == 0 && save->GetPlayerCount() == 0)
783 TC_LOG_DEBUG(
"maps",
"Group::ConvertLeaderInstancesToGroup: Group for player {} is taking over unbound instance map {} with Id {}", player->
GetName(), playerMap->GetId(), playerMap->GetInstanceId());
800 bool isOriginalGroup =
false;
812 isOriginalGroup =
true;
904 data <<
uint32(countDown);
907 for (Roll::PlayerVote::const_iterator itr=r.
playerVote.begin(); itr != r.
playerVote.end(); ++itr)
931 data <<
uint32(countDown);
934 voteMask &= ~ROLL_FLAG_TYPE_NEED;
935 data <<
uint8(voteMask);
949 data <<
uint8(rollNumber);
950 data <<
uint8(rollType);
951 data <<
uint8(autoPass);
953 for (Roll::PlayerVote::const_iterator itr = roll.
playerVote.begin(); itr != roll.
playerVote.end(); ++itr)
973 data <<
uint8(rollNumber);
974 data <<
uint8(rollType);
976 for (Roll::PlayerVote::const_iterator itr = roll.
playerVote.begin(); itr != roll.
playerVote.end(); ++itr)
996 for (Roll::PlayerVote::const_iterator itr = roll.
playerVote.begin(); itr != roll.
playerVote.end(); ++itr)
1047 std::vector<LootItem>::iterator i;
1051 for (i = loot->
items.begin(); i != loot->
items.end(); ++i, ++itemSlot)
1056 item =
sObjectMgr->GetItemTemplate(i->itemid);
1067 Roll* r =
new Roll(newitemGUID, *i);
1072 Player* member = itr->GetSource();
1095 loot->
items[itemSlot].is_blocked =
true;
1100 for (Roll::PlayerVote::const_iterator itr=r->
playerVote.begin(); itr != r->
playerVote.end(); ++itr)
1106 if (itr->second ==
PASS)
1121 creature->m_groupLootTimer = 60000;
1122 creature->lootingGroupLowGUID =
GetGUID();
1126 go->m_groupLootTimer = 60000;
1127 go->lootingGroupLowGUID =
GetGUID();
1135 i->is_underthreshold =
true;
1140 if (!i->follow_loot_rules)
1143 item =
sObjectMgr->GetItemTemplate(i->itemid);
1151 Roll* r =
new Roll(newitemGUID, *i);
1156 Player* member = itr->GetSource();
1186 creature->m_groupLootTimer = 60000;
1187 creature->lootingGroupLowGUID =
GetGUID();
1191 go->m_groupLootTimer = 60000;
1192 go->lootingGroupLowGUID =
GetGUID();
1204 for (std::vector<LootItem>::iterator i = loot->
items.begin(); i != loot->
items.end(); ++i, ++itemSlot)
1209 item =
sObjectMgr->GetItemTemplate(i->itemid);
1216 Roll* r =
new Roll(newitemGUID, *i);
1220 Player* playerToRoll = itr->GetSource();
1221 if (!playerToRoll || !playerToRoll->
GetSession())
1247 loot->
items[itemSlot].is_blocked =
true;
1250 for (Roll::PlayerVote::const_iterator itr = r->
playerVote.begin(); itr != r->
playerVote.end(); ++itr)
1256 if (itr->second ==
PASS)
1266 creature->m_groupLootTimer = 60000;
1267 creature->lootingGroupLowGUID =
GetGUID();
1271 go->m_groupLootTimer = 60000;
1272 go->lootingGroupLowGUID =
GetGUID();
1279 i->is_underthreshold =
true;
1282 for (std::vector<LootItem>::iterator i = loot->
quest_items.begin(); i != loot->
quest_items.end(); ++i, ++itemSlot)
1284 if (!i->follow_loot_rules)
1287 item =
sObjectMgr->GetItemTemplate(i->itemid);
1289 Roll* r =
new Roll(newitemGUID, *i);
1293 Player* playerToRoll = itr->GetSource();
1294 if (!playerToRoll || !playerToRoll->
GetSession())
1318 for (Roll::PlayerVote::const_iterator itr = r->
playerVote.begin(); itr != r->
playerVote.end(); ++itr)
1324 if (itr->second ==
PASS)
1334 creature->m_groupLootTimer = 60000;
1335 creature->lootingGroupLowGUID =
GetGUID();
1339 go->m_groupLootTimer = 60000;
1340 go->lootingGroupLowGUID =
GetGUID();
1350 TC_LOG_DEBUG(
"network",
"Group::MasterLoot (SMSG_LOOT_MASTER_LIST)");
1352 for (std::vector<LootItem>::iterator i = loot->
items.begin(); i != loot->
items.end(); ++i)
1357 i->is_blocked = !i->is_underthreshold;
1362 if (!i->follow_loot_rules)
1365 i->is_blocked = !i->is_underthreshold;
1375 Player* looter = itr->GetSource();
1390 Player* looter = itr->GetSource();
1398 Rolls::iterator rollI =
GetRoll(Guid);
1399 if (rollI ==
RollId.end())
1401 Roll* roll = *rollI;
1403 Roll::PlayerVote::iterator itr = roll->
playerVote.find(playerGUID);
1427 itr->second =
GREED;
1445 for (Rolls::iterator itr =
RollId.begin(); itr !=
RollId.end();)
1447 if ((*itr)->getLoot() == pLoot) {
1458 Roll* roll = *rollI;
1473 Player* player =
nullptr;
1475 for (Roll::PlayerVote::const_iterator itr = roll->
playerVote.begin(); itr != roll->
playerVote.end(); ++itr)
1477 if (itr->second !=
NEED)
1481 if (!player || (allowedMap !=
nullptr && player->
FindMap() != allowedMap))
1489 if (maxresul < randomN)
1491 maxguid = itr->first;
1534 Player* player =
nullptr;
1537 Roll::PlayerVote::iterator itr;
1544 if (!player || (allowedMap !=
nullptr && player->
FindMap() != allowedMap))
1552 if (maxresul < randomN)
1554 maxguid = itr->first;
1556 rollvote = itr->second;
1571 if (rollvote ==
GREED)
1608 for (
uint32 i = 0; i < max_slot; ++i)
1726 if (slot->
guid == citr->guid)
1736 data <<
uint8(onlineState);
1737 data <<
uint8(citr->group);
1738 data <<
uint8(citr->flags);
1739 data <<
uint8(citr->roles);
1782 member = itr->GetSource();
1792 Player* player = itr->GetSource();
1793 if (!player || (!ignoredPlayer.
IsEmpty() && player->
GetGUID() == ignoredPlayer) || (ignorePlayersInBGRaid && player->
GetGroup() !=
this))
1796 if (player->
GetSession() && (group == -1 || itr->getSubGroup() == group))
1805 Player* player = itr->GetSource();
1833 slot->group = group;
1852 if (!member1 || !member2)
1875 if (prevSubGroup == group)
1879 slot->group = group;
1901 if (player->GetGroup() ==
this)
1902 player->GetGroupRef().setSubGroup(group);
1906 prevSubGroup = player->GetOriginalSubGroup();
1907 player->GetOriginalGroupRef().setSubGroup(group);
1948 Player* pNewLooter =
nullptr;
1952 if (player->IsAtGroupRewardDistance(pLootedObject))
1954 pNewLooter = player;
1965 if (player->IsAtGroupRewardDistance(pLootedObject))
1967 pNewLooter = player;
1975 if (oldLooterGUID != pNewLooter->
GetGUID())
2023 Player* member = itr->GetSource();
2027 errorGuid = member->
GetGUID();
2032 if (member->
GetTeam() != team)
2036 if (memberBracketEntry != bracketEntry)
2068 if (bgOrTemplate->
isArena() && memberscount != MinPlayerCount)
2151 bool isEmpty =
true;
2170 for (
GroupReference* groupRef = group->GetFirstMember(); groupRef !=
nullptr; groupRef = groupRef->
next())
2171 if (
Player* player = groupRef->GetSource())
2172 player->SendResetInstanceSuccess(instanceSave->
GetMapId());
2185 if (isEmpty && instanceSave->
CanReset())
2187 if (map && map->
IsDungeon() && SendMsgTo)
2191 if (!instanceEntrance)
2210 stmt->
setUInt32(6, member.guid.GetCounter());
2256 if (!mapEntry || !mapEntry->
IsDungeon())
2268 BoundInstancesMap::iterator itr =
m_boundInstances[difficulty].find(mapId);
2270 return &itr->second;
2281 if (!load && (!bind.
save || permanent != bind.
perm || save != bind.
save))
2292 if (bind.
save != save)
2300 bind.
perm = permanent;
2302 TC_LOG_DEBUG(
"maps",
"Group::BindToInstance: {}, storage id: {} is now bound to map {}, instance {}, difficulty {}",
2310 BoundInstancesMap::iterator itr =
m_boundInstances[difficulty].find(mapid);
2318 stmt->
setUInt32(1, itr->second.save->GetInstanceId());
2323 itr->second.save->RemoveGroup(
this);
2353 Player* member =
nullptr;
2357 if (member && m_maxEnchantingLevel < member->GetSkillValue(
SKILL_ENCHANTING))
2388 slot->roles = roles;
2472 if (itr->name == name)
2482 return mslot->flags;
2498 return (mslot1->group == slot2->
group);
2511 return mslot->group;
2567 Rolls::iterator iter;
2568 for (iter =
RollId.begin(); iter !=
RollId.end(); ++iter)
2569 if ((*iter)->itemGUID == Guid && (*iter)->isValid())
2614 if (itr->guid == Guid)
2622 if (itr->guid == Guid)
2642 if (itr->flags & flag)
2643 itr->flags &= ~flag;
2649 slot->flags |= flag;
2651 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
@ 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
MapDifficultyEntry 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
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)
bool IsAssistant(ObjectGuid guid) const
void _initRaidSubGroupsCounter()
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 SetDungeonDifficultyID(Difficulty difficulty)
void SetMasterLooterGuid(ObjectGuid guid)
void SetRaidDifficultyID(Difficulty difficulty)
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)
Difficulty GetRaidDifficultyID() const
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)
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
GroupReference * GetFirstMember()
Difficulty GetDungeonDifficultyID() const
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
Difficulty GetDifficultyID(MapEntry const *mapEntry) const
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)
void SetLooterGuid(ObjectGuid guid)
void LinkMember(GroupReference *pRef)
ItemQualities m_lootThreshold
void RemoveUniqueGroupMemberFlag(GroupMemberFlags flag)
void MasterLoot(Loot *loot, WorldObject *pLootedObject)
void SendLooter(Creature *creature, Player *pLooter)
bool RemoveGroup(Group *group)
Difficulty GetDifficultyID() const
uint32 GetInstanceId() const
void AddGroup(Group *group)
void insertFirst(LinkedListElement *pElem)
MapEntry const * GetEntry() 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)
void SendEquipError(InventoryResult msg, Item const *item1=nullptr, Item const *item2=nullptr, uint32 itemId=0) const
bool HaveAtClient(Object const *u) 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 itemId, 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 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 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)
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
Difficulty GetDungeonDifficultyID() 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
bool CheckInstanceValidity(bool)
Difficulty GetRaidDifficultyID() const
bool GetPassOnGroupLoot() const
void SendResetInstanceSuccess(uint32 MapId) const
static Difficulty CheckLoadedRaidDifficultyID(Difficulty difficulty)
uint8 GetSubGroup() const
Group * GetGroupInvite() const
static Difficulty CheckLoadedDungeonDifficultyID(Difficulty difficulty)
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
uint32 itemRandomPropertySeed
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)
bool BuildPacket(WorldPacket *packet)
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 GetQuality() const
int32 GetMaxCount() const
uint32 GetRequiredDisenchantSkill() const
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