78 ByteBuffer itemData(7 * 2 + 7 * 4 + 3 * 4 + 3 * 4 + 1);
89 data <<
uint8(trader_data);
157 itemData <<
uint8(i);
195 if (traderCanTrade && playerCanTrade)
203 SF_LOG_DEBUG(
"network",
"partner storing: %u", myItems[i]->GetGUIDLow());
206 sLog->outCommand(
_player->GetSession()->GetAccountId(),
"GM %s (Account: %u) trade: %s (Entry: %d Count: %u) to player: %s (Account: %u)",
207 _player->GetName().c_str(),
_player->GetSession()->GetAccountId(),
221 SF_LOG_DEBUG(
"network",
"player storing: %u", hisItems[i]->GetGUIDLow());
224 sLog->outCommand(trader->
GetSession()->
GetAccountId(),
"GM %s (Account: %u) trade: %s (Entry: %d Count: %u) to player: %s (Account: %u)",
227 _player->GetName().c_str(),
_player->GetSession()->GetAccountId());
234 _player->MoveItemToInventory(playerDst, hisItems[i],
true,
true);
244 SF_LOG_ERROR(
"network",
"trader can't store item: %u", myItems[i]->GetGUIDLow());
246 _player->MoveItemToInventory(playerDst, myItems[i],
true,
true);
248 SF_LOG_ERROR(
"network",
"player can't take item back: %u", myItems[i]->GetGUIDLow());
254 SF_LOG_ERROR(
"network",
"player can't store item: %u", hisItems[i]->GetGUIDLow());
258 SF_LOG_ERROR(
"network",
"trader can't take item back: %u", hisItems[i]->GetGUIDLow());
276 SF_LOG_DEBUG(
"network",
"player trade item %u bag: %u slot: %u", item->GetGUIDLow(), item->GetBagSlot(), item->GetSlot());
284 SF_LOG_DEBUG(
"network",
"partner trade item %u bag: %u slot: %u", item->GetGUIDLow(), item->GetBagSlot(), item->GetSlot());
362 if (!item->CanBeTraded(
false,
true))
368 if (item->IsBindedNotWith(trader))
378 if (!item->CanBeTraded(
false,
true))
396 Spell* my_spell = NULL;
399 Spell* his_spell = NULL;
484 if (!myCanCompleteTrade)
494 else if (!hisCanCompleteTrade)
511 _player->MoveItemFromInventory(myItems[i]->GetBagSlot(), myItems[i]->GetSlot(),
true);
528 sLog->outCommand(
_player->GetSession()->GetAccountId(),
"GM %s (Account: %u) give money (Amount: " UI64FMTD ") to player: %s (Account: %u)",
529 _player->GetName().c_str(),
_player->GetSession()->GetAccountId(),
539 _player->GetName().c_str(),
_player->GetSession()->GetAccountId());
550 my_spell->
prepare(&my_targets);
553 his_spell->
prepare(&his_targets);
564 _player->SaveInventoryAndGoldToDB(trans);
750 recvPacket >> tradeSlot;
800 recvPacket >> tradeSlot;
@ EQUIP_ERR_TOO_MUCH_GOLD
@ ITEM_FLAG_BOP_TRADEABLE
@ LANG_NOT_PARTNER_FREE_TRADE_SLOTS
@ LANG_NOT_FREE_TRADE_SLOTS
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
std::vector< ItemPosCount > ItemPosCountVec
@ TRADE_SLOT_TRADED_COUNT
@ TRADE_STATUS_NOT_ON_TAPLIST
@ TRADE_STATUS_NOT_ENOUGH_CURRENCY
@ TRADE_STATUS_TARGET_DEAD
@ TRADE_STATUS_PLAYER_NOT_FOUND
@ TRADE_STATUS_ALREADY_TRADING
@ TRADE_STATUS_CURRENCY_NOT_TRADABLE
@ TRADE_STATUS_WRONG_REALM
@ 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
static void setAcceptTradeMode(TradeData *myTrade, TradeData *hisTrade, Item **myItems, Item **hisItems)
static void clearAcceptTradeMode(TradeData *myTrade, TradeData *hisTrade)
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
@ TRIGGERED_FULL_MASK
Will ignore most target checks (mostly DBC target checks).
@ ITEM_FIELD_MAX_DURABILITY
@ ITEM_FIELD_GIFT_CREATOR
@ ITEM_FIELD_DYNAMIC_FLAGS
@ ITEM_FIELD_CREATE_PLAYED_TIME
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
bool WriteBit(uint32 bit)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
void WriteBits(T value, size_t bits)
void WriteByteSeq(uint8 b)
uint32 GetEnchantmentId(EnchantmentSlot slot) const
int32 GetSpellCharges(uint8 index=0) const
bool CanBeTraded(bool mail=false, bool trade=false) const
int32 GetItemRandomPropertyId() const
ItemTemplate const * GetTemplate() const
uint32 GetItemSuffixFactor() const
void SetInTrade(bool b=true)
static Player * FindPlayer(uint64)
uint32 GetUInt32Value(uint16 index) const
uint32 GetDynamicUInt32Value(uint32 tab, uint16 index) const
uint64 GetUInt64Value(uint16 index) const
bool HasFlag(uint16 index, uint32 flag) const
void SetUInt32Value(uint16 index, uint32 value)
void SetUInt64Value(uint16 index, uint64 value)
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=NULL, uint32 itemid=0)
void SaveInventoryAndGoldToDB(SQLTransaction &trans)
bool ModifyMoney(int64 amount, bool sendError=true)
uint32 GetTotalPlayedTime() const
InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *pItem, bool swap=false) const
InventoryResult CanStoreItems(Item **pItem, int count) const
WorldSession * GetSession() const
void MoveItemFromInventory(uint8 bag, uint8 slot, bool update)
void MoveItemToInventory(ItemPosCountVec const &dest, Item *pItem, bool update, bool in_characterInventoryDB=false)
bool HasEnoughMoney(uint64 amount) const
void SetTradeItemTarget(Player *caster)
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 cast_count, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE, Opcodes opcode=SMSG_CAST_FAILED)
SpellCastTargets m_targets
void prepare(SpellCastTargets const *targets, AuraEffect const *triggeredByAura=NULL)
SpellCastResult CheckCast(bool strict)
Item * GetSpellCastItem() const
bool HasItem(uint64 itemGuid) const
bool HasSpellCastItem() const
void SetMoney(uint64 money)
Player * GetTrader() const
void SetInAcceptProcess(bool state)
Item * GetItem(TradeSlots slot) const
void SetAccepted(bool state, bool crosssend=false)
void SetItem(TradeSlots slot, Item *item)
void SetSpell(uint32 spell_id, Item *castItem=NULL)
uint32 getVirtualRealm() const
bool HasUnitState(const uint32 f) const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
std::string const & GetName() const
void Initialize(Opcodes opcode, size_t newres=200)
const char * GetSkyFireString(int32 entry) const
void moveItems(Item *myItems[], Item *hisItems[])
void HandleIgnoreTradeOpcode(WorldPacket &recvPacket)
bool isLogingOut() const
Is the user engaged in a log out process?
void SendNotification(const char *format,...) ATTR_PRINTF(2
void HandleClearTradeItemOpcode(WorldPacket &recvPacket)
void HandleSetTradeItemOpcode(WorldPacket &recvPacket)
void HandleUnacceptTradeOpcode(WorldPacket &recvPacket)
bool PlayerRecentlyLoggedOut() const
bool PlayerLogout() const
void HandleSetTradeGoldOpcode(WorldPacket &recvPacket)
Player * GetPlayer() const
void HandleBusyTradeOpcode(WorldPacket &recvPacket)
void SendCancelTrade(TradeStatus status)
void HandleBeginTradeOpcode(WorldPacket &recvPacket)
void HandleCancelTradeOpcode(WorldPacket &recvPacket)
bool HasPermission(uint32 permissionId)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleAcceptTradeOpcode(WorldPacket &recvPacket)
uint32 GetAccountId() const
void SendTradeStatus(TradeStatus status)
void HandleInitiateTradeOpcode(WorldPacket &recvPacket)
void SendUpdateTrade(bool trader_data=true)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
@ SMSG_TRADE_STATUS_EXTENDED
@ CONFIG_ALLOW_TWO_SIDE_TRADE