All Activity
This stream auto-updates
- Today
-
Kacman joined the community
- Yesterday
-
bodrinca joined the community
-
mariusy joined the community
- Last week
-
RootsLoki joined the community
-
chosenwad joined the community
-
wanderingloki joined the community
-
Keiz joined the community
-
xdaimx joined the community
-
wribeiroz joined the community
-
master@ragna changed their profile photo
-
-
-
-
-
Advertiser / Video Editor | Promotional Video
Frosch Production replied to Frosch Production's topic in Paid Services
For OldschoolRO - Revo (Nostalgic Video) - Earlier
-
Diconfrost changed their profile photo
-
Ai4rei changed their profile photo
-
AcidMarco started following Client Rodex Return Button Handler
-
View File Client Rodex Return Button Handler Adds support for "Return" button in the Rodex mail UI. Allows recipients to return a mail back to the sender by clicking the button in the client interface. Compatible with the latest version of Hercules Successfully built on Windows (MSVC) and Debian 12 (GCC) Thoroughly tested with client version: 2022-04-06 and 2025-03-19 Note The "Return" button is available in client versions from approximately 2022-03-30 and later. Setup 1. Set PACKETVER >= 20220330 in /src/common/mmo.h 2. Recompile your Hercules server with the plugin 🔗 https://github.com/AcidMarco/ro-releases Submitter AcidMarco Submitted 06/05/25 Category Plugins
-
Version 1.0.0
2 downloads
Adds support for "Return" button in the Rodex mail UI. Allows recipients to return a mail back to the sender by clicking the button in the client interface. Compatible with the latest version of Hercules Successfully built on Windows (MSVC) and Debian 12 (GCC) Thoroughly tested with client version: 2022-04-06 and 2025-03-19 Note The "Return" button is available in client versions from approximately 2022-03-30 and later. Setup 1. Set PACKETVER >= 20220330 in /src/common/mmo.h 2. Recompile your Hercules server with the plugin 🔗 https://github.com/AcidMarco/ro-releases -
Ramen changed their profile photo
-
angry_elf reacted to an answer to a question: [Lua/Lub/ETC] Couple different errors when trying to make my own client
-
[Lua/Lub/ETC] Couple different errors when trying to make my own client
angry_elf replied to angry_elf's question in Client-Side Support
Coming back to report that after hours upon hours of trial and error, I managed to make a working client with the features I want. I can't say I learned much about how it all works, my success was born of desperation and stubbornness and nothing else hahahahahahaha. The last error I squished was "CPetEvolutionMgr file init" that for some reason was being caused by having the patch "Disable map signs" applied. Ah, what I wouldn't give for a community made, open source, free RO client, well documented and easy to use like the server software... alas, we can't have everything, and it is way beyond my capacity to make or contribute. Thanks again for the help! -
[Lua/Lub/ETC] Couple different errors when trying to make my own client
KirieZ replied to angry_elf's question in Client-Side Support
Yeah, I know the feeling. But I believe the PC is rarely the issue, most of the time is just incompatible files -
[Lua/Lub/ETC] Couple different errors when trying to make my own client
angry_elf replied to angry_elf's question in Client-Side Support
Thank you so much for trying to help! I'll try using your tips to debug and see if I can fix it. It's very frustrating doing the exact same thing the guides tell you to do and it not working, there is video out there of people doing exactly what I did and getting a working client! I'm starting to think my PC is the problem... Need to visit a friend and try using their PC and see if it works. -
[Lua/Lub/ETC] Couple different errors when trying to make my own client
KirieZ replied to angry_elf's question in Client-Side Support
It has been a long while since I last built one, and I never used WARP. But I think I can give you a few ideas... All those errors are related to bad lua files. Maybe the way you generated them is giving bad results, maybe you have an issue loading them. I can't guide on the translation project as I only used it once or twice to mixed results, so I usually just build my client manually... Here are some tips to try to debug these issues: 1. "attempt to call a nil value" means the function does not exists. Check if you have those LUAs and they have the required function - queryRegionInfo: data\lua files\seekparty\party_booking.lub or data\lua files\seekparty\party_booking_function.lub (I am not sure which one is loaded when, but I can see both has this function) - ResetTheHotKey: data\lua files\hotkey.lub If you don't have these functions in those files, this is likely the cause. If you do, maybe you have an issue loading your GRF. You can try tweaking how you generate your client from translation project and see if you get a better lua as output... just throwing ideas here as I don't know how to use it. 2. "attempt to index global 'JobSkillTab' (a nil value)" as far as I remember, means some code is doing JobSkillTAb[IDX] while JobSkillTab is not initialized Check if data/luafiles514/lua files/skillinfoz/skillinfo_f.lub is initializing a table: JobSkillTab = {} -- I think this is the root cause. If it is not, your lua files are bad for this client Hope this helps -
My server's folder is based on a clean kRO 2022-07-06 downloaded from this nemo page (which has a direct link to http://rofull.gnjoy.com/RAG_SETUP_220706.exe), updated with Ai4rei's RO Patcher Lite. I got all the latest ROEnglishRE files. I'm using 2022-04-06_Ragexe_1648707856.exe. Step 01: Ran ClientGenerator.bat and AdditionsGenerator.bat. Step 02: Got a client folder generated by the scripts, copied the SystemEN folder, DATA.ini, GuildTip.txt and tipOfTheDay.txt to my server's folder. Step 03: Put the generated data folder into a grf. The name of the grf matches what is in the DATA.ini file: [Data] 0=selune.grf 1=data.grf Step 04: Loaded 2022-04-06_Ragexe_1648707856.exe obtained from the nemo website into WARP. Applied the 2019-06_Translation.yml session file to it. Selected recommended patches. Selected all the "Customize ... lub file" patches not already applied, making sure I had the files in the SystemEN folder. WARP doesn't give any errors or warnings, seems to be applying all patches successfully. Step 05: I believe I followed all the documentation and tutorials/guides correctly. However when I run the patched ragexe, I get the following errors and can't open the client: ResetTheHotKey attempt to call a nil value Lua Files\SkillInfoz\skilltreeview [string "buf"]: 1080: attempt to index global 'JobSkillTab' (a nil value) queryRegionInfo attempt to call a nil value I have annexed images to this post to further illustrate my issues. I have had issues with making my own client work in the past, which I could not solve and made me put down the project for a few months. Now I'm trying again, still have issues I just can't solve, have been searching the internet, reading documentation and guides, watching video guides. Just can't get it to work. I deeply appreciate any and all help, a working client is all that is stopping me from having fun creating my own custom edits to RO.
-
angry_elf changed their profile photo
-
Advertiser / Video Editor | Promotional Video
Frosch Production replied to Frosch Production's topic in Paid Services
Original Soundtrack for OldschoolRO - Revo 🎧 Get one for your server now! 💲$40 – One full original song (with lyrics and copyright-free beat) 💲$100 – One full original song with a simple lyrics video included -
Guild emblems on Flux CP after HTTP release
Astronom replied to Timokha's question in Website Support
Thank you, you helped me a lot, it worked! -
-
Guild emblems on Flux CP after HTTP release
AcidMarco replied to Timokha's question in Website Support
Some 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; } } ?> -
Guild emblems on Flux CP after HTTP release
Astronom replied to Timokha's question in Website Support
Please help me fix the display of the logos. -
-
-
-
vBrenth changed their profile photo
-
Treecs changed their profile photo
-
Status: 2/3 Slots. 1 Slot Available. discord: _hpy Edit* Status Update: 3/3 Slots Full. But feel free to msg to reserve a slot thanks!
- 117 replies
-
- paid service
- developer
-
(and 5 more)
Tagged with:
-
Advertiser / Video Editor | Promotional Video
Frosch Production replied to Frosch Production's topic in Paid Services
(1/3) slot taken -
Module Name: C:\Ragnarok Related\PC\Client.exe Time Stamp: 0x61823a71 - Wed Nov 3 15:29:53 2021 Exception Type: 0xc0000005 0x00868eb1 C:\Ragnarok Related\PC\Client.exe 0x00c27a2f C:\Ragnarok Related\PC\Client.exe 0x00846066 C:\Ragnarok Related\PC\Client.exe 0x00bb3c99 C:\Ragnarok Related\PC\Client.exe 0x00629def C:\Ragnarok Related\PC\Client.exe 0x00bb1b80 C:\Ragnarok Related\PC\Client.exe 0x00bb1f1b C:\Ragnarok Related\PC\Client.exe 0x00546792 C:\Ragnarok Related\PC\Client.exe 0x00634a9e C:\Ragnarok Related\PC\Client.exe 0x008131aa C:\Ragnarok Related\PC\Client.exe 0x0089a01b C:\Ragnarok Related\PC\Client.exe 0x00c52c65 C:\Ragnarok Related\PC\Client.exe 0x76ce5d49 C:\WINDOWS\System32\KERNEL32.DLL 0x77d7d03b C:\WINDOWS\SYSTEM32\ntdll.dll 0x77d7cfc1 C:\WINDOWS\SYSTEM32\ntdll.dll eax: 0x00000002 ebx: 0x00000000 ecx: 0xb7b06a97 edx: 0xb7b06a97 esi: 0x0019f17c edi: 0xb7b06a98 ebp: 0x0019ffec esp: 0x0019ffe4 stack 0019ffe4 - 001a03e4 0019FFE4 : FF FF FF FF 46 21 DC 77 00 00 00 00 00 00 00 00 0019FFF4 : 2C 2D C5 00 00 C0 3A 00 00 00 00 00 41 63 74 78 001A0004 : 20 00 00 00 01 00 00 00 2C 33 00 00 DC 00 00 00 001A0014 : 00 00 00 00 20 00 00 00 00 00 00 00 14 00 00 00 001A0024 : 01 00 00 00 07 00 00 00 34 00 00 00 7C 01 00 00 001A0034 : 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 001A0044 : 00 00 00 00 00 00 00 00 02 00 00 00 4E EF 26 1A 001A0054 : 98 02 00 00 44 00 00 00 E0 02 00 00 54 02 00 00 001A0064 : 00 00 00 00 BA 71 32 F3 34 05 00 00 4A 00 00 00 001A0074 : 80 05 00 00 48 03 00 00 00 00 00 00 5B 49 59 2D 001A0084 : C8 08 00 00 32 00 00 00 FC 08 00 00 00 03 00 00 001A0094 : 00 00 00 00 CD EA CE 32 FC 0B 00 00 42 00 00 00 001A00A4 : 40 0C 00 00 36 03 00 00 00 00 00 00 C8 5F 50 38 001A00B4 : 78 0F 00 00 5E 00 00 00 D8 0F 00 00 68 03 00 00 001A00C4 : 00 00 00 00 44 05 28 B1 40 13 00 00 56 00 00 00 001A00D4 : 98 13 00 00 98 03 00 00 10 00 00 00 09 00 00 00 Launch Info 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Job : Novice 835
-
-
AcidMarco started following Client Ally Chat Handler
-
View File Client Ally Chat Handler The plugin adds support for the Guild Ally Chat system introduced in RO clients from ~2023-06-07 onward. It handles alliance chat packets, allowing players to send messages to all members of their guild and allied guilds. I also provide optional client-side customization via HEX patching to change or disable the symbol (#) that triggers the ally chat. Compatible with the latest version of Hercules Successfully built on Windows (MSVC) and Debian 12 (GCC) Thoroughly tested with client version: 2025-03-19 Features Handles CZ/ZC_ALLY_CHAT packets from client and server Broadcasts messages to guild and allied members Optional HEX patch support for customizing or disabling the ally chat symbol Setup 1. Set PACKETVER >= 20230607 in /src/common/mmo.h 2. Recompile your Hercules server with the plugin Optional (HEX Patch) By default, the client uses # to send messages to the ally chat via public input. If you use # for server charcommands (e.g., #alive), this causes conflicts. To avoid this: - Apply the NewstyleChangeAllyChatSymbol patch to use a different symbol: !, %, ^, &, * - Or apply NewstyleDisableAllyChatSymbol to disable symbol-based access entirely HEX patches are available in the public repository: 🔗 https://github.com/AcidMarco/ro-releases Submitter AcidMarco Submitted 05/18/25 Category Plugins
-
Version 1.0.0
2 downloads
The plugin adds support for the Guild Ally Chat system introduced in RO clients from ~2023-06-07 onward. It handles alliance chat packets, allowing players to send messages to all members of their guild and allied guilds. I also provide optional client-side customization via HEX patching to change or disable the symbol (#) that triggers the ally chat. Compatible with the latest version of Hercules Successfully built on Windows (MSVC) and Debian 12 (GCC) Thoroughly tested with client version: 2025-03-19 Features Handles CZ/ZC_ALLY_CHAT packets from client and server Broadcasts messages to guild and allied members Optional HEX patch support for customizing or disabling the ally chat symbol Setup 1. Set PACKETVER >= 20230607 in /src/common/mmo.h 2. Recompile your Hercules server with the plugin Optional (HEX Patch) By default, the client uses # to send messages to the ally chat via public input. If you use # for server charcommands (e.g., #alive), this causes conflicts. To avoid this: - Apply the NewstyleChangeAllyChatSymbol patch to use a different symbol: !, %, ^, &, * - Or apply NewstyleDisableAllyChatSymbol to disable symbol-based access entirely HEX patches are available in the public repository: 🔗 https://github.com/AcidMarco/ro-releases -
-
Advertiser / Video Editor | Promotional Video
Frosch Production replied to Frosch Production's topic in Paid Services
📢 Mobile Real-Life Advertisement Slots – Now Open for July (Hong Kong Edition) Hey everyone! I'm excited to share that I'll be heading to Hong Kong this July, and I'm opening up limited slots for mobile real-life advertisements to promote your server, community, or project—right on the busy streets of Hong Kong! Here’s what I’ve done before: ▶ https://www.youtube.com/shorts/1yp7GLnAYeM ▶ https://www.youtube.com/shorts/K8j2J6fa3W0 ▶ https://www.youtube.com/shorts/Qow90JVgxFM In these videos, I’ll be: Promoting your server through short mobile clips Showing how convenient mobile gaming is—anywhere, anytime Doing in-game quests and interactions in public to highlight your server’s features If you’re interested in booking a slot or have questions, DM me on Discord: froschzm Let’s get your server seen—on the streets of Hong Kong! 🏙️📱