mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 19:37:02 +00:00
[8751] Implement proper creating mail text copy item from mail template based mail.
This commit is contained in:
parent
78022c0999
commit
6901325e68
4 changed files with 24 additions and 6 deletions
|
|
@ -1069,7 +1069,7 @@ struct MailTemplateEntry
|
||||||
uint32 ID; // 0
|
uint32 ID; // 0
|
||||||
//char* subject[16]; // 1-16
|
//char* subject[16]; // 1-16
|
||||||
// 17 name flags, unused
|
// 17 name flags, unused
|
||||||
//char* content[16]; // 18-33
|
char* content[16]; // 18-33
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MapEntry
|
struct MapEntry
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ const char ItemRandomPropertiesfmt[]="nxiiiiissssssssssssssssx";
|
||||||
const char ItemRandomSuffixfmt[]="nssssssssssssssssxxiiiiiiiiii";
|
const char ItemRandomSuffixfmt[]="nssssssssssssssssxxiiiiiiiiii";
|
||||||
const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii";
|
const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii";
|
||||||
const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx";
|
const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx";
|
||||||
const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxssssssssssssssssx";
|
||||||
const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx";
|
const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx";
|
||||||
const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix";
|
const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix";
|
||||||
const char MovieEntryfmt[]="nxx";
|
const char MovieEntryfmt[]="nxx";
|
||||||
|
|
|
||||||
|
|
@ -314,6 +314,7 @@ void WorldSession::HandleMailDelete(WorldPacket & recv_data )
|
||||||
uint32 mailId;
|
uint32 mailId;
|
||||||
recv_data >> mailbox;
|
recv_data >> mailbox;
|
||||||
recv_data >> mailId;
|
recv_data >> mailId;
|
||||||
|
recv_data.read_skip<uint32>(); // mailTemplateId
|
||||||
|
|
||||||
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
|
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
|
||||||
return;
|
return;
|
||||||
|
|
@ -709,7 +710,9 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data )
|
||||||
uint64 mailbox;
|
uint64 mailbox;
|
||||||
uint32 mailId;
|
uint32 mailId;
|
||||||
|
|
||||||
recv_data >> mailbox >> mailId;
|
recv_data >> mailbox;
|
||||||
|
recv_data >> mailId;
|
||||||
|
recv_data.read_skip<uint32>(); // mailTemplateId, non need, Mail store own 100% correct value anyway
|
||||||
|
|
||||||
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
|
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
|
||||||
return;
|
return;
|
||||||
|
|
@ -717,12 +720,27 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data )
|
||||||
Player *pl = _player;
|
Player *pl = _player;
|
||||||
|
|
||||||
Mail* m = pl->GetMail(mailId);
|
Mail* m = pl->GetMail(mailId);
|
||||||
if(!m || !m->itemTextId || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
|
if(!m || !m->itemTextId && !m->mailTemplateId || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
|
||||||
{
|
{
|
||||||
pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
|
pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32 itemTextId = m->itemTextId;
|
||||||
|
|
||||||
|
// in mail template case we need create new text id
|
||||||
|
if(!itemTextId)
|
||||||
|
{
|
||||||
|
MailTemplateEntry const* mailTemplateEntry = sMailTemplateStore.LookupEntry(m->mailTemplateId);
|
||||||
|
if(!mailTemplateEntry)
|
||||||
|
{
|
||||||
|
pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemTextId = objmgr.CreateItemText(mailTemplateEntry->content[GetSessionDbcLocale()]);
|
||||||
|
}
|
||||||
|
|
||||||
Item *bodyItem = new Item; // This is not bag and then can be used new Item.
|
Item *bodyItem = new Item; // This is not bag and then can be used new Item.
|
||||||
if(!bodyItem->Create(objmgr.GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, pl))
|
if(!bodyItem->Create(objmgr.GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, pl))
|
||||||
{
|
{
|
||||||
|
|
@ -730,7 +748,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bodyItem->SetUInt32Value( ITEM_FIELD_ITEM_TEXT_ID, m->itemTextId );
|
bodyItem->SetUInt32Value( ITEM_FIELD_ITEM_TEXT_ID, itemTextId );
|
||||||
bodyItem->SetUInt32Value( ITEM_FIELD_CREATOR, m->sender);
|
bodyItem->SetUInt32Value( ITEM_FIELD_CREATOR, m->sender);
|
||||||
|
|
||||||
sLog.outDetail("HandleMailCreateTextItem mailid=%u",mailId);
|
sLog.outDetail("HandleMailCreateTextItem mailid=%u",mailId);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8750"
|
#define REVISION_NR "8751"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue