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)
 
static bool ShouldMailRollWonItem (Group const *group, Roll const *roll, InventoryResult msg)
 
bool CanRollOnItem (LootItem const &item, Player const *player, Loot *loot)
 

Function Documentation

◆ CanRollOnItem()

bool CanRollOnItem ( LootItem const &  item,
Player const *  player,
Loot *  loot 
)
1135{
1136 // Players can't roll on unique items if they already reached the maximum quantity of that item
1137 ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item.itemid);
1138 if (!proto)
1139 return false;
1140
1141 uint32 itemCount = player->GetItemCount(item.itemid, true);
1142 if ((proto->MaxCount > 0 && static_cast<int32>(itemCount) >= proto->MaxCount))
1143 return false;
1144
1145 if (!item.AllowedForPlayer(player, loot->sourceWorldObjectGUID))
1146 return false;
1147
1148 return true;
1149}
std::int32_t int32
Definition Define.h:103
std::uint32_t uint32
Definition Define.h:107
#define sObjectMgr
Definition ObjectMgr.h:1731
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:129
Definition Item.h:220
static Item * CreateItem(uint32 item, uint32 count, Player const *player=nullptr, bool clone=false, uint32 randomPropertyId=0)
Definition Item.cpp:1099
void SetBinding(bool val)
Definition Item.h:235
void SetSoulboundTradeable(AllowedLooterSet &allowedLooters)
Definition Item.cpp:1273
ItemTemplate const * GetTemplate() const
Definition Item.cpp:538
Definition ObjectGuid.h:121
LowType GetCounter() const
Definition ObjectGuid.h:149
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:120
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:648
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:337
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().

◆ ShouldMailRollWonItem()

static bool ShouldMailRollWonItem ( Group const *  group,
Roll const *  roll,
InventoryResult  msg 
)
static
102{
103 // Only mail when bags are genuinely full. Unique/max-count failures must
104 // leave the item on the corpse so it can be re-rolled or freely looted.
105 if (msg != EQUIP_ERR_INVENTORY_FULL)
106 return false;
107
110 return true;
111
112 if ((mask & MAIL_ITEM_ON_FULL_INVENTORY_FLAG_LFG) && group->isLFGGroup())
113 return true;
114
115 return (mask & MAIL_ITEM_ON_FULL_INVENTORY_FLAG_RAID) && roll->lootedInRaid;
116}
@ MAIL_ITEM_ON_FULL_INVENTORY_FLAG_RAID
Definition Group.h:136
@ MAIL_ITEM_ON_FULL_INVENTORY_FLAG_ALL_GROUPS
Definition Group.h:135
@ MAIL_ITEM_ON_FULL_INVENTORY_FLAG_LFG
Definition Group.h:134
@ EQUIP_ERR_INVENTORY_FULL
Definition Item.h:97
@ CONFIG_LFG_MAIL_ITEM_ON_FULL_INVENTORY
Definition WorldConfig.h:390

References CONFIG_LFG_MAIL_ITEM_ON_FULL_INVENTORY, EQUIP_ERR_INVENTORY_FULL, Group::isLFGGroup(), Roll::lootedInRaid, MAIL_ITEM_ON_FULL_INVENTORY_FLAG_ALL_GROUPS, MAIL_ITEM_ON_FULL_INVENTORY_FLAG_LFG, MAIL_ITEM_ON_FULL_INVENTORY_FLAG_RAID, and sWorld.

Referenced by Group::CountTheRoll().