summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--db/item_db.txt2
-rw-r--r--src/map/clif.c3
-rw-r--r--src/map/intif.c15
-rw-r--r--src/map/mail.c16
-rw-r--r--src/map/mail.h1
6 files changed, 27 insertions, 13 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 90921645e..143cf80f1 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,9 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2007/12/03
+ * Fixed a bug on Mail System. Removed the possibility to lost the attachment on
+ a Map - Char server disconnection. [Zephyrus]
2007/11/29
* pc_setoption no longer does view_data changes while disguised (as this
breaks things) [Skotlex]
diff --git a/db/item_db.txt b/db/item_db.txt
index b32bff3fb..3905df5a1 100644
--- a/db/item_db.txt
+++ b/db/item_db.txt
@@ -2219,7 +2219,7 @@
5351,Sunflower_,Sunflower,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,0,37,{ bonus2 bSubRace,RC_Insect,10; },{},{}
//5354,Songkok,Songkok,5,,,100,,2,,0,0xFFFFFFFE,7,1,256,,0,1,362,{ bonus bCastrate,-5; },{},{}
//5355,Selendang,Selendang,5,,,100,,2,,0,0xFFFFFFFE,7,0,256,,0,1,363,{ bonus bCastrate,-5; },{},{}
-5357,Victory_Wings,Victory Wings,5,,,0,,10,,,0xFFFFFFFF,7,2,256,,,,361,{ bonus bMdef,10;},{},{}
+5357,Victory_Wings,Victory Wings,5,,,0,,10,,,0xFFFFFFFF,7,2,256,,,,365,{ bonus bMdef,10;},{},{}
//5358,Pecopeco_Ears,Pecopeco Ears,5,,,100,,1,,0,0xFFFFFFFF,7,2,512,,70,0,366,{ bonus bAgi,1; bonus bMdef,2; },{},{}
//5359,Ship_Captain's_Hat,Ship Captain's Hat,5,,,500,,3,,0,0xFFFFFFFF,7,2,256,,30,1,367,{ bonus bLongAtkRate,3; },{},{}
//5360,Hukke's_Blackcat_Ears,Hukke's Blackcat Ears,5,,,200,,2,,0,0xFFFFFFFF,7,2,256,,45,1,368,{ bonus bDef,-50; bonus bFlee,10; bonus bCritical,3; bonus2 bCriticalAddRace,RC_Boss,10; bonus2 bCriticalAddRace,RC_NonBoss,10; },{},{}
diff --git a/src/map/clif.c b/src/map/clif.c
index 5d2413acd..1fec3b602 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -11515,7 +11515,8 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd)
memset(msg.body, 0x00, MAIL_BODY_LENGTH);
msg.timestamp = (int)mail_calctimes();
- intif_Mail_send(sd->status.account_id, &msg);
+ if( !intif_Mail_send(sd->status.account_id, &msg) )
+ mail_deliveryfail(sd, &msg);
sd->cansendmail_tick = gettick() + 1000; // 1 Second flood Protection
}
diff --git a/src/map/intif.c b/src/map/intif.c
index 1cecf5ab0..72766c471 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -1645,7 +1645,7 @@ int intif_Mail_send(int account_id, struct mail_message *msg)
memcpy(WFIFOP(inter_fd,8), msg, sizeof(struct mail_message));
WFIFOSET(inter_fd,len);
- return 0;
+ return 1;
}
static void intif_parse_Mail_send(int fd)
@@ -1666,16 +1666,9 @@ static void intif_parse_Mail_send(int fd)
if( (sd = map_charid2sd(msg.send_id)) )
{
if( fail )
- {
- pc_additem(sd, &msg.item, msg.item.amount);
- if( msg.zeny > 0 )
- {
- sd->status.zeny += msg.zeny;
- clif_updatestatus(sd, SP_ZENY);
- }
- }
-
- clif_Mail_send(sd->fd, fail);
+ mail_deliveryfail(sd, &msg);
+ else
+ clif_Mail_send(sd->fd, false);
}
if( fail )
diff --git a/src/map/mail.c b/src/map/mail.c
index 9d2f4375e..a08d04c0d 100644
--- a/src/map/mail.c
+++ b/src/map/mail.c
@@ -154,4 +154,20 @@ int mail_openmail(struct map_session_data *sd)
return 0;
}
+void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg)
+{
+ nullpo_retv(sd);
+ nullpo_retv(msg);
+
+ pc_additem(sd, &msg->item, msg->item.amount);
+
+ if( msg->zeny > 0 )
+ {
+ sd->status.zeny += msg->zeny;
+ clif_updatestatus(sd, SP_ZENY);
+ }
+
+ clif_Mail_send(sd->fd, true);
+}
+
#endif
diff --git a/src/map/mail.h b/src/map/mail.h
index 1079fc560..bea33d3af 100644
--- a/src/map/mail.h
+++ b/src/map/mail.h
@@ -14,5 +14,6 @@ unsigned char mail_setitem(struct map_session_data *sd, int idx, int amount);
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);
int mail_openmail(struct map_session_data *sd);
+void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg);
#endif /* _MAIL_H_ */