AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
AuctionHouseMgr Class Reference

#include "AuctionHouseMgr.h"

Public Types

typedef std::unordered_map< ObjectGuid, Item * > ItemMap
 

Public Member Functions

AuctionHouseObjectGetAuctionsMap (uint32 factionTemplateId)
 
AuctionHouseObjectGetAuctionsMapByHouseId (AuctionHouseId auctionHouseId)
 
ItemGetAItem (ObjectGuid itemGuid)
 
void SendAuctionWonMail (AuctionEntry *auction, CharacterDatabaseTransaction trans, bool sendNotification=true, bool updateAchievementCriteria=true, bool sendMail=true)
 
void SendAuctionSalePendingMail (AuctionEntry *auction, CharacterDatabaseTransaction trans, bool sendMail=true)
 
void SendAuctionSuccessfulMail (AuctionEntry *auction, CharacterDatabaseTransaction trans, bool sendNotification=true, bool updateAchievementCriteria=true, bool sendMail=true)
 
void SendAuctionExpiredMail (AuctionEntry *auction, CharacterDatabaseTransaction trans, bool sendNotification=true, bool sendMail=true)
 
void SendAuctionOutbiddedMail (AuctionEntry *auction, uint32 newPrice, Player *newBidder, CharacterDatabaseTransaction trans, bool sendNotification=true, bool sendMail=true)
 
void SendAuctionCancelledToBidderMail (AuctionEntry *auction, CharacterDatabaseTransaction trans, bool sendMail=true)
 
AuctionHouseSearcherGetAuctionHouseSearcher ()
 
void LoadAuctionItems ()
 
void LoadAuctions ()
 
void AddAItem (Item *it)
 
bool RemoveAItem (ObjectGuid itemGuid, bool deleteFromDB=false, CharacterDatabaseTransaction *trans=nullptr)
 
void Update (uint32 const diff)
 

Static Public Member Functions

static AuctionHouseMgrinstance ()
 
static uint32 GetAuctionDeposit (AuctionHouseEntry const *entry, uint32 time, Item *pItem, uint32 count)
 
static AuctionHouseFaction GetAuctionHouseFactionFromHouseId (AuctionHouseId ahHouseId)
 
static AuctionHouseEntry const * GetAuctionHouseEntryFromFactionTemplate (uint32 factionTemplateId)
 
static AuctionHouseEntry const * GetAuctionHouseEntryFromHouse (AuctionHouseId ahHouseId)
 

Private Member Functions

 AuctionHouseMgr ()
 
 ~AuctionHouseMgr ()
 

Private Attributes

AuctionHouseObject _hordeAuctions
 
AuctionHouseObject _allianceAuctions
 
AuctionHouseObject _neutralAuctions
 
ItemMap _mAitems
 
AuctionHouseSearcher_auctionHouseSearcher
 
IntervalTimer _updateIntervalTimer
 

Detailed Description

Member Typedef Documentation

◆ ItemMap

typedef std::unordered_map<ObjectGuid, Item*> AuctionHouseMgr::ItemMap

Constructor & Destructor Documentation

◆ AuctionHouseMgr()

AuctionHouseMgr::AuctionHouseMgr ( )
private
37{
40}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
constexpr auto MINUTE
Definition Common.h:47
IntervalTimer _updateIntervalTimer
Definition AuctionHouseMgr.h:221
AuctionHouseSearcher * _auctionHouseSearcher
Definition AuctionHouseMgr.h:219
Definition AuctionHouseSearcher.h:280
void SetInterval(time_t interval)
Definition Timer.h:179
void SetCurrent(time_t current)
Definition Timer.h:174

References _updateIntervalTimer, IN_MILLISECONDS, MINUTE, IntervalTimer::SetCurrent(), and IntervalTimer::SetInterval().

◆ ~AuctionHouseMgr()

AuctionHouseMgr::~AuctionHouseMgr ( )
private
43{
44 for (ItemMap::iterator itr = _mAitems.begin(); itr != _mAitems.end(); ++itr)
45 delete itr->second;
46
48}
ItemMap _mAitems
Definition AuctionHouseMgr.h:217

References _auctionHouseSearcher, and _mAitems.

Member Function Documentation

◆ AddAItem()

void AuctionHouseMgr::AddAItem ( Item it)
403{
404 ASSERT(it);
405 ASSERT(_mAitems.find(it->GetGUID()) == _mAitems.end());
406 _mAitems[it->GetGUID()] = it;
407}
#define ASSERT
Definition Errors.h:68
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:112

References _mAitems, ASSERT, and Object::GetGUID().

Referenced by LoadAuctionItems().

◆ GetAItem()

Item * AuctionHouseMgr::GetAItem ( ObjectGuid  itemGuid)
inline
179 {
180 ItemMap::const_iterator itr = _mAitems.find(itemGuid);
181 if (itr != _mAitems.end())
182 return itr->second;
183
184 return nullptr;
185 }

References _mAitems.

Referenced by SendAuctionExpiredMail(), and SendAuctionWonMail().

◆ GetAuctionDeposit()

uint32 AuctionHouseMgr::GetAuctionDeposit ( AuctionHouseEntry const *  entry,
uint32  time,
Item pItem,
uint32  count 
)
static
93{
94 uint32 MSV = pItem->GetTemplate()->SellPrice;
95
96 if (MSV <= 0)
98
99 float multiplier = CalculatePct(float(entry->depositPercent), 3);
100 uint32 timeHr = (((time / 60) / 60) / 12);
101 uint32 deposit = uint32(((multiplier * MSV * count / 3) * timeHr * 3) * sWorld->getRate(RATE_AUCTION_DEPOSIT));
102
103 LOG_DEBUG("auctionHouse", "MSV: {}", MSV);
104 LOG_DEBUG("auctionHouse", "Items: {}", count);
105 LOG_DEBUG("auctionHouse", "Multiplier: {}", multiplier);
106 LOG_DEBUG("auctionHouse", "Deposit: {}", deposit);
107
108 if (deposit < AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT))
110 else
111 return deposit;
112}
constexpr auto AH_MINIMUM_DEPOSIT
Definition AuctionHouseMgr.cpp:34
std::uint32_t uint32
Definition Define.h:107
@ RATE_AUCTION_DEPOSIT
Definition IWorld.h:512
#define LOG_DEBUG(filterType__,...)
Definition Log.h:169
T CalculatePct(T base, U pct)
Definition Util.h:61
ItemTemplate const * GetTemplate() const
Definition Item.cpp:544
#define sWorld
Definition World.h:363
uint32 SellPrice
Definition ItemTemplate.h:631

References AH_MINIMUM_DEPOSIT, CalculatePct(), AuctionHouseEntry::depositPercent, Item::GetTemplate(), LOG_DEBUG, RATE_AUCTION_DEPOSIT, ItemTemplate::SellPrice, and sWorld.

◆ GetAuctionHouseEntryFromFactionTemplate()

AuctionHouseEntry const * AuctionHouseMgr::GetAuctionHouseEntryFromFactionTemplate ( uint32  factionTemplateId)
static
458{
459 AuctionHouseId houseid;
460 FactionTemplateEntry const* uEntry = sFactionTemplateStore.LookupEntry(factionTemplateId);
461
462 if (!uEntry || sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))
463 houseid = AuctionHouseId::Neutral;
464 else if (uEntry->ourMask & FACTION_MASK_ALLIANCE)
465 houseid = AuctionHouseId::Alliance;
466 else if (uEntry->ourMask & FACTION_MASK_HORDE)
467 houseid = AuctionHouseId::Horde;
468 else
469 houseid = AuctionHouseId::Neutral;
470
471 return sAuctionHouseStore.LookupEntry((uint32)houseid);
472}
AuctionHouseId
Definition AuctionHouseMgr.h:88
@ FACTION_MASK_ALLIANCE
Definition DBCEnums.h:338
@ FACTION_MASK_HORDE
Definition DBCEnums.h:339
DBCStorage< FactionTemplateEntry > sFactionTemplateStore(FactionTemplateEntryfmt)
DBCStorage< AuctionHouseEntry > sAuctionHouseStore(AuctionHouseEntryfmt)
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION
Definition IWorld.h:76
Definition DBCStructure.h:938
uint32 ourMask
Definition DBCStructure.h:942

References Alliance, CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION, FACTION_MASK_ALLIANCE, FACTION_MASK_HORDE, Horde, Neutral, FactionTemplateEntry::ourMask, sAuctionHouseStore, sFactionTemplateStore, and sWorld.

Referenced by WorldSession::HandleAuctionListBidderItems(), WorldSession::HandleAuctionListItems(), WorldSession::HandleAuctionListOwnerItems(), WorldSession::HandleAuctionSellItem(), and WorldSession::SendAuctionHello().

◆ GetAuctionHouseEntryFromHouse()

AuctionHouseEntry const * AuctionHouseMgr::GetAuctionHouseEntryFromHouse ( AuctionHouseId  ahHouseId)
static

◆ GetAuctionHouseFactionFromHouseId()

◆ GetAuctionHouseSearcher()

AuctionHouseSearcher * AuctionHouseMgr::GetAuctionHouseSearcher ( )
inline
200{ return _auctionHouseSearcher; }

References _auctionHouseSearcher.

◆ GetAuctionsMap()

AuctionHouseObject * AuctionHouseMgr::GetAuctionsMap ( uint32  factionTemplateId)
57{
59 return &_neutralAuctions;
60
61 // team have linked auction houses
62 FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId);
63 if (!u_entry)
64 return &_neutralAuctions;
65 else if (u_entry->ourMask & FACTION_MASK_ALLIANCE)
66 return &_allianceAuctions;
67 else if (u_entry->ourMask & FACTION_MASK_HORDE)
68 return &_hordeAuctions;
69
70 return &_neutralAuctions;
71}
AuctionHouseObject _hordeAuctions
Definition AuctionHouseMgr.h:213
AuctionHouseObject _allianceAuctions
Definition AuctionHouseMgr.h:214
AuctionHouseObject _neutralAuctions
Definition AuctionHouseMgr.h:215

References _allianceAuctions, _hordeAuctions, _neutralAuctions, CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION, FACTION_MASK_ALLIANCE, FACTION_MASK_HORDE, FactionTemplateEntry::ourMask, sFactionTemplateStore, and sWorld.

◆ GetAuctionsMapByHouseId()

AuctionHouseObject * AuctionHouseMgr::GetAuctionsMapByHouseId ( AuctionHouseId  auctionHouseId)
74{
76 return &_neutralAuctions;
77
78 switch (auctionHouseId)
79 {
81 return &_allianceAuctions;
83 return &_hordeAuctions;
85 default:
86 break;
87 }
88
89 return &_neutralAuctions;
90}

References _allianceAuctions, _hordeAuctions, _neutralAuctions, Alliance, CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION, Horde, Neutral, and sWorld.

Referenced by LoadAuctions().

◆ instance()

AuctionHouseMgr * AuctionHouseMgr::instance ( )
static
51{
53 return &instance;
54}
Definition AuctionHouseMgr.h:165
static AuctionHouseMgr * instance()
Definition AuctionHouseMgr.cpp:50

References instance().

Referenced by instance().

◆ LoadAuctionItems()

void AuctionHouseMgr::LoadAuctionItems ( )
309{
310 uint32 oldMSTime = getMSTime();
311
312 // need to clear in case we are reloading
313 if (!_mAitems.empty())
314 {
315 for (ItemMap::iterator itr = _mAitems.begin(); itr != _mAitems.end(); ++itr)
316 delete itr->second;
317
318 _mAitems.clear();
319 }
320
321 // data needs to be at first place for Item::LoadFromDB
323 PreparedQueryResult result = CharacterDatabase.Query(stmt);
324
325 if (!result)
326 {
327 LOG_WARN("server.loading", ">> Loaded 0 auction items. DB table `auctionhouse` or `item_instance` is empty!");
328 LOG_INFO("server.loading", " ");
329 return;
330 }
331
332 uint32 count = 0;
333
334 do
335 {
336 Field* fields = result->Fetch();
337
338 ObjectGuid::LowType item_guid = fields[11].Get<uint32>();
339 uint32 item_template = fields[12].Get<uint32>();
340
341 ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item_template);
342 if (!proto)
343 {
344 LOG_ERROR("auctionHouse", "AuctionHouseMgr::LoadAuctionItems: Unknown item (GUID: {} id: #{}) in auction, skipped.", item_guid, item_template);
345 continue;
346 }
347
348 Item* item = NewItemOrBag(proto);
349 if (!item->LoadFromDB(item_guid, ObjectGuid::Empty, fields, item_template))
350 {
351 delete item;
352 continue;
353 }
354 AddAItem(item);
355
356 ++count;
357 } while (result->NextRow());
358
359 LOG_INFO("server.loading", ">> Loaded {} auction items in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
360 LOG_INFO("server.loading", " ");
361}
Item * NewItemOrBag(ItemTemplate const *proto)
Definition Bag.h:67
@ CHAR_SEL_AUCTION_ITEMS
Definition CharacterDatabase.h:104
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
#define LOG_INFO(filterType__,...)
Definition Log.h:165
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
#define LOG_WARN(filterType__,...)
Definition Log.h:161
#define sObjectMgr
Definition ObjectMgr.h:1636
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:131
uint32 getMSTime()
Definition Timer.h:103
void AddAItem(Item *it)
Definition AuctionHouseMgr.cpp:402
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Definition Item.h:220
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field *fields, uint32 entry)
Definition Item.cpp:419
static ObjectGuid const Empty
Definition ObjectGuid.h:120
uint32 LowType
Definition ObjectGuid.h:122
Definition PreparedStatement.h:157
Definition ItemTemplate.h:619

References _mAitems, AddAItem(), CHAR_SEL_AUCTION_ITEMS, CharacterDatabase, ObjectGuid::Empty, Field::Get(), getMSTime(), GetMSTimeDiffToNow(), Item::LoadFromDB(), LOG_ERROR, LOG_INFO, LOG_WARN, NewItemOrBag(), and sObjectMgr.

◆ LoadAuctions()

void AuctionHouseMgr::LoadAuctions ( )
364{
365 uint32 oldMSTime = getMSTime();
366
368 PreparedQueryResult result = CharacterDatabase.Query(stmt);
369
370 if (!result)
371 {
372 LOG_WARN("server.loading", ">> Loaded 0 auctions. DB table `auctionhouse` is empty.");
373 LOG_INFO("server.loading", " ");
374 return;
375 }
376
377 uint32 count = 0;
378
379 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
380 do
381 {
382 Field* fields = result->Fetch();
383
384 AuctionEntry* aItem = new AuctionEntry();
385 if (!aItem->LoadFromDB(fields))
386 {
387 aItem->DeleteFromDB(trans);
388 delete aItem;
389 continue;
390 }
391
393 count++;
394 } while (result->NextRow());
395
396 CharacterDatabase.CommitTransaction(trans);
397
398 LOG_INFO("server.loading", ">> Loaded {} auctions in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
399 LOG_INFO("server.loading", " ");
400}
@ CHAR_SEL_AUCTIONS
Definition CharacterDatabase.h:108
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
AuctionHouseObject * GetAuctionsMapByHouseId(AuctionHouseId auctionHouseId)
Definition AuctionHouseMgr.cpp:73
void AddAuction(AuctionEntry *auction)
Definition AuctionHouseMgr.cpp:479
Definition AuctionHouseMgr.h:97
AuctionHouseId houseId
Definition AuctionHouseMgr.h:99
void DeleteFromDB(CharacterDatabaseTransaction trans) const
Definition AuctionHouseMgr.cpp:571
bool LoadFromDB(Field *fields)
Definition AuctionHouseMgr.cpp:594

References AuctionHouseObject::AddAuction(), CHAR_SEL_AUCTIONS, CharacterDatabase, AuctionEntry::DeleteFromDB(), GetAuctionsMapByHouseId(), getMSTime(), GetMSTimeDiffToNow(), AuctionEntry::houseId, AuctionEntry::LoadFromDB(), LOG_INFO, and LOG_WARN.

◆ RemoveAItem()

bool AuctionHouseMgr::RemoveAItem ( ObjectGuid  itemGuid,
bool  deleteFromDB = false,
CharacterDatabaseTransaction trans = nullptr 
)
410{
411 ItemMap::iterator i = _mAitems.find(itemGuid);
412 if (i == _mAitems.end())
413 return false;
414
415 if (deleteFromDB)
416 {
417 ASSERT(trans);
418 i->second->FSetState(ITEM_REMOVED);
419 i->second->SaveToDB(*trans);
420 }
421
422 _mAitems.erase(i);
423 return true;
424}
@ ITEM_REMOVED
Definition Item.h:212

References _mAitems, ASSERT, and ITEM_REMOVED.

◆ SendAuctionCancelledToBidderMail()

void AuctionHouseMgr::SendAuctionCancelledToBidderMail ( AuctionEntry auction,
CharacterDatabaseTransaction  trans,
bool  sendMail = true 
)
288{
290
291 uint32 bidder_accId = 0;
292 if (!bidder)
293 {
294 bidder_accId = sCharacterCache->GetCharacterAccountIdByGuid(auction->bidder);
295 }
296
297 // bidder exist
298 if (bidder || bidder_accId)
299 {
300 sScriptMgr->OnBeforeAuctionHouseMgrSendAuctionCancelledToBidderMail(this, auction, bidder, bidder_accId, sendMail);
301 if (sendMail) // can be changed in the hook
303 .AddMoney(auction->bid)
304 .SendMailTo(trans, MailReceiver(bidder, auction->bidder.GetCounter()), auction, MAIL_CHECK_MASK_COPIED);
305 }
306}
@ AUCTION_CANCELLED_TO_BIDDER
Definition AuctionHouseMgr.h:75
#define sCharacterCache
Definition CharacterCache.h:83
@ MAIL_CHECK_MASK_COPIED
This mail was returned. Do not allow returning mail back again.
Definition Mail.h:49
#define sScriptMgr
Definition ScriptMgr.h:727
Definition Mail.h:119
MailDraft & AddMoney(uint32 money)
Definition Mail.h:137
void SendMailTo(CharacterDatabaseTransaction trans, MailReceiver const &receiver, MailSender const &sender, MailCheckMask checked=MAIL_CHECK_MASK_NONE, uint32 deliver_delay=0, uint32 custom_expiration=0, bool deleteMailItemsFromDB=false, bool sendMail=true)
Definition Mail.cpp:185
Definition Mail.h:105
LowType GetCounter() const
Definition ObjectGuid.h:145
Definition Player.h:1081
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:257
uint32 bid
Definition AuctionHouseMgr.h:105
static std::string BuildAuctionMailBody(ObjectGuid guid, uint32 bid, uint32 buyout, uint32 deposit=0, uint32 cut=0, uint32 moneyDelay=0, uint32 eta=0)
Definition AuctionHouseMgr.cpp:633
ObjectGuid bidder
Definition AuctionHouseMgr.h:108
std::string BuildAuctionMailSubject(MailAuctionAnswers response) const
Definition AuctionHouseMgr.cpp:626
uint32 buyout
Definition AuctionHouseMgr.h:106
uint32 deposit
Definition AuctionHouseMgr.h:109
ObjectGuid owner
Definition AuctionHouseMgr.h:103

References MailDraft::AddMoney(), AUCTION_CANCELLED_TO_BIDDER, AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::BuildAuctionMailBody(), AuctionEntry::BuildAuctionMailSubject(), AuctionEntry::buyout, AuctionEntry::deposit, ObjectAccessor::FindConnectedPlayer(), ObjectGuid::GetCounter(), MAIL_CHECK_MASK_COPIED, AuctionEntry::owner, sCharacterCache, MailDraft::SendMailTo(), and sScriptMgr.

◆ SendAuctionExpiredMail()

void AuctionHouseMgr::SendAuctionExpiredMail ( AuctionEntry auction,
CharacterDatabaseTransaction  trans,
bool  sendNotification = true,
bool  sendMail = true 
)
234{
235 //return an item in auction to its owner by mail
236 Item* pItem = GetAItem(auction->item_guid);
237 if (!pItem)
238 return;
239
241 uint32 owner_accId = sCharacterCache->GetCharacterAccountIdByGuid(auction->owner);
242
243 // owner exist
244 if (owner || owner_accId)
245 {
246 sScriptMgr->OnBeforeAuctionHouseMgrSendAuctionExpiredMail(this, auction, owner, owner_accId, sendNotification, sendMail);
247
248 if (owner && sendNotification) // can be changed in the hook
249 owner->GetSession()->SendAuctionOwnerNotification(auction);
250
251 if (sendMail) // can be changed in the hook
252 {
254 .AddItem(pItem)
255 .SendMailTo(trans, MailReceiver(owner, auction->owner.GetCounter()), auction, MAIL_CHECK_MASK_COPIED, 0);
256 }
257 }
258 else
259 sAuctionMgr->RemoveAItem(auction->item_guid, true, &trans);
260}
@ AUCTION_EXPIRED
Definition AuctionHouseMgr.h:74
#define sAuctionMgr
Definition AuctionHouseMgr.h:224
Item * GetAItem(ObjectGuid itemGuid)
Definition AuctionHouseMgr.h:178
MailDraft & AddItem(Item *item)
Definition Mail.cpp:93
WorldSession * GetSession() const
Definition Player.h:2005
void SendAuctionOwnerNotification(AuctionEntry *auction)
Definition AuctionHouseHandler.cpp:102
ObjectGuid item_guid
Definition AuctionHouseMgr.h:100

References MailDraft::AddItem(), AUCTION_EXPIRED, AuctionEntry::BuildAuctionMailBody(), AuctionEntry::BuildAuctionMailSubject(), AuctionEntry::buyout, AuctionEntry::deposit, ObjectGuid::Empty, ObjectAccessor::FindConnectedPlayer(), GetAItem(), ObjectGuid::GetCounter(), Player::GetSession(), AuctionEntry::item_guid, MAIL_CHECK_MASK_COPIED, AuctionEntry::owner, sAuctionMgr, sCharacterCache, WorldSession::SendAuctionOwnerNotification(), MailDraft::SendMailTo(), and sScriptMgr.

◆ SendAuctionOutbiddedMail()

void AuctionHouseMgr::SendAuctionOutbiddedMail ( AuctionEntry auction,
uint32  newPrice,
Player newBidder,
CharacterDatabaseTransaction  trans,
bool  sendNotification = true,
bool  sendMail = true 
)
264{
266
267 uint32 oldBidder_accId = 0;
268 if (!oldBidder)
269 oldBidder_accId = sCharacterCache->GetCharacterAccountIdByGuid(auction->bidder);
270
271 // old bidder exist
272 if (oldBidder || oldBidder_accId)
273 {
274 sScriptMgr->OnBeforeAuctionHouseMgrSendAuctionOutbiddedMail(this, auction, oldBidder, oldBidder_accId, newBidder, newPrice, sendNotification, sendMail);
275
276 if (oldBidder && newBidder && sendNotification) // can be changed in the hook
277 oldBidder->GetSession()->SendAuctionBidderNotification((uint32)auction->GetHouseId(), auction->Id, newBidder->GetGUID(), newPrice, AuctionEntry::CalculateAuctionOutBid(auction->bid), auction->item_template);
278
279 if (sendMail) // can be changed in the hook
281 .AddMoney(auction->bid)
282 .SendMailTo(trans, MailReceiver(oldBidder, auction->bidder.GetCounter()), auction, MAIL_CHECK_MASK_COPIED);
283 }
284}
@ AUCTION_OUTBIDDED
Definition AuctionHouseMgr.h:71
void SendAuctionBidderNotification(uint32 location, uint32 auctionId, ObjectGuid bidder, uint32 bidSum, uint32 diff, uint32 item_template)
Definition AuctionHouseHandler.cpp:88
AuctionHouseId GetHouseId() const
Definition AuctionHouseMgr.h:113
uint32 Id
Definition AuctionHouseMgr.h:98
static uint32 CalculateAuctionOutBid(uint32 bid)
the sum of outbid is (1% from current bid)*5, if bid is very small, it is 1c
Definition AuctionHouseMgr.cpp:565
uint32 GetAuctionCut() const
Definition AuctionHouseMgr.cpp:553
uint32 item_template
Definition AuctionHouseMgr.h:101

References MailDraft::AddMoney(), AUCTION_OUTBIDDED, AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::BuildAuctionMailBody(), AuctionEntry::BuildAuctionMailSubject(), AuctionEntry::buyout, AuctionEntry::CalculateAuctionOutBid(), AuctionEntry::deposit, ObjectAccessor::FindConnectedPlayer(), AuctionEntry::GetAuctionCut(), ObjectGuid::GetCounter(), Object::GetGUID(), AuctionEntry::GetHouseId(), Player::GetSession(), AuctionEntry::Id, AuctionEntry::item_template, MAIL_CHECK_MASK_COPIED, AuctionEntry::owner, sCharacterCache, WorldSession::SendAuctionBidderNotification(), MailDraft::SendMailTo(), and sScriptMgr.

◆ SendAuctionSalePendingMail()

void AuctionHouseMgr::SendAuctionSalePendingMail ( AuctionEntry auction,
CharacterDatabaseTransaction  trans,
bool  sendMail = true 
)
162{
164 uint32 owner_accId = sCharacterCache->GetCharacterAccountIdByGuid(auction->owner);
165 // owner exist (online or offline)
166 if (owner || owner_accId)
167 {
168 sScriptMgr->OnBeforeAuctionHouseMgrSendAuctionSalePendingMail(this, auction, owner, owner_accId, sendMail);
169
170 uint32 deliveryDelay = sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY);
171
172 ByteBuffer timePacker;
173 timePacker.AppendPackedTime(GameTime::GetGameTime().count() + time_t(deliveryDelay));
174
175 if (sendMail) // can be changed in the hook
177 AuctionEntry::BuildAuctionMailBody(auction->bidder, auction->bid, auction->buyout, auction->deposit, auction->GetAuctionCut(), deliveryDelay, timePacker.read<uint32>()))
178 .SendMailTo(trans, MailReceiver(owner, auction->owner.GetCounter()), auction, MAIL_CHECK_MASK_COPIED);
179 }
180}
@ AUCTION_SALE_PENDING
Definition AuctionHouseMgr.h:77
@ CONFIG_MAIL_DELIVERY_DELAY
Definition IWorld.h:262
Definition ByteBuffer.h:70
void AppendPackedTime(time_t time)
Definition ByteBuffer.cpp:137
T read()
Definition ByteBuffer.h:351
Seconds GetGameTime()
Definition GameTime.cpp:38

References ByteBuffer::AppendPackedTime(), AUCTION_SALE_PENDING, AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::BuildAuctionMailBody(), AuctionEntry::BuildAuctionMailSubject(), AuctionEntry::buyout, CONFIG_MAIL_DELIVERY_DELAY, AuctionEntry::deposit, ObjectAccessor::FindConnectedPlayer(), AuctionEntry::GetAuctionCut(), ObjectGuid::GetCounter(), GameTime::GetGameTime(), MAIL_CHECK_MASK_COPIED, AuctionEntry::owner, ByteBuffer::read(), sCharacterCache, MailDraft::SendMailTo(), sScriptMgr, and sWorld.

◆ SendAuctionSuccessfulMail()

void AuctionHouseMgr::SendAuctionSuccessfulMail ( AuctionEntry auction,
CharacterDatabaseTransaction  trans,
bool  sendNotification = true,
bool  updateAchievementCriteria = true,
bool  sendMail = true 
)
184{
186 uint32 owner_accId = sCharacterCache->GetCharacterAccountIdByGuid(auction->owner);
187 // owner exist
188 if (owner || owner_accId)
189 {
190 uint32 profit = auction->bid + auction->deposit - auction->GetAuctionCut();
191 sScriptMgr->OnBeforeAuctionHouseMgrSendAuctionSuccessfulMail(this, auction, owner, owner_accId, profit, sendNotification, updateAchievementCriteria, sendMail);
192
193 if (owner)
194 {
195 if (updateAchievementCriteria) // can be changed in the hook
196 {
199 }
200
201 if (sendNotification) // can be changed in the hook
202 owner->GetSession()->SendAuctionOwnerNotification(auction);
203 }
204 else if (updateAchievementCriteria)
205 {
206 sAchievementMgr->UpdateAchievementCriteriaForOfflinePlayer(auction->owner.GetCounter(), ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS, profit);
207 sAchievementMgr->UpdateAchievementCriteriaForOfflinePlayer(auction->owner.GetCounter(), ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD, auction->bid);
208 }
209
210 if (sendMail) // can be changed in the hook
212 .AddMoney(profit)
213 .SendMailTo(trans, MailReceiver(owner, auction->owner.GetCounter()), auction, MAIL_CHECK_MASK_COPIED, sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY));
214
215 if (auction->bid >= 500 * GOLD)
216 if (CharacterCacheEntry const* gpd = sCharacterCache->GetCharacterCacheByGuid(auction->bidder))
217 {
219 std::string owner_name = "";
220 uint8 owner_level = 0;
221 if (CharacterCacheEntry const* gpd_owner = sCharacterCache->GetCharacterCacheByGuid(auction->owner))
222 {
223 owner_name = gpd_owner->Name;
224 owner_level = gpd_owner->Level;
225 }
226 CharacterDatabase.Execute("INSERT INTO log_money VALUES({}, {}, \"{}\", \"{}\", {}, \"{}\", {}, \"profit: {}g, bidder: {} {} lvl (guid: {}), seller: {} {} lvl (guid: {}), item {} ({})\", NOW(), {})",
227 gpd->AccountId, auction->bidder.GetCounter(), gpd->Name, bidder ? bidder->GetSession()->GetRemoteAddress() : "", owner_accId, owner_name, auction->bid, (profit / GOLD), gpd->Name, gpd->Level, auction->bidder.GetCounter(), owner_name, owner_level, auction->owner.GetCounter(), auction->item_template, auction->itemCount, 2);
228 }
229 }
230}
#define sAchievementMgr
Definition AchievementMgr.h:451
@ AUCTION_SUCCESSFUL
Definition AuctionHouseMgr.h:73
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS
Definition DBCEnums.h:189
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD
Definition DBCEnums.h:193
std::uint8_t uint8
Definition Define.h:109
@ Level
Requires the player to be at least a specific level.
@ GOLD
Definition SharedDefines.h:253
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition PlayerUpdates.cpp:2177
std::string const & GetRemoteAddress()
Definition WorldSession.h:385
Definition CharacterCache.h:28

References ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS, ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD, MailDraft::AddMoney(), AUCTION_SUCCESSFUL, AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::BuildAuctionMailBody(), AuctionEntry::BuildAuctionMailSubject(), AuctionEntry::buyout, CharacterDatabase, CONFIG_MAIL_DELIVERY_DELAY, AuctionEntry::deposit, ObjectAccessor::FindConnectedPlayer(), AuctionEntry::GetAuctionCut(), ObjectGuid::GetCounter(), WorldSession::GetRemoteAddress(), Player::GetSession(), GOLD, AuctionEntry::item_template, AuctionEntry::itemCount, MAIL_CHECK_MASK_COPIED, AuctionEntry::owner, sAchievementMgr, sCharacterCache, WorldSession::SendAuctionOwnerNotification(), MailDraft::SendMailTo(), sScriptMgr, sWorld, and Player::UpdateAchievementCriteria().

◆ SendAuctionWonMail()

void AuctionHouseMgr::SendAuctionWonMail ( AuctionEntry auction,
CharacterDatabaseTransaction  trans,
bool  sendNotification = true,
bool  updateAchievementCriteria = true,
bool  sendMail = true 
)
116{
117 Item* pItem = GetAItem(auction->item_guid);
118 if (!pItem)
119 return;
120
121 uint32 bidder_accId = 0;
123 if (bidder)
124 bidder_accId = bidder->GetSession()->GetAccountId();
125 else
126 bidder_accId = sCharacterCache->GetCharacterAccountIdByGuid(auction->bidder);
127
128 // receiver exist
129 if (bidder || bidder_accId)
130 {
131 sScriptMgr->OnBeforeAuctionHouseMgrSendAuctionWonMail(this, auction, bidder, bidder_accId, sendNotification, updateAchievementCriteria, sendMail);
132 // set owner to bidder (to prevent delete item with sender char deleting)
133 // owner in `data` will set at mail receive and item extracting
135 stmt->SetData(0, auction->bidder.GetCounter());
136 stmt->SetData(1, pItem->GetGUID().GetCounter());
137 trans->Append(stmt);
138
139 if (bidder)
140 {
141 if (sendNotification) // can be changed in the hook
142 bidder->GetSession()->SendAuctionBidderNotification((uint32)auction->GetHouseId(), auction->Id, auction->bidder, 0, 0, auction->item_template);
143
144 if (updateAchievementCriteria) // can be changed in the hook
146 }
147 else if (updateAchievementCriteria)
148 sAchievementMgr->UpdateAchievementCriteriaForOfflinePlayer(auction->bidder.GetCounter(), ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS, 1);
149
150 if (sendMail) // can be changed in the hook
151 {
153 .AddItem(pItem)
154 .SendMailTo(trans, MailReceiver(bidder, auction->bidder.GetCounter()), auction, MAIL_CHECK_MASK_COPIED);
155 }
156 }
157 else
158 sAuctionMgr->RemoveAItem(auction->item_guid, true, &trans);
159}
@ AUCTION_WON
Definition AuctionHouseMgr.h:72
@ CHAR_UPD_ITEM_OWNER
Definition CharacterDatabase.h:118
@ ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS
Definition DBCEnums.h:192
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
uint32 GetAccountId() const
Definition WorldSession.h:375

References ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS, MailDraft::AddItem(), AUCTION_WON, AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::BuildAuctionMailBody(), AuctionEntry::BuildAuctionMailSubject(), AuctionEntry::buyout, CHAR_UPD_ITEM_OWNER, CharacterDatabase, ObjectAccessor::FindConnectedPlayer(), WorldSession::GetAccountId(), GetAItem(), ObjectGuid::GetCounter(), Object::GetGUID(), AuctionEntry::GetHouseId(), Player::GetSession(), AuctionEntry::Id, AuctionEntry::item_guid, AuctionEntry::item_template, MAIL_CHECK_MASK_COPIED, AuctionEntry::owner, sAchievementMgr, sAuctionMgr, sCharacterCache, WorldSession::SendAuctionBidderNotification(), MailDraft::SendMailTo(), PreparedStatementBase::SetData(), sScriptMgr, and Player::UpdateAchievementCriteria().

◆ Update()

void AuctionHouseMgr::Update ( uint32 const  diff)
427{
430 {
431 sScriptMgr->OnBeforeAuctionHouseMgrUpdate();
432
436
438 }
439
441}
void Update()
Definition AuctionHouseMgr.cpp:503
void Update()
Definition AuctionHouseSearcher.cpp:350
bool Passed()
Definition Timer.h:161
void Update(time_t diff)
Definition Timer.h:152
void Reset()
Definition Timer.h:166

References _allianceAuctions, _auctionHouseSearcher, _hordeAuctions, _neutralAuctions, _updateIntervalTimer, IntervalTimer::Passed(), IntervalTimer::Reset(), sScriptMgr, AuctionHouseObject::Update(), AuctionHouseSearcher::Update(), and IntervalTimer::Update().

Member Data Documentation

◆ _allianceAuctions

AuctionHouseObject AuctionHouseMgr::_allianceAuctions
private

◆ _auctionHouseSearcher

AuctionHouseSearcher* AuctionHouseMgr::_auctionHouseSearcher
private

◆ _hordeAuctions

AuctionHouseObject AuctionHouseMgr::_hordeAuctions
private

◆ _mAitems

ItemMap AuctionHouseMgr::_mAitems
private

◆ _neutralAuctions

AuctionHouseObject AuctionHouseMgr::_neutralAuctions
private

◆ _updateIntervalTimer

IntervalTimer AuctionHouseMgr::_updateIntervalTimer
private

Referenced by AuctionHouseMgr(), and Update().


The documentation for this class was generated from the following files: