static void mapif_Mail_getattach(int fd, int char_id, int mail_id) { struct mail_message msg; if( !mail_loadmessage(mail_id, &msg) ) return; if( msg.dest_id != char_id ) return; if( msg.status != MAIL_READ ) return; if( (msg.item.nameid < 1 || msg.item.amount < 1) && msg.zeny < 1 ) return; // No Attachment if( !mail_DeleteAttach(mail_id) ) return; WFIFOHEAD(fd, sizeof(struct item) + 12); WFIFOW(fd,0) = 0x384a; WFIFOW(fd,2) = sizeof(struct item) + 12; WFIFOL(fd,4) = char_id; WFIFOL(fd,8) = (msg.zeny > 0)?msg.zeny:0; memcpy(WFIFOP(fd,12), &msg.item, sizeof(struct item)); WFIFOSET(fd,WFIFOW(fd,2)); }
static void mapif_Mail_getattach(int fd, int char_id, int mail_id, int type) { struct mail_message msg; if( !(type&MAIL_ATT_ALL) ) return; if( !mail_loadmessage(mail_id, &msg) ) return; if( msg.dest_id != char_id ) return; if( msg.status != MAIL_READ ) return; if( type&MAIL_ATT_ZENY ) { if( msg.zeny > 0 ) { if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `zeny` = 0 WHERE `id` = '%d'", mail_db, mail_id) ) { Sql_ShowDebug(sql_handle); return; } } else type &= ~MAIL_ATT_ZENY; } if( type&MAIL_ATT_ITEM ) { int i; ARR_FIND(0, MAIL_MAX_ITEM, i, (msg.item[i].nameid > 0 && msg.item[i].amount > 0)); if( i == MAIL_MAX_ITEM ) // No item was found type &= ~MAIL_ATT_ITEM; else { if( !mail_DeleteAttach(mail_id) ) return; } } if( type == MAIL_ATT_NONE ) return; // No Attachment WFIFOHEAD(fd,sizeof(struct item) * MAIL_MAX_ITEM + 16); WFIFOW(fd,0) = 0x384a; WFIFOW(fd,2) = sizeof(struct item) * MAIL_MAX_ITEM + 16; WFIFOL(fd,4) = char_id; WFIFOL(fd,8) = mail_id; if( type&MAIL_ATT_ZENY ) WFIFOL(fd,12) = msg.zeny; else WFIFOL(fd,12) = 0; if( type&MAIL_ATT_ITEM ) memcpy(WFIFOP(fd,16), &msg.item, sizeof(struct item) * MAIL_MAX_ITEM); else memset(WFIFOP(fd,16), 0, sizeof(struct item) * MAIL_MAX_ITEM); WFIFOSET(fd,WFIFOW(fd,2)); }