diff options
author | zephyrus <zephyrus@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2008-02-13 17:55:32 +0000 |
---|---|---|
committer | zephyrus <zephyrus@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2008-02-13 17:55:32 +0000 |
commit | 3c8b17a9300d36cf6241edb6751f26af3b262c1e (patch) | |
tree | 7c3abb9e7bc239b367a9baf5876c133754b4faf4 | |
parent | 71d75dcb2b25a8df05fdf04eadecca560960fd90 (diff) | |
download | hercules-3c8b17a9300d36cf6241edb6751f26af3b262c1e.tar.gz hercules-3c8b17a9300d36cf6241edb6751f26af3b262c1e.tar.bz2 hercules-3c8b17a9300d36cf6241edb6751f26af3b262c1e.tar.xz hercules-3c8b17a9300d36cf6241edb6751f26af3b262c1e.zip |
- Some fixes to mail system.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12199 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/map/clif.c | 25 | ||||
-rw-r--r-- | src/map/clif.h | 2 | ||||
-rw-r--r-- | src/map/mail.c | 13 |
4 files changed, 30 insertions, 13 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 6e1e8efa4..e1872693e 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -6,6 +6,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2008/02/13 * Merged memory manager updates from old jA revisions (bugreport:663) - less overhead and better overflow detection (caution, experimental!) + * Added some security checks in mail system [Zephyrus] + - This supose to fix a bug reported in 622 to limit to MAX_ZENY. + - Also add more checks to free space in your inventory to receive items. 2008/02/11 * 'Forget me Not' no longer blocks ASPD bonuses from working or prevents their re-casting, they are simply dispelled when the effect takes place. diff --git a/src/map/clif.c b/src/map/clif.c index 3a1afb5cb..8600d520a 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11295,13 +11295,14 @@ void clif_Mail_new(int fd, int mail_id, const char *sender, const char *title) } /*------------------------------------------ - * Opens Mail Window on Client + * Handles Mail Window on Client + * flag : 0 open | 1 close *------------------------------------------*/ -void clif_Mail_openmail(int fd) +void clif_Mail_window(int fd, int flag) { WFIFOHEAD(fd,packet_len(0x260)); WFIFOW(fd,0) = 0x260; - WFIFOL(fd,2) = 0; + WFIFOL(fd,2) = flag; WFIFOSET(fd,packet_len(0x260)); } @@ -11429,6 +11430,7 @@ void clif_parse_Mail_read(int fd, struct map_session_data *sd) void clif_parse_Mail_getattach(int fd, struct map_session_data *sd) { int i, mail_id = RFIFOL(fd,2); + bool fail = false; ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id); if( i == MAIL_MAX_INBOX ) @@ -11445,8 +11447,23 @@ void clif_parse_Mail_getattach(int fd, struct map_session_data *sd) if ((data = itemdb_search(sd->mail.inbox.msg[i].item.nameid)) == NULL) return; + switch( pc_checkadditem(sd, data->nameid, sd->mail.inbox.msg[i].item.amount) ) + { + case ADDITEM_NEW: + fail = ( pc_inventoryblank(sd) == 0 ); + break; + case ADDITEM_OVERAMOUNT: + fail = true; + } + + if( fail ) + { + clif_Mail_getattachment(fd, 1); + return; + } + weight = data->weight * sd->mail.inbox.msg[i].item.amount; - if (weight > sd->max_weight - sd->weight) + if( weight > sd->max_weight - sd->weight ) { clif_Mail_getattachment(fd, 2); return; diff --git a/src/map/clif.h b/src/map/clif.h index fd6ac02c3..7000fd989 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -394,7 +394,7 @@ int do_init_clif(void); #ifndef TXT_ONLY // MAIL SYSTEM -void clif_Mail_openmail(int fd); +void clif_Mail_window(int fd, int flag); void clif_Mail_read(struct map_session_data *sd, int mail_id); void clif_Mail_delete(int fd, int mail_id, short fail); void clif_Mail_return(int fd, int mail_id, short fail); diff --git a/src/map/mail.c b/src/map/mail.c index 8c80412a9..5fef604c0 100644 --- a/src/map/mail.c +++ b/src/map/mail.c @@ -135,12 +135,6 @@ bool mail_setattachment(struct map_session_data *sd, struct mail_message *msg) void mail_getattachment(struct map_session_data* sd, int zeny, struct item* item) { - if( zeny > 0 ) - { - sd->status.zeny += zeny; - clif_updatestatus(sd, SP_ZENY); - } - if( item->nameid > 0 && item->amount > 0 ) { pc_additem(sd, item, item->amount); @@ -150,6 +144,9 @@ void mail_getattachment(struct map_session_data* sd, int zeny, struct item* item clif_Mail_getattachment(sd->fd, 0); } + + if( zeny > 0 ) + pc_getzeny(sd, zeny); } int mail_openmail(struct map_session_data *sd) @@ -159,9 +156,9 @@ int mail_openmail(struct map_session_data *sd) if( sd->state.finalsave == 1 || sd->state.storage_flag || sd->vender_id || sd->state.trading ) return 0; - clif_Mail_openmail(sd->fd); + clif_Mail_window(sd->fd, 0); - return 0; + return 1; } void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg) |