AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Group.cpp File Reference
#include "Group.h"
#include "AreaDefines.h"
#include "Battleground.h"
#include "BattlegroundMgr.h"
#include "Config.h"
#include "DatabaseEnv.h"
#include "GameTime.h"
#include "GroupMgr.h"
#include "InstanceSaveMgr.h"
#include "LFG.h"
#include "LFGMgr.h"
#include "Log.h"
#include "MapMgr.h"
#include "MiscPackets.h"
#include "ObjectMgr.h"
#include "Opcodes.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "SharedDefines.h"
#include "UpdateFieldFlags.h"
#include "Util.h"
#include "World.h"
#include "WorldPacket.h"
#include "WorldSession.h"
#include "ArenaTeam.h"
#include "ArenaTeamMgr.h"

Go to the source code of this file.

Functions

static void SendRollWonItemViaMail (Player *player, LootItem const *lootItem, uint32 itemId)
 
bool CanRollOnItem (LootItem const &item, Player const *player, Loot *loot)
 

Function Documentation

◆ CanRollOnItem()

bool CanRollOnItem ( LootItem const &  item,
Player const *  player,
Loot loot 
)
994{
995 // Players can't roll on unique items if they already reached the maximum quantity of that item
996 ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item.itemid);
997 if (!proto)
998 return false;
999
1000 uint32 itemCount = player->GetItemCount(item.itemid);
1001 if ((proto->MaxCount > 0 && static_cast<int32>(itemCount) >= proto->MaxCount))
1002 return false;
1003
1004 if (!item.AllowedForPlayer(player, loot->sourceWorldObjectGUID))
1005 return false;
1006
1007 return true;
1008}
std::int32_t int32
Definition Define.h:103
std::uint32_t uint32
Definition Define.h:107
#define sObjectMgr
Definition ObjectMgr.h:1732
Definition ItemTemplate.h:619
int32 MaxCount
Definition ItemTemplate.h:644
ObjectGuid sourceWorldObjectGUID
Definition LootMgr.h:330

References LootItem::AllowedForPlayer(), Player::GetItemCount(), LootItem::itemid, ItemTemplate::MaxCount, sObjectMgr, and Loot::sourceWorldObjectGUID.

Referenced by Group::GroupLoot(), and Group::NeedBeforeGreed().

◆ SendRollWonItemViaMail()

static void SendRollWonItemViaMail ( Player player,
LootItem const *  lootItem,
uint32  itemId 
)
static
67{
68 Item* mailItem = Item::CreateItem(itemId, lootItem->count, player, false, lootItem->randomPropertyId);
69 if (!mailItem)
70 return;
71
72 AllowedLooterSet looters = lootItem->GetAllowedLooters();
73 ItemTemplate const* proto = mailItem->GetTemplate();
74 // Preserve the 2-hour group trade window the item would have had if stored directly.
75 if (looters.size() > 1 && proto->GetMaxStackSize() == 1 &&
76 (proto->Bonding == BIND_WHEN_PICKED_UP || proto->Bonding == BIND_QUEST_ITEM) &&
78 {
79 mailItem->SetBinding(true);
80 mailItem->SetSoulboundTradeable(looters);
82
83 std::string lootersStr;
84 for (ObjectGuid const& guid : looters)
85 {
86 if (!lootersStr.empty())
87 lootersStr += ' ';
88 lootersStr += std::to_string(guid.GetCounter());
89 }
90
92 stmt->SetData(0, mailItem->GetGUID().GetCounter());
93 stmt->SetData(1, lootersStr);
94 CharacterDatabase.Execute(stmt);
95 }
96
97 player->SendItemRetrievalMail(mailItem);
98}
@ CHAR_INS_ITEM_BOP_TRADE
Definition CharacterDatabase.h:122
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
@ BIND_QUEST_ITEM
Definition ItemTemplate.h:99
@ BIND_WHEN_PICKED_UP
Definition ItemTemplate.h:96
GuidSet AllowedLooterSet
Definition LootMgr.h:151
@ ITEM_FIELD_CREATE_PLAYED_TIME
Definition UpdateFields.h:71
@ CONFIG_SET_BOP_ITEM_TRADEABLE
Definition WorldConfig.h:126
Definition Item.h:220
static Item * CreateItem(uint32 item, uint32 count, Player const *player=nullptr, bool clone=false, uint32 randomPropertyId=0)
Definition Item.cpp:1093
void SetBinding(bool val)
Definition Item.h:235
void SetSoulboundTradeable(AllowedLooterSet &allowedLooters)
Definition Item.cpp:1264
ItemTemplate const * GetTemplate() const
Definition Item.cpp:544
Definition ObjectGuid.h:118
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:639
uint32 GetTotalPlayedTime()
Definition Player.h:1206
void SendItemRetrievalMail(uint32 itemEntry, uint32 count)
Definition PlayerMisc.cpp:432
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
#define sWorld
Definition World.h:317
uint32 GetMaxStackSize() const
Definition ItemTemplate.h:727
uint32 Bonding
Definition ItemTemplate.h:663

References BIND_QUEST_ITEM, BIND_WHEN_PICKED_UP, ItemTemplate::Bonding, CHAR_INS_ITEM_BOP_TRADE, CharacterDatabase, CONFIG_SET_BOP_ITEM_TRADEABLE, LootItem::count, Item::CreateItem(), LootItem::GetAllowedLooters(), ObjectGuid::GetCounter(), Object::GetGUID(), ItemTemplate::GetMaxStackSize(), Item::GetTemplate(), Player::GetTotalPlayedTime(), ITEM_FIELD_CREATE_PLAYED_TIME, LootItem::randomPropertyId, Player::SendItemRetrievalMail(), Item::SetBinding(), PreparedStatementBase::SetData(), Item::SetSoulboundTradeable(), Object::SetUInt32Value(), and sWorld.

Referenced by Group::CountTheRoll().