71 if (!item->IsWrapped())
77 tradeItem.
Unwrapped->Creator = item->GetCreator();
78 tradeItem.
Unwrapped->Charges = item->GetSpellCharges();
79 tradeItem.
Unwrapped->Lock = item->GetTemplate()->GetLockID() && item->IsLocked();
80 tradeItem.
Unwrapped->MaxDurability = item->m_itemData->MaxDurability;
81 tradeItem.
Unwrapped->Durability = item->m_itemData->Durability;
97 tradeUpdated.
Items.push_back(tradeItem);
119 if (traderCanTrade && playerCanTrade)
137 if (myItems[i]->IsBOPTradeable())
148 sLog->OutCommand(trader->
GetSession()->
GetAccountId(),
"GM {} (Account: {}) trade: {} (Entry: {} Count: {}) to player: {} (Account: {})",
155 if (hisItems[i]->IsBOPTradeable())
200 TC_LOG_DEBUG(
"network",
"player trade item {} bag: {} slot: {}", item->GetGUID().ToString(), item->GetBagSlot(), item->GetSlot());
208 TC_LOG_DEBUG(
"network",
"partner trade item {} bag: {} slot: {}", item->GetGUID().ToString(), item->GetBagSlot(), item->GetSlot());
311 if (!item->CanBeTraded(
false,
true))
318 if (item->IsBindedNotWith(trader))
329 if (!item->CanBeTraded(
false,
true))
348 Spell* my_spell =
nullptr;
351 Spell* his_spell =
nullptr;
498 sLog->OutCommand(trader->
GetSession()->
GetAccountId(),
"GM {} (Account: {}) give money (Amount: {}) to player: {} (Account: {})",
515 his_spell->
prepare(his_targets);
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
@ EQUIP_ERR_TOO_MUCH_GOLD
@ EQUIP_ERR_NOT_ENOUGH_MONEY
@ EQUIP_ERR_TRADE_BOUND_ITEM
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
uint64 const MAX_MONEY_AMOUNT
std::vector< ItemPosCount > ItemPosCountVec
@ PLAYER_FLAGS_EX_MERCENARY_MODE
@ TRADE_STATUS_NOT_ON_TAPLIST
@ TRADE_STATUS_TARGET_DEAD
@ TRADE_STATUS_STATE_CHANGED
@ TRADE_STATUS_LOGGING_OUT
@ TRADE_STATUS_TOO_FAR_AWAY
@ TRADE_STATUS_TARGET_STUNNED
@ TRADE_STATUS_PLAYER_IGNORED
@ TRADE_STATUS_TARGET_LOGGING_OUT
@ TRADE_STATUS_WRONG_FACTION
@ TRADE_STATUS_PLAYER_BUSY
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRADE_SLOT_TRADED_COUNT
static void setAcceptTradeMode(TradeData *myTrade, TradeData *hisTrade, Item **myItems, Item **hisItems)
static void clearAcceptTradeMode(TradeData *myTrade, TradeData *hisTrade)
bool CanBeTraded(bool mail=false, bool trade=false) const
ItemTemplate const * GetTemplate() const
bool IsBindedNotWith(Player const *player) const
void SetCreatePlayedTime(uint32 createPlayedTime)
void SetGiftCreator(ObjectGuid guid)
UF::UpdateField< UF::ItemData, 0, TYPEID_ITEM > m_itemData
void SetInTrade(bool b=true)
Difficulty GetDifficultyID() const
static ObjectGuid GetGUID(Object const *o)
bool HasIgnore(ObjectGuid const &ignoreGuid, ObjectGuid const &ignoreAccountGuid)
bool ModifyMoney(int64 amount, bool sendError=true)
bool HasPlayerFlagEx(PlayerFlagsEx flags) const
PlayerSocial * GetSocial() const
uint32 GetTotalPlayedTime() const
InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *pItem, bool swap=false) const
void SaveInventoryAndGoldToDB(CharacterDatabaseTransaction trans)
InventoryResult CanStoreItems(Item **items, int count, uint32 *offendingItemId) const
WorldSession * GetSession() const
Item * GetItemByPos(uint16 pos) const
void MoveItemFromInventory(uint8 bag, uint8 slot, bool update)
void MoveItemToInventory(ItemPosCountVec const &dest, Item *pItem, bool update, bool in_characterInventoryDB=false)
Player * GetTrader() const
TradeData * GetTradeData() const
void TradeCancel(bool sendback)
bool HasEnoughMoney(uint64 amount) const
void SetTradeItemTarget(Player *caster)
SpellCastTargets m_targets
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, SpellCastVisual spellVisual, ObjectGuid cast_count, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE, int32 *param1=nullptr, int32 *param2=nullptr)
SpellCastResult prepare(SpellCastTargets const &targets, AuraEffect const *triggeredByAura=nullptr)
SpellCastResult CheckCast(bool strict, int32 *param1=nullptr, int32 *param2=nullptr)
Item * GetSpellCastItem() const
bool HasSpellCastItem() const
void SetSpell(uint32 spell_id, Item *castItem=nullptr)
void SetMoney(uint64 money)
Player * GetTrader() const
bool HasItem(ObjectGuid itemGuid) const
uint32 GetClientStateIndex() const
void SetItem(TradeSlots slot, Item *item, bool update=false)
void SetInAcceptProcess(bool state)
void UpdateClientStateIndex()
void SetAccepted(bool state, bool forTrader=false)
Item * GetItem(TradeSlots slot) const
TradeData * GetTraderData() const
uint32 GetServerStateIndex() const
bool HasUnitState(const uint32 f) const
std::string const & GetName() const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool PartnerIsSameBnetAccount
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< TradeItem > Items
int32 ProposedEnchantment
void HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade &initiateTrade)
char const * GetTrinityString(uint32 entry) const
void HandleBeginTradeOpcode(WorldPackets::Trade::BeginTrade &beginTrade)
void moveItems(Item *myItems[], Item *hisItems[])
void HandleClearTradeItemOpcode(WorldPackets::Trade::ClearTradeItem &clearTradeItem)
void SendNotification(char const *format,...) ATTR_PRINTF(2
bool isLogingOut() const
Is the user engaged in a log out process?
void HandleSetTradeGoldOpcode(WorldPackets::Trade::SetTradeGold &setTradeGold)
bool PlayerRecentlyLoggedOut() const
bool PlayerLogout() const
ObjectGuid GetAccountGUID() const
Player * GetPlayer() const
void HandleBusyTradeOpcode(WorldPackets::Trade::BusyTrade &busyTrade)
void HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade &cancelTrade)
void HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade &acceptTrade)
void SendTradeStatus(WorldPackets::Trade::TradeStatus &status)
bool HasPermission(uint32 permissionId)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetBattlenetAccountId() const
uint32 GetAccountId() const
void HandleIgnoreTradeOpcode(WorldPackets::Trade::IgnoreTrade &ignoreTrade)
void HandleUnacceptTradeOpcode(WorldPackets::Trade::UnacceptTrade &unacceptTrade)
void HandleSetTradeCurrencyOpcode(WorldPackets::Trade::SetTradeCurrency &setTradeCurrency)
void SendUpdateTrade(bool trader_data=true)
void HandleSetTradeItemOpcode(WorldPackets::Trade::SetTradeItem &setTradeItem)
@ CONFIG_ALLOW_TWO_SIDE_TRADE
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
std::string ToString(Type &&val, Params &&... params)
@ RBAC_PERM_ALLOW_TWO_SIDE_TRADE
char const * GetDefaultLocaleName() const
UpdateField< int32, 0, 1 > ItemID
void Initialize(::Item const *item)
Optional< UnwrappedTradeItem > Unwrapped