diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index ec31265f5..649d2377e 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -78,19 +78,16 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data ) if(items_count > 12) // client limit { GetPlayer()->SendMailResult(0, MAIL_SEND, MAIL_ERR_TOO_MANY_ATTACHMENTS); + recv_data.rpos(recv_data.wpos()); // set to end to avoid warnings spam return; } - if(items_count) + for(uint8 i = 0; i < items_count; ++i) { - for(uint8 i = 0; i < items_count; ++i) - { - uint8 item_slot; - uint64 item_guid; - recv_data >> item_slot; - recv_data >> item_guid; - mi.AddItem(GUID_LOPART(item_guid), item_slot); - } + uint64 item_guid; + recv_data.read_skip(); // item slot in mail, not used + recv_data >> item_guid; + mi.AddItem(GUID_LOPART(item_guid)); } recv_data >> money >> COD; // money and cod @@ -176,51 +173,49 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data ) else rc_account = objmgr.GetPlayerAccountIdByGUID(rc); - if (items_count) + for(MailItemMap::iterator mailItemIter = mi.begin(); mailItemIter != mi.end(); ++mailItemIter) { - for(MailItemMap::iterator mailItemIter = mi.begin(); mailItemIter != mi.end(); ++mailItemIter) + MailItem& mailItem = mailItemIter->second; + + if(!mailItem.item_guidlow) { - MailItem& mailItem = mailItemIter->second; + pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID); + return; + } - if(!mailItem.item_guidlow) - { - pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID); - return; - } + mailItem.item = pl->GetItemByGuid(MAKE_NEW_GUID(mailItem.item_guidlow, 0, HIGHGUID_ITEM)); + // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail) + if(!mailItem.item) + { + pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID); + return; + } - mailItem.item = pl->GetItemByGuid(MAKE_NEW_GUID(mailItem.item_guidlow, 0, HIGHGUID_ITEM)); - // prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail) - if(!mailItem.item) - { - pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID); - return; - } + if(!mailItem.item->CanBeTraded(true)) + { + pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM); + return; + } - if(!mailItem.item->CanBeTraded(true)) - { - pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM); - return; - } + if(mailItem.item->IsBoundAccountWide() && mailItem.item->IsSoulBound() && pl->GetSession()->GetAccountId() != rc_account) + { + pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS); + return; + } - if(mailItem.item->IsBoundAccountWide() && mailItem.item->IsSoulBound() && pl->GetSession()->GetAccountId() != rc_account) - { - pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS); - return; - } + if (mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_CONJURED) || mailItem.item->GetUInt32Value(ITEM_FIELD_DURATION)) + { + pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM); + return; + } - if (mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_CONJURED) || mailItem.item->GetUInt32Value(ITEM_FIELD_DURATION)) - { - pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM); - return; - } - - if(COD && mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED)) - { - pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD); - return; - } + if(COD && mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED)) + { + pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD); + return; } } + pl->SendMailResult(0, MAIL_SEND, MAIL_OK); uint32 itemTextId = 0; diff --git a/src/game/Mail.h b/src/game/Mail.h index c13124c04..7efda13eb 100644 --- a/src/game/Mail.h +++ b/src/game/Mail.h @@ -82,9 +82,8 @@ struct MailItemInfo struct MailItem { - MailItem() : item_slot(0), item_guidlow(0), item_template(0), item(NULL) {} + MailItem() : item_guidlow(0), item_template(0), item(NULL) {} - uint8 item_slot; // slot in mail uint32 item_guidlow; // item guid (low part) uint32 item_template; // item entry Item *item; // item pointer @@ -102,21 +101,19 @@ class MailItemsInfo MailItemMap::iterator begin() { return i_MailItemMap.begin(); } MailItemMap::iterator end() { return i_MailItemMap.end(); } - void AddItem(uint32 guidlow, uint32 _template, Item *item, uint8 slot = 0) + void AddItem(uint32 guidlow, uint32 _template, Item *item) { MailItem mailItem; - mailItem.item_slot = slot; mailItem.item_guidlow = guidlow; mailItem.item_template = _template; mailItem.item = item; i_MailItemMap[guidlow] = mailItem; } - void AddItem(uint32 guidlow, uint8 slot = 0) + void AddItem(uint32 guidlow) { MailItem mailItem; mailItem.item_guidlow = guidlow; - mailItem.item_slot = slot; i_MailItemMap[guidlow] = mailItem; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index cc9eb88db..1f80fc146 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8756" + #define REVISION_NR "8757" #endif // __REVISION_NR_H__