Index: src/game/Mail.cpp =================================================================== --- src/game/Mail.cpp (revision 4645) +++ src/game/Mail.cpp (working copy) @@ -165,10 +165,8 @@ sDatabase.BeginTransaction(); pItem->DeleteFromInventoryDB(); //deletes item from character's inventory - pItem->SaveToDB(); // recursive and not have transaction guard into self - sDatabase.CommitTransaction(); - //item reminds in item_instance table already, used it in mail now + //item remains still in item_instance table, but is used in mail from now pl->RemoveItem( (item_pos >> 8), (item_pos & 255), true ); pItem->RemoveFromUpdateQueueOf( pl ); if(pItem->IsInWorld()) @@ -176,6 +174,9 @@ pItem->RemoveFromWorld(); pItem->DestroyForPlayer( pl ); } + //save item only after non existent item is already removed + pItem->SaveToDB(); // recursive and not have transaction guard into self + sDatabase.CommitTransaction(); // owner in `data` will set at mail receive and item extracting sDatabase.PExecute("UPDATE `item_instance` SET `owner_guid` = '%u' WHERE `guid`='%u'",GUID_LOPART(rc),pItem->GetGUIDLow());