mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[10862] Fixed not show and lost mail items in returned expire mails.
Also * Use typename for mail item info vector. * Include tools/characters_mail_items_cleanup.sql for cleanup lost mail items. It also included as sql update part. Sql update also fix receiver for stored in DB expired mail items. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
f72e2ccee8
commit
c7205a6837
10 changed files with 44 additions and 13 deletions
|
|
@ -5508,25 +5508,31 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
|
|||
|
||||
delete resultItems;
|
||||
}
|
||||
//if it is mail from AH, it shouldn't be returned, but deleted
|
||||
if (m->messageType != MAIL_NORMAL || m->messageType == MAIL_AUCTION || (m->checked & (MAIL_CHECK_MASK_COD_PAYMENT | MAIL_CHECK_MASK_RETURNED)))
|
||||
// if it is mail from non-player, or if it's already return mail, it shouldn't be returned, but deleted
|
||||
if (m->messageType != MAIL_NORMAL || (m->checked & (MAIL_CHECK_MASK_COD_PAYMENT | MAIL_CHECK_MASK_RETURNED)))
|
||||
{
|
||||
// mail open and then not returned
|
||||
for(std::vector<MailItemInfo>::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
|
||||
for(MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
|
||||
CharacterDatabase.PExecute("DELETE FROM item_instance WHERE guid = '%u'", itr2->item_guid);
|
||||
}
|
||||
else
|
||||
{
|
||||
//mail will be returned:
|
||||
// mail will be returned:
|
||||
CharacterDatabase.PExecute("UPDATE mail SET sender = '%u', receiver = '%u', expire_time = '" UI64FMTD "', deliver_time = '" UI64FMTD "',cod = '0', checked = '%u' WHERE id = '%u'",
|
||||
m->receiverGuid.GetCounter(), m->sender, (uint64)(basetime + 30*DAY), (uint64)basetime, MAIL_CHECK_MASK_RETURNED, m->messageID);
|
||||
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
|
||||
{
|
||||
// update receiver in mail items for its proper delivery, and in instance_item for avoid lost item at sender delete
|
||||
CharacterDatabase.PExecute("UPDATE mail_items SET receiver = %u WHERE item_guid = '%u'", m->sender, itr2->item_guid);
|
||||
CharacterDatabase.PExecute("UPDATE item_instance SET owner_guid = %u WHERE guid = '%u'", m->sender, itr2->item_guid);
|
||||
}
|
||||
delete m;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
//deletemail = true;
|
||||
//delmails << m->messageID << ", ";
|
||||
// deletemail = true;
|
||||
// delmails << m->messageID << ", ";
|
||||
CharacterDatabase.PExecute("DELETE FROM mail WHERE id = '%u'", m->messageID);
|
||||
delete m;
|
||||
++count;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue