Eross Posted May 22, 2021 Group: Members Topic Count: 166 Topics Per Day: 0.09 Content Count: 377 Reputation: 12 Joined: 04/05/20 Last Seen: Monday at 11:47 AM Share Posted May 22, 2021 ~> Like the title guys , does anyone have this code for latest rathena ??? Thanks ! Quote Link to comment Share on other sites More sharing options...
0 Emistry Posted May 23, 2021 Group: Forum Moderator Topic Count: 93 Topics Per Day: 0.02 Content Count: 10018 Reputation: 2369 Joined: 10/28/11 Last Seen: 10 hours ago Share Posted May 23, 2021 what is the merit of still using this command when we already have better option? https://divine-pride.net/database/search?q=Catalogue 1 Quote Link to comment Share on other sites More sharing options...
0 Eross Posted May 23, 2021 Group: Members Topic Count: 166 Topics Per Day: 0.09 Content Count: 377 Reputation: 12 Joined: 04/05/20 Last Seen: Monday at 11:47 AM Author Share Posted May 23, 2021 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 Hehe just wanna make players exert effort finding by coordinates... (evil laugh) Quote Link to comment Share on other sites More sharing options...
0 Emistry Posted May 23, 2021 Group: Forum Moderator Topic Count: 93 Topics Per Day: 0.02 Content Count: 10018 Reputation: 2369 Joined: 10/28/11 Last Seen: 10 hours ago Share Posted May 23, 2021 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; 1 Quote Link to comment Share on other sites More sharing options...
0 Eross Posted May 23, 2021 Group: Members Topic Count: 166 Topics Per Day: 0.09 Content Count: 377 Reputation: 12 Joined: 04/05/20 Last Seen: Monday at 11:47 AM Author Share Posted May 23, 2021 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), Quote Link to comment Share on other sites More sharing options...
0 kalabasa Posted June 24, 2021 Group: Members Topic Count: 123 Topics Per Day: 0.05 Content Count: 478 Reputation: 14 Joined: 11/30/17 Last Seen: January 23 Share Posted June 24, 2021 i think this is the original thread can someone help us out. Quote Link to comment Share on other sites More sharing options...
Question
Eross
~> 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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.