diff options
-rwxr-xr-x | src/server/game/Mails/Mail.cpp | 5 | ||||
-rwxr-xr-x | src/server/game/Mails/Mail.h | 2 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/MailHandler.cpp | 5 |
3 files changed, 5 insertions, 7 deletions
diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index a76b1020f46..17932d22aff 100755 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -126,7 +126,7 @@ void MailDraft::deleteIncludedItems(SQLTransaction& trans, bool inDB /*= false*/ m_items.clear(); } -void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid) +void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans) { Player *receiver = sObjectMgr->GetPlayer(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER)); @@ -134,8 +134,6 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 if (!receiver) rc_account = sObjectMgr->GetPlayerAccountIdByGUID(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER)); - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - if (!receiver && !rc_account) // sender not exist { deleteIncludedItems(trans, true); @@ -168,7 +166,6 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 // will delete item or place to receiver mail list SendMailTo(trans, MailReceiver(receiver, receiver_guid), MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED, deliver_delay); - CharacterDatabase.CommitTransaction(trans); } void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked, uint32 deliver_delay) diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h index 247743f46fc..f37a7f1beb7 100755 --- a/src/server/game/Mails/Mail.h +++ b/src/server/game/Mails/Mail.h @@ -143,7 +143,7 @@ class MailDraft MailDraft& AddCOD(uint32 COD) { m_COD = COD; return *this; } public: // finishers - void SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid); + void SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans); void SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked = MAIL_CHECK_MASK_NONE, uint32 deliver_delay = 0); private: diff --git a/src/server/game/Server/Protocol/Handlers/MailHandler.cpp b/src/server/game/Server/Protocol/Handlers/MailHandler.cpp index a6bbb182fdf..2e4dbe799a7 100755 --- a/src/server/game/Server/Protocol/Handlers/MailHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/MailHandler.cpp @@ -365,7 +365,6 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data) SQLTransaction trans = CharacterDatabase.BeginTransaction(); trans->PAppend("DELETE FROM mail WHERE id = '%u'", mailId); // needed? trans->PAppend("DELETE FROM mail_items WHERE mail_id = '%u'", mailId); - CharacterDatabase.CommitTransaction(trans); pl->RemoveMail(mailId); // only return mail if the player exists (and delete if not existing) @@ -390,9 +389,11 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data) pl->RemoveMItem(itr2->item_guid); } } - draft.AddMoney(m->money).SendReturnToSender(GetAccountId(), m->receiver, m->sender); + draft.AddMoney(m->money).SendReturnToSender(GetAccountId(), m->receiver, m->sender, trans); } + CharacterDatabase.CommitTransaction(trans); + delete m; //we can deallocate old mail pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK); } |