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__,...)
#define TC_LOG_INFO(filterType__,...)
@ 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_f(float chance)
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
static bool HasPermission(uint32 accountId, uint32 permission, uint32 realmId)
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.
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
static ObjectGuid GetGUID(Object const *o)
bool ModifyMoney(int64 amount, bool sendError=true)
WorldSession * GetSession() const
void setInt32(const uint8 index, const int32 value)
void setInt64(const uint8 index, const int64 value)
void setUInt64(const uint8 index, const uint64 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
Battlenet::RealmHandle Id
Optional< ItemBonuses > ItemBonus