diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-10-26 08:42:32 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-10-26 08:42:32 +0000 |
commit | 525e08137aa36cc2bbd8284f8b48de01bbb70b4f (patch) | |
tree | 9ef040444cbd22550778ccfca75ec1bc697142db /src/map | |
parent | 9befe305370ddcc177ca36f1d4d6c295ddfb7533 (diff) | |
download | hercules-525e08137aa36cc2bbd8284f8b48de01bbb70b4f.tar.gz hercules-525e08137aa36cc2bbd8284f8b48de01bbb70b4f.tar.bz2 hercules-525e08137aa36cc2bbd8284f8b48de01bbb70b4f.tar.xz hercules-525e08137aa36cc2bbd8284f8b48de01bbb70b4f.zip |
* Removed confusing map_nick2sd_nocase(), let the charserver handle it
* Added correct packet for attachment retrieval failure when overweight
* Fixed one more mistake in r11571 (Sql->SqlStmt)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11579 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/clif.c | 25 | ||||
-rw-r--r-- | src/map/intif.c | 54 | ||||
-rw-r--r-- | src/map/map.c | 15 | ||||
-rw-r--r-- | src/map/map.h | 1 |
4 files changed, 34 insertions, 61 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 3b2fefc1c..0d0aa997b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11465,7 +11465,10 @@ void clif_parse_Mail_getattach(int fd, struct map_session_data *sd) weight = data->weight * sd->mail.inbox.msg[i].item.amount; if (weight > sd->max_weight - sd->weight) { - clif_displaymessage(fd, "Attachment to heavy for you..."); + WFIFOHEAD(fd,packet_len(0x245)); + WFIFOW(fd,0) = 0x245; + WFIFOB(fd,2) = 2; + WFIFOSET(fd,packet_len(0x245)); return; } } @@ -11635,7 +11638,6 @@ void clif_Mail_send(int fd, unsigned char flag) /// S 0248 <packet len>.w <nick>.24B <title>.40B <body len>.B <message>.?B void clif_parse_Mail_send(int fd, struct map_session_data *sd) { - struct map_session_data *rd; struct mail_message msg; int body_len; nullpo_retv(sd); @@ -11653,14 +11655,6 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd) } body_len = RFIFOB(fd,68); - rd = map_nick2sd_nocase(RFIFOP(fd,4)); - - if (rd && rd == sd) { - clif_Mail_send(fd, 1); - mail_removeitem(sd,0); - mail_removezeny(sd,0); - return; - } if (body_len > MAIL_BODY_LENGTH) body_len = MAIL_BODY_LENGTH; @@ -11674,16 +11668,9 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd) } msg.send_id = sd->status.char_id; + msg.dest_id = 0; // will attempt to resolve name safestrncpy(msg.send_name, sd->status.name, NAME_LENGTH); - - if (rd) { - msg.dest_id = rd->status.char_id; - safestrncpy(msg.dest_name, rd->status.name, NAME_LENGTH); - } else { - msg.dest_id = 0; - safestrncpy(msg.dest_name, (char*)RFIFOP(fd,4), NAME_LENGTH); - } - + safestrncpy(msg.dest_name, (char*)RFIFOP(fd,4), NAME_LENGTH); safestrncpy(msg.title, (char*)RFIFOP(fd,28), MAIL_TITLE_LENGTH); if (body_len) diff --git a/src/map/intif.c b/src/map/intif.c index d6839b180..702ab244a 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -1669,44 +1669,46 @@ int intif_Mail_send(int account_id, struct mail_message *msg) int intif_parse_Mail_send(int fd) { - struct map_session_data *sd = map_charid2sd(RFIFOL(fd,4)); + struct map_session_data* sd = map_charid2sd(RFIFOL(fd,4)); int mail_id = RFIFOL(fd,8); int dest_id = RFIFOL(fd,12); + struct map_session_data* rd; - if (sd == NULL && mail_id > 0) - { - if (battle_config.error_log) + if( mail_id == 0 ) + {// nick->charid lookup failed, no such char + // Return the items to the owner + mail_removeitem(sd, 0); + mail_removezeny(sd, 0); + clif_Mail_send(sd->fd, 1); // failed + return 0; + } + + if( sd == NULL ) + {// original sender disconnected, item cannot be deleted! + if( battle_config.error_log ) ShowError("intif_parse_Mail_send: char not found %d\n",RFIFOL(fd,2)); - // If sd = NULL attachment haven't been removed from sender inventory. + // the best thing we can do at this point is requesting removal of the mail with the duped item intif_Mail_delete(dest_id, mail_id); return 0; } - if (mail_id > 0) + // physically delete the item + mail_removeitem(sd, 1); + mail_removezeny(sd, 1); + clif_Mail_send(sd->fd, 0); // success + + // notify recipient about new mail + rd = map_charid2sd(dest_id); + if( rd != NULL ) { - struct map_session_data *rd = map_charid2sd(dest_id); - - mail_removeitem(sd, 1); - mail_removezeny(sd, 1); - - if (rd != NULL) - { - char title[MAIL_TITLE_LENGTH]; - memcpy(title, RFIFOP(fd,16), RFIFOW(fd,2) - 16); - - rd->mail.inbox.changed = 1; - clif_Mail_new(rd->fd, mail_id, sd->status.name, title); - } - } - else - { // Return the items to the owner - mail_removeitem(sd, 0); - mail_removezeny(sd, 0); + char title[MAIL_TITLE_LENGTH]; + memcpy(title, RFIFOP(fd,16), RFIFOW(fd,2) - 16); + + rd->mail.inbox.changed = 1; + clif_Mail_new(rd->fd, mail_id, sd->status.name, title); } - clif_Mail_send(sd->fd, (mail_id > 0)?0:1); - return 0; } diff --git a/src/map/map.c b/src/map/map.c index 43a05810c..fd50012e4 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1847,21 +1847,6 @@ struct map_session_data * map_nick2sd(const char *nick) return NULL; } -struct map_session_data * map_nick2sd_nocase(const char *nick) -{ - int i, users; - struct map_session_data **pl_allsd; - - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) - { - if ( !strcmp(pl_allsd[i]->status.name, nick) ) - return pl_allsd[i]; - } - - return NULL; -} - /*========================================== * id番?の物を探す * 一三bjectの場合は配列を引くのみ diff --git a/src/map/map.h b/src/map/map.h index 896af5507..cb866bbb8 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1344,7 +1344,6 @@ struct map_session_data** map_getallusers(int *users); void map_foreachpc(int (*func)(DBKey,void*,va_list),...); int map_foreachiddb(int (*)(DBKey,void*,va_list),...); struct map_session_data * map_nick2sd(const char*); -struct map_session_data * map_nick2sd_nocase(const char *); // その他 int map_check_dir(int s_dir,int t_dir); |