Core/AuctionHouse: After taking a break at the start of patch 8.3 auction house is now back in business.

Port From (https://github.com/TrinityCore/TrinityCore/commit/aced88b09bd918b0ed17b6c5e8a6048788600d9d)
This commit is contained in:
hondacrx
2020-04-29 13:52:03 -04:00
parent 8bc9cc9c55
commit 6be4414166
24 changed files with 3032 additions and 1285 deletions
+59 -11
View File
@@ -13,38 +13,86 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
namespace Framework.Constants
{
public enum AuctionError
public enum AuctionResult
{
Ok = 0,
Inventory = 1,
DatabaseError = 2,
NotEnoughtMoney = 3,
NotEnoughMoney = 3,
ItemNotFound = 4,
HigherBid = 5,
BidIncrement = 7,
BidOwn = 10,
RestrictedAccount = 13
RestrictedAccountTrial = 13,
HasRestriction = 17,
AuctionHouseBusy = 18,
AuctionHouseUnavailable = 19,
CommodityPurchaseFailed = 21,
ItemHasQuote = 23
}
public enum AuctionAction
public enum AuctionCommand
{
SellItem = 0,
Cancel = 1,
PlaceBid = 2
}
public enum MailAuctionAnswers
public enum AuctionMailType
{
Outbidded = 0,
Outbid = 0,
Won = 1,
Successful = 2,
Sold = 2,
Expired = 3,
CancelledToBidder = 4,
Canceled = 5,
SalePending = 6
Removed = 4,
Cancelled = 5,
Invoice = 6
}
public enum AuctionHouseResultLimits
{
Browse = 500,
Items = 50
}
public enum AuctionHouseFilterMask
{
None = 0x0,
UncollectedOnly = 0x1,
UsableOnly = 0x2,
UpgradesOnly = 0x4,
ExactMatch = 0x8,
PoorQuality = 0x10,
CommonQuality = 0x20,
UncommonQuality = 0x40,
RareQuality = 0x80,
EpicQuality = 0x100,
LegendaryQuality = 0x200,
ArtifactQuality = 0x400,
}
public enum AuctionHouseSortOrder
{
Price = 0,
Name = 1,
Level = 2,
Bid = 3,
Buyout = 4
}
public enum AuctionHouseBrowseMode
{
Search = 0,
SpecificKeys = 1
}
public enum AuctionHouseListType
{
Commodities = 1,
Items = 2
}
}
@@ -47,7 +47,7 @@ namespace Framework.Constants
AuctionListBidderItems = 0x34d4,
AuctionListItemsByBucketKey = 0x34d1,
AuctionListItemsByItemId = 0x34d2,
AuctionListItemsByItemKeys = 0x34d5,
AuctionListBucketsByBucketKeys = 0x34d5,
AuctionListOwnerItems = 0x34d3,
AuctionPlaceBid = 0x34cf,
AuctionRemoveItem = 0x34cd,
@@ -813,11 +813,11 @@ namespace Framework.Constants
AttackSwingLandedLog = 0x273a,
AuctionClosedNotification = 0x2731,
AuctionCommandResult = 0x272e,
AuctionCommodityPriceUpdate = 0x28c3,
AuctionCommodityQuote = 0x28c3,
AuctionFavoriteItems = 0x28cc,
AuctionHelloResponse = 0x272c,
AuctionListBidderItemsResult = 0x28c2,
AuctionListBucketItemsResult = 0x28bf,
AuctionListFavoriteItemsResult = 0x28cc,
AuctionListBucketsResult = 0x28bf,
AuctionListItemsResult = 0x28c0,
AuctionListOwnerItemsResult = 0x28c1,
AuctionOutbidNotification = 0x2730,
@@ -138,6 +138,10 @@ namespace Framework.Database
PrepareStatement(CharStatements.SEL_CHARACTER_RANDOMBG, "SELECT guid FROM character_battleground_random WHERE guid = ?");
PrepareStatement(CharStatements.SEL_CHARACTER_BANNED, "SELECT guid FROM character_banned WHERE guid = ? AND active = 1");
PrepareStatement(CharStatements.SEL_CHARACTER_QUESTSTATUSREW, "SELECT quest FROM character_queststatus_rewarded WHERE guid = ? AND active = 1");
PrepareStatement(CharStatements.SEL_CHARACTER_FAVORITE_AUCTIONS, "SELECT `order`, itemId, itemLevel, battlePetSpeciesId, suffixItemNameDescriptionId FROM character_favorite_auctions WHERE guid = ? ORDER BY `order`");
PrepareStatement(CharStatements.INS_CHARACTER_FAVORITE_AUCTION, "INSERT INTO character_favorite_auctions (guid, `order`, itemId, itemLevel, battlePetSpeciesId, suffixItemNameDescriptionId) VALUE (?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_CHARACTER_FAVORITE_AUCTION, "DELETE FROM character_favorite_auctions WHERE guid = ? AND `order` = ?");
PrepareStatement(CharStatements.DEL_CHARACTER_FAVORITE_AUCTIONS_BY_CHAR, "DELETE FROM character_favorite_auctions WHERE guid = ?");
PrepareStatement(CharStatements.SEL_ACCOUNT_INSTANCELOCKTIMES, "SELECT instanceId, releaseTime FROM account_instance_times WHERE accountId = ?");
PrepareStatement(CharStatements.SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? ORDER BY button");
@@ -152,11 +156,17 @@ namespace Framework.Database
PrepareStatement(CharStatements.SEL_MAILITEMS_AZERITE_MILESTONE_POWER, "SELECT iamp.itemGuid, iamp.azeriteItemMilestonePowerId FROM item_instance_azerite_milestone_power iamp INNER JOIN mail_items mi ON iamp.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?");
PrepareStatement(CharStatements.SEL_MAILITEMS_AZERITE_UNLOCKED_ESSENCE, "SELECT iaue.itemGuid, iaue.azeriteEssenceId, iaue.`rank` FROM item_instance_azerite_unlocked_essence iaue INNER JOIN mail_items mi ON iaue.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?");
PrepareStatement(CharStatements.SEL_MAILITEMS_AZERITE_EMPOWERED, "SELECT iae.itemGuid, iae.azeritePowerId1, iae.azeritePowerId2, iae.azeritePowerId3, iae.azeritePowerId4, iae.azeritePowerId5 FROM item_instance_azerite_empowered iae INNER JOIN mail_items mi ON iae.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?");
PrepareStatement(CharStatements.SEL_AUCTION_ITEMS, "SELECT " + SelectItemInstanceContent + " FROM auctionhouse ah JOIN item_instance ii ON ah.itemguid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid");
PrepareStatement(CharStatements.SEL_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, count, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid");
PrepareStatement(CharStatements.INS_AUCTION, "INSERT INTO auctionhouse (id, auctioneerguid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_AUCTION, "DELETE FROM auctionhouse WHERE id = ?");
PrepareStatement(CharStatements.UPD_AUCTION_BID, "UPDATE auctionhouse SET buyguid = ?, lastbid = ? WHERE id = ?");
PrepareStatement(CharStatements.SEL_AUCTION_ITEMS, "SELECT " + SelectItemInstanceContent + ", ii.owner_guid, ai.auctionId FROM auction_items ai INNER JOIN item_instance ii ON ai.itemGuid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid");
PrepareStatement(CharStatements.SEL_AUCTIONS, "SELECT id, auctionHouseId, owner, bidder, minBid, buyoutOrUnitPrice, deposit, bidAmount, startTime, endTime FROM auctionhouse");
PrepareStatement(CharStatements.INS_AUCTION_ITEMS, "INSERT INTO auction_items (auctionId, itemGuid) VALUES (?, ?)");
PrepareStatement(CharStatements.DEL_AUCTION_ITEMS_BY_ITEM, "DELETE FROM auction_items WHERE itemGuid = ?");
PrepareStatement(CharStatements.SEL_AUCTION_BIDDERS, "SELECT auctionId, playerGuid FROM auction_bidders");
PrepareStatement(CharStatements.INS_AUCTION_BIDDER, "INSERT INTO auction_bidders (auctionId, playerGuid) VALUES (?, ?)");
PrepareStatement(CharStatements.DEL_AUCTION_BIDDER_BY_PLAYER, "DELETE FROM auction_bidders WHERE playerGuid = ?");
PrepareStatement(CharStatements.INS_AUCTION, "INSERT INTO auctionhouse (id, auctionHouseId, owner, bidder, minBid, buyoutOrUnitPrice, deposit, bidAmount, startTime, endTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_AUCTION, "DELETE a, ab, ai FROM auctionhouse a LEFT JOIN auction_items ai ON a.id = ai.auctionId LEFT JOIN auction_bidders ab ON a.id = ab.auctionId WHERE a.id = ?");
PrepareStatement(CharStatements.UPD_AUCTION_BID, "UPDATE auctionhouse SET bidder = ?, bidAmount = ? WHERE id = ?");
PrepareStatement(CharStatements.UPD_AUCTION_EXPIRATION, "UPDATE auctionhouse SET endTime = ? WHERE id = ?");
PrepareStatement(CharStatements.INS_MAIL, "INSERT INTO mail(id, messageType, stationery, mailTemplateId, sender, receiver, subject, body, has_items, expire_time, deliver_time, money, cod, checked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_MAIL_BY_ID, "DELETE FROM mail WHERE id = ?");
PrepareStatement(CharStatements.INS_MAIL_ITEM, "INSERT INTO mail_items(mail_id, item_guid, receiver) VALUES (?, ?, ?)");
@@ -535,7 +545,7 @@ namespace Framework.Database
PrepareStatement(CharStatements.DEL_CHAR_AURA_FROZEN, "DELETE FROM character_aura WHERE spell = 9454 AND guid = ?");
PrepareStatement(CharStatements.SEL_CHAR_INVENTORY_COUNT_ITEM, "SELECT COUNT(itemEntry) FROM character_inventory ci INNER JOIN item_instance ii ON ii.guid = ci.item WHERE itemEntry = ?");
PrepareStatement(CharStatements.SEL_MAIL_COUNT_ITEM, "SELECT COUNT(itemEntry) FROM mail_items mi INNER JOIN item_instance ii ON ii.guid = mi.item_guid WHERE itemEntry = ?");
PrepareStatement(CharStatements.SEL_AUCTIONHOUSE_COUNT_ITEM, "SELECT COUNT(itemEntry) FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid WHERE itemEntry = ?");
PrepareStatement(CharStatements.SEL_AUCTIONHOUSE_COUNT_ITEM, "SELECT COUNT(*) FROM auction_items ai INNER JOIN item_instance ii ON ii.guid = ai.itemGuid WHERE ii.itemEntry = ?");
PrepareStatement(CharStatements.SEL_GUILD_BANK_COUNT_ITEM, "SELECT COUNT(itemEntry) FROM guild_bank_item gbi INNER JOIN item_instance ii ON ii.guid = gbi.item_guid WHERE itemEntry = ?");
PrepareStatement(CharStatements.SEL_CHAR_INVENTORY_ITEM_BY_ENTRY, "SELECT ci.item, cb.slot AS bag, ci.slot, ci.guid, c.account, c.name FROM characters c " +
"INNER JOIN character_inventory ci ON ci.guid = c.guid " +
@@ -544,7 +554,7 @@ namespace Framework.Database
PrepareStatement(CharStatements.SEL_MAIL_ITEMS_BY_ENTRY, "SELECT mi.item_guid, m.sender, m.receiver, cs.account, cs.name, cr.account, cr.name " +
"FROM mail m INNER JOIN mail_items mi ON mi.mail_id = m.id INNER JOIN item_instance ii ON ii.guid = mi.item_guid " +
"INNER JOIN characters cs ON cs.guid = m.sender INNER JOIN characters cr ON cr.guid = m.receiver WHERE ii.itemEntry = ? LIMIT ?");
PrepareStatement(CharStatements.SEL_AUCTIONHOUSE_ITEM_BY_ENTRY, "SELECT ah.itemguid, ah.itemowner, c.account, c.name FROM auctionhouse ah INNER JOIN characters c ON c.guid = ah.itemowner INNER JOIN item_instance ii ON ii.guid = ah.itemguid WHERE ii.itemEntry = ? LIMIT ?");
PrepareStatement(CharStatements.SEL_AUCTIONHOUSE_ITEM_BY_ENTRY, "SELECT ai.itemGuid, c.guid, c.account, c.name FROM auctionhouse ah INNER JOIN auction_items ai ON ah.id = ai.auctionId INNER JOIN characters c ON c.guid = ah.owner INNER JOIN item_instance ii ON ii.guid = ai.itemGuid WHERE ii.itemEntry = ? LIMIT ?");
PrepareStatement(CharStatements.SEL_GUILD_BANK_ITEM_BY_ENTRY, "SELECT gi.item_guid, gi.guildid, g.name FROM guild_bank_item gi INNER JOIN guild g ON g.guildid = gi.guildid INNER JOIN item_instance ii ON ii.guid = gi.item_guid WHERE ii.itemEntry = ? LIMIT ?");
PrepareStatement(CharStatements.DEL_CHAR_ACHIEVEMENT, "DELETE FROM character_achievement WHERE guid = ?");
PrepareStatement(CharStatements.DEL_CHAR_ACHIEVEMENT_PROGRESS, "DELETE FROM character_achievement_progress WHERE guid = ?");
@@ -863,6 +873,10 @@ namespace Framework.Database
SEL_CHARACTER_RANDOMBG,
SEL_CHARACTER_BANNED,
SEL_CHARACTER_QUESTSTATUSREW,
SEL_CHARACTER_FAVORITE_AUCTIONS,
INS_CHARACTER_FAVORITE_AUCTION,
DEL_CHARACTER_FAVORITE_AUCTION,
DEL_CHARACTER_FAVORITE_AUCTIONS_BY_CHAR,
SEL_ACCOUNT_INSTANCELOCKTIMES,
SEL_MAILITEMS,
SEL_MAILITEMS_ARTIFACT,
@@ -874,7 +888,13 @@ namespace Framework.Database
INS_AUCTION,
DEL_AUCTION,
UPD_AUCTION_BID,
UPD_AUCTION_EXPIRATION,
SEL_AUCTIONS,
INS_AUCTION_ITEMS,
DEL_AUCTION_ITEMS_BY_ITEM,
SEL_AUCTION_BIDDERS,
INS_AUCTION_BIDDER,
DEL_AUCTION_BIDDER_BY_PLAYER,
INS_MAIL,
DEL_MAIL_BY_ID,
INS_MAIL_ITEM,
+2 -2
View File
@@ -53,7 +53,7 @@ namespace Framework.Database
m_trans = trans;
}
public bool Execute<T>(MySqlBase<T> mySqlBase)
public virtual bool Execute<T>(MySqlBase<T> mySqlBase)
{
MySqlErrorCode errorCode = TryExecute(mySqlBase);
if (errorCode == MySqlErrorCode.None)
@@ -87,7 +87,7 @@ namespace Framework.Database
{
public TransactionWithResultTask(SQLTransaction trans) : base(trans) { }
public new bool Execute<T>(MySqlBase<T> mySqlBase)
public override bool Execute<T>(MySqlBase<T> mySqlBase)
{
MySqlErrorCode errorCode = TryExecute(mySqlBase);
if (errorCode == MySqlErrorCode.None)
-5
View File
@@ -44,11 +44,6 @@ namespace Framework.Dynamic
Value = default(T);
}
public static implicit operator Optional<T> (T value)
{
return value;
}
public static explicit operator T(Optional<T> value)
{
return (T)value;