Jump to content

whosell


java

Recommended Posts


  • Group:  Members
  • Topic Count:  38
  • Topics Per Day:  0.01
  • Content Count:  333
  • Reputation:   67
  • Joined:  09/05/12
  • Last Seen:  

On 2/8/2019 at 8:48 AM, hikashin-rae said:

The update on this is just change the variable that view the map area.

Did you make it work on the latest git? Hopefully you can share us the latest working whosell command. Thank you so much!

Link to comment
Share on other sites

  • 3 months later...

  • Group:  Members
  • Topic Count:  14
  • Topics Per Day:  0.01
  • Content Count:  52
  • Reputation:   0
  • Joined:  07/14/17
  • Last Seen:  

Does anyone knew the reason why it kept on showing, no one is vending?

 

I used this script below... @Shinto maybe you can help?

On 12/20/2017 at 5:59 PM, Shinto said:

Thanks Lights I solved ..... I modified with "sd-> card.u.items_cart" and now it works .... here is the working script :)
 


/*==========================================
* @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 = 0; // 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;
   nullpo_retr(-1, sd);
   if (!message || !*message) {
    clif_displaymessage(fd, "Use: @whosell (<+refine> )(<item_id>)(<[card_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)){
   //names, that start on num are not working
   //so implemented minumum item_id>500
   //or better make 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 (<+refine> )(<item_id>)(<[card_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(sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
			    continue;
		    if(s_type & 1 && 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) ||
						    (sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
						    sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
						    sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
						    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) || 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 %d[%d] | Price %d | Amount %d | Map %s[%d,%d] | Seller %s",sd->cart.u.items_cart[pl_sd->vending[j].index].refine
					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
					    ,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->status.name);
		    else if(item_data->type == IT_WEAPON)
			    snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %d[%d,%d,%d,%d] | Price %d | Amount %d | Map %s[%d,%d] | Seller %s",sd->cart.u.items_cart[pl_sd->vending[j].index].refine
					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
					    ,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->status.name);
		    else
			    snprintf(atcmd_output, CHAT_SIZE_MAX, "ID %d | Price %d | Amount %d | Map %s[%d,%d] | Seller %s",sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
					    ,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->status.name);
		    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 ea. Prices from %dz to %dz", count, MinPrice, MaxPrice);
    clif_displaymessage(fd, atcmd_output);
   } else
    clif_displaymessage(fd, "Nobody is selling it now.");
   return 0;
}

 

 

On 12/31/2017 at 2:11 AM, Rebel said:

Why the output always "Nobody is selling it now." Is this really working?

Hi! were you able to make it work?

 

Link to comment
Share on other sites

  • 5 months later...

  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  208
  • Reputation:   22
  • Joined:  01/14/13
  • Last Seen:  

If someone looking for a working diff on latest rA. 
https://github.com/coookie1010/Server-Patches/blob/main/rA-whosell.diff

  • MVP 2
Link to comment
Share on other sites

  • 3 weeks later...

  • Group:  Members
  • Topic Count:  123
  • Topics Per Day:  0.05
  • Content Count:  478
  • Reputation:   14
  • Joined:  11/30/17
  • Last Seen:  

can you add commas for the prices 

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   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.

×
×
  • Create New...