29 for (ItemMap::iterator itr =
mAitems.begin(); itr !=
mAitems.end(); ++itr)
58 uint32 timeHr = (((time / 60) / 60) / 12);
64 SF_LOG_DEBUG(
"auctionHouse",
"Multiplier: %f", multiplier);
84 std::string bidderName;
85 bool logGmTrade =
false;
95 bidderAccId =
sObjectMgr->GetPlayerAccountIdByGUID(bidderGuid);
98 if (logGmTrade && !
sObjectMgr->GetPlayerNameByGUID(bidderGuid, bidderName))
104 std::string ownerName;
110 sLog->outCommand(bidderAccId,
"GM %s (Account: %u) won item in auction: %s (Entry: %u Count: %u) and pay money: %lu. Original owner %s (Account: %u)",
115 if (bidder || bidderAccId)
143 if (owner || owner_accId)
155 if (owner || owner_accId)
186 if (owner || owner_accId)
203 uint32 oldBidder_accId = 0;
205 oldBidder_accId =
sObjectMgr->GetPlayerAccountIdByGUID(oldBidder_guid);
208 if (oldBidder || oldBidder_accId)
210 if (oldBidder && newBidder)
227 bidder_accId =
sObjectMgr->GetPlayerAccountIdByGUID(bidder_guid);
233 if (bidder || bidder_accId)
246 for (ItemMap::iterator itr =
mAitems.begin(); itr !=
mAitems.end(); ++itr)
258 SF_LOG_INFO(
"server.loading",
">> Loaded 0 auction items. DB table `auctionhouse` or `item_instance` is empty!");
267 Field* fields = result->Fetch();
275 SF_LOG_ERROR(
"misc",
"AuctionHouseMgr::LoadAuctionItems: Unknown item (GUID: %u id: #%u) in auction, skipped.", item_guid, itemEntry);
280 if (!item->
LoadFromDB(item_guid, 0, fields, itemEntry))
288 }
while (result->NextRow());
302 SF_LOG_INFO(
"server.loading",
">> Loaded 0 auctions. DB table `auctionhouse` is empty.");
312 Field* fields = result->Fetch();
324 }
while (result->NextRow());
340 ItemMap::iterator i =
mAitems.find(
id);
364 switch (factionTemplateId)
366 case 12: houseid = 1;
break;
367 case 29: houseid = 6;
break;
368 case 55: houseid = 2;
break;
369 case 68: houseid = 4;
break;
370 case 80: houseid = 3;
break;
371 case 104: houseid = 5;
break;
372 case 120: houseid = 7;
break;
373 case 474: houseid = 7;
break;
374 case 855: houseid = 7;
break;
375 case 1604: houseid = 6;
break;
405 bool wasInMap =
AuctionsMap.erase(auction->
Id) ? true :
false;
417 time_t curTime =
sWorld->GetGameTime();
444 sAuctionMgr->SendAuctionExpiredMail(auction, trans);
453 sAuctionMgr->SendAuctionSuccessfulMail(auction, trans);
455 sScriptMgr->OnAuctionSuccessful(
this, auction);
466 }
while (result->NextRow());
476 if (itr->second->BuildAuctionInfo(data))
516 if (itemClass != 0xffffffff && proto->
Class != itemClass)
519 if (itemSubClass != 0xffffffff && proto->
SubClass != itemSubClass)
522 if (inventoryType != 0xffffffff && proto->
InventoryType != inventoryType)
525 if (quality != 0xffffffff && proto->
Quality != quality)
536 if (!wsearchedname.empty())
538 std::string name = proto->
Name1;
569 name += temp[locdbc_idx >= 0 ? locdbc_idx :
LOCALE_enUS];
580 if (count < 50 && totalcount >= listfrom)
629 return std::max<uint64>(cut, 0);
636 return outbid ? outbid : 1;
718 time_t curTime =
sWorld->GetGameTime();
727 SF_LOG_INFO(
"server.loading",
">> No expired auctions to delete");
734 Field* fields = expAuctions->Fetch();
752 sAuctionMgr->SendAuctionExpiredMail(auction, trans);
757 sAuctionMgr->SendAuctionSuccessfulMail(auction, trans);
772 }
while (expAuctions->NextRow());
799 SF_LOG_ERROR(
"misc",
"AuctionEntry::LoadFromFieldList() - Auction %u has not a existing auctioneer (GUID : %u)",
Id,
auctioneer);
806 SF_LOG_ERROR(
"misc",
"AuctionEntry::LoadFromFieldList() - Auction %u has not a existing auctioneer (GUID : %u Entry: %u)",
Id,
auctioneer, auctioneerData->
id);
824 std::ostringstream strm;
831 std::ostringstream strm;
834 strm << std::dec <<
':' <<
bid <<
':' <<
buyout;
835 strm <<
':' <<
deposit <<
':' << cut;
@ AUCTION_CANCELLED_TO_BIDDER
Item * NewItemOrBag(ItemTemplate const *proto)
@ CHAR_SEL_AUCTION_BY_TIME
@ CHAR_SEL_EXPIRED_AUCTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD
DBCStorage< ItemRandomPropertiesEntry > sItemRandomPropertiesStore(ItemRandomPropertiesfmt)
DBCStorage< FactionTemplateEntry > sFactionTemplateStore(FactionTemplateEntryfmt)
DBCStorage< AuctionHouseEntry > sAuctionHouseStore(AuctionHouseEntryfmt)
@ PROP_ENCHANTMENT_SLOT_0
#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.
uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h)
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
bool Utf8FitTo(const std::string &str, const std::wstring &search)
T CalculatePct(T base, U pct)
static bool HasPermission(uint32 accountId, uint32 permission, uint32 realmId)
void SendAuctionSalePendingMail(AuctionEntry *auction, SQLTransaction &trans)
static AuctionHouseEntry const * GetAuctionHouseEntry(uint32 factionTemplateId)
void SendAuctionSuccessfulMail(AuctionEntry *auction, SQLTransaction &trans)
void DeleteExpiredAuctionsAtStartup()
void SendAuctionCancelledToBidderMail(AuctionEntry *auction, SQLTransaction &trans, Item *item)
void SendAuctionWonMail(AuctionEntry *auction, SQLTransaction &trans)
Item * GetAItem(uint32 id)
AuctionHouseObject * GetAuctionsMap(uint32 factionTemplateId)
AuctionHouseObject mNeutralAuctions
void SendAuctionExpiredMail(AuctionEntry *auction, SQLTransaction &trans)
AuctionHouseObject mHordeAuctions
bool RemoveAItem(uint32 id)
AuctionHouseObject mAllianceAuctions
void SendAuctionOutbiddedMail(AuctionEntry *auction, uint32 newPrice, Player *newBidder, SQLTransaction &trans)
static uint64 GetAuctionDeposit(AuctionHouseEntry const *entry, uint32 time, Item *pItem, uint32 count)
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)
AuctionEntryMap AuctionsMap
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)
uint32 GetEnchantmentId(EnchantmentSlot slot) const
int32 GetSpellCharges(uint8 index=0) const
uint32 GetEnchantmentDuration(EnchantmentSlot slot) const
int32 GetItemRandomPropertyId() const
ItemTemplate const * GetTemplate() const
uint32 GetItemSuffixFactor() const
virtual bool LoadFromDB(uint32 guid, uint64 owner_guid, Field *fields, uint32 entry)
uint32 GetEnchantmentCharges(EnchantmentSlot slot) const
void SendMailTo(SQLTransaction &trans, MailReceiver const &receiver, MailSender const &sender, MailCheckMask checked=MAIL_CHECK_MASK_NONE, uint32 deliver_delay=0)
MailDraft & AddItem(Item *item)
MailDraft & AddMoney(uint64 money)
static Player * FindPlayer(uint64)
uint32 GetGUIDLow() const
static void GetLocaleString(const StringVector &data, int loc_idx, std::string &value)
WorldSession * GetSession() const
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, Unit *unit=NULL)
InventoryResult CanUseItem(Item *pItem, bool not_loading=true) const
void setUInt64(const uint8 index, const uint64 value)
void setUInt32(const uint8 index, const uint32 value)
std::string const & GetName() const
LocaleConstant GetSessionDbLocaleIndex() const
void SendAuctionBidderNotification(uint32 location, uint32 auctionId, uint64 bidder, uint32 bidSum, uint32 diff, uint32 item_template)
void SendAuctionRemovedNotification(uint32 auctionId, uint32 itemEntry, int32 randomPropertyId)
LocaleConstant GetSessionDbcLocale() const
void SendAuctionOwnerNotification(AuctionEntry *auction)
bool HasPermission(uint32 permissionId)
uint32 GetAccountId() const
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
uint32 realmID
Id of the realm.
@ CONFIG_MAIL_DELIVERY_DELAY
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION
bool BuildAuctionInfo(WorldPacket &data) const
bool LoadFromFieldList(Field *fields)
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
bool LoadFromDB(Field *fields)
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