Jump to content

All Activity

This stream auto-updates     

  1. Yesterday
  2. Available once more
  3. Last week
  4. Earlier
  5. Rested fingers. Hungry server. Let’s feed it.

  6. El error que tus enlaces están caído
  7. I tried to follow your instructions on how to add the files but it is not working. pls help
  8. need help. please someone, teach me how to install font please for my ragnarok?
  9. how to install the font please? First time playing ragnarok. please help
  10. We added: -> Ripple XRP to payments gateway -> Solana to payments gateway get the updates here https://github.com/xpayapi/FluxCP-Addons If you have any inquiries, please let us know
  11. Designs, scripts, and late night fixes, the creative process never stops, but it’s worth it.

  12. Business handled, scripts tucked in, now it’s pages, peace, and a plate of something good.

  13. 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  
  14. Version 1.0.0

    3 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
  15. 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!
  16. Yeah, I know the feeling. But I believe the PC is rarely the issue, most of the time is just incompatible files
  17. 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.
  18. 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
  19. 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.
  20. 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
  21. Spent the morning tweaking scripts, now it’s time for some gaming and good food.

  22. Thank you, you helped me a lot, it worked!
  23. 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; } } ?>
  24. Please help me fix the display of the logos.
  1. Load more activity
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.