summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/char_sql/int_mail.c1
-rw-r--r--src/common/mmo.h2
-rw-r--r--src/map/clif.c2
-rw-r--r--src/map/intif.c13
-rw-r--r--src/map/pc.h1
5 files changed, 12 insertions, 7 deletions
diff --git a/src/char_sql/int_mail.c b/src/char_sql/int_mail.c
index 5652884cb..b19b732c7 100644
--- a/src/char_sql/int_mail.c
+++ b/src/char_sql/int_mail.c
@@ -73,7 +73,6 @@ static int mail_fromsql(int char_id, struct mail_data* md)
md->full = ( Sql_NumRows(sql_handle) > MAIL_MAX_INBOX );
md->amount = i;
- md->changed = false;
Sql_FreeResult(sql_handle);
md->unchecked = 0;
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 3ba9d7264..2bd88c636 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -332,7 +332,7 @@ struct mail_message {
struct mail_data {
short amount;
- bool changed, full;
+ bool full;
short unchecked, unread;
struct mail_message msg[MAIL_MAX_INBOX];
};
diff --git a/src/map/clif.c b/src/map/clif.c
index 4031a9243..43eac298c 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -11613,7 +11613,7 @@ void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd)
{
struct mail_data* md = &sd->mail.inbox;
- if( md->amount < MAIL_MAX_INBOX && (md->full || md->changed) )
+ if( md->amount < MAIL_MAX_INBOX && (md->full || sd->mail.changed) )
intif_Mail_requestinbox(sd->status.char_id, 1);
else
clif_Mail_refreshinbox(sd);
diff --git a/src/map/intif.c b/src/map/intif.c
index 6ad29368e..7130f2820 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -1438,6 +1438,7 @@ int intif_parse_Mail_inboxreceived(int fd)
//FIXME: this operation is not safe [ultramage]
memcpy(&sd->mail.inbox, RFIFOP(fd,9), sizeof(struct mail_data));
+ sd->mail.changed = false; // cache is now in sync
if (flag)
clif_Mail_refreshinbox(sd);
@@ -1634,7 +1635,9 @@ static void intif_parse_Mail_send(int fd)
memcpy(&msg, RFIFOP(fd,4), sizeof(struct mail_message));
fail = (msg.id == 0);
- if( (sd = map_charid2sd(msg.send_id)) )
+ // notify sender
+ sd = map_charid2sd(msg.send_id);
+ if( sd != NULL )
{
if( fail )
mail_deliveryfail(sd, &msg);
@@ -1649,9 +1652,11 @@ static void intif_parse_Mail_send(int fd)
if( fail )
return;
- if( (sd = map_charid2sd(msg.dest_id)) )
+ // notify recipient (if online)
+ sd = map_charid2sd(msg.dest_id);
+ if( sd != NULL )
{
- sd->mail.inbox.changed = true;
+ sd->mail.changed = true;
clif_Mail_new(sd->fd, msg.id, msg.send_name, msg.title);
}
}
@@ -1666,7 +1671,7 @@ static void intif_parse_Mail_new(int fd)
if( sd == NULL )
return;
- sd->mail.inbox.changed = true;
+ sd->mail.changed = true;
clif_Mail_new(sd->fd, mail_id, sender_name, title);
}
diff --git a/src/map/pc.h b/src/map/pc.h
index aae1e6550..cef9b5df5 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -352,6 +352,7 @@ struct map_session_data {
short nameid;
int index, amount, zeny;
struct mail_data inbox;
+ bool changed; // if true, should sync with charserver on next mailbox request
} mail;
//Quest log system [Kevin]