summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/net/eathena/mail2recv.cpp61
-rw-r--r--src/net/eathena/packetsin.inc6
2 files changed, 51 insertions, 16 deletions
diff --git a/src/net/eathena/mail2recv.cpp b/src/net/eathena/mail2recv.cpp
index 1afb69d16..09208d94b 100644
--- a/src/net/eathena/mail2recv.cpp
+++ b/src/net/eathena/mail2recv.cpp
@@ -52,6 +52,8 @@
#include "debug.h"
+extern int packetVersion;
+
namespace EAthena
{
@@ -334,24 +336,51 @@ void Mail2Recv::processMailListPage(Net::MessageIn &msg)
return;
}
msg.readInt16("len");
- mailWindow->setOpenType(fromInt(msg.readUInt8("open type"),
- MailOpenTypeT));
- const int cnt = msg.readUInt8("cnt");
- const bool isEnd = msg.readUInt8("isEnd") != 0;
- for (int f = 0; f < cnt; f ++)
+ bool isEnd = true;
+ if (packetVersion < 20170419)
{
- MailMessage *const mail = new MailMessage;
- mail->id = msg.readInt64("mail id");
- mail->read = msg.readUInt8("is read") != 0U ? true : false;
- mail->type = static_cast<MailMessageType::Type>(
- msg.readUInt8("type"));
- mail->sender = msg.readString(24, "sender name");
- mail->time = CAST_S32(cur_time - msg.readInt32("reg time"));
- mail->strTime = timeToStr(mail->time);
- mail->expireTime = msg.readInt32("expire time");
- mail->title = msg.readString(-1, "title");
- mailWindow->addMail(mail);
+ mailWindow->setOpenType(fromInt(msg.readUInt8("open type"),
+ MailOpenTypeT));
+ const int cnt = msg.readUInt8("cnt");
+ isEnd = msg.readUInt8("isEnd") != 0;
+ for (int f = 0; f < cnt; f ++)
+ {
+ MailMessage *const mail = new MailMessage;
+ mail->id = msg.readInt64("mail id");
+ mail->read = msg.readUInt8("is read") != 0U ? true : false;
+ mail->type = static_cast<MailMessageType::Type>(
+ msg.readUInt8("type"));
+ mail->sender = msg.readString(24, "sender name");
+ if (packetVersion < 20170419)
+ {
+ mail->time = CAST_S32(cur_time - msg.readInt32("reg time"));
+ mail->strTime = timeToStr(mail->time);
+ }
+ mail->expireTime = msg.readInt32("expire time");
+ mail->title = msg.readString(-1, "title");
+ mailWindow->addMail(mail);
+ }
}
+ else
+ {
+ isEnd = msg.readUInt8("isEnd") != 0;
+ while (msg.getUnreadLength() > 0)
+ {
+ MailMessage *const mail = new MailMessage;
+ // +++ need save open type into MailMessage
+ msg.readUInt8("open type");
+ mail->id = msg.readInt64("mail id");
+ mail->read = msg.readUInt8("is read") != 0U ? true : false;
+ mail->type = static_cast<MailMessageType::Type>(
+ msg.readUInt8("type"));
+ mail->sender = msg.readString(24, "sender name");
+ mail->strTime = "-";
+ mail->expireTime = msg.readInt32("expire time");
+ mail->title = msg.readString(-1, "title");
+ mailWindow->addMail(mail);
+ }
+ }
+
if (isEnd)
mailWindow->setLastPage();
}
diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc
index b12e6c212..382756a14 100644
--- a/src/net/eathena/packetsin.inc
+++ b/src/net/eathena/packetsin.inc
@@ -958,6 +958,12 @@ if (packetVersion >= 20170329)
packet(SMSG_CHAR_MAP_INFO, 0x0ac5, 156, &CharServerRecv::processCharMapInfo, 20170329);
}
+// 20170419
+if (packetVersion >= 20170419)
+{
+ packet(SMSG_MAIL2_MAIL_LIST_PAGE, 0x0ac2, -1, &Mail2Recv::processMailListPage, 20170419);
+}
+
// 20170502
if (packetVersion >= 20170502)
{