TrinityCore
Loading...
Searching...
No Matches
AuctionHouseMgr.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef _AUCTION_HOUSE_MGR_H
19#define _AUCTION_HOUSE_MGR_H
20
21#include "Define.h"
22#include "DatabaseEnvFwd.h"
23#include "ObjectGuid.h"
24#include <map>
25#include <set>
26#include <unordered_map>
27
28class Item;
29class Player;
30class WorldPacket;
32
33#define MIN_AUCTION_TIME (12*HOUR)
34#define MAX_AUCTION_ITEMS 160
35#define MAX_GETALL_RETURN 55000
36
49
56
67
74
76{
78 AUCTION_ENTRY_FLAG_GM_LOG_BUYER = 0x1 // write transaction to gm log file for buyer (optimization flag - avoids querying database for offline player permissions)
79};
80
82{
89 uint32 startbid; //maybe useless
94 uint32 deposit; //deposit can be calculated only when creating auction
96 std::unordered_set<ObjectGuid> bidders;
97 AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc
99
100 // helpers
101 uint8 GetHouseId() const { return houseId; }
102 uint32 GetAuctionCut() const;
103 uint32 GetAuctionOutBid() const;
104 bool BuildAuctionInfo(WorldPacket & data, Item* sourceItem = nullptr) const;
105 void DeleteFromDB(CharacterDatabaseTransaction trans) const;
106 void SaveToDB(CharacterDatabaseTransaction trans) const;
107 bool LoadFromDB(Field* fields);
108 std::string BuildAuctionMailSubject(MailAuctionAnswers response) const;
109 static std::string BuildAuctionWonMailBody(ObjectGuid guid, uint32 bid, uint32 buyout);
110 static std::string BuildAuctionSoldMailBody(ObjectGuid guid, uint32 bid, uint32 buyout, uint32 deposit, uint32 consignment);
111 static std::string BuildAuctionInvoiceMailBody(ObjectGuid guid, uint32 bid, uint32 buyout, uint32 deposit, uint32 consignment, uint32 moneyDelay, uint32 eta);
112};
113
114//this class is used as auctionhouse instance
116{
117public:
119 {
120 for (AuctionEntryMap::iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
121 delete itr->second;
122 }
123
124 typedef std::map<uint32, AuctionEntry*> AuctionEntryMap;
125 typedef std::unordered_map<ObjectGuid, time_t> PlayerGetAllThrottleMap;
126
127 uint32 Getcount() const { return AuctionsMap.size(); }
128
129 AuctionEntryMap::iterator GetAuctionsBegin() {return AuctionsMap.begin();}
130 AuctionEntryMap::iterator GetAuctionsEnd() {return AuctionsMap.end();}
131
133 {
134 AuctionEntryMap::const_iterator itr = AuctionsMap.find(id);
135 return itr != AuctionsMap.end() ? itr->second : nullptr;
136 }
137
138 void AddAuction(AuctionEntry* auction);
139
140 bool RemoveAuction(AuctionEntry* auction);
141
142 void Update();
143
144 void BuildListBidderItems(WorldPacket& data, Player* player, uint32& count, uint32& totalcount);
145 void BuildListOwnerItems(WorldPacket& data, Player* player, uint32& count, uint32& totalcount);
146 void BuildListAuctionItems(WorldPacket& data, Player* player,
147 std::wstring const& searchedname, uint32 listfrom, uint8 levelmin, uint8 levelmax, uint8 usable,
148 uint32 inventoryType, uint32 itemClass, uint32 itemSubClass, uint32 quality,
149 uint32& count, uint32& totalcount, bool getall = false);
150
151private:
153
154 // Map of throttled players for GetAll, and throttle expiry time
155 // Stored here, rather than player object to maintain persistence after logout
157
158};
159
161{
162 private:
165
166 public:
167 static AuctionHouseMgr* instance();
168
169 typedef std::unordered_map<ObjectGuid::LowType, Item*> ItemMap;
170 typedef std::vector<AuctionEntry*> PlayerAuctions;
171 typedef std::pair<PlayerAuctions*, uint32> AuctionPair;
172
173 AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId);
174 AuctionHouseObject* GetAuctionsMapByHouseId(uint8 auctionHouseId);
175
177 {
178 ItemMap::const_iterator itr = mAitems.find(id);
179 if (itr != mAitems.end())
180 return itr->second;
181
182 return nullptr;
183 }
184
185 //auction messages
186 void SendAuctionWonMail(AuctionEntry* auction, CharacterDatabaseTransaction trans);
187 void SendAuctionSalePendingMail(AuctionEntry* auction, CharacterDatabaseTransaction trans);
188 void SendAuctionSuccessfulMail(AuctionEntry* auction, CharacterDatabaseTransaction trans);
189 void SendAuctionExpiredMail(AuctionEntry* auction, CharacterDatabaseTransaction trans);
190 void SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 newPrice, Player* newBidder, CharacterDatabaseTransaction trans);
191 void SendAuctionCancelledToBidderMail(AuctionEntry* auction, CharacterDatabaseTransaction trans, Item* item);
192
193 static uint32 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count);
194 static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId);
195 static AuctionHouseEntry const* GetAuctionHouseEntryFromHouse(uint8 houseId);
196 public:
197
198 //load first auction items, because of check if item exists, when loading
199 void LoadAuctionItems();
200 void LoadAuctions();
201
202 void AddAItem(Item* item);
203 bool RemoveAItem(ObjectGuid::LowType id, bool deleteItem = false, CharacterDatabaseTransaction* trans = nullptr);
204 bool PendingAuctionAdd(Player* player, AuctionEntry* aEntry);
205 uint32 PendingAuctionCount(Player const* player) const;
206 void PendingAuctionProcess(Player* player);
207 void UpdatePendingAuctions();
208 void Update();
209
210 private:
211
215
216 std::map<ObjectGuid, AuctionPair> pendingAuctionMap;
217
219};
220
221#define sAuctionMgr AuctionHouseMgr::instance()
222
223#endif
MailAuctionAnswers
@ AUCTION_EXPIRED
@ AUCTION_CANCELLED_TO_BIDDER
@ AUCTION_SALE_PENDING
@ AUCTION_CANCELED
@ AUCTION_SUCCESSFUL
@ AUCTION_WON
@ AUCTION_OUTBIDDED
AuctionEntryFlag
@ AUCTION_ENTRY_FLAG_NONE
@ AUCTION_ENTRY_FLAG_GM_LOG_BUYER
AuctionAction
@ AUCTION_SELL_ITEM
@ AUCTION_PLACE_BID
@ AUCTION_CANCEL
AuctionHouses
@ AUCTIONHOUSE_HORDE
@ AUCTIONHOUSE_ALLIANCE
@ AUCTIONHOUSE_NEUTRAL
AuctionError
@ ERR_AUCTION_NOT_ENOUGHT_MONEY
@ ERR_AUCTION_OK
@ ERR_AUCTION_INVENTORY
@ ERR_AUCTION_RESTRICTED_ACCOUNT
@ ERR_AUCTION_HIGHER_BID
@ ERR_AUCTION_BID_OWN
@ ERR_AUCTION_ITEM_NOT_FOUND
@ ERR_AUCTION_BID_INCREMENT
@ ERR_AUCTION_DATABASE_ERROR
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
uint32_t uint32
Definition Define.h:133
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
std::pair< PlayerAuctions *, uint32 > AuctionPair
std::unordered_map< ObjectGuid::LowType, Item * > ItemMap
AuctionHouseObject mNeutralAuctions
std::vector< AuctionEntry * > PlayerAuctions
std::map< ObjectGuid, AuctionPair > pendingAuctionMap
AuctionHouseObject mHordeAuctions
AuctionHouseObject mAllianceAuctions
Item * GetAItem(ObjectGuid::LowType id)
std::unordered_map< ObjectGuid, time_t > PlayerGetAllThrottleMap
PlayerGetAllThrottleMap GetAllThrottleMap
uint32 Getcount() const
AuctionEntryMap AuctionsMap
AuctionEntry * GetAuction(uint32 id) const
AuctionEntryMap::iterator GetAuctionsEnd()
std::map< uint32, AuctionEntry * > AuctionEntryMap
AuctionEntryMap::iterator GetAuctionsBegin()
Class used to access individual fields of database query result.
Definition Field.h:92
Definition Item.h:62
uint32 LowType
Definition ObjectGuid.h:142
ObjectGuid::LowType bidder
uint8 GetHouseId() const
AuctionHouseEntry const * auctionHouseEntry
std::unordered_set< ObjectGuid > bidders
ObjectGuid::LowType owner
ObjectGuid::LowType itemGUIDLow
AuctionEntryFlag Flags