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 "TC9Sidecar.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 
)
1104{
1105 // Players can't roll on unique items if they already reached the maximum quantity of that item
1106 ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item.itemid);
1107 if (!proto)
1108 return false;
1109
1110 uint32 itemCount = player->GetItemCount(item.itemid, true);
1111 if ((proto->MaxCount > 0 && static_cast<int32>(itemCount) >= proto->MaxCount))
1112 return false;
1113
1114 if (!item.AllowedForPlayer(player, loot->sourceWorldObjectGUID))
1115 return false;
1116
1117 return true;
1118}
std::int32_t int32
Definition Define.h:103
std::uint32_t uint32
Definition Define.h:107
#define sObjectMgr
Definition ObjectMgr.h:1730
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
68{
69 Item* mailItem = Item::CreateItem(itemId, lootItem->count, player, false, lootItem->randomPropertyId);
70 if (!mailItem)
71 return;
72
73 AllowedLooterSet looters = lootItem->GetAllowedLooters();
74 ItemTemplate const* proto = mailItem->GetTemplate();
75 // Preserve the 2-hour group trade window the item would have had if stored directly.
76 if (looters.size() > 1 && proto->GetMaxStackSize() == 1 &&
77 (proto->Bonding == BIND_WHEN_PICKED_UP || proto->Bonding == BIND_QUEST_ITEM) &&
79 {
80 mailItem->SetBinding(true);
81 mailItem->SetSoulboundTradeable(looters);
83
84 std::string lootersStr;
85 for (ObjectGuid const& guid : looters)
86 {
87 if (!lootersStr.empty())
88 lootersStr += ' ';
89 lootersStr += std::to_string(guid.GetCounter());
90 }
91
93 stmt->SetData(0, mailItem->GetGUID().GetCounter());
94 stmt->SetData(1, lootersStr);
95 CharacterDatabase.Execute(stmt);
96 }
97
98 player->SendItemRetrievalMail(mailItem);
99}
@ 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:128
Definition Item.h:220
static Item * CreateItem(uint32 item, uint32 count, Player const *player=nullptr, bool clone=false, uint32 randomPropertyId=0)
Definition Item.cpp:1094
void SetBinding(bool val)
Definition Item.h:235
void SetSoulboundTradeable(AllowedLooterSet &allowedLooters)
Definition Item.cpp:1268
ItemTemplate const * GetTemplate() const
Definition Item.cpp:545
Definition ObjectGuid.h:121
LowType GetCounter() const
Definition ObjectGuid.h:149
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:643
uint32 GetTotalPlayedTime()
Definition Player.h:1210
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:318
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().