Jump to content
  • 0

@whobuy for latest GIT


Eross

Question


  • Group:  Members
  • Topic Count:  155
  • Topics Per Day:  0.11
  • Content Count:  349
  • Reputation:   12
  • Joined:  04/05/20
  • Last Seen:  

~> Like the title guys , does anyone have this code for latest rathena ??? Thanks ! 

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10013
  • Reputation:   2345
  • Joined:  10/28/11
  • Last Seen:  

what is the merit of still using this command when we already have better option?

https://divine-pride.net/database/search?q=Catalogue

ws4x13X.png

  • Love 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  155
  • Topics Per Day:  0.11
  • Content Count:  349
  • Reputation:   12
  • Joined:  04/05/20
  • Last Seen:  

16 hours ago, Emistry said:

what is the merit of still using this command when we already have better option?

https://divine-pride.net/database/search?q=Catalogue

ws4x13X.png

Hehe just wanna make players exert effort finding by coordinates... (evil laugh)

Link to comment
Share on other sites

  • 0

  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10013
  • Reputation:   2345
  • Joined:  10/28/11
  • Last Seen:  

8 minutes ago, Origami said:

Hehe just wanna make players exert effort finding by coordinates... (evil laugh)

just change the catalogue effect then.

*searchstores <uses>,<effect>;

Invokes the store search window, which allows to search for both vending
and buying stores. Parameter uses indicates, how many searches can be
started, before the window has to be reopened. Effect value affects,
what happens, when a result item is double-clicked and can be one of the
following:

	0 = Shows the store's position on the mini-map and highlights the
	    shop sign with yellow color, when the store is on same map
	    as the invoking player.
	1 = Directly opens the shop, regardless of distance.

Example:
	// Item Universal_Catalog_Gold (10 uses, effect: open shop)
	searchstores 10,1;

 

  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  155
  • Topics Per Day:  0.11
  • Content Count:  349
  • Reputation:   12
  • Joined:  04/05/20
  • Last Seen:  

On 5/23/2021 at 10:53 AM, Emistry said:

just change the catalogue effect then.

*searchstores <uses>,<effect>;

Invokes the store search window, which allows to search for both vending
and buying stores. Parameter uses indicates, how many searches can be
started, before the window has to be reopened. Effect value affects,
what happens, when a result item is double-clicked and can be one of the
following:

	0 = Shows the store's position on the mini-map and highlights the
	    shop sign with yellow color, when the store is on same map
	    as the invoking player.
	1 = Directly opens the shop, regardless of distance.

Example:
	// Item Universal_Catalog_Gold (10 uses, effect: open shop)
	searchstores 10,1;

 

Thankyou senpai !

 

Hi ! I would like to ask for this script (Badly needed) ... I found an old source but obviously didnt work .. atleast a revision for this old codes .. Thankyou Godbless ..Longlive rA

Index: atcommand.c
===================================================================
--- atcommand.c	(revision 16082)
+++ atcommand.c	(working copy)
@@ -8473,6 +8473,69 @@
 	return 0;
 }
 
+/*==========================================
+* @whobuy - List who is buying the item (amount, price, and location).
+* remake by VoidLess, original by zephyrus_cr
+* re-edit by deathscythe to work in rAthena
+*------------------------------------------*/
+ACMD_FUNC(whobuy)
+{
+    char item_name[100];
+    int item_id, j, count = 0, sat_num = 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);
+    memset(item_name, '\0', sizeof(item_name));
+
+    if (!message || !*message || sscanf(message, "%99[^\n]", item_name) < 1) {
+        clif_displaymessage(fd, "Input item name or ID (use: @whobuy <name or ID>).");
+        return -1;
+    }
+    if ((item_data = itemdb_searchname(item_name)) == NULL &&
+        (item_data = itemdb_exists(atoi(item_name))) == NULL)
+    {
+        clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name.
+        return -1;
+    }
+
+    item_id = item_data->nameid;
+
+    iter = mapit_getallusers();
+    for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
+    {
+        if( pl_sd->buyer_id ) //check if player is autobuying
+        {
+			for (j = 0; j < pl_sd->buyingstore.slots; j++) {
+				if(pl_sd->buyingstore.items[j].nameid == item_id) {
+					snprintf(atcmd_output, CHAT_SIZE_MAX, "Price %d | Amount %d | Buyer %s | Map %s[%d,%d]",pl_sd->buyingstore.items[j].price,pl_sd->buyingstore.items[j].amount,pl_sd->status.name,mapindex_id2name(pl_sd->mapindex),pl_sd->bl.x, pl_sd->bl.y);
+					if(pl_sd->buyingstore.items[j].price < MinPrice) MinPrice = pl_sd->buyingstore.items[j].price;
+					if(pl_sd->buyingstore.items[j].price > MaxPrice) MaxPrice = pl_sd->buyingstore.items[j].price;
+                    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 buying it now.");
+
+    return 0;
+}
+
 /**
  * Fills the reference of available commands in atcommand DBMap
  **/
@@ -8717,6 +8780,7 @@
 		ACMD_DEF(charcommands),
 		ACMD_DEF(font),
 		ACMD_DEF(accinfo),
+		ACMD_DEF(whobuy),
 		/**
 		 * For Testing Purposes, not going to be here after we're done.
 		 **/

Output should be like this ~~ same as whosell output 

 

diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp
index cab676cce..b7456cda7 100644
--- a/src/map/atcommand.cpp
+++ b/src/map/atcommand.cpp
@@ -8395,6 +8395,152 @@ ACMD_FUNC(mapflag) {
 	return 0;
 }
 
+/*==========================================
+* @whosell - List who is vending the item (amount, price, and location).
+* ported to work in latest rA [Cookie]
+*------------------------------------------*/
+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)){
+    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(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 %d[%d] | Price %d | Amount %d | Map %s (%d,%d) | Seller %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
+                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
+                    ,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->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",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
+                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
+                    ,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->status.name);
+            else
+                snprintf(atcmd_output, CHAT_SIZE_MAX, "ID %d | Price %d | Amount %d | Map %s (%d,%d) | Seller %s",pl_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) {
+			//if (flag && pl_sd->bl.m == sd->bl.m) {
+                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;
+}
+
 /*===================================
  * Remove some messages
  *-----------------------------------*/
@@ -10593,6 +10739,7 @@ void atcommand_basecommands(void) {
 		ACMD_DEFR(channel,ATCMD_NOSCRIPT),
 		ACMD_DEF(fontcolor),
 		ACMD_DEF(langtype),
+		ACMD_DEF(whosell),
 #ifdef VIP_ENABLE
 		ACMD_DEF(vip),
 		ACMD_DEF(showrate),

 

Link to comment
Share on other sites

  • 0

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

i think this is the original thread 

 

can someone help us out.

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

×
×
  • Create New...