mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 18:40:28 +00:00
fix(Core/Mails): mails containing items not being returned if they were read and ensure mails sent by GMs are not returned (#8095)
This commit is contained in:
@@ -5731,7 +5731,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
|
||||
bool has_items = fields[4].GetBool();
|
||||
m->expire_time = time_t(fields[5].GetUInt32());
|
||||
m->deliver_time = time_t(0);
|
||||
m->COD = fields[6].GetUInt32();
|
||||
m->stationery = fields[6].GetUInt8();
|
||||
m->checked = fields[7].GetUInt8();
|
||||
m->mailTemplateId = fields[8].GetInt16();
|
||||
m->auctionId = fields[9].GetInt32();
|
||||
@@ -5752,13 +5752,13 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
|
||||
// read items from cache
|
||||
m->items.swap(itemsCache[m->messageID]);
|
||||
|
||||
// don't return if: is mail from non-player, or sent to self, or already returned, or read and isn't COD
|
||||
if (m->messageType != MAIL_NORMAL || m->receiver == m->sender || (m->checked & (MAIL_CHECK_MASK_COD_PAYMENT | MAIL_CHECK_MASK_RETURNED)) || ((m->checked & MAIL_CHECK_MASK_READ) && !m->COD))
|
||||
// If it is mail from non-player, or if it's already return mail, it shouldn't be returned, but deleted
|
||||
if (!m->IsSentByPlayer() || m->IsSentByGM() || (m->IsCODPayment() || m->IsReturnedMail()))
|
||||
{
|
||||
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
|
||||
for (auto const& mailedItem : m->items)
|
||||
{
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
|
||||
stmt->setUInt32(0, itr2->item_guid);
|
||||
stmt->setUInt32(0, mailedItem.item_guid);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
@@ -5777,17 +5777,17 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
|
||||
stmt->setUInt8 (4, uint8(MAIL_CHECK_MASK_RETURNED));
|
||||
stmt->setUInt32(5, m->messageID);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
|
||||
for (auto const& mailedItem : m->items)
|
||||
{
|
||||
// Update receiver in mail items for its proper delivery, and in instance_item for avoid lost item at sender delete
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_MAIL_ITEM_RECEIVER);
|
||||
stmt->setUInt32(0, m->sender);
|
||||
stmt->setUInt32(1, itr2->item_guid);
|
||||
stmt->setUInt32(1, mailedItem.item_guid);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
|
||||
stmt->setUInt32(0, m->sender);
|
||||
stmt->setUInt32(1, itr2->item_guid);
|
||||
stmt->setUInt32(1, mailedItem.item_guid);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user