Leaderboard
Popular Content
Showing content with the highest reputation since 06/06/24 in all areas
-
3 points
Auto Combat: Inspired by ROM:EL
fTakano and 2 others reacted to jasonch for a post in a topic
Hi, so, I've seen a lot of servers using auto attack, I noticed a consistent issue: poor user experience and Walk AI is horrible. Both of which triggered me to develop a new one for Hercules which hopefully have more intuitive experience for players (and server owners 😁). Almost half of the code are plugin, so minimal code in main Hercules is touched. Please note that bugs are yet to be discovered. I can fix asap when reported. Here are few features: Monster Selection: Automatically detect monsters based on the current map. Configurable Potion and Buff Item Selection: Server owners can customize which potions and buffs items players are allowed to use. Human-Like Movement AI: Intelligent and natural movement, unlike the aimless wandering typical of other systems. Extensive Customization for Server Owners: Allows server administrators to configure settings to fit the unique needs of their server. Player-Friendly UI/UX: Hassle-free setup and adjustments. Easy Server Configuration: Loot Config: Do not loot at all - good for server that has @autoloot or @alootid Default config - character walk up to the loot, and loot normally Auto loot to inventory - servers that DONT have @autoloot nor @alootid but want autoloot for Auto Combat Duration Config: 24/7 - Auto combat can be used all the time Per character - duration is based on character variable Account wide - duration is based on account variable Per Gepard Unique ID - not implemented, extra modules required. pls pm me if you want this Rental Item - duration is based on item expiration date. Not Supported: 3rd Job Skills - but can be easily added Very old revision of Hercules To do / To improve: Offensive Debuffs - do you guys need this? Price: 200 150 USD. Additional charges for custom features. Thank you testers! If you guys are interested, please add me in discord: jasonch35 Teaser Videos: -
2 points
Client New Emotion System and UI Handler
kyeme and one other reacted to AcidMarco for a post in a topic
View File Client New Emotion System and UI Handler The plugin adds full support for the new emotion system introduced in RO clients from ~2023-08-02 onward. It handles emotion playback packets, supports in-game emotion pack purchasing, and reads a configurable emotion pack database. Compatible with the latest version of Hercules Successfully built on Windows (MSVC) and Debian 12 (GCC) Thoroughly tested with client version: 2025-03-05 The plugin provides the following features 1. Handling of new emotion playback packets 2. Management and parsing of the emotion pack database 3. Functions for purchasing emotion packs in-game Setup 1. Set PACKETVER >= 20230802 in /src/common/mmo.h (make sure your client version supports the new emotion system) 2. Place emotion_pack_db.conf in your /db/ folder Optional Modify UI_CURRENCY_ID in the plugin. To change UI_CURRENCY_ID client-side, apply the HEX patch. Included in this post ns_client_emote_ui_handler.c — server plugin (HPM) emotion_pack_db.conf — emotion pack definitions Client-side files (LUB/UI/HEX patch) Client UI files, hex patch, and additional resources are available in the public repository: 🔗 https://github.com/AcidMarco/ro-releases Submitter AcidMarco Submitted 05/07/25 Category Plugins -
2 pointsHi everyone, it's been a long time since I visited the herc.ws forum, I had thought about making a simpler control panel, I hope there are those here who want to contribute to the control panel that I made, if anyone is interested, please send a message directly. Here is the display, suggestions and input from all of you are very important for the development of this control panel. see you soon
-
2 points
Pack 46 CUSTOM Mobs from Trickster Online - 03 of 03
sasukke001 and one other reacted to DaviLord for a file
-
2 points
Pack 50 CUSTOM Mobs from Trickster Online - 02 of 03
sasukke001 and one other reacted to DaviLord for a file
-
2 points
Pack 50 CUSTOM Mobs from Trickster Online - 01 of 03
sasukke001 and one other reacted to DaviLord for a file
-
1 pointSome time ago I adjusted the emblem display on the website, but I don't remember which file I modified. I think it was related to the imagecreatefrombmpstring function, but I could be wrong - it wasn't too difficult to fix it. Below I'm sending potential files that may have been changed, compare them with your own files. Also, pay attention to the PHP error logs - often the solution lies there. \lib\Flux\EmblemExporter.php <?php require_once 'functions/imagecreatefrombmpstring.php'; /** * */ class Flux_EmblemExporter { /** * */ public $loginAthenaGroup; /** * */ public $athenaServers = array(); /** * */ public function __construct(Flux_LoginAthenaGroup $loginAthenaGroup) { $this->loginAthenaGroup = $loginAthenaGroup; } /** * */ public function addAthenaServer(Flux_Athena $athenaServer) { if (!in_array($athenaServer, $this->loginAthenaGroup->athenaServers, true)) { throw new Flux_Error( "{$athenaServer->serverName} is not a valid char/map server defined in the {$this->loginAthenaGroup->serverName} group."); } $this->athenaServers[$athenaServer->serverName] = $athenaServer; } /** * */ public function exportArchive() { $topDir = $this->sanitizePathName($this->loginAthenaGroup->serverName); $tmpDir = FLUX_DATA_DIR.'/tmp'; $tmpFile = tempnam($tmpDir, 'zip'); // Create zip archive. $zip = new ZipArchive(); $zip->open($tmpFile, ZIPARCHIVE::OVERWRITE); $zip->addEmptyDir($topDir); foreach ($this->athenaServers as $athenaServer) { $athenaDir = $this->sanitizePathName($athenaServer->serverName); $zip->addEmptyDir("$topDir/$athenaDir"); $sql = "SELECT name, emblem_data FROM {$athenaServer->charMapDatabase}.guild WHERE emblem_len > 0 ORDER BY name ASC"; $sth = $athenaServer->connection->getStatement($sql); $sth->execute(); $guilds = $sth->fetchAll(); if ($guilds) { foreach ($guilds as $guild) { $emblemData = @gzuncompress(pack('H*', $guild->emblem_data)); $emblemImage = imagecreatefrombmpstring($emblemData); ob_start(); imagepng($emblemImage); $data = ob_get_clean(); $emblemName = sprintf('%s.png', $this->sanitizePathName($guild->name)); $zip->addFromString("$topDir/$athenaDir/$emblemName", $data); } } } // Close archive. $zip->close(); // Send out appropriate HTTP headers. $filename = urlencode(sprintf('%s-%s-emblems.zip', strtolower($topDir), date('Ymd'))); header('Content-Type: application/zip'); header('Content-Length: '.filesize($tmpFile)); header("Content-Disposition: attachment; filename=$filename"); // Read contents of the file. readfile($tmpFile); // Remove temporary file. unlink($tmpFile); exit; } /** * */ private function sanitizePathName($pathName) { return preg_replace('/[^\w\d ]+/', '', $pathName); } } ?> \lib\functions\imagecreatefrombmpstring.php <?php /** * Convert a bmp string to Image resource * @param {string} $data - BMP string content * @return {resource} image resource */ function imagecreatefrombmpstring($data) { // Read header extract( unpack("a2signature/x8/Voffset/x4/Vwidth/Vheight/x2/vbits", substr($data, 0, 30))); if ($signature !== 'BM') { return false; } // Create image $img = imagecreatetruecolor($width, $height); imagealphablending($img, false); imagesavealpha($img, true); // Load palette (if used) $paletteSize = $offset - 54; $imagePalette = array(); if ($paletteSize > 0 && $bits < 16) { $palette = unpack('C'. $paletteSize, substr($data, 54, $paletteSize)); for ($i = 1, $p = 0; $i < $paletteSize; $i += 4, $p++ ) { $b = $palette[$i+0]; $g = $palette[$i+1]; $r = $palette[$i+2]; $a = $palette[$i+3]; // Magenta is transparent. if (($r & 0xf8 === 0xf8) && ($g === 0) && ($b & 0xf8 === 0xf8)) { $a = 127; } $imagePalette[$p] = imagecolorallocatealpha($img, $r, $g, $b, $a); } } // Read ImageData $skip = ( 4 - ( (( ($bits * $width) + 7) >> 3 ) & 3 ) ) % 4; $size = $width * $height * ($bits >> 3) + $skip * $height; $imageData = unpack('C'. $size, substr($data, $offset, $size) ); switch ($bits) { // Not an original DIB file ? default: return false; // 24 bits BMP case 24: for ($i = 1, $y = $height-1; $y > -1; $y--, $i += $skip) { for ($x = 0; $x < $width; $x++, $i+=3) { $b = $imageData[$i+0]; $g = $imageData[$i+1]; $r = $imageData[$i+2]; if ($r === 255 && $g === 0 && $b === 255) { $c = imagecolorallocatealpha($img, $r, $g, $b, 127); } else { $c = imagecolorallocate($img, $r, $g, $b); } imagesetpixel($img, $x, $y, $c ); } } break; // 8 bits BMP case 8: for ($i = 1, $y = $height-1; $y > -1; $y--, $i += $skip) { for ($x = 0; $x < $width; $x++, $i++) { imagesetpixel($img, $x, $y, $imagePalette[$imageData[$i]] ); } } break; // 4 bits BMP case 4: for ($i = 1, $y = $height-1; $y > -1; $y--, $i += $skip) { for ($x = 0; $x < $width; $x+=2, $i++) { $byte = &$imageData[$i]; imagesetpixel($img, $x+0, $y, $imagePalette[$byte >> 4 ]); imagesetpixel($img, $x+1, $y, $imagePalette[$byte & 0x0F]); } } break; // 1 bit BMP case 1: for ($i = 1, $y = $height-1; $y > -1; $y--, $i += $skip) { for ($x = 0; $x < $width; $x+=8, $i++) { $byte = &$imageData[$i]; imagesetpixel($img, $x+0, $y, $imagePalette[ !!($byte & 0x80) ]); imagesetpixel($img, $x+1, $y, $imagePalette[ !!($byte & 0x40) ]); imagesetpixel($img, $x+2, $y, $imagePalette[ !!($byte & 0x20) ]); imagesetpixel($img, $x+3, $y, $imagePalette[ !!($byte & 0x10) ]); imagesetpixel($img, $x+4, $y, $imagePalette[ !!($byte & 0x08) ]); imagesetpixel($img, $x+5, $y, $imagePalette[ !!($byte & 0x04) ]); imagesetpixel($img, $x+6, $y, $imagePalette[ !!($byte & 0x02) ]); imagesetpixel($img, $x+7, $y, $imagePalette[ !!($byte & 0x01) ]); } } break; } return $img; } ?> \modules\guild\emblem.php <?php if (!defined('FLUX_ROOT')) exit; function flux_get_default_bmp_data() { $filename = sprintf('%s/emblem/%s', FLUX_DATA_DIR, Flux::config('MissingEmblemBMP')); if (file_exists($filename)) { return file_get_contents($filename); } } function flux_display_empty_emblem() { $data = flux_get_default_bmp_data(); header("Content-Type: image/bmp"); header('Content-Length: '.strlen($data)); echo $data; exit; } if (Flux::config('ForceEmptyEmblem')) flux_display_empty_emblem(); $serverName = $params->get('login'); $athenaServerName = $params->get('charmap'); $guildID = intval($params->get('id')); $athenaServer = Flux::getAthenaServerByName($serverName, $athenaServerName); if (!$athenaServer || $guildID < 0) flux_display_empty_emblem(); else { if ($interval=Flux::config('EmblemCacheInterval')) { $interval *= 60; $dirname = FLUX_DATA_DIR."/tmp/emblems/$serverName/$athenaServerName"; $filename = "$dirname/$guildID.png"; if (!is_dir($dirname)) if (Flux::config('RequireOwnership')) mkdir($dirname, 0700, true); else mkdir($dirname, 0777, true); elseif (file_exists($filename) && (time() - filemtime($filename)) < $interval) { header("Content-Type: image/png"); header('Content-Length: '.filesize($filename)); @readfile($filename); exit; } } $db = $athenaServer->charMapDatabase; $sql = "SELECT emblem_len, emblem_data FROM $db.guild WHERE guild_id = ? LIMIT 1"; $sth = $athenaServer->connection->getStatement($sql); $sth->execute(array($guildID)); $res = $sth->fetch(); if (!$res || !$res->emblem_len || is_null($res->emblem_data)) flux_display_empty_emblem(); else { $data = hex2bin($res->emblem_data); if ($data === false) { flux_display_empty_emblem(); exit; } $signature = substr($res->emblem_data, 0, 4); // First 2 bytes, because it's in hex $image_type = "image/png"; // Default if ($signature === "4749") { $image_type = "image/gif"; } elseif ($signature === "424D") { $image_type = "image/bmp"; require_once 'functions/imagecreatefrombmpstring.php'; $image = imagecreatefrombmpstring($data); if ($image === false) { flux_display_empty_emblem(); exit; } // Reassign $data to the PNG image data ob_start(); imagepng($image); $data = ob_get_contents(); ob_end_clean(); } elseif ($signature === "7801") { // Attempt zlib decompression $data = @gzuncompress($data); if ($data === false) { flux_display_empty_emblem(); exit; } // Here, further identification of the data type may be needed } header("Content-Type: {$image_type}"); header('Content-Length: '.strlen($data)); echo $data; exit; } } ?>
-
1 pointAdded bow and staff.
-
1 pointhttps://github.com/bgamez23/brynner-clientside/blob/master/Clients/RagexeRE/2010/2010-06-22aRagexeRE.rar
-
1 pointPack v2022: Current Version: 27 December 2021 Update 2023-10-01 - latest versions can be found there: https://discord.gg/p2kvabm https://ragnarokservice.top/ Download Links (~4.5GB): Download from Mirror #1 or Download from Mirror #2 or Download from Mirror #3 Important: Please make someone mirror these files. Or make a donation to me and I will make a mirror by myself. What is that? This is a newbie package that contains 1 click solution for launching Hercules emulator with a single click. This package only for education. Do not use this package anywhere in production. This package good demonstration of how everything should be configured by yourself to make it work. We can find here a good guide on how to configure everything by yourself: http://herc.ws/board/topic/16521-how-to-setup-offline-server-for-personal-development-use/ What inside the package? You have 7 folders: 01_emulator = here emulators (pre-compiled and pre-configured) for RENEWAL or classic PRERE mechanics 02_client_side = here is your client-side what need to copy-paste to your clean kRO client 03_openserver = here is Open Server (MySQL server where stored your game database and which required by the emulator) 04_useful_tools = here are different useful tools that you usually will need when will work with the emulator or databases 05_misc_repos = here are repositories from which it has built the client-side, and exe patched. 06_cmder = this is a tool will be good for you to update the emulator to the latest version (and other files in misc_repos) 07_clean_kRO_client = this is a clean kRO client (2018 somewhere in march updated), need for you to run your own RO copy. How to use all of this? extract files inside 01_emulator, 02_client_side, 03_openserver, 07_clean_kRO_client Now, what emulator version do you need? Latest (current official servers) (renewal mechanic (suras, dorams, etc classes)) or classic PRE-re (champion, high wizard, high priest)? Now if for example, you use PRERE mechanic (where is high wizard class, paladin, lord knights, and no 3rd classes) your steps are next: a.) go to 02_client_side\FOR_PRERE_EMULATOR\ b.) select all files in this folder (FOR_PRERE_EMULATOR) and copy (CTLR+C) c.) now go to 07_clean_kRO_client/clean_kRO_client/ folder and copy files here (overwrite if windows explorer will ask to do that). d.) now you need to run OpenServer (it's a server that stores all your player's data inside the database, required by the emulator) and run it. e.) Click on Red Flag -> Run the server, make sure in your tray you got Green Flag. f.) Now go to 01_emulator\hercules_PRERE\ and run: run-server.bat g.) Now go to your 07_clean_kRO_client/clean_kRO_client/ and run: 2018-04-18bRagexeRE_patched.exe Your emulator, your database, and the client are running. Now you can try to login into the game. About Accounts: How to make a GM account or how to access the database? For that, you need to click on Green Flag -> Advanced -> PHPMYADMIN In the login field of PHPMyAdmin enter: "root", in the password field enter nothing. (no password) Press enter or login, and you will be in the database. Databases well structured, so mostly always you need not edit too much there. How to make a GM account? You opened PHPMYADMIN. Now select your database, and find in this database table called: "login" Open this table, and find your account name, and you will see column "group_id". Edit number in this column (group_id) to 99. 0-99 = your GM level. 99 = super admin with all privilegies, 0 = simple player with no privieleges. Okay, everything working for me, what can I do next? My short answer: http://herc.ws/board/ Read all topics, read different guides, read info about NPCs Read info how to add NPCs, how to enable them, how to disable them Read /doc/ folder files inside your emulator folder Read wiki pages: https://herc.ws/wiki/Main_Page Do experiments and do not afraid to destroy everything or remove them. Just do mistakes and errors, it's how people learning something new, through mistakes. DO not afraid to do a lot of mistakes and ask questions. People will help you if you will try to help yourself first and will make good questions with some research before posting messages. What tools can I use for making everything much easier for me? Tools that you MUST have: - Grf Editor - Server Database Editor - VSCode / Notepad++ / Sublime Text / Atom (any of these editors and select always C syntax highlight for opened files) I want to play with my friends on my server The solution that you will find by the link below is a terrible solution. But usable for a small group of people who for education only want to launch their server ONLINE (for others). This is SUPER bad, and never do that, (it's weird, after the only time you will understand why). But if you still asking here is the link: https://gist.github.com/anacondaq/3eae8e4afb5d3c3880d08b95b2c54b78 =============================================== I want make a donation as a gesture of goodwill: =============================================== Ask administrators here: http://herc.ws/board/ If they accept donations or not, I found no donation link. Optionally you can always support the next guys: 4144 for massive help to the current RO scene at all by his hard work. AnnieRuru for a lot of scripts, helping newbies on the forums http://herc.ws/board/staff/ - all these guys zackdreaver for a lot of efforts on a translation project and to all guys, scripters, mappers, etc players who spend their time, their efforts just for you to make everything free what you see here. Sorry if I didn’t mention someone. I need help with <something> There are a lot of talented developers, software developers, scripters, mappers, spriters, and many other people in this community. Check the link: https://herc.ws/board/forum/49-paid-services/ Also, I accept all questions related to the basic newbie stuff on the topic. Do not hesitate to ask even super stupid questions. But before asking something, try to do a very simple thing: Open google, in the search bar enter: "site:herc.ws" Then write your question or problem Hit enter and check all links that you see, maybe someone already solved your problem earlier. Alternatively: if you will not be annoying, and will be respectful, I can help with some newbie stuff in the discord channel about the package: https://discord.gg/p2kvabm Changelog: - 2021-04-10 - build from scratch new version with everything new (2020 game client, latest translation, fixed bugs, tons of features and improvements) - 20200419 - upgraded emulators, fixed problems with emulators, SQL files, and so on, upgraded full kRO, tools, misc Repos, client-files not touched. Added Discord channel for newbies support. - 20200307 - updated emulator, recompiled, uploaded to google drive. Client or db-server files not changed. - 20200203 - updated emulator, rest files not touched, if you want to upgrade your emulator, just download the 01_emulator.rar folder, and use it instead of your old one. I'm Ukrainian in Ukraine. Russia has begun a war against my country, and doing right now is genocide. Destroying cities, even mine own, killing thousands of people, civil people, burning to the ground cities. If you wish to support me in this challenging time (I will try to re-route part of this money to people I know to help them under these awful conditions). You can donate personally for me for my needs by the link: https://nowpayments.io/donation/anacondaq (crypto). Alternatively, you can send money to help Ukraine citizens to the official fond https://www.comebackalive.in.ua/ or to: https://help.gov.ua/
-
1 pointNo discord server for now, i'm still setting up. Added new weapon.
-
1 pointAdded a new weapon.
-
1 point
Version 1.0.0
339 downloads
Hi i have been working on many ragnarok stuff lately and am going to release what ive completed, its theme is north american horror, although the mapping is 100% complete for 7/8 maps the warps, and gat are not Tons of models that wont break your game but feel free to ask if you have an issue with gravity errors Also included a bunch of monsters I made and edited Some textures here are real life images , so please dont zoom in on weird things and do weird stuff , not much of it is in here but dont be annoying thanks -
1 pointDrop the info man, this is not CIA.
-
1 pointgreat work, @jasonch! love how smooth this works!
-
1 pointGood afternoon brothers! I come to show you the 5 months of work I have done to remaster all the cards in the game up to Episode 2. There are a total of more than 1500 cards. I'm here to show you my work and if anyone wants to purchase them, I'll leave you my discord so we can talk about it. My discord: Eohar#9788 IN-GAME VIEW ALL CARDS EXAMPLES
-
1 pointThis is a new translation client project that Dastgir and Me want to share for Hercules only. What this Project contain? - itemInfo.lua with iro/kro translation. - Some lua that contain last translation found on the board or made by us. - Last accessoryid.lub / accname.lub / jobname.lub / NPCIdentity.lub decompiled. - Texture Buttons translate. - msgstringtable.txt fully translate. - Txt files translate (questid2display.txt, mapnametable.txt etc...) - Up-To-Date itemInfo and other files required to run a basic Translated client. You can help us by opening PR, or just pm Dastgir to get access to the repo... What Client is compatible? - Client compatible until 2016. Link:
-
1 pointas far as I know, not possible. Current clients no longer have the old character selection/creation window. the game simply moved on and no longer supports this. I don't think there is a NEMO patch for that, and creating one is likely to be quite hard. If you really must use the old UI, you will need to go back to an older client
-
1 point
Version 1.0.0
85 downloads
A small mod that allows you to display a custom icon and a title referring to the element and element level of the mob. It can be disabled by changing it in monster.conf // Show Element Info [Hyroshima] // 0= Off, 1= On mob_ele_view: 1 I have an observation to inform, if any of the information related to show_mob_info is enabled the mod will behave as disabled. // Display some mob info next to their name? (Note 3) // (does not works on guardian or Emperium) // 1: Display mob HP (Hp/MaxHp format) // 2: Display mob HP (Percent of full life format) // 4: Display mob's level show_mob_info: 0 The video quality is not very good (sorry), watch the preview video in fullscreen 😅 -
1 pointHi everyone! In the last few years I have been continuing the development of roBrowser. I implemented many features and effects and also searched the internet for every roBrowser fork and tried to merge and finish every development that was made outside of the main repo. The client became pretty playable compared to other versions, but there is much to be done and I am short handed on people. Some awesome guys already joined and implemented/working on much needed stuff, but there is more required. I am writing to gain some attention and perhaps someone could help us in getting the client in shape. If you are not interested in development, but you can help us in acquiring information about assets/layouts/"how to do it", that would be also a huge help! I have to spend hours listening to effect sounds and watch animations and on top of all translate their names from korean/latin1 gibberish to get exactly what we need and it is a really tiring task. If you are interested in none of those, but you have roBrowser on your server (that is unfortunately pretty outdated now), check out our version and consider using it. Everyone can use this fork and anyone can join the effort. There is only one request I have: if you implement/fix something, don't forget to open a pull request, so everyone can benefit The repository is located here: https://github.com/MrAntares/Ragna.roBrowser And finally some screenshots that contain things we implemented/fixed, but keep in mind, everything is WIP and many things are still missing: - Pushcart and related GUIs and other features like Forging, Brewing, Arrow Crafting, Alt+M shortcuts, Weapon sounds, Critical and combo damage display, Taming, and many more - Status effects (coloring) - Map Effects - Hard coded skill and item effects and of course sounds - Sprite based effects - Minimap icons - Skillbar cooldown display (as of yet the old style, but the clock style is also in the barrel) It also works on mobile and we try to improve the experience by adding UI elements/features that support us in the handheld environment, like - Full screen button in the top left corner - Exit battle mode/ open chat on the bottom left side of the ChatBox
-
1 point
All versions of Start Island and Criatura Academy (iz_ac01, int_land, iz_int)
Hidekitakase reacted to KirieZ for a file
Version 1.0.0
100 downloads
Since RO starting point in renewal changed several times, and finding those files are getting increasingly hard, I decided to group them all and release here. This only includes the original map files, no changes, no NPCs adjustments. When downloading, you will find 6 options, pick the ones that you need. Hercules is currently (as of v2024.08) using 2012 Academy and 2015 Start Point (or 2018 with wrong map cache?). Files: - academy_2012 -- Criatura Academy 2012 version. Corridors in both floors, everything linked together - academy_2015 -- Criatura Academy 2015 version. 2nd floor changed to have rooms separate from the corridor ("making it smaller") - academy_2017 -- Criatura Academy 2017 version. 1st floor changed to a big open area - start_2012 -- iz_int is a boat for players to leave to izlude (NPCs not included) - start_2015 -- iz_int is a sunken ship; int_land is a island linking the sunken ship to the new one. Players can walk over the ship. - start_2018 -- the ship at int_land is no longer walkable Usage: - Download the ones that you need, - extract it somewhere - copy the content of the data folder to your data folder or GRF - you may need to regenerate your map cache and adjust the NPCs if the map is not the one for your Hercules version -
1 point
What's best in storing items and not duplicating by mistake?
Louis T Steinhil reacted to KirieZ for a post in a topic
Yes, you are right about the cause. Your case seems to be causing a similar effect of a server crash, when it gets terminated in an abnormal situation. I am not sure if there is really something that can be done in this case... while you could create a script command to force saving the character data for this case, you would still have it open for others. I think the best option would be to: 1. When doing a production server normal shutdown, always do it properly. Kick all players (even better: do something to prevent them from logging back in) and wait some time (I think ~5 minutes would be more than enough). I think if map server is shut down separately first, it will send all data to char, but this is something that would need to be done manually 2. If there was a server crash, which could cause those dupes, you probably need to either review your logs of the last few minutes and check if actions are needed, or rollback to a recent backup if you think it would be safer -
1 pointThat's weird... cvc was implemented together with the clan system, not having cvc would mean you don't have the clan system too. I do recommend updating though, since it is there since 2017. But here is the PR that introduced it: https://github.com/HerculesWS/Hercules/pull/1718
-
1 pointThis seems somewhat undocumented, but there is a "cvc" mapflag that should make a clan vs clan. https://github.com/HerculesWS/Hercules/blob/stable/src/map/map.c#L5428 does that work for you? or there is a specific reason why you need to use gvg?
-
1 point
Endless Tower w/ difficulty
Louis T Steinhil reacted to KirieZ for a post in a topic
Is that from rA? does areamonster there sets this variable? this does not happen in herc: https://github.com/HerculesWS/Hercules/blob/stable/doc/script_commands.txt#L695 Ah, the answer went up and I didn't saw it 😅 Glad you got it working -
1 point
Hercules wiki migrated to a new platform
akbaremonz reacted to KirieZ for a post in a topic
Hello everyone, As you may already have seen from the 2024.03 release notes in GitHub ( https://github.com/HerculesWS/Hercules/releases/tag/v2024.03 ), Hercules' GitHub wiki has been moved to a new platform, powered by mkdocs and available at: https://docs.herc.ws/ This change aims to make the Hercules documentation generally better since the mkdocs-powered documentation does bring a better navigation, search capabilities and editing options. With that we can, hopefully, cover the gap that many have felt after we switched from MediaWiki to GitHub Wiki, while also providing some extras (like the ability to easily have a local copy). With the new mkdocs-powered document, we have: (compared to GH Wiki) - A bit more control over the sections, no longer a single side bar with everything - Extended markdown syntax for editing docs content - Better searching, as results are shown as you type - It is now possible to properly include image in the docs, without workarounds Contributions are highly appreciated and should be made through Pull Requests to the new hercules-docs repository ( https://github.com/HerculesWS/hercules-docs ). You may find general guidance on how to run the docs locally and edit it in the Editing the Docs page ( https://docs.herc.ws/contributing/editing-the-docs/ ) The content of the new repository was copied from the GitHub wiki (which was originally the MediaWiki content and had several contributions over the years), and reorganized into a few sections. Additionally, everything was converted to Markdown, so we should generally get an ok experience. The conversion of MediaWiki pages to Markdown was made through an automated tool (pandoc) so we should still expect some things to not be perfectly right, a few noticeable cases are: - Linking between pages are likely to be broken - Some syntax highlighting may not be in the most presentable format - Several images are still missing Fixing those will require manual work to replicate the images, update links, etc. Why not return to MediaWiki? This question has shown up a few times in our Discord, and I think it is worth linking to the topic when the move happened back then: TLDR; Maintaining MediaWiki together with IPB (our forum software) is complicated. Huge thanks to Haru for making this idea come true! Please let us know if you have questions, comments or suggestions for the new docs. -
1 point
High-Res DamageFont
Kiyoko reacted to raPalooza~ for a file
Version 1.0.0
1258 downloads
High-Res Damagefont Here is a new damage font i've cooked for you guys. Alot simpler than the other ones ive uploaded, wen't for a more minimalistic design. I've tried not to kill the pixelated vibe that we all love from the original one, but still improving its resolution. Was pretty happy with the result ;] Hope you all like it. CyA -
1 pointHi, i'm working on PSRO it called Battle For Prontera. What i have do is create Design Launcher using Thor Patcher and Remake FluxCP using NextJS. At this thread i'am gonna showcase my Remake FluxCP using NextJS, and please leave a good feedback Website https://battleforprontera.arknesia.com What i have to do: Create Login and Register Pages - Login and Register sync with in-game Create Account Page - Show all data in your accounts include all chars and some logs Create Characters Page - Show all data in your characters, at this moments only details chars and stats with radar chart Create Download Page - Show all download link Create Home Page - Show server information Create Shop Page - Buy donation items using website integrated with some payments gateway Create Leaderboard Page - Show top kills, streak, and top guild war Create Stats Page - Show all stats chars like in Characters Page but in public so everyone can see but user need to checked show equip on in-game Technology i'm using: NextJS ChartJS TailwindCSS etc SCREENSHOT Characters Page Download Page Register Page Login Page Account Page
-
1 pointYes, the majority like the classic but we didn't forget the past majority is trying to revive the game by improving it over time. I am more impressed by the servers that trying to find a way to create REAL changes that have the potential to make RO even better. Coz obviously the majority are just doing it for money especially those who have the resources to do it. I really think that separates me from most of the RO I know, because I do it to have better RO and monetization is the least. (Of course it is subjective) Just too bad only a few can appreciate it for now. Or maybe my reach is not that enough. But someday I know it will be appreciated by many...
-
1 point
Mapcache for old Izlude.
some1 reacted to johnlincon for a post in a topic
I had a problem with that until I learned how to solve it. When I went to izlude's map, in some parts I couldn't walk, because the server was carrying the newest izlude mapcache (I believe), well I would like to share the old izlude mapcache that I generated, if you have a problem with that, just replace the file. \Hercules\maps\ pre-re izlude.mcache -
1 point
-
1 pointAs of Release v2018.03.13, the method to generate mapcache for Hercules has changed. A lot of people. myself included, were confused as to how it works. In this thread, I will do my best to explain the new way to generate your cache. This guide is intended to help people using the old system, not to aid new people (i.e. never generated mapcache before), so if you are new, some of it may seem like alien talk. Old (your source predates [is older than] Feb 18, 2018) In the old system, there were two ways to generate mapcache You could run the mapcache executable in Hercules root folder. Or use a program such as WeeMapCache to edit in your required mapcache. These two methods would generate or alter your required mapcache located in db/[pre-re or re]/map_cache.dat. However, they are no longer supported. New (your source is using Release v2018.03.13 or newer) The new system involves the use of the new 'mapcache' plugin to generate files. Some quick points: db/[pre-re or re]/map_cache.dat has been dropped (no longer supported). In its place are individual .mcache files for every map located in maps/[pre-re or re]/ Mapcache executable has been removed. Replaced with the mapcache plugin (src/plugins/mapcache.c). How to generate the mapcache? Same as before, check conf/map/maps.conf and db/map_index.txt have all the maps you want to cache. Your maps need to exist somewhere in your repository! There are two ways for the plugin to find them: a. Place all your maps, including resnametable.txt, inside the data folder of your Hercules repo. I.e. Hercules/data/prontera.gat/gnd/gnd/rsw (note: I forget if all three files are needed). b. OR Configure your conf/grf-files.txt to tell it where to find your GRF(s) which contains your maps. Build the mapcache plugin. On linux, this can be done by running the following command: make plugin.mapcache If using MSVC, compile as you would any other plugin. Execute plugin. This can be done using the following command: ./map-server --load-plugin mapcache [param] In windows, just remove the './' and run the commands in your command prompt. The params: The first thing you should do is run ./map-server --load-plugin mapcache --help A list of usable parameters will appear. Here are the ones you need to know for mapcache: [Info]: --convert-old-mapcache Converts an old db/pre-re/map_cache.dat file to the new format. [Mapcache] [Info]: --rebuild-mapcache Rebuilds the entire mapcache folder (maps/pre-re/), using db/map_index.txt as index. [Mapcache] [Info]: --map <name> Rebuilds an individual map's cache into maps/pre-re/ (usage: --map <map_name_without_extension>). [Mapcache] [Info]: --fix-md5 Updates the checksum for the files in maps/pre-re/, using db/map_index.txt as index (see PR #1981). [Mapcache] ./map-server --load-plugin mapcache --convert-old-mapcache Rebuild all the .mcache files using your old db/[pre-re or re]map_cache.dat file. NOTE: You should only run this command when you have an old map_cache.dat file you need to convert. ./map-server --load-plugin mapcache --rebuild-mapcache Rebuild all the .mcache files using your map files specified in step 2 of generation. NOTE: You should only run this command in special circumstances. This erases ALL the existing mapcache and rebuilds it with whatever files you provide it. If you don't have the required files, the build will fail and you will be left with missing mapcache files, meaning you won't be able to access those particular maps. ./map-server --load-plugin mapcache --map <name> Rebuild the .mcache file for the map name you specify. E.g. if you replace <name> with prontera, the maps/[pre-re or re]/prontera.mcache file will be rebuilt. NOTE: This is the best command to run, as it only caches a single map at a time. ./map-server --load-plugin mapcache --fix-md5 I don't know what checksum is for. The End Feel free to ask for help here. I'll try to answer questions re: mapcache if possible. And if you think anything needs correcting or added, let me know. Hope this helps!
-
1 point@Dastgir This guide is out of date, is it possible to have an update?
-
1 pointFull size dungeon for the location of fire monsters. Also an attempt to make a map in the official style of magma dungeons. .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•. Please rate it if the map is good enough
-
1 point
Special Room - 1.0 [FREE MAP]
akbaremonz reacted to Tio Akima for a file
Version 1.4.0
702 downloads
Special Room (s_room) Map created by TioAkima and distributed (without any cost) by the author himself. It is a customized room that can have several functions, such as room for Quest's, Market (shop's), VIP room, meetings, etc ... The trade in this map is permanently prohibited. [I have not yet tested the map .. I have finished recently so .. Any mistake, please let me know.] Att, TioAkima -
1 pointisnt that the dress room if you cant access it with a script command it might have a better chance on rathena\
-
1 point
Version 1.0.0
810 downloads
All jRO Exclusive, Event and Special Episode monsters. This file was originally posted by @fxfreitas at Midgard-Community. The archive contains the following monster sprites: abyss_arthur (corridor of abyss special instance boss) AMELIT (ghost carring a gemstone) ANGLERFISH (Mini-boss) CHAOS_DEVIL_DRAGON deviruchi_w (a white deviruchi, event) domovoi (custom pet, based on RO2 domovoi) ECHIDNA EMELIT (ghost carring a gemstone) giant_deviruchi (event monster) giant_deviruchi_w (event monster) headless_mule (remake of original brasilis monster, last kRO already implemented) HERA (Episode Monster) j_taini (tiny, event monster and pet) kraken_baby (marse edit) LILITH (Episode Monster) M_DARK_KNIGHT (Mercenary monster) M_FLAME_KNIGHT (Mercenary monster) M_ICE_KNIGHT (Mercenary monster) M_LIGHT_KNIGHT (Mercenary monster) M_STONE_KNIGHT (Mercenary monster) merman_se (merman edit) METAL_DRAGON (Pet and dungeon monster) MYTHLIT (ghost carring a gemstone) pad_fafnir (Can't Move, Can't Attack) pad_helheim (Can't Move, Can't Attack) pad_horai (Can't Move, Can't Attack) pad_ifrit (Can't Move, Can't Attack) pad_kinggold (Can't Move, Can't Attack) pad_kingmetal (Can't Move, Can't Attack) pad_leviathan (Can't Move, Can't Attack) pad_muspelheim (Can't Move, Can't Attack) pad_mythlit (Can't Move, Can't Attack) pad_niraikanai (Can't Move, Can't Attack) pad_shangrila (Can't Move, Can't Attack) pad_tamadora (Pet) pad_zaerog (Can't Move, Can't Attack) pad_zerog (Can't Move, Can't Attack) poseidon (strouf edit) RUBYLIT (ghost carring a gemstone) SAPPHLIT (ghost carring a gemstone) seiren (obeaune edit) SIREN (Episode Monster) tacnu (Mini-boss) TOPALIT (ghost carring a gemstone) -
1 pointthat's why I keep saying hercules mob controller is utterly broken there are 2 problems here 1. the hp and max hp is very strange thing when you want to increase the monster hp, setunitdata UDT_MAXHP 1st, then UDT_HP later when you want to decrease the monster hp, setunitdata UDT_HP 1st, then UDT_MAXHP later I'm not even sure need to fix this or not, because rathena also doing this way 2. yes, our recalculate monster status are broken https://github.com/HerculesWS/Hercules/pull/2408 prontera,155,185,5 script askdaksd 1_F_MARIA,{ .@mobgid = monster( "this", -1,-1, "--ja--", PORING, 1 ); setunitdata .@mobgid, UDT_MAXHP, 1000000; setunitdata .@mobgid, UDT_HP, 1000000; setunitdata .@mobgid, UDT_LEVEL, 99; end; }
-
1 point
[Guide] Mapcache Generation 2018
some1 reacted to imbadudelz for a post in a topic
I fixed it Myriad. I extracted all the izlude maps in data.grf. I moved it to my data folder. Then I ran map-server.exe --load-plugin mapcache --map izlude map-server.exe --load-plugin mapcache --map izlude_a map-server.exe --load-plugin mapcache --map izlude_b map-server.exe --load-plugin mapcache --map izlude_c map-server.exe --load-plugin mapcache --map izlude_d map-server.exe --load-plugin mapcache --map izlude_in The unwalkable areas of izlude map are now fixed. Thank you. -
1 pointSo with the release of Item Options System I had created a demo NPC with a small number of options to test the system out or be used as a full fledged NPC. Configuration /** * General Configuration */ /* Chance of the enhancement process to fail. (0 - 99 in percent) */ .chance_of_failure = 10; /* Delete the item on failure? (true/false) */ .delete_on_failure = true; /* Required amount of zeny for a try. */ .zeny_requirement = 100; /* Minimum amount of the bonus value. * For negative effects or certain bonuses that require negative values * Maximum possible value is -INT16_MAX) */ .minimum_bonus_amount = -100; // usually used with delay bonus options, although not provided in the script. /* Maximum amount of the bonus value. * Maximum possible value is INT16_MAX */ .maximum_bonus_amount = 100; /* Disable selection of bonus value (true/false) */ .enable_random_bonus = false; /* Item Option Descriptions */ setarray(.options$[0], "Max HP", "Max SP", "STR", "AGI", "VIT", "INT", "DEX", "LUK"); /* Item Option Constants */ setarray(.option_constants[0], VAR_MAXHPAMOUNT, VAR_MAXSPAMOUNT, VAR_STRAMOUNT, VAR_AGIAMOUNT, VAR_VITAMOUNT, VAR_INTAMOUNT, VAR_DEXAMOUNT, VAR_LUKAMOUNT); end; File v1.0 item_options.txt Let me know what you think! Enjoy~!
-
1 pointmy signature ... click on the right heart ... old rubbish -> eAthena-TXT-9909[Stable].rar
-
1 pointThank you very much... --> FINAL NOTE The truth was i had two mistakes of his own: 1.- I had to copy the file "mapcache.dll" in the folders plugin and the folder of the emulator. .2- Never use as a final folder for grf-files.txt a folder called "data", because by default, the emulator reads to data folder as the final destination, that is, if you have your .gat files in your data directory, you should ideally write the path without placing the data folder : *Example *In my directory real: F:\Gravity\Ragnarok\RO\data\lasagna.gat *In "grf-files.txt" you would apply the following route: F:\Gravity\Ragnarok\RO\
-
1 pointin windows copy plugin binary mapcache.dll into plugins directory in hercules. then open command line in hercules directory and run commands what was in previous messages. in linux you using wrong directory. put files in /home/data/data. dir /home/data is your client root, /home/data/data is data directory in client.
-
1 pointbuild server build mapcache plugin make plugin.mapcache run command for help about command line parameters ./map-server --load-plugin mapcache --help See all commands about map cache and select what you want. For add map probably you want ./map-server --load-plugin mapcache --map youmapname
-
1 pointThis fixes the client hang issue when using the @refresh command while a NPC dialog box/menu is open. I don't know if this plugin will compile, as I made it on the fly, but the command fix definitely works. Inspired from npc_rr_secure_timeout_timer Download: https://pastebin.com/zUzYyz1S ACMD(refresh) { if (sd->npc_id) { /** * If we still have the NPC script attached, tell it to stop. **/ if (sd->st) sd->st->state = END; sd->state.menu_or_input = 0; sd->npc_menu = 0; clif->scriptclose(sd, sd->npc_id); /** * We will end the script ourselves, client will request to end it again if it have dialog, * however it will be ignored, workaround for client stuck if NPC have no dialog. [hemagx] **/ sd->state.dialog = 0; npc->scriptcont(sd, sd->npc_id, true); } clif->refresh(sd); return true; }
-
1 point
Version 1.2.0
258 downloads
Hello peoples, I've been asked recently to create official instances that aren't release on rathena yet. So I decided to merge them to hercules too. So here's my version of Temple of Demon God instance, based over infos took here and there, videos and divine-pride database. In the rar, you'll find all you need, including Instance file, mob, item and quest db. You'll still need up to date client (I personnaly use 20160201) to ensure the mobs are created client side. Have fun. Please, leave the credits and do not claim my work as yours. -
1 point
Smooth Shadow
amm0nition reacted to raPalooza~ for a file
Version 2.0
929 downloads
SmoothShadow By raPalooza Version 2.0 - This new version of SmoothShadow I tried to recreate the smooth shadow seen in Tree of Savior, so I used the .tga format to draw the shadow of monster and characters. The result I got was amazing, it gave ragnarok a fresh look! Try it out! ps;not sure if with huge mob density the client suffers. -
1 point
About Code Review and Why You'd Want Your Code to Be Reviewed
Shirakori Mio 「白狐狸水緒」 reacted to Haru for a post in a topic
About Code Review and Why You'd Want Your Code to Be Reviewed Hello, fellow developers and code contributors! As you certainly know, years ago, Hercules adopted a workflow based on pull requests, that includes code review as one of the necessary steps before any new piece of code makes it into the master branch of the repository. While being an uncommon and somewhat controversial change in Hercules (and in the RO emulator scene in general), code review is part of the workflow of most software projects, both open source and closed source, and has many benefits. Why Code Review The benefits of code review are several: "Given enough eyeballs, all bugs are shallow" [Linus's Law by Eric S. Raymond -- The Cathedral and the Bazaar, 1999]. While the law is not strictly true, it's certainly true that the more developers read and analyze a piece of code, the more likely it is that bugs that might be hidden in it are discovered early. Testing is not enough. It's very hard (or in the case of our codebase just plain impossible) to cover all the possible edge cases when testing a new feature or a fix. An additional pair of eyes reading the code may help discovering those more easily. This includes cases where the client would normally prevent a certain thing from happening, but it's not ensured anywhere on the server side. Better quality of code. By having other developers read a piece of code, they'll end up wondering why a certain approach was taken, rather than another, and discuss it with the submitter, leading to better, more efficient algorithms, or better engineered code. Better documentation. Since the code needs to be read by other people, it'll require proper comments (or they'll ask for explanations about the parts they can't easily explain). This increases the chance that the author, or anyone else that will need to read the same code again months or years after it's been submitted, will be able to understand it again, by finding appropriate comments in the appropriate parts of the code. Better insight into the code across the team. By reading code from different parts of the emulator as part of the review process, every team member increases their own general knowledge of the software, bit by bit. This is a very efficient way of learning how different parts of the emulator work, and why they were implemented that way. Future-proofing. By having public reviews, we keep a permanent trace of what were the hot topics and why certain decisions were taken, when a certain part of the emulator was implemented. If a bug arises, or something needs to be redesigned in future, we can look up the associated pull request and related discussion, and learn more about the discussion that went on in the past, and what's hiding behind code design decisions. Reviewing code from other people, as well as having one's own code reviewed by others might not be easy for everyone, especially at the beginning, but please try your best. Here are some suggestions on how to approach code review from either side. How to approach code review (for code authors) As a code author, the worst thing you can do is to be afraid or shy about other people judging your code. This is the wrong approach! Don't be shy, have your code looked at by others, have them praise you for your genial approach to tackle a problem, listen to their suggestions on how to improve it. But be ready to defend your implementation, if you believe it's better than the suggestions you receive, or if the critics that are moved against it are wrong or meaningless. Always keep in mind that: Having your code reviewed and commented on isn't humiliating. Other people are spending their time looking at your code, asking you why you did something in a certain way rather than another, suggesting improvements. Both sides have a lot to learn from each others. (On the other hand, if no one reviews your code, that's somewhat humiliating!) If someone spots an issue in your code, it doesn't mean that you're a bad developer. We all make mistakes, and we should be happy to learn from them (and it's definitely better if someone spots them and points them out to us before it's too late and they were able to do some harm). Never, ever, take code review personally. No one will laugh about you, fire you, kill you, shame you, etc. if your code is commented on. If you believe you're right and the comments you received are pointless or wrong, chance is that you really are right. Be ready to defend your reasons, it's possible that the reviewer didn't think of them. It is your duty to explain them your reasons. How to approach code review (for code reviewers) Reviewing code is several orders of magnitude harder than having your own code reviewed. You have to check the code for several classes of problems, point out your findings, suggest improvements. And you still have to deal with the worry about hurting the code author's feelings when pointing out a mistake. Here are some things you should keep in mind when reading and reviewing code from other people: You're not judging a person. You're judging code. Don't make your review sound personal. Always think of uncommon and edge cases, and never assume they can't happen, unless there's an explicit check that makes them impossible to happen. Even if the code was tested by the author, it doesn't mean that it can't cause problems to other existing features, or have some issues the author couldn't think of. If the same person writes and tests a piece of code, the chance that they don't test the cases they forgot to handle while coding, is very close to 100%. If the code is not following the project's style guidelines (and this isn't just about indentation, but also about names, conventions about function calls, proper modularization, etc), it is your duty to point it out now, before it's merged. This will make the life of your fellow developers easier later on. Think defensively. Consider the code you have in front of you as buggy until you can prove its correctness. If you see that a sanity check is missing, ask the author to add it. If you believe that a function returns the wrong value in certain cases, even if very unlikely to occur, prepare an example of input for which that happens and point it out. Remember that threats such as overflows, underflows, buffer overruns, null pointers, invalid pointers, numeric (floating point) approximation, etc. are always behind the corner, check for them as often as possible and prove that they can't occur. And remember that, while the code author isn't your enemy (and code review shouldn't generate negative feelings), it's often a good idea to think of them as your "professional enemies". There's a chance that something nasty is hiding in their code, even if they didn't write it with ill intent, and as such, you shouldn't blindly trust the code, regardless of who the author is. Don't be afraid when you comment on other people's code. Your goal isn't to hurt their feelings, you're asking them for explanations and/or suggesting the way you would have done something. Likewise, don't be afraid of making a pointless comment. If the author has a good reason for their implementation, be ready to take back your comment and learn from them. Don't accept compromises. If you're firmly convinced that the author's defense of their code is wrong, your duty is to prove them wrong. But if they manage to convince you, don't be ashamed of admitting you were wrong. Happy reviewing! -
1 pointLagless wont help. It will cause more lag since players need to connected to more hop server.
-
1 pointyou ppl should stop, pointing at the wiki you are very lame and trollish, the wiki is very confusing and is copy/paste from serveral webs. If adding cards acording to the wiki is same as adding normal items, but dosent mention if u need .act or .spr, this tipe of confusing things makes me vomit at the wiki.