aboutsummaryrefslogtreecommitdiff
path: root/src/game/Mail.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-05-27 16:38:50 -0500
committermegamage <none@none>2009-05-27 16:38:50 -0500
commit73d31e2552a811e30b4c12b11c845552e6fb6973 (patch)
treebacfb306e55467685bea71a5a5d3475be3b6f002 /src/game/Mail.cpp
parent35ba3ca6538256c41a0961016e9d67a51ca9b7ee (diff)
[7898] Improve client error output at different mail send errors, cleanup code. Author: VladimirMangos
--HG-- branch : trunk
Diffstat (limited to 'src/game/Mail.cpp')
-rw-r--r--src/game/Mail.cpp44
1 files changed, 27 insertions, 17 deletions
diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp
index 8f682a858ee..8e1077cef97 100644
--- a/src/game/Mail.cpp
+++ b/src/game/Mail.cpp
@@ -80,7 +80,10 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
recv_data >> items_count; // attached items count
if(items_count > 12) // client limit
+ {
+ GetPlayer()->SendMailResult(0, MAIL_SEND, MAIL_ERR_TOO_MANY_ATTACHMENTS);
return;
+ }
// recheck
CHECK_PACKET_SIZE(recv_data, 8+(receiver.size()+1)+(subject.size()+1)+(body.size()+1)+4+4+1+items_count*(1+8)+4+4+8+1);
@@ -116,7 +119,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
{
sLog.outDetail("Player %u is sending mail to %s (GUID: not existed!) with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",
pl->GetGUIDLow(), receiver.c_str(), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);
- pl->SendMailResult(0, 0, MAIL_ERR_RECIPIENT_NOT_FOUND);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);
return;
}
@@ -124,7 +127,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
if(pl->GetGUID() == rc)
{
- pl->SendMailResult(0, 0, MAIL_ERR_CANNOT_SEND_TO_SELF);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANNOT_SEND_TO_SELF);
return;
}
@@ -134,7 +137,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
if (pl->GetMoney() < reqmoney)
{
- pl->SendMailResult(0, 0, MAIL_ERR_NOT_ENOUGH_MONEY);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);
return;
}
@@ -162,13 +165,13 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
//do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..
if (mails_count > 100)
{
- pl->SendMailResult(0, 0, MAIL_ERR_INTERNAL_ERROR);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);
return;
}
// test the receiver's Faction...
if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL) && pl->GetTeam() != rc_team && GetSecurity() == SEC_PLAYER)
{
- pl->SendMailResult(0, 0, MAIL_ERR_NOT_YOUR_TEAM);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);
return;
}
@@ -180,31 +183,38 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
if(!mailItem.item_guidlow)
{
- pl->SendMailResult(0, 0, MAIL_ERR_INTERNAL_ERROR);
+ 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 || !mailItem.item->CanBeTraded())
+ if(!mailItem.item)
{
- pl->SendMailResult(0, 0, MAIL_ERR_INTERNAL_ERROR);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);
return;
}
+
+ if(!mailItem.item->CanBeTraded())
+ {
+ 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, 0, MAIL_ERR_INTERNAL_ERROR);
+ 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, 0, MAIL_ERR_CANT_SEND_WRAPPED_COD);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);
return;
}
}
}
- pl->SendMailResult(0, 0, MAIL_OK);
+ pl->SendMailResult(0, MAIL_SEND, MAIL_OK);
uint32 itemTextId = 0;
if (!body.empty())
@@ -316,7 +326,7 @@ void WorldSession::HandleMailDelete(WorldPacket & recv_data )
Mail *m = pl->GetMail(mailId);
if(m)
m->state = MAIL_STATE_DELETED;
- pl->SendMailResult(mailId, MAIL_DELETED, 0);
+ pl->SendMailResult(mailId, MAIL_DELETED, MAIL_OK);
}
void WorldSession::HandleReturnToSender(WorldPacket & recv_data )
@@ -375,7 +385,7 @@ void WorldSession::HandleReturnToSender(WorldPacket & recv_data )
}
delete m; //we can deallocate old mail
- pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, 0);
+ pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK);
}
void WorldSession::SendReturnToSender(uint8 messageType, uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, const std::string& subject, uint32 itemTextId, MailItemsInfo *mi, uint32 money, uint16 mailTemplateId )
@@ -518,7 +528,7 @@ void WorldSession::HandleTakeItem(WorldPacket & recv_data )
pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_OK, 0, itemId, count);
}
else
- pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_BAG_FULL, msg);
+ pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_EQUIP_ERROR, msg);
}
void WorldSession::HandleTakeMoney(WorldPacket & recv_data )
@@ -542,7 +552,7 @@ void WorldSession::HandleTakeMoney(WorldPacket & recv_data )
return;
}
- pl->SendMailResult(mailId, MAIL_MONEY_TAKEN, 0);
+ pl->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_OK);
pl->ModifyMoney(m->money);
m->money = 0;
@@ -735,11 +745,11 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data )
pl->StoreItem(dest, bodyItem, true);
//bodyItem->SetState(ITEM_NEW, pl); is set automatically
- pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, 0);
+ pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_OK);
}
else
{
- pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_BAG_FULL, msg);
+ pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_EQUIP_ERROR, msg);
delete bodyItem;
}
}