121 player->
StoreLootItem(lguid, req.LootListID, loot, aeResultPtr);
132 player->
SendNewItem(resultValue.item, resultValue.count,
false,
false,
true, resultValue.dungeonEncounterId);
145 std::vector<Loot*> forceLootRelease;
146 for (std::pair<ObjectGuid const, Loot*>
const& lootView : player->
GetAELootView())
148 Loot* loot = lootView.second;
153 if (shareMoney && player->
GetGroup())
157 std::vector<Player*> playersNear;
160 Player* member = itr.GetSource();
165 playersNear.push_back(member);
170 for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)
174 (*i)->ModifyMoney(goldPerPlayer + goldMod);
178 packet.
Money = goldPerPlayer;
180 packet.
SoleLooter = playersNear.size() <= 1 ? true :
false;
181 (*i)->SendDirectMessage(packet.
Write());
206 forceLootRelease.push_back(loot);
209 for (
Loot* loot : forceLootRelease)
228 if (
GetPlayer()->IsNonMeleeSpellCast(
false))
234 std::vector<Creature*> corpses;
239 if (corpses.size() > 49)
243 if (!corpses.empty())
248 if (!corpses.empty())
397 for (
auto const& [lootGuid, loot] : lootView)
419 TC_LOG_DEBUG(
"network",
"WorldSession::HandleLootMasterGiveOpcode (CMSG_LOOT_MASTER_GIVE, 0x02A3) Target = [{}].", target->
GetName());
431 TC_LOG_INFO(
"entities.player.cheat",
"MasterLootItem: Player {} tried to give an item to ineligible player {} !",
GetPlayer()->GetName(), target->
GetName());
441 if (req.LootListID >= loot->
items.size())
444 TC_LOG_DEBUG(
"loot",
"MasterLootItem: Player {} might be using a hack! (slot {}, size {})",
487 target->
SendNewItem(resultValue.item, resultValue.count,
false,
false,
true);
508 if (chrSpec->ClassID ==
GetPlayer()->GetClass())
DB2Storage< ChrSpecializationEntry > sChrSpecializationStore("ChrSpecialization.db2", &ChrSpecializationLoadInfo::Instance)
@ MoneyLootedFromCreatures
@ EQUIP_ERR_CANT_EQUIP_EVER
@ EQUIP_ERR_ITEM_MAX_COUNT
#define TC_LOG_DEBUG(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
@ LOOT_ERROR_MASTER_OTHER
@ LOOT_ERROR_MASTER_INV_FULL
@ LOOT_ERROR_MASTER_UNIQUE_ITEM
@ LOOT_ERROR_PLAYER_NOT_FOUND
#define INTERACTION_DISTANCE
std::vector< ItemPosCount > ItemPosCountVec
@ GAMEOBJECT_TYPE_FISHINGHOLE
@ GAMEOBJECT_TYPE_FISHINGNODE
@ GAMEOBJECT_TYPE_GATHERING_NODE
@ CORPSE_DYNFLAG_LOOTABLE
@ SPELL_AURA_MOD_MONEY_GAIN
@ PROC_SPELL_TYPE_MASK_ALL
T CalculatePct(T base, U pct)
bool IsValidLootTarget(Creature const *creature) const
AELootCreatureCheck(Player *looter, ObjectGuid mainLootTarget)
ObjectGuid _mainLootTarget
bool IsValidAELootTarget(Creature const *creature) const
bool operator()(Creature const *creature) const
static float constexpr LootDistance
void Add(Item *item, uint8 count, LootType lootType, uint32 dungeonEncounterId)
ObjectGuid const & GetGUID() const
void ForceUpdateFieldChange(UF::UpdateFieldPrivateSetter< T > const &)
UF::UpdateFieldHolder m_values
void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags)
std::unique_ptr< Loot > m_loot
void AllLootRemovedFromCorpse()
Loot * GetLootForPlayer(Player const *player) const override
bool IsFullyLooted() const
ObjectGuid GetOwnerGUID() const override
bool IsWithinDistInMap(Player const *player) const
bool IsFullyLooted() const
GameObjectValue const * GetGOValue() const
void OnLootRelease(Player *looter)
void SetLootState(LootState s, Unit *unit=nullptr)
GameobjectTypes GetGoType() const
uint32 GetUseCount() const
ObjectGuid GetMasterLooterGuid() const
GroupRefManager & GetMembers()
ItemTemplate const * GetTemplate() const
std::unique_ptr< Loot > m_loot
bool PlayerVote(Player *player, RollVote vote)
GameObject * GetGameObject(ObjectGuid const &guid)
Creature * GetCreature(ObjectGuid const &guid)
LowType GetCounter() const
static ObjectGuid const Empty
bool IsGameObject() const
bool IsCreatureOrVehicle() const
void RemoveDynamicFlag(uint32 flag)
UF::UpdateField< UF::ObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_OBJECT > m_objectData
void SendLootError(ObjectGuid const &lootObj, ObjectGuid const &owner, LootError error) const
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 itemId, bool update, ItemRandomBonusListId randomBonusListId=0, GuidSet const &allowedLooters=GuidSet(), ItemContext context=ItemContext::NONE, std::vector< int32 > const *bonusListIDs=nullptr, bool addToCollection=true)
bool ModifyMoney(int64 amount, bool sendError=true)
void ApplyItemLootedSpell(Item *item, bool apply)
void SendLootRelease(ObjectGuid guid) const
std::unordered_map< ObjectGuid, Loot * > m_AELootView
LootRoll * GetLootRoll(ObjectGuid const &lootObjectGuid, uint8 lootListId)
bool isAllowedToLoot(Creature const *creature) const
ObjectGuid const & GetLootGUID() const
void SetLootGUID(ObjectGuid const &guid)
bool IsAtGroupRewardDistance(WorldObject const *pRewardSource) const
WorldSession * GetSession() const
void DestroyItem(uint8 bag, uint8 slot, bool update)
void SendLoot(Loot &loot, bool aeLooting=false)
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject *ref=nullptr)
uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
std::unordered_map< ObjectGuid, Loot * > const & GetAELootView() const
void StoreLootItem(ObjectGuid lootWorldObjectGuid, uint8 lootSlot, Loot *loot, AELootResult *aeResult=nullptr)
Group * GetGroup(Optional< uint8 > partyIndex)
void SetLootSpecId(uint32 id)
Item * GetItemByGuid(ObjectGuid guid) const
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
void SendNewItem(Item *item, uint32 quantity, bool received, bool created, bool broadcast=false, uint32 dungeonEncounterId=0)
MutableFieldReference< T, false > ModifyValue(UpdateField< T, BlockBit, Bit >(Derived::*field))
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
void RemoveAurasWithInterruptFlags(InterruptFlags flag, SpellInfo const *source=nullptr)
float GetTotalAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const
bool IsInRaidWith(Unit const *unit) const
static void ProcSkillsAndAuras(Unit *actor, Unit *actionTarget, ProcFlagsInit const &typeMaskActor, ProcFlagsInit const &typeMaskActionTarget, ProcFlagsSpellType spellTypeMask, ProcFlagsSpellPhase spellPhaseMask, ProcFlagsHit hitMask, Spell *spell, DamageInfo *damageInfo, HealInfo *healInfo)
void RemoveUnitFlag(UnitFlags flags)
std::string const & GetName() const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsInMap(WorldObject const *obj) const
WorldPacket const * Write() override
Array< LootRequest, 100 > Loot
WorldPacket const * Write() override
Array< LootRequest, 100 > Loot
void HandleLootMasterGiveOpcode(WorldPackets::Loot::MasterLootItem &masterLootItem)
void HandleLootReleaseOpcode(WorldPackets::Loot::LootRelease &packet)
void HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney &packet)
void HandleLootOpcode(WorldPackets::Loot::LootUnit &packet)
void DoLootRelease(Loot *loot)
Player * GetPlayer() const
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem &packet)
void HandleSetLootSpecialization(WorldPackets::Loot::SetLootSpecialization &packet)
void HandleLootRoll(WorldPackets::Loot::LootRoll &packet)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Corpse * GetCorpse(WorldObject const &u, ObjectGuid const &guid)
auto MapGetValuePtr(M &map, typename M::key_type const &key)
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
bool HasFlag(ItemFlags flag) const
bool HasAllowedLooter(ObjectGuid const &looter) const
std::vector< int32 > BonusListIDs
ItemRandomBonusListId randomBonusListId
GuidSet const & GetAllowedLooters() const
void NotifyLootList(Map const *map) const
void NotifyMoneyRemoved(Map const *map)
void NotifyItemRemoved(uint8 lootListId, Map const *map)
ObjectGuid roundRobinPlayer
ObjectGuid const & GetOwnerGUID() const
ObjectGuid const & GetGUID() const
std::vector< LootItem > items
void RemoveLooter(ObjectGuid GUID)
uint32 GetDungeonEncounterId() const
LootMethod GetLootMethod() const
bool HasAllowedLooter(ObjectGuid const &looter) const
UpdateField< uint32, 0, 2 > DynamicFlags
struct GameObjectValue::@193 FishingHole