diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/char_sql/int_mail.c | 1 | ||||
-rw-r--r-- | src/common/mmo.h | 2 | ||||
-rw-r--r-- | src/map/clif.c | 2 | ||||
-rw-r--r-- | src/map/intif.c | 13 | ||||
-rw-r--r-- | src/map/pc.h | 1 |
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] |