-
Posts
213 -
Joined
-
Last visited
-
Days Won
2
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Posts posted by hikashin-rae
-
-
On 12/22/2024 at 11:00 AM, Yukaiii said:
Guys, would this be a request or support HAHA
Does anyone have or know how to make this mod compatible with eAthena?I even tried some modifications here, but I don't have good knowledge of src code.
shows this error in the emulator.
Anyone who can help, thank you in advance
There is no mob_id in eAthena it was class_
-
I have the latest diff for this. I just update the outdated functions. seems working atm. not yet fully tested.
-
1 minute ago, Misuke said:
can you share it please?
Yep i already attached just check for it. upper.
-
On 11/22/2024 at 1:26 AM, Misuke said:
Hello guys
is someone can help me to update this showvend script command to the latest rathena
the clif_showvendingboard has change in the latest git hope someone help me attached here the diff file of the said script commandthis command allows npc to have vending board and execute script command.
Here the updated!. @Misuke
-
1
-
-
On 8/9/2021 at 9:12 AM, Eross said:
Hi ! Im using @whosell and @whobuy on my old server .. apparently something has change since we upgraded to latest rathena ...
errors are coming since then .. Please help heres my source codes
Index: atcommand.c =================================================================== --- atcommand.c (revision 16082) +++ atcommand.c (working copy) @@ -8473,6 +8473,69 @@ return 0; } +/*========================================== +* @whobuys - 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(whobuys) +{ + 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: @whobuys <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(sd, 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, "ID: %d | Price: %d z | Amount: %d | Buyer: %s | Location: %s (%d,%d)" + ,pl_sd->buyingstore.items[j].nameid + ,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(whobuys), /** * For Testing Purposes, not going to be here after we're done. **/ 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; } +/*========================================== +* @whosells - List who is vending the item (amount, price, and location). +* ported to work in latest rA [Cookie] +*------------------------------------------*/ +ACMD_FUNC(whosells) +{ + 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: @whosells (<+refine> )(<item_id>)(<[card_id]>) or @whosells <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: @whosells (<+refine> )(<item_id>)(<[card_id]>) or @whosells <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, "Refine: +%d | ID: %d | Card: [%d] | Price: %d z | Amount: %d | Seller: %s | Location: %s (%d,%d)" + ,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 + ,pl_sd->status.name + ,mapindex_id2name(pl_sd->mapindex) + ,pl_sd->bl.x,pl_sd->bl.y); + else if(item_data->type == IT_WEAPON) + snprintf(atcmd_output, CHAT_SIZE_MAX, "Refine: +%d | ID: %d | Cards: [%d,%d,%d,%d] | Price: %d z | Amount: %d | Seller: %s | Location: %s (%d,%d)" + ,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 + ,pl_sd->status.name + ,mapindex_id2name(pl_sd->mapindex) + ,pl_sd->bl.x,pl_sd->bl.y); + else + snprintf(atcmd_output, CHAT_SIZE_MAX, "ID: %d | Price: %d z | Amount: %d | Seller: %s | Location: %s (%d,%d)" + ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid + ,pl_sd->vending[j].value + ,pl_sd->vending[j].amount + ,pl_sd->status.name + ,mapindex_id2name(pl_sd->mapindex) + ,pl_sd->bl.x, pl_sd->bl.y); + 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(whosells), #ifdef VIP_ENABLE ACMD_DEF(vip), ACMD_DEF(showrate),
I already update my whosell on git try to test it out and give me feedback thank you. https://github.com/coookie1010/Server-Patches/blob/main/rA-whosell.patch
-
1
-
-
Hello,
I already update the whosell source please try it and give me feedback.
https://github.com/coookie1010/Server-Patches/blob/main/rA-whosell.patch
Thank you.-
1
-
-
Sorry for late share.
I think this is the one you are looking for. I already added the feature you like.
https://github.com/coookie1010/Server-Patches/commit/02498a59983d7c1fdbfd56a69b33297e73320b14On 12/23/2020 at 2:46 PM, EveeX said:Try putting this in pc.cpp function in pc_setpos
if (strncmp(mapdata->name, "map", strlen(mapdata->name)) == 0) { // in "map" choose the map what you prefeer sd->state.pk = 1; }
This method is so much harder than the mapflag function.
you can force a map with mapflag function for example
prontera mapflag pkarea
-
1
-
-
On 3/2/2021 at 12:27 AM, Gidz Cross said:
Wow! Can i check? Ive been away to ragnarok scene for 2 months now. ♥ But i want to check good sir!
i implement it to mapflag on it.
-
The usability of this is really good specially on the items info and monster info it a huge help.
Nice development and information you share. -
try to check this one.
skill.c -
For ragnarok zero no.
You need to grind them for the skill modification. -
use http://nfoservers.com/ it much better.
-
On 1/29/2021 at 6:23 PM, Haruka Mayumi said:
No problem.. just a reminder that if you are using cookie-rae diff.. you will most likely encounter the bug wherein VIP accounts would not be able to login any character greater than first slot which is kind of worse than the bug of the previous source modification.. They would be able to create another character if the move character is enabled, they will simply move the first slot character and then create another character on first slot..
Thanks for this explanation. I will add your diff also in vip account fix.
i already update in my git.
-
2 minutes ago, kalabasa said:
Ah got it now. its working fine now thanks for saving my butt again
haha welcome.
-
-
2 minutes ago, kalabasa said:
should i set on both?
What do you mean? it said here create 1 character only slot one.
-
Just now, kalabasa said:
its working but when i enter the GM character it would reject me from the server
Make sure you input slot only 1.
-
1 hour ago, kalabasa said:
its not working. i can still make a character on a GM account
https://github.com/coookie1010/Server-Patches/blob/main/rA-onechar.patch i created a different onechar patch.
-
1
-
-
You need to put this on your data.
Char Select Textures.zip
-
On 1/19/2021 at 4:37 PM, Chasewalk said:
if (gettimetick(0) < #GOLDROOM_CD) {
10 minutes ago, kalabasa said:when you die or re enter the goldroom the cooldown will start right away
It is not my code it was from chasewalk. maybe the set value is keeping him reset.
-
On 1/23/2021 at 9:21 AM, Frost Diver said:
hello, just tried the script. but i think it got bug where it's always jumped to the same vendor. when i type the command using the item ID or any item ID that are not sell by any vendors, it's still jumped me to the same vendor
This is from your script request released i just make it works on latest.
On 1/23/2021 at 9:21 AM, Frost Diver said:hello, just tried the script. but i think it got bug where it's always jumped to the same vendor. when i type the command using the item ID or any item ID that are not sell by any vendors, it's still jumped me to the same vendor
The creator did something on the code why it jump even no one sells.
I have a fix code for this and a working correctly. -
On 11/30/2020 at 8:23 AM, Gidz Cross said:
Can someone help me make a checker for @pk command? Or make some script to the the pk state into 1. Thanks!
On 11/30/2020 at 8:23 AM, Gidz Cross said:Selected maps?
~ Yes. Selected maps. Like PVP Room for example. Imagine player set his pk state to off and warp to pvp room. Players wont be able to attack that guy.I already revamp change the script of this base on your explanation if you need just notify me.
-
You can try this
set .@time,gettimetick(1); if( .@time1 < #GOLDROOM_CD1 ){ mes "[ ^C6A518Gold Room Assistant^000000 ]"; mes "You can only re-enter after ^FF0000"+#GOLDROOM_CD1+"^000000 seconds."; mes "Time Gold Room : "+#GOLDROOM_CD1; close; cutin "",255; end; } else if (Zeny < .zeny) { mes "[ ^C6A518Gold Room Assistant^000000 ]"; mes "Sorry, but you can't enter the room."; close2; cutin "",255; end; } else { set #GOLDROOM_CD1,( .@time1 + ( 3600 * 12 ) ); // 12 hours cooldown. deltimer strnpcinfo(3)+"::OnKick"; } Zeny -= .zeny; warp "ordeal_1-2",151,154; end;
Screen Shot
On 1/19/2021 at 8:29 PM, Chasewalk said:same bro not to change time.
-
I have a custom command but not in gui.
working on latest diff
https://github.com/coookie1010/Server-Patches-
1
-
whosell
in Source Releases
Posted
I tookdown all of my git
for my own safety too