23 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_HELLO_REQUEST");
33 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionHelloOpcode - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(guid)));
111 data <<
uint32(errorCode);
113 data <<
uint32(auction ? auction->
Id : 0);
148 data <<
uint32(itemEntry);
155 data <<
uint32(auctionId);
180 data <<
uint32(auctionId);
181 data <<
uint32(itemEntry);
182 data <<
uint32(randomPropertyId);
198 recvData >> buyout >> bid;
209 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionSellItem - Player %s (GUID %u) attempted to sell item with higher price than max gold amount.",
_player->GetName().c_str(),
_player->GetGUIDLow());
215 auctioneer[3] = recvData.
ReadBit();
225 auctioneer[0] = recvData.
ReadBit();
227 for (
uint8 i = 0; i < itemCount; i++)
229 itemGuids[i][4] = recvData.
ReadBit();
230 itemGuids[i][6] = recvData.
ReadBit();
231 itemGuids[i][2] = recvData.
ReadBit();
232 itemGuids[i][3] = recvData.
ReadBit();
233 itemGuids[i][5] = recvData.
ReadBit();
234 itemGuids[i][7] = recvData.
ReadBit();
235 itemGuids[i][1] = recvData.
ReadBit();
236 itemGuids[i][0] = recvData.
ReadBit();
239 auctioneer[6] = recvData.
ReadBit();
240 auctioneer[2] = recvData.
ReadBit();
241 auctioneer[1] = recvData.
ReadBit();
242 auctioneer[4] = recvData.
ReadBit();
243 auctioneer[5] = recvData.
ReadBit();
244 auctioneer[7] = recvData.
ReadBit();
246 for (
uint8 i = 0; i < itemCount; i++)
250 recvData >> count[i];
258 if (!itemGuids[i] || !count[i] || count[i] > 1000)
277 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionSellItem - Unit (GUID: %u) not found or you can't interact with him.",
GUID_LOPART(auctioneer));
282 if (!auctionHouseEntry)
284 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionSellItem - Unit (GUID: %u) has wrong faction.",
GUID_LOPART(auctioneer));
307 for (
uint32 i = 0; i < itemCount; ++i)
326 finalCount += count[i];
335 for (
uint32 i = 0; i < itemCount; ++i)
337 Item* item = items[i];
346 Item* item = items[0];
351 uint64 deposit =
sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, etime, item, finalCount);
366 if (itemCount == 1 && item->
GetCount() == count[0])
370 sLog->outCommand(
GetAccountId(),
"GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",
387 SF_LOG_INFO(
"network",
"CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) "
388 "to auctioneer %u with count %u with initial bid " UI64FMTD " with buyout " UI64FMTD " and with time %u (in sec) in auctionhouse %u",
400 _player->SaveInventoryAndGoldToDB(trans);
412 SF_LOG_ERROR(
"network",
"CMSG_AUCTION_SELL_ITEM: Could not create clone of item %u", item->
GetEntry());
420 sLog->outCommand(
GetAccountId(),
"GM %s (Account: %u) create auction: %s (Entry: %u Count: %u)",
437 SF_LOG_INFO(
"network",
"CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to "
438 "auctioneer %u with count %u with initial bid " UI64FMTD " with buyout " UI64FMTD " and with time %u (in sec) in auctionhouse %u",
444 for (
uint32 j = 0; j < itemCount; ++j)
446 Item* item2 = items[j];
474 _player->SaveInventoryAndGoldToDB(trans);
488 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_PLACE_BID");
494 recvData >> auctionId;
497 recvData.
ReadGuidMask(auctioneer, 1, 6, 3, 7, 2, 4, 0, 5);
500 if (!auctionId || !price)
506 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionPlaceBid - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(auctioneer)));
536 if (price <= auction->bid || price < auction->startbid)
540 if ((price < auction->buyout || auction->
buyout == 0) &&
557 if (price < auction->buyout || auction->
buyout == 0)
574 auction->
bid = price;
601 sAuctionMgr->SendAuctionSalePendingMail(auction, trans);
602 sAuctionMgr->SendAuctionSuccessfulMail(auction, trans);
620 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_REMOVE_ITEM");
625 recvData >> auctionId;
627 recvData.
ReadGuidMask(auctioneer, 6, 4, 2, 3, 7, 5, 1, 0);
633 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionRemoveItem - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(auctioneer)));
657 sAuctionMgr->SendAuctionCancelledToBidderMail(auction, trans, pItem);
677 SF_LOG_ERROR(
"network",
"CHEATER: %u tried to cancel auction (id: %u) of another player or auction is NULL", player->
GetGUIDLow(), auctionId);
698 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_LIST_BIDDER_ITEMS");
702 uint8 outbiddedCount;
703 uint32 outbiddedAuctionIds[128];
705 recvData >> listFrom;
708 outbiddedCount = recvData.
ReadBits(7);
713 for (
uint8 i = 0; i < outbiddedCount; i++)
714 recvData >> outbiddedAuctionIds[i];
727 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionListBidderItems - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(auctioneer)));
744 for (
uint8 i = 0; i < outbiddedCount; i++)
764 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_LIST_OWNER_ITEMS");
769 recvData >> listfrom;
771 recvData.
ReadGuidMask(auctioneer, 4, 5, 2, 1, 7, 0, 3, 6);
777 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionListOwnerItems - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(auctioneer)));
795 data <<
uint32(totalcount);
803 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_LIST_ITEMS");
806 std::string searchString;
807 uint8 levelMin, levelMax, searchStringLen;
808 uint32 listFrom, auctionSlotId, auctionMainCategory, auctionSubCategory, quality, sortCount;
809 bool usableItems, exactMatch;
811 recvData >> auctionSlotId;
812 recvData >> listFrom;
813 recvData >> auctionMainCategory;
815 recvData >> levelMax >> levelMin;
817 recvData >> auctionSubCategory;
818 recvData >> sortCount;
821 for (
uint8 i = 0; i < sortCount; i++)
825 exactMatch = recvData.
ReadBit();
826 usableItems = recvData.
ReadBit();
828 searchStringLen = recvData.
ReadBits(8);
832 searchString = recvData.
ReadString(searchStringLen);
838 SF_LOG_DEBUG(
"network",
"WORLD: HandleAuctionListItems - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(auctioneer)));
858 std::wstring wsearchedname;
865 wsearchedname, listFrom, levelMin, levelMax, usableItems,
866 auctionSlotId, auctionMainCategory, auctionSubCategory, quality,
870 data <<
uint32(totalcount);
877 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_AUCTION_LIST_PENDING_SALES");
#define AUCTION_SEARCH_DELAY
#define MAX_AUCTION_ITEMS
@ ERR_AUCTION_NOT_ENOUGHT_MONEY
@ ERR_AUCTION_ITEM_NOT_FOUND
@ ERR_AUCTION_DATABASE_ERROR
@ ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID
@ ITEM_PROTO_FLAG_CONJURED
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
@ MAIL_CHECK_MASK_COPIED
This mail was returned. Do not allow returning mail back again.
uint32 GUID_LOPART(uint64 x)
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
@ UNIT_NPC_FLAG_AUCTIONEER
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
void wstrToLower(std::wstring &str)
static AuctionHouseEntry const * GetAuctionHouseEntry(uint32 factionTemplateId)
void BuildListBidderItems(WorldPacket &data, Player *player, uint32 &count, uint32 &totalcount)
void BuildListAuctionItems(WorldPacket &data, Player *player, std::wstring const &searchedname, uint32 listfrom, uint8 levelmin, uint8 levelmax, uint8 usable, uint32 inventoryType, uint32 itemClass, uint32 itemSubClass, uint32 quality, uint32 &count, uint32 &totalcount)
AuctionEntry * GetAuction(uint32 id) const
void AddAuction(AuctionEntry *auction)
void BuildListOwnerItems(WorldPacket &data, Player *player, uint32 &count, uint32 &totalcount)
bool RemoveAuction(AuctionEntry *auction, uint32 itemEntry)
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
bool WriteBit(uint32 bit)
void put(size_t pos, T value)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
uint32 ReadBits(size_t bits)
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
void ReadByteSeq(uint8 &b)
std::string ReadString(size_t length)
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
void WriteByteSeq(uint8 b)
void SetState(ItemUpdateState state, Player *forplayer=NULL)
Item * CloneItem(uint32 count, Player const *player=NULL) const
bool CanBeTraded(bool mail=false, bool trade=false) const
virtual void SaveToDB(SQLTransaction &trans)
void SetCount(uint32 value)
ItemTemplate const * GetTemplate() const
static void DeleteFromInventoryDB(SQLTransaction &trans, uint32 itemGuid)
bool IsNotEmptyBag() const
uint32 GetMaxStackCount() const
static void DeleteFromDB(SQLTransaction &trans, uint32 itemGuid)
void SendMailTo(SQLTransaction &trans, MailReceiver const &receiver, MailSender const &sender, MailCheckMask checked=MAIL_CHECK_MASK_NONE, uint32 deliver_delay=0)
MailDraft & AddItem(Item *item)
uint32 GetUInt32Value(uint16 index) const
uint32 GetGUIDLow() const
void SendUpdateToPlayer(Player *player)
void SaveInventoryAndGoldToDB(SQLTransaction &trans)
bool ModifyMoney(int64 amount, bool sendError=true)
Creature * GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask)
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, Unit *unit=NULL)
bool HasEnoughMoney(uint64 amount) const
void setUInt64(const uint8 index, const uint64 value)
void setUInt32(const uint8 index, const uint32 value)
uint32 getFaction() const
void RemoveAurasByType(AuraType auraType, uint64 casterGUID=0, Aura *except=NULL, bool negative=true, bool positive=true)
void SendAuctionHello(ObjectGuid guid, Creature *unit)
void HandleAuctionListPendingSales(WorldPacket &recvData)
void HandleAuctionListItems(WorldPacket &recvData)
void HandleAuctionListOwnerItems(WorldPacket &recvData)
const char * GetSkyFireString(int32 entry) const
void SendNotification(const char *format,...) ATTR_PRINTF(2
void SendAuctionBidderNotification(uint32 location, uint32 auctionId, uint64 bidder, uint32 bidSum, uint32 diff, uint32 item_template)
void SendAuctionRemovedNotification(uint32 auctionId, uint32 itemEntry, int32 randomPropertyId)
void HandleAuctionSellItem(WorldPacket &recvData)
void SendAuctionOwnerNotification(AuctionEntry *auction)
Player * GetPlayer() const
void SendAuctionCommandResult(AuctionEntry *auction, uint32 Action, uint32 ErrorCode, uint32 bidError=0)
void HandleAuctionHelloOpcode(WorldPacket &recvPacket)
bool HasPermission(uint32 permissionId)
void HandleAuctionListBidderItems(WorldPacket &recvData)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetAccountId() const
void HandleAuctionRemoveItem(WorldPacket &recvData)
void HandleAuctionPlaceBid(WorldPacket &recvData)
std::string const & GetPlayerName() const
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
@ SMSG_AUCTION_BIDDER_LIST_RESULT
@ SMSG_AUCTION_BIDDER_NOTIFICATION
@ SMSG_AUCTION_LIST_RESULT
@ SMSG_AUCTION_COMMAND_RESULT
@ SMSG_AUCTION_REMOVED_NOTIFICATION
@ SMSG_AUCTION_OWNER_LIST_RESULT
@ SMSG_AUCTION_LIST_PENDING_SALES
@ SMSG_AUCTION_OWNER_NOTIFICATION
@ CONFIG_AUCTION_LEVEL_REQ
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION
bool BuildAuctionInfo(WorldPacket &data) const
AuctionHouseEntry const * auctionHouseEntry
uint32 GetHouseId() const
static std::string BuildAuctionMailBody(uint32 lowGuid, uint64 bid, uint64 buyout, uint64 deposit, uint64 cut)
uint64 GetAuctionCut() const
std::string BuildAuctionMailSubject(MailAuctionAnswer response) const
void SaveToDB(SQLTransaction &trans) const
uint64 GetAuctionOutBid() const
the sum of outbid is (1% from current bid)*5, if bid is very small, it is 1c
void DeleteFromDB(SQLTransaction &trans) const