aboutsummaryrefslogtreecommitdiff
path: root/src/game/Mail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Mail.cpp')
-rw-r--r--src/game/Mail.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp
index 8e1077cef97..337604f2a2a 100644
--- a/src/game/Mail.cpp
+++ b/src/game/Mail.cpp
@@ -175,6 +175,12 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
return;
}
+ uint32 rc_account = 0;
+ if(receive)
+ rc_account = receive->GetSession()->GetAccountId();
+ else
+ rc_account = objmgr.GetPlayerAccountIdByGUID(rc);
+
if (items_count)
{
for(MailItemMap::iterator mailItemIter = mi.begin(); mailItemIter != mi.end(); ++mailItemIter)
@@ -195,12 +201,18 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
return;
}
- if(!mailItem.item->CanBeTraded())
+ 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->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);
@@ -229,12 +241,6 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
if(items_count > 0 || money > 0)
{
- uint32 rc_account = 0;
- if(receive)
- rc_account = receive->GetSession()->GetAccountId();
- else
- rc_account = objmgr.GetPlayerAccountIdByGUID(rc);
-
if (items_count > 0)
{
for(MailItemMap::iterator mailItemIter = mi.begin(); mailItemIter != mi.end(); ++mailItemIter)