aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2014-09-28 21:13:00 +0200
committerjackpoz <giacomopoz@gmail.com>2014-09-28 21:13:19 +0200
commitc23c66f7193ed5ad0864778c5fb5025133770561 (patch)
tree85e92d9227ebf19db6740b9f7a70c29092f6b7ee /src
parent0781d296577579be6692b90a96f76563b9093282 (diff)
Core/AH: Fix Auction House items not deleted from database
Fix some cases where Auction House items were not deleted from item_instance table of character database, for example if the owner didn't exist anymore or if the owner was the AHBot. Updates #12699 Updates #13232
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp19
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h2
2 files changed, 19 insertions, 2 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 7b1dda89869..015109e70ee 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -147,6 +147,11 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
.AddItem(pItem)
.SendMailTo(trans, MailReceiver(bidder, auction->bidder), auction, MAIL_CHECK_MASK_COPIED);
}
+ else
+ {
+ // bidder doesn't exist, delete the item
+ sAuctionMgr->RemoveAItem(auction->itemGUIDLow, true);
+ }
}
void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, SQLTransaction& trans)
@@ -207,6 +212,11 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti
.AddItem(pItem)
.SendMailTo(trans, MailReceiver(owner, auction->owner), auction, MAIL_CHECK_MASK_COPIED, 0);
}
+ else
+ {
+ // owner doesn't exist, delete the item
+ sAuctionMgr->RemoveAItem(auction->itemGUIDLow, true);
+ }
}
//this function sends mail to old bidder
@@ -350,12 +360,19 @@ void AuctionHouseMgr::AddAItem(Item* it)
mAitems[it->GetGUIDLow()] = it;
}
-bool AuctionHouseMgr::RemoveAItem(uint32 id)
+bool AuctionHouseMgr::RemoveAItem(uint32 id, bool deleteItem)
{
ItemMap::iterator i = mAitems.find(id);
if (i == mAitems.end())
return false;
+ if (deleteItem)
+ {
+ SQLTransaction trans = SQLTransaction(nullptr);
+ i->second->FSetState(ITEM_REMOVED);
+ i->second->SaveToDB(trans);
+ }
+
mAitems.erase(i);
return true;
}
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index 597da13cb1b..0ef61be584a 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -181,7 +181,7 @@ class AuctionHouseMgr
void LoadAuctions();
void AddAItem(Item* it);
- bool RemoveAItem(uint32 id);
+ bool RemoveAItem(uint32 id, bool deleteItem = false);
void Update();