コード例 #1
0
ファイル: int_mail.c プロジェクト: Alexalvesgyn/Cronus
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));
}
コード例 #2
0
ファイル: int_mail.c プロジェクト: exneval/trunk
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));
}