Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
AuctionHouseMgr.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_AUCTION_HOUSE_MGR_H
7#define SF_AUCTION_HOUSE_MGR_H
8
9#include "Common.h"
10#include "DatabaseEnv.h"
11#include "DBCStructure.h"
12#include "Platform/Singleton.h"
13
14class Item;
15class Player;
16class WorldPacket;
17
18#define MIN_AUCTION_TIME (12*HOUR)
19#define MAX_AUCTION_ITEMS 32
20#define AUCTION_SEARCH_DELAY 300 // time in MS till the player can search again
21
34
41
52
54{
56 uint32 auctioneer; // creature low guid
61 uint64 startbid; //maybe useless
66 uint64 deposit; //deposit can be calculated only when creating auction
67 AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc
69
70 // helpers
71 uint32 GetHouseId() const { return auctionHouseEntry->houseId; }
72 uint32 GetHouseFaction() const { return auctionHouseEntry->faction; }
73 uint64 GetAuctionCut() const;
75 bool BuildAuctionInfo(WorldPacket& data) const;
76 void DeleteFromDB(SQLTransaction& trans) const;
77 void SaveToDB(SQLTransaction& trans) const;
78 bool LoadFromDB(Field* fields);
79 bool LoadFromFieldList(Field* fields);
80 std::string BuildAuctionMailSubject(MailAuctionAnswer response) const;
81 static std::string BuildAuctionMailBody(uint32 lowGuid, uint64 bid, uint64 buyout, uint64 deposit, uint64 cut);
82};
83
84//this class is used as auctionhouse instance
86{
87public:
89 {
90 for (AuctionEntryMap::iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
91 delete itr->second;
92 }
93
94 typedef std::map<uint32, AuctionEntry*> AuctionEntryMap;
95
96 uint32 Getcount() const { return AuctionsMap.size(); }
97
98 AuctionEntryMap::iterator GetAuctionsBegin() { return AuctionsMap.begin(); }
99 AuctionEntryMap::iterator GetAuctionsEnd() { return AuctionsMap.end(); }
100
102 {
103 AuctionEntryMap::const_iterator itr = AuctionsMap.find(id);
104 return itr != AuctionsMap.end() ? itr->second : NULL;
105 }
106
107 void AddAuction(AuctionEntry* auction);
108
109 bool RemoveAuction(AuctionEntry* auction, uint32 itemEntry);
110
111 void Update();
112
113 void BuildListBidderItems(WorldPacket& data, Player* player, uint32& count, uint32& totalcount);
114 void BuildListOwnerItems(WorldPacket& data, Player* player, uint32& count, uint32& totalcount);
115 void BuildListAuctionItems(WorldPacket& data, Player* player,
116 std::wstring const& searchedname, uint32 listfrom, uint8 levelmin, uint8 levelmax, uint8 usable,
117 uint32 inventoryType, uint32 itemClass, uint32 itemSubClass, uint32 quality,
118 uint32& count, uint32& totalcount);
119
120private:
122};
123
125{
126 friend class Skyfire::Singleton<AuctionHouseMgr, Skyfire::NullMutex>;
127
128private:
131
132public:
134
135 AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId);
137
139 {
140 ItemMap::const_iterator itr = mAitems.find(id);
141 if (itr != mAitems.end())
142 return itr->second;
143
144 return NULL;
145 }
146
147 //auction messages
148 void SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& trans);
152 void SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 newPrice, Player* newBidder, SQLTransaction& trans);
154
155 static uint64 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count);
156 static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId);
157
158public:
159 // Used primarily at server start to avoid loading a list of expired auctions
161
162 //load first auction items, because of check if item exists, when loading
163 void LoadAuctionItems();
164 void LoadAuctions();
165
166 void AddAItem(Item* it);
167 bool RemoveAItem(uint32 id);
168
169 void Update();
170
171private:
175
177};
178
179#define sAuctionMgr Skyfire::Singleton<AuctionHouseMgr, Skyfire::NullMutex>::instance()
180
181#endif
MailAuctionAnswer
AuctionAction
@ AUCTION_SELL_ITEM
@ AUCTION_PLACE_BID
@ AUCTION_CANCEL
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
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
Definition Transaction.h:42
#define UNORDERED_MAP
void SendAuctionSalePendingMail(AuctionEntry *auction, SQLTransaction &trans)
static AuctionHouseEntry const * GetAuctionHouseEntry(uint32 factionTemplateId)
void AddAItem(Item *it)
void SendAuctionSuccessfulMail(AuctionEntry *auction, SQLTransaction &trans)
void DeleteExpiredAuctionsAtStartup()
UNORDERED_MAP< uint32, Item * > ItemMap
void SendAuctionCancelledToBidderMail(AuctionEntry *auction, SQLTransaction &trans, Item *item)
void SendAuctionWonMail(AuctionEntry *auction, SQLTransaction &trans)
Item * GetAItem(uint32 id)
AuctionHouseObject * GetBidsMap(uint32 factionTemplateId)
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)
uint32 Getcount() const
AuctionEntryMap AuctionsMap
AuctionEntry * GetAuction(uint32 id) const
AuctionEntryMap::iterator GetAuctionsEnd()
void AddAuction(AuctionEntry *auction)
std::map< uint32, AuctionEntry * > AuctionEntryMap
void BuildListOwnerItems(WorldPacket &data, Player *player, uint32 &count, uint32 &totalcount)
bool RemoveAuction(AuctionEntry *auction, uint32 itemEntry)
AuctionEntryMap::iterator GetAuctionsBegin()
Definition Field.h:16
Definition Item.h:202
bool BuildAuctionInfo(WorldPacket &data) const
uint32 itemEntry
bool LoadFromFieldList(Field *fields)
uint64 deposit
AuctionHouseEntry const * auctionHouseEntry
uint32 itemGUIDLow
uint32 GetHouseId() const
uint32 bidder
uint32 auctioneer
time_t expire_time
uint32 owner
static std::string BuildAuctionMailBody(uint32 lowGuid, uint64 bid, uint64 buyout, uint64 deposit, uint64 cut)
uint32 Id
uint32 itemCount
uint64 GetAuctionCut() const
uint64 bid
uint32 GetHouseFaction() const
uint32 factionTemplateId
std::string BuildAuctionMailSubject(MailAuctionAnswer response) const
bool LoadFromDB(Field *fields)
void SaveToDB(SQLTransaction &trans) const
uint64 buyout
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
uint64 startbid