70 QueryResult result =
WorldDatabase.Query(
"SELECT marketId, sellerNpc, itemEntry, quantity, minBid, duration, chance, bonusListIDs FROM blackmarket_template");
73 TC_LOG_INFO(
"server.loading",
">> Loaded 0 black market templates. DB table `blackmarket_template` is empty.");
79 Field* fields = result->Fetch();
89 }
while (result->NextRow());
101 for (BlackMarketEntryMap::iterator itr =
_auctions.begin(); itr !=
_auctions.end(); ++itr)
111 TC_LOG_INFO(
"server.loading",
">> Loaded 0 black market auctions. DB table `blackmarket_auctions` is empty.");
120 Field* fields = result->Fetch();
138 }
while (result->NextRow());
149 for (BlackMarketEntryMap::iterator itr =
_auctions.begin(); itr !=
_auctions.end(); ++itr)
187 std::list<BlackMarketTemplate const*> templates;
195 templates.push_back(pair.second);
203 entry->
Initialize(templat->MarketID, templat->Duration);
227 item.
MarketID = itr->second->GetMarketId();
233 if (!itr->second->GetNumBids())
244 item.
CurrentBid = itr->second->GetCurrentBid();
247 item.
NumBids = itr->second->GetNumBids();
249 packet.
Items.push_back(item);
273 std::string bidderName;
274 bool logGmTrade =
false;
279 bidderName = bidder->
GetName();
284 bidderAccId =
sCharacterCache->GetCharacterAccountIdByGuid(bidderGuid);
290 if (logGmTrade && !
sCharacterCache->GetCharacterNameByGuid(bidderGuid, bidderName))
310 sLog->OutCommand(bidderAccId,
"GM {} (Account: {}) won item in blackmarket auction: {} (Entry: {} Count: {}) and payed gold : {}.",
328 uint32 oldBidder_accId = 0;
330 oldBidder_accId =
sCharacterCache->GetCharacterAccountIdByGuid(oldBidder_guid);
333 if (!oldBidder && !oldBidder_accId)
346 BlackMarketEntryMap::const_iterator itr =
_auctions.find(marketId);
355 BlackMarketTemplateMap::const_iterator itr =
_templates.find(marketId);
372 std::vector<int32> bonusListIDs;
373 for (std::string_view token :
Trinity::Tokenize(fields[7].GetStringView(),
' ',
false))
375 bonusListIDs.push_back(*bonusListID);
377 if (!bonusListIDs.empty())
379 Item.ItemBonus.emplace();
380 Item.ItemBonus->BonusListIDs = bonusListIDs;
514 std::ostringstream strm;
521 std::ostringstream strm;
static const uint64 BMAH_MAX_BID
@ CHAR_INS_BLACKMARKET_AUCTIONS
@ CHAR_UPD_BLACKMARKET_AUCTIONS
@ CHAR_DEL_BLACKMARKET_AUCTIONS
@ CHAR_SEL_BLACKMARKET_AUCTIONS
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
#define TC_LOG_ERROR(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
@ MAIL_CHECK_MASK_COPIED
This mail was returned. Do not allow returning mail back again.
std::optional< T > Optional
Optional helper class to wrap optional values within.
bool roll_chance(T chance)
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
static bool HasPermission(uint32 accountId, uint32 permission, uint32 realmId)
ObjectGuid const & GetGUID() const
void DeleteFromDB(CharacterDatabaseTransaction trans) const
int32 GetMarketId() const
void SaveToDB(CharacterDatabaseTransaction trans) const
void Update(time_t newTimeOfUpdate)
std::string BuildAuctionMailSubject(BMAHMailAuctionAnswers response) const
ObjectGuid::LowType _bidder
uint64 GetCurrentBid() const
BlackMarketTemplate const * GetTemplate() const
uint32 GetSecondsRemaining() const
time_t GetExpirationTime() const
std::string BuildAuctionMailBody()
bool ValidateBid(uint64 bid) const
bool LoadFromDB(Field *fields)
ObjectGuid::LowType GetBidder() const
void PlaceBid(uint64 bid, Player *player, CharacterDatabaseTransaction trans)
void Initialize(int32 marketId, uint32 duration)
uint64 GetMinIncrement() const
void AddTemplate(BlackMarketTemplate *templ)
void SendAuctionOutbidMail(BlackMarketEntry *entry, CharacterDatabaseTransaction trans)
void Update(bool updateTime=false)
BlackMarketTemplate const * GetTemplateByID(int32 marketId) const
void BuildItemsResponse(WorldPackets::BlackMarket::BlackMarketRequestItemsResult &packet, Player *player)
BlackMarketEntryMap _auctions
BlackMarketTemplateMap _templates
BlackMarketEntry * GetAuctionByID(int32 marketId) const
static BlackMarketMgr * Instance()
void SendAuctionWonMail(BlackMarketEntry *entry, CharacterDatabaseTransaction trans)
void AddAuction(BlackMarketEntry *auction)
Class used to access individual fields of database query result.
float GetFloat() const noexcept
uint64 GetUInt64() const noexcept
uint32 GetUInt32() const noexcept
int32 GetInt32() const noexcept
int64 GetInt64() const noexcept
virtual void SaveToDB(CharacterDatabaseTransaction trans)
void AddBonuses(uint32 bonusListID)
ItemTemplate const * GetTemplate() const
void SetOwnerGUID(ObjectGuid guid)
static Item * CreateItem(uint32 itemEntry, uint32 count, ItemContext context, Player const *player=nullptr, bool addDefaultBonuses=true)
void SendMailTo(CharacterDatabaseTransaction 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)
LowType GetCounter() const
bool ModifyMoney(int64 amount, bool sendError=true)
WorldSession * GetSession() const
void setInt64(uint8 index, int64 value)
void setUInt64(uint8 index, uint64 value)
void setInt32(uint8 index, int32 value)
std::string const & GetName() const
std::vector< BlackMarketItem > Items
void SendBlackMarketOutbidNotification(BlackMarketTemplate const *templ)
void SendBlackMarketWonNotification(BlackMarketEntry const *entry, Item const *item)
bool HasPermission(uint32 permissionId)
uint32 GetAccountId() const
@ CONFIG_BLACKMARKET_MAXAUCTIONS
@ CONFIG_BLACKMARKET_ENABLED
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
void RandomResize(C &container, std::size_t requestedSize)
TC_COMMON_API std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
WorldPackets::Item::ItemInstance Item
bool LoadFromDB(Field *fields)
char const * GetDefaultLocaleName() const
Optional< ItemBonuses > ItemBonus