-
Posts
394 -
Joined
-
Last visited
-
Days Won
3
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by Shakto
-
-
Reputation UI
Reputation UI
Video : https://youtu.be/NDn7b1zdOe0
Version Server side and client side :
PACKETVER_MAIN_NUM >= 20201104
ou PACKETVER_RE_NUM >= 20211103
ou PACKETVER_ZERO_NUM >= 20201118Reputation UI is the new button in menu that lead to the reputation windows.
You can set client side the menu list (reputation group), the list of reputation (name, max points, visibility etc…).
You will find here a NPC script sample to read reputation points, set reputation points or open the UI without without colored reputation.
Also there is a command @reput to add or remove point on a specific reputation ID
-
Submitter
-
Submitted04/05/2022
-
Category
-
Videohttps://youtu.be/NDn7b1zdOe0
-
Content AuthorShakto
-
-
Adventurer’s Agency – New UI – Register / Search a party
Adventurer’s Agency – New UI
Register a party as a party leader.
Search a party as a player.Client version needed : 2018-01-03bRagexeRE
Server need : Web server : https://github.com/rathena/rathena/pull/5731
You can add it on your host with this command : git pull origin refs/pull/5731/head
-
Submitter
-
Submitted03/27/2022
-
Category
-
Videohttps://www.youtube.com/watch?v=mfC91R53dKM&ab_channel=RagnarokInception
-
Content AuthorShakto
-
1
-
-
Disallow using skill Warp Portal near a warp
Disallow using skill Warp Portal near a warp
You can configure the distance in battle.conf
Prevent false warper / people using Warp Portal skill at the entrance / exit of a classic map warp
-
Submitter
-
Submitted03/13/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
On 1/18/2022 at 6:06 AM, WhiteEagle said:
Hey, first of all thanks for your work.
Does this include the changes for FluxCP to list all accounts under one email?
Do you have a launcher like OriginsRO that works with the master account system?
If so, it would be great if you could offer this as a sale as well. (seperate)Hello,
It include only the rAthena part, not fluxCP's one but I can help you if needed to support it.You just need to have a "master account" system in FluxCp first then link both. I found something like this as a first step :
https://github.com/acelabini/FluxCP-MasterAccount
I don't get what you mean with OriginsRO, do you have some samples to provide ?
-
10 hours ago, acaciomilk said:
Good night. This modification does not work. What will be done to solve this problem?Hello,
The best to have an active support is to pm me with your issue or join me on Discord : Shakto#2940
I guess it should be related with your rAthena version. -
On 3/8/2022 at 1:55 PM, M a p l e said:
Wouldn't that be wrong? Sell a project that has been released for free on Herc. and without the author's permission.
https://github.com/HerculesWS/Hercules/commit/e8b978711444ff0eff15c8a22a80029e356dc405
It has been entirely rework to work with rathena.
Things like database handling (rathena does YML) , packet handling, differences of function between hercules and rathena (timer, clif, vector ...).
If you prefer, that's the price of it, but you're right to have a personal opinion on it
On 3/8/2022 at 6:35 AM, Redao said:Does it support installation? Is it working correctly in rAthena and without bugs?
it's working with the last version of rathena, I can help for installation yes.
-
Anti-bot - Captcha images from server
Get a discount price of 30% by sending me a private message before buying it.
Thanks to @Asheraf for implementing it first on Hercules
This feature allows you to have a totally captcha system to prevent from automation system (Openkore bot, Blue eye macro, AHK...).
- /macro_register : It allows authorized players to add directly a captcha in the server when it's started.
- /macro_preview <id> : it allows to preview a captcha by its id
- /macro_detector : It allows authorized players to ask to one or several players (like a batch system) to challenge a captch
- macro database : You can add captcha images directly in your server and load them when the server start by using the db/captcha_db.yml
It only works with client version 20160330 or more recent.
For server side, you need to have yml database version at least and cpp files.N.B : Only for those who want to hot upload image when the server is already started and not using the macro database system : By default the client expects a 16 bit BMP image when receiving the images but the macro register ui can only read 24 bit images, therefore in order for this system to work the client needs to be patched with the correct CAPTCHA_BMP_SIZE a Nemo patch for doing so is now available at http://nemo.herc.ws/patches/ChangeCaptchaImageDecompressionSize/.
-
Submitter
-
Submitted02/26/2022
-
Category
-
Video
-
Content AuthorShakto
-
@ping command - Works on windows & linux
Get a discount price of 30% by sending me a private message before buying it.
@ping command
It show in ms in game the result of a ping command.
Compilation works on windows and linux.
On linux, the server needs special authorisation because icmp use raw packet, basically there is 2 options to handle it :
- Each time you lauch the server, do it with sudo
- Do this once : sudo setcap 'cap_net_raw+ep' ./map-server
-
Submitter
-
Submitted02/22/2022
-
Category
-
Video
-
Content AuthorShakto
-
MVP Spawn - Restore MVPs state like it was before server restart
Get a discount price of 30% by sending me a private message before buying it.
MVP Spawn
When a MVP is killed, it saves all the information in database (date, killer, status, position)
When your server restart (intended reload or crash), it will check if the MVP should be dead or alive before spawning it.
- If it should be alive, it will spawn it
- If it should be dead, the MVPs don't spawn. If tombstone is enabled, it will appear with all his information at the position it was before the restart. The MVP will naturally appear when it should have appeared if the server had not restarted.---------------------
You don't have to worry about a restart of your server, crash, @reload script anymore that can cause abuses from players.
You don't have to add any tables, columns on your SQL, it uses all features already set up.
The Convex Mirrors will continue to perform fully.
-
Submitter
-
Submitted02/20/2022
-
Category
-
Video
-
Content AuthorShakto
-
1
-
1
-
1
-
-
@ltp - Show your last position on minimap before a teleport
@ltp command
Show your last position on minimap before a teleport.
It works with all teleports skills or items (like fly wings...)
-
Submitter
-
Submitted02/19/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
@showrare - Show a message when you drop /steal an item under a chosen rate
@showrare command
@showrare <rate> to activate show rare for item drop or steal under the chosen rate.
It shows a visible message only for the player who dropped the item.
-
Submitter
-
Submitted02/19/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
@nolootid - Prevent dropping chosen items with autoloot
@nolootid command
To add an item to the list, use '@nolootid +<item name or ID>'.
To remove an item, use '@nolootid -<item name or ID>'.
'@nolootid reset' will clear your noloot item list.
'@nolootid status' will show you the commands list and current items in your nolootid list.
-
Submitter
-
Submitted02/19/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
It's a client side part.
Best you can do is changing the button bmp file with all white bmp file so players will not see it.
-
On 2/13/2022 at 6:28 AM, chadness said:
its only a online peak not the online players count that time the player is only 1 but it showing 2
Change the SQL request then :
Number of players online (with shops)
SELECT COUNT(*) as online FROM `char` WHERE `online` = 1;
Number of players online (without shops)
SELECT COUNT(*) as online FROM `char` WHERE `online` = 1 and `char`.`char_id` NOT IN (select vendings.char_id FROM `vendings` INNER JOIN `char` ON `char`.`char_id` = `vendings`.`char_id`)Number of shops online
SELECT COUNT(*) as online FROM `char` WHERE `online` = 1 and `char`.`char_id` IN (select vendings.char_id FROM `vendings` INNER JOIN `char` ON `char`.`char_id` = `vendings`.`char_id`)
-
Check if the packet is in src/map/packets.hpp
#if PACKETVER_MAIN_NUM >= 20181212 || PACKETVER_RE_NUM >= 20181212 || PACKETVER_ZERO_NUM >= 20190130 struct PACKET_ZC_USESKILL_ACK { int16 packetType; uint32 srcId; uint32 dstId; uint16 x; uint16 y; uint16 skillId; uint32 element; uint32 delayTime; uint8 disposable; uint32 unknown; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x0b1a); #elif PACKETVER_MAIN_NUM >= 20091124 || PACKETVER_RE_NUM >= 20091124 || defined(PACKETVER_ZERO) struct PACKET_ZC_USESKILL_ACK { int16 packetType; uint32 srcId; uint32 dstId; uint16 x; uint16 y; uint16 skillId; uint32 element; uint32 delayTime; uint8 disposable; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x07fb); #elif PACKETVER_MAIN_NUM >= 20090406 || PACKETVER_SAK_NUM >= 20080618 || PACKETVER_RE_NUM >= 20080827 || defined(PACKETVER_ZERO) struct PACKET_ZC_USESKILL_ACK { int16 packetType; uint32 srcId; uint32 dstId; uint16 x; uint16 y; uint16 skillId; uint32 element; uint32 delayTime; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x013e); #endif -
src/map/instance.cpp
comment those lines :clif_instance_create(instance_id, instance_wait.id.size());
clif_instance_create(instance_id, i + 1);
-
Depend on the quest, it's possible but need adaptation in all scripts concerned
-
/*========================================== * @jumptosell - warps to the cheapest shop. * Made by Vengence * Make it work for latest [Shakto] *------------------------------------------*/ ACMD_FUNC(jumptosell) { 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; struct map_session_data* pl_sd; struct map_session_data* pl_sd2; struct s_mapiterator* iter; unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0; nullpo_retr(-1, sd); if (!message || !*message) { clif_displaymessage(fd, "Use: @jumptosell (<+refine> )(<item_id>)(<[card_id]>) or @jumptosell <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; std::shared_ptr<item_data> id = item_db.searchname( item_name ); if( id == nullptr ){ clif_displaymessage(fd, "No item found with this name"); return -1; } item_id = id->nameid; } else { clif_displaymessage(fd, "Use: @jumptosell (<+refine> )(<item_id>)(<[card_id]>) or @jumptosell <name>"); return -1; } struct item_data *item_data; //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(pl_sd->vending[j].value < MinPrice){ MinPrice = pl_sd->vending[j].value; pl_sd2 = pl_sd; } count++; } } } mapit_free(iter); if(count > 0) { pc_setpos(sd, pl_sd2->mapindex, pl_sd2->bl.x, pl_sd2->bl.y, CLR_TELEPORT); } else clif_displaymessage(fd, "Nobody is selling it now."); return 0; }
-
1
-
1
-
-
@killcounter - Follow the number of monsters killed
Count the number of monsters you killed during a session.
You can choose the number of slot that you want to allow to the players (default is 5 slots). It allows you to follow a counter for more than only one monster at the same time.
The counter is auto save for your char : that means if a player disconnect and reconnect later, the counter will be restored.
@killcounter : activate / disactivate the count
@killcounter reset : reset all counter
@killcounter reset <position> : reset the counter on the position
@killcounter <mobID / mobname> <position> : start to count kill on the chosen position
@killcounter status : show the number of monsters killed in all your position
-
Submitter
-
Submitted01/24/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
@session - Count the experience you win by minute
Count the experience (base and job) you win by minute or the total of experience you made during a session of experience.
Ex :
Session : Enabled. You got 12000 base exp and 9000 job xp for 3 mins.
That means you did 4000 base exp / min and 3000 job exp per min.
@session : Give the status, total exp, xp per min in the current session
@session reset : Reset the counter
@session on : Turn on the counter for the current session
@session off : Turn off the counter for the current session
@session help : Give you details on the command in gameYou can stop the session for a while and turn it on again without being reset.
The counter is being reset on reconnection.
-
Submitter
-
Submitted01/16/2022
-
Category
-
Video
-
Content AuthorShakto
-
1
-
-
Master Storage - Shared Storage between accounts
The master storage allow you to have a shared storage between one and several accounts.
It adds a master_id in the login SQL table automatically that allow you to links accounts.
It contains verifications to disable any kind of possible dupe items.
-
Submitter
-
Submitted01/16/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
@noress - Prevent for being ressurected if you don't want it
A command @noress that give to a player the possibility to accept or deny ressurections.
It can be useful in case of griefing behaviors where players are ressurected in a loop to the goal of make him loose percents of xp.
-
Submitter
-
Submitted01/16/2022
-
Category
-
Video
-
Content AuthorShakto
-
1
-
1
-
-
Twilight Alchemy 4 - Create blue potion per 200 with a skill
This skill allow you to create blue potions per pack of 200.
It works like others twilight skills, the alchemist need to be under spirit alchemist buff.
The skill can be given by a quest (included)
-
Submitter
-
Submitted01/16/2022
-
Category
-
Video
-
Content AuthorShakto
-
-
Release: Anti-bot - Captcha images from server
in Source Releases
Posted
Yeah you can do as you can control the captcha appearing to players on script side