summaryrefslogtreecommitdiff
path: root/src/map/clif.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/clif.c')
-rw-r--r--src/map/clif.c143
1 files changed, 72 insertions, 71 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 36a306f0c..3b2fefc1c 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -7964,9 +7964,8 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
if(map_flag_gvg(sd->bl.m))
clif_set0199(fd,3);
- map_foreachinarea(clif_getareachar, sd->bl.m,
- sd->bl.x-AREA_SIZE, sd->bl.y-AREA_SIZE, sd->bl.x+AREA_SIZE, sd->bl.y+AREA_SIZE,
- BL_ALL, sd);
+ // info about nearby objects
+ map_foreachinrange(clif_getareachar, &sd->bl, AREA_SIZE, BL_ALL, sd);
// pet
if(sd->pd) {
@@ -11296,11 +11295,12 @@ void clif_parse_AutoRevive(int fd, struct map_session_data *sd)
}
#ifndef TXT_ONLY
-
/*==========================================
* MAIL SYSTEM
* By Zephyrus
- *------------------------------------------
+ *==========================================*/
+
+/*------------------------------------------
* Opens Mail Window on Client
*------------------------------------------*/
void clif_Mail_openmail(int fd)
@@ -11310,6 +11310,7 @@ void clif_Mail_openmail(int fd)
WFIFOL(fd,2) = 0;
WFIFOSET(fd,packet_len(0x260));
}
+
/*------------------------------------------
* Send Inbox Data to Client
*------------------------------------------*/
@@ -11368,7 +11369,12 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id)
int i, fd = sd->fd;
ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id);
- if (i < MAIL_MAX_INBOX)
+ if( i == MAIL_MAX_INBOX )
+ {
+ ShowWarning("clif_parse_Mail_read: account %d trying to read a message not the inbox.\n", sd->status.account_id);
+ return;
+ }
+ else
{
struct mail_message *msg = &sd->mail.inbox.msg[i];
struct item *item = &msg->item;
@@ -11416,8 +11422,7 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id)
WFIFOW(fd,95) = item->card[2];
WFIFOW(fd,97) = item->card[3];
WFIFOB(fd,99) = (unsigned char)msg_len;
- memcpy(WFIFOP(fd,100), msg->body, msg_len);
- WFIFOB(fd,len - 1) = 0x00;
+ safestrncpy((char*)WFIFOP(fd,100), msg->body, msg_len);
WFIFOSET(fd,len);
if (!msg->read) {
@@ -11426,8 +11431,6 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id)
clif_parse_Mail_refreshinbox(fd, sd);
}
}
- else
- ShowWarning("clif_parse_Mail_read: account %d trying to read a message not the inbox.\n", sd->status.account_id);
}
void clif_parse_Mail_read(int fd, struct map_session_data *sd)
@@ -11445,44 +11448,45 @@ void clif_parse_Mail_getattach(int fd, struct map_session_data *sd)
nullpo_retv(sd);
ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id);
- if (i < MAIL_MAX_INBOX)
+ if( i == MAIL_MAX_INBOX )
+ return;
+
+ if( sd->mail.inbox.msg[i].zeny < 1 && (sd->mail.inbox.msg[i].item.nameid < 1 || sd->mail.inbox.msg[i].item.amount < 1) )
+ return;
+
+ if( sd->mail.inbox.msg[i].item.nameid > 0 )
{
- if (sd->mail.inbox.msg[i].zeny < 1 && (sd->mail.inbox.msg[i].item.nameid < 1 || sd->mail.inbox.msg[i].item.amount < 1))
+ struct item_data *data;
+ unsigned int weight;
+
+ if ((data = itemdb_search(sd->mail.inbox.msg[i].item.nameid)) == NULL)
return;
- if (sd->mail.inbox.msg[i].item.nameid > 0)
+ weight = data->weight * sd->mail.inbox.msg[i].item.amount;
+ if (weight > sd->max_weight - sd->weight)
{
- struct item_data *data;
- unsigned int weight;
-
- if ((data = itemdb_search(sd->mail.inbox.msg[i].item.nameid)) == NULL)
- return;
-
- 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...");
- return;
- }
+ clif_displaymessage(fd, "Attachment to heavy for you...");
+ return;
}
+ }
- sd->mail.inbox.msg[i].zeny = 0;
- memset(&sd->mail.inbox.msg[i].item, 0, sizeof(struct item));
- clif_Mail_read(sd, mail_id);
+ sd->mail.inbox.msg[i].zeny = 0;
+ memset(&sd->mail.inbox.msg[i].item, 0, sizeof(struct item));
+ clif_Mail_read(sd, mail_id);
- // Send the request for Char Server to delete the attachment
- // If it is done, the client will receive it.
- intif_Mail_getattach(sd->status.char_id, mail_id);
- }
+ // Send the request for Char Server to delete the attachment
+ // If it is done, the client will receive it.
+ intif_Mail_getattach(sd->status.char_id, mail_id);
}
+
/*------------------------------------------
* Delete Message
*------------------------------------------*/
-void clif_Mail_delete(struct map_session_data *sd, int mail_id, short flag)
+void clif_Mail_delete(struct map_session_data *sd, int mail_id, bool failed)
{
int fd = sd->fd;
- if (!flag)
+ if( !failed )
{
int i;
ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id);
@@ -11491,16 +11495,16 @@ void clif_Mail_delete(struct map_session_data *sd, int mail_id, short flag)
memset(&sd->mail.inbox.msg[i], 0, sizeof(struct mail_message));
sd->mail.inbox.amount--;
}
+
+ if( sd->mail.inbox.full )
+ intif_Mail_requestinbox(sd->status.char_id, 1); // Reload the Mail Inbox
}
WFIFOHEAD(fd, packet_len(0x257));
WFIFOW(fd,0) = 0x257;
WFIFOL(fd,2) = mail_id;
- WFIFOW(fd,6) = flag;
+ WFIFOW(fd,6) = failed;
WFIFOSET(fd, packet_len(0x257));
-
- if( !flag && sd->mail.inbox.full )
- intif_Mail_requestinbox(sd->status.char_id, 1); // Reload the Mail Inbox
}
void clif_parse_Mail_delete(int fd, struct map_session_data *sd)
@@ -11585,7 +11589,8 @@ void clif_Mail_return(struct map_session_data *sd, int mail_id, int new_mail)
*------------------------------------------*/
void clif_parse_Mail_setattach(int fd, struct map_session_data *sd)
{
- int idx = RFIFOW(fd,2), amount = RFIFOL(fd,4);
+ int idx = RFIFOW(fd,2);
+ int amount = RFIFOL(fd,4);
char flag;
nullpo_retv(sd);
@@ -11610,9 +11615,9 @@ void clif_parse_Mail_winopen(int fd, struct map_session_data *sd)
int flag = RFIFOW(fd,2);
nullpo_retv(sd);
- if (!flag || flag == 1)
+ if (flag == 0 || flag == 1)
mail_removeitem(sd, 0);
- if (!flag || flag == 2)
+ if (flag == 0 || flag == 2)
mail_removezeny(sd, 0);
}
@@ -11627,10 +11632,11 @@ void clif_Mail_send(int fd, unsigned char flag)
WFIFOSET(fd,packet_len(0x249));
}
+/// 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;
+ struct mail_message msg;
int body_len;
nullpo_retv(sd);
@@ -11659,41 +11665,36 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd)
if (body_len > MAIL_BODY_LENGTH)
body_len = MAIL_BODY_LENGTH;
- msg = (struct mail_message*)aCalloc(sizeof(struct mail_message), 1);
-
- if (mail_getattach(sd, msg))
+ if( !mail_getattach(sd, &msg) )
{
- msg->send_id = sd->status.char_id;
- 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, RFIFOP(fd,4), NAME_LENGTH);
- }
+ clif_Mail_send(sd->fd, 1); // Fail
+ mail_removeitem(sd,0);
+ mail_removezeny(sd,0);
+ return;
+ }
- memcpy(msg->title, RFIFOP(fd,28), MAIL_TITLE_LENGTH);
-
- if (body_len)
- memcpy(msg->body, RFIFOP(fd,69), body_len);
- else
- memset(msg->body, 0x00, MAIL_BODY_LENGTH);
-
- msg->timestamp = (int)mail_calctimes();
- intif_Mail_send(sd->status.account_id, msg);
+ msg.send_id = sd->status.char_id;
+ safestrncpy(msg.send_name, sd->status.name, NAME_LENGTH);
- sd->cansendmail_tick = gettick() + 1000; // 5 Seconds flood Protection
+ 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.title, (char*)RFIFOP(fd,28), MAIL_TITLE_LENGTH);
+
+ if (body_len)
+ memcpy(msg.body, RFIFOP(fd,69), body_len);
else
- {
- mail_removeitem(sd,0);
- mail_removezeny(sd,0);
- clif_Mail_send(sd->fd, 1); // Fail
- }
+ memset(msg.body, 0x00, MAIL_BODY_LENGTH);
+
+ msg.timestamp = (int)mail_calctimes();
+ intif_Mail_send(sd->status.account_id, &msg);
- aFree(msg);
+ sd->cansendmail_tick = gettick() + 1000; // 5 Seconds flood Protection
}
#endif