Jump to content
  • 0

I HAVE ISSUES ADDING @WHOSELL TO THE LATEST EMULATOR 2020 RATHENA


Question

3 answers to this question

Recommended Posts

  • 0
Posted

Please try mine instead and compile in release mode

attcommand.c

/*==========================================
* @whosell - List who is vending the item (amount, price, and location).
* revamped by VoidLess, original by zephyrus_cr
*------------------------------------------*/
ACMD_FUNC(whosell)
{
	char item_name[100];
	int item_id = 0, j, count = 0, sat_num = 0;
	int s_type = 1; // search bitmask: 0-name,1-id, 2-card, 4-refine
	int refine = 0,card_id = 0;
	bool flag = 1; // place dot on the minimap?
	struct map_session_data* pl_sd;
	struct s_mapiterator* iter;
	unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0;
	struct item_data *item_data;
	static char atcmd_output[CHAT_SIZE_MAX];

	if (!*message) {
		clif_displaymessage(fd, "Use: @whosell <item_id> or @whosell <name>");
		return -1;
	}
	if (sscanf(message, "+%d %d[%d]", &refine, &item_id, &card_id) == 3){
		s_type = 1+2+4;
	}
	else if (sscanf(message, "+%d %d", &refine, &item_id) == 2){
		s_type = 1+4;
	}
	else if (sscanf(message, "+%d [%d]", &refine, &card_id) == 2){
		s_type = 2+4;
	}
	else if (sscanf(message, "%d[%d]", &item_id, &card_id) == 2){
		s_type = 1+2;
	}
	else if (sscanf(message, "[%d]", &card_id) == 1){
		s_type = 2;
	}
	else if (sscanf(message, "+%d", &refine) == 1){
		s_type = 4;
	}
	else if (sscanf(message, "%d", &item_id) == 1 && item_id == atoi(message)){
		s_type = 1;
	}
	else if (sscanf(message, "%99[^\n]", item_name) == 1){
		s_type = 1;
	if ((item_data = itemdb_searchname(item_name)) == NULL){
		clif_displaymessage(fd, "Not found item with this name");
		return -1;
	}
		item_id = item_data->nameid;
	} else {
		clif_displaymessage(fd, "Use: @whosell <item_id> or @whosell <name>");
		return -1;
	}

	//check card
	if(s_type & 2 && ((item_data = itemdb_exists(card_id)) == NULL || item_data->type != IT_CARD)){
		clif_displaymessage(fd, "Not found a card with than ID");
		return -1;
	}
	//check item
	if(s_type & 1 && (item_data = itemdb_exists(item_id)) == NULL){
		clif_displaymessage(fd, "Not found an item with than ID");
		return -1;
	}
	//check refine
	if(s_type & 4){
		if (refine<0 || refine>10){
			clif_displaymessage(fd, "Refine out of bounds: 0 - 10");
			return -1;
		}
		/*if(item_data->type != IT_WEAPON && item_data->type != IT_ARMOR){
			clif_displaymessage(fd, "Use refine only with weapon or armor");
			return -1;
		}*/
	}
	iter = mapit_getallusers();
	for (pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter)) 
	{
	if (pl_sd->vender_id ) {	 // check if player is vending
		for (j = 0; j < pl_sd->vend_num; j++) {
			if ((item_data = itemdb_exists(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
				continue;
			if(s_type & 1 && pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid != item_id)
				continue;
			if(s_type & 2 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) ||
					(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3] != card_id)))
				continue;
			if(s_type & 4 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) || pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine != refine))
				continue;
			if(item_data->type == IT_ARMOR)
				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %s[%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
					,item_data->jname
					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
					,pl_sd->vending[j].value
					,pl_sd->vending[j].amount
					,mapindex_id2name(pl_sd->mapindex)
					,pl_sd->bl.x,pl_sd->bl.y
					,pl_sd->message);
			else if(item_data->type == IT_WEAPON)
				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %s[%d,%d,%d,%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
					,item_data->jname
					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3]
					,pl_sd->vending[j].value
					,pl_sd->vending[j].amount
					,mapindex_id2name(pl_sd->mapindex)
					,pl_sd->bl.x,pl_sd->bl.y
					,pl_sd->message);
			else
				snprintf(atcmd_output, CHAT_SIZE_MAX, "%s | Price %ud | Amount %d | %s[%d,%d] | %s",item_data->jname
					,pl_sd->vending[j].value
					,pl_sd->vending[j].amount
					,mapindex_id2name(pl_sd->mapindex)
					,pl_sd->bl.x, pl_sd->bl.y
					,pl_sd->message);
			if(pl_sd->vending[j].value < MinPrice) MinPrice = pl_sd->vending[j].value;
			if(pl_sd->vending[j].value > MaxPrice) MaxPrice = pl_sd->vending[j].value;
			clif_displaymessage(fd, atcmd_output);
			count++;
			flag = 1;
		}
			if (flag && pl_sd->mapindex == sd->mapindex) {
				clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
				flag = 0;
			}
		}
	}
	mapit_free(iter);
	if(count > 0) {
		snprintf(atcmd_output, CHAT_SIZE_MAX, "================== Found %d entries. ==================", count, MinPrice, MaxPrice);
		clif_displaymessage(fd, atcmd_output);
	} else
		clif_displaymessage(fd, "Nobody is selling it now.");

	return 0;
}

 

Dont forget to add:

        ACMD_DEF(whosell),    

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...