Jump to content


Popular Content

Showing content with the highest reputation since 12/25/2020 in all areas

  1. 11 points
    Evening all! You know when you have one of those days and can't wait for it to end? That sums up the entirety of 2020. All of it. It's been tough for people all around the world with the sheer amount of ridiculousness over the last 12 months and eventually there will be a light at the end of the tunnel. It has been 6 years since I last posted a Christmas message, and as is customary at Christmas here in the UK, we get a message from the Queen. This message though, is aimed at 2020 as a whole. If you're lucky enough to be with family this Christmas, treasure them. If you're out celebrating with friends, be kind to everyone you meet. If you're in the hospitality industry serving others with little time to yourself, werk it girl. *snaps fingers* Whatever you're doing, stay safe. And wherever you are in the world, the rAthena team wishes you a Merry Christmas, Happy Holidays and Season's Greetings.
  2. 7 points
    Welcome rAthena Community! Hello everyone Ren here, so it has come to my attention through the discord channel alot of you are having issues setting up your new clients and are having issues or your new and want to jump right into the server construction but cant figure out how to properly set up a new 2020 client without errors or issues. I am here to finally remedy that! The guides on the documentation are here and there and newcomers can't figure out why they are having errors and tend to skip things here and there. Below I will fully explain from start to finish how to set up a Ragnarok 2020 Client for Renewal and Pre Renewal use! Lets Begin! Okay so below I've decided to skip text and shoot for a video tutorial this will eliminate more errors and create a better reference! Please do exactly as I do to eliminate error this includes making new folders to make a tidy work space! (Note for video I will not be redownloading files as I do not like clutter. I will also be using a text editor to type.) Guide Links KRO - Full Client For Ragnarok Game Files (Akkarins File) NEMO - Client exe Patcher for your server (Most Updated) NEMO RagClient - The latest supported client for 2020! ROTranslation - Chris's Full RO Translation (Most Updated) GRF Editor - GRF tool to open grfs and create them (Requires rAthena Account) MISINFORMATION ON VIDEO REGARDING ITEMINFO_V5.LUA I WANTED TO POINT OUT CORRECT INFORMATION REGARDING ITEMINFO_V5 LUA THAT I REALIZED I MISINFORMED IN THE VIDEO WHEN EVER UPDATING RSU IT WILL OVERWRITE ORIGINAL ITEMINFOS V5 FOR ALL 2020 CLIENTS. IN PATCH ON NEMO PLEASE MAKE YOUR OWN /ITEMINFOSERVER.LUA SO KRO DOESNT OVERWRITE! JUST COPY THE INFORMATION FROM ORIGINAL V5 AND MAKE IT YOUR OWN! Information Regarding Language Types Other Then English Okay so I wanted to give a few details on regarding languages other then english that are not covered within the video. If your looking to change the language to russian for example please make sure you have this patch below enabled while patching! - Always load korean external settings file! Then you can select other language type numbers 0-17 etc. Here is also my text document with the steps! // Welcome to the 2020 client set up guide // Alot of you have been having issues with setting up the new client if you follow this video from start to finish you will be able to 1. Have a properly running server client side 2. Learn to be more organized 3. Add custom items // Lets start step 1. Make a new folder on your desktop for your server client files and tools. A clean enviroment will help with less errors! This means installing a fresh copy of the full kRO game. Also follow my organization of where i place all my tools and files. step 2. Download all the required files to have a full client side, all of these files can be found on my guide post and save them to the tools folder. step 3. Extract the full kRO to your game files folder within your server folder & update using the 2 RSU patchers. step 4. Install GRF Editor onto your windows system , this has its own folder within program files. step 5. Extract the rest of the tools one by one into your tools folder. step 6. Go back to your game files folder and make sure that kRO is fully updated by running the two patchers 1 by 1. After downloading all the neccessary tools and extracting the game files and updating we may now continue on to building a fresh GRF for your servers use! This is better then using old grfs that have to much stuff that will conflict with the new client files. This client also uses new resource files and new system folder files which will be covered. okay lets begin. step 1. open grf editor step 2. navigate to your rotranslation folder step 3. copy or drag both basic texture sub folders into data folder on grf editor step 4. if your planning on running a pre renewal drag the renewal data over first but if your planning on running renewal like i am drag the pre over first then the renewal step 5. now we completed building our basic server grf we will now edit our connection file called clientinfo.xml you can delete the sclientinfo as it is not needed with the new client now we can save the grf to our game files folder where everything is for the game! Keep grf editor open for adding custom items later on. now we can move on to creating the client to use for the server! step 1. navigate to the nemo folder inside our tools folder! step 2. browse for your ragexe that you downloaded. I'm using 20200401 which is most current and pre set in on the server side step 3. load the client step 4. load the ro translation profile for 2020 this is all pre defined for the client so we can skip through step 5. this is the name of our config file to point the client to the grf we can change it to our own custom name used step 6. this is important so if your running an earlier client you might use the original iteminfo.lua this is the new item info which doesnt get overwritten by kro in updates this is where some of our information will go for the custom items. step 7. now we can load the recommended patches step 8. dont worry about the errors as they are just telling you those patches are not for the latest client it still selects the recommended ones we need! step 9. selecting our own patches. You can pick through which ones you want but if your not advanced just follow me this is for increasing your custom item view range it is recommended you choose between 5000-8000 as customs view start at 3000 this might change later on if kro decides to release more. we will go with 5000 because i dont see us adding anymore then 200 custom items. step 10. lets recheck to make sure we got everything beautiful now we can apply the patches and move our client to our game files folder with our grf! you can rename your client to what ever you want! now that we created our grf and made our client we can go back to the ro translation folder step 11. navigate to the pre renewal or renewal folder if your making a pre renewal server add the renewal system folder to your game files folder and overwrite first then add the pre renewal systems folder on top of that just like we did with the grf in my case i am making a renewal so ill do opposite now the next folder once weve done that we can test the client if you get some weird text you have to edit your data.ini and rename it to yourserver.ini like we did for the patch now we can move on to adding the custom items!!! step 1 . re open grf editor in this case ill use my grf step 2. navigate to your tools folder and to the folder that holds your custom items step 3. follow me step 4. now we can edit the two files needed to correctly link the client with the server side. navigate to the data/luafiles514/lua step 5. extract both files that i do and they will end up in your game directory under the folder data we can go ahead and open the accessory id! okay this is important!!! just copy like i did above and edit the names make sure its 100% matching save the file and we can open the next file which is accessory id mistake i made is that we were in the accname so we just swap around :P same thing goes on here we just copy the above line and edit out. now the 3000 is our view id not the item id which @item calls for this will be the view display of our custom which is why we set the patch for 5000 so we will start at 3000 gives original items a bit of room now we can save! step 6. drag the two files back into the grf and save now were completely done with the grf! now we can move back to our game files folder for the last task! move to the system folder to iteminfo_v5.lub/lua heres where we add the actual item db number in this case i used 30000 just copy what i did and youll be fine you just have to make sure when you add the item into the item db whether it be sql/yml that you set the right item id and view id also the AEGIS name will be _Equilibrium_Wings here on the item info you can see there is none it links to a different part of the grf but deff make sure to add the _ under the aegis name! All done that wasnt so hard! -Renzadic!
  3. 6 points
    Hello everyone, Updated changes on the platform from below spoilers: Changelog v1.0.0 - Date: 01/14/2021 Changelog v1.0.1 - Date: 01/16/2021 Details: PHP Framework Laravel 8.x. HTML5, Javascript with jQuery, CSS3 for theme templating. Bootstrap 5 Framework Responsive & Mobile Friendly PHP 7.4 required (and other Laravel dependencies). Clean Design SEO Friendly Feature Plan - Player Dashboard: Account Feature (Register, Login, Forgot Password, Account Setting) Donate system (paypal and skrill ready) News & Events Ticket support system(WIP) GM Task List Item Shop Feature Plan - Admin Dashboard: Ban Module System (ban or unban from the platform) Manage Item Cash Shop (Fully working with lastest rathena item_cash_db table) CMS Latest Donation (You can see the amount and account who made the donation) Ticket Support System (WIP) Theme configuration (We are still debating if this should be a thing. since you just need a bit of html and css knowledge to edit front page). We are also open to suggestions and idea. We are not gonna abandon the project anytime soon and we would like to have people to test and make us fix backdoors that could appear to make the system more secure. As a matter of fact, we are developing our rathena renewal server in order to test this new platform!. Sorry for the spoiler if it's too big I'm not really used to forums now days.... Also sorry for any grammar mistakes. English is not really my first language Edit: Clic on this Discord Server to access our server. At the moment is just me and no body else, but I believe we can make a good community out of it! Edit #2 : All new updates about the platform will be posted only on discord. This is to prevent more text wall and some other issues it might bring. Edit #3 : Screen Previews are all within discord server.
  4. 4 points
    Hi all, I put together a command-line tool to help save time when porting lots of existing items to an rAthena server. I noticed that the rAthena community often refers to divine-pride.net (DP) as a source of truth, so I figured it would be useful to connect with their API. Summary The tool uses data from divine-pride.net and attempts to map the API response to a desired rAthena database format. Installation Requires Python 3.6+ and pip installed: pip install dp2rathena Usage Generate a divine-pride.net API key if you don't have one yet (registration required), then you can start converting data: Example: Store API key and convert items with id 501 and 1101 dp2rathena config dp2rathena item 501 1101 Produces this output: Further instructions can be found at the repository: https://github.com/Latiosu/dp2rathena Limitations Currently only items can be converted and with the following limitations: "Type" - when the item type is "Consumable" on DP and subtype "Special", we output a few possible options for user to choose the correct one (Healing, Usable, DelayConsume or Cash) "SubType" - when the item type is "Ammo" on DP, we output all rathena ammo subtypes for user to choose correct option as DP doesn't map all rathena ammo subtypes The following item_db.yml fields are excluded as DP API doesn't expose sufficient data to reverse-engineer the mapping: "Script" / "EquipScript" / "UnEquipScript" - script to execute when some action is performed with the item "Class" - upper class types that can equip item "Flags" - item flags such as "BuyingStore", "DeadBranch", "BindOnEquip", etc... "Delay" - item use delay "Stack" - item stack amount "NoUse" - conditions when the item is unusable "View" - view sprite of the item "AliasName" - another item's AegisName to be sent to client instead of this AegisName Let me know if you'd like to be able to convert other data from DP, some other suggestion or any questions. Edit: Updated instructions for usage
  5. 3 points
    Happy Thanksgiving everyone. Since I couldn't get the turkey, I thought I would bring this instead. Without further ado, Let me introduce... WARP (Windows Application Revamp Package) Why this name? Because I like using acronyms and this name sounded apt. Plus it's the function & features that matter more. And no, I am not gonna change the name. Why not just fix up NEMO? The codebase for NEMO is pretty much ancient at this point. So rather than fixing it up, I decided to go the route of creating it fresh from scratch. The end result is a far superior product. OK, but what if you end up AFRO (Away From RO)again? Well, I can't promise that I will be around forever. However, this time around, I am releasing the source code for the tool as well. So, exactly what has changed? Well, quite a few things. Let's start off with how the GUI looks now. As you can see, the GUI is much more modern and aesthetically pleasing thanks to @Haziel & @Hadrias . The package comes with 3 tools - Console version (for simple patching), Main GUI, and Tester GUI (for batch testing). A big salute to @4144 for keeping NEMO alive while I was AFRO . Ok, jokes aside, I discussed with him about the changes he made and I have incorporated almost all of them but with some differences. Language & Styles are now on the bottom as you can see. All the remaining menus have now been shifted to drawers (moving side panels). To reveal them you can either swipe from the respective edge or click the button at the top. The right side drawer houses all the Extensions (Used to be called 'Addons' in NEMO). They are now loaded independently of the client. This avoids unnecessary redefinitions and now you can also use Extensions for activities that don't need a loaded client. All the common functions have been added to the 'Quick Actions' group and all the remaining ones are in the left drawer, which is not many. If you have suggestions for more features let me know. Moving on to the Back end (This is of no use to the regular user. So you can skip this part if you want) It was high time for us to have a proper input file format. Enter YAML. Love it or hate it but it's here to stay. Frankly, I like it more than libconfig and INI. You would be seeing YAML being used for almost every file in WARP. This includes input files for Patches & Extensions, Files defining those two, Session files, etc. Writing patches is far more flexible now. Say goodbye to PTYPE_HEX and \xAB. Now we can do wild card searches with the actual wild cards inside hex codes. Of course, we still need to have some well-defined characters for that. Currently, we have 2 forms of wildcards - Nibble wise - For e.g. => A? , ?? , ?3 Bit wise - For e.g. => [1.0...01] If you have any suggestions about it let me know. Speaking of writing hex code, I have provided functions looking almost identical to Assembly instructions for generating their equivalent hex code. This helps in making the hex code more human-readable and adds a little more flexibility. User inputs have a few more types and little more flexibility in specifying constraints now. Scripts have proper segregation now. Please follow them when adding your own. Only the scripts inside the 'Init' folder gets reloaded each time the client is loaded. This avoids unnecessary reloads. exe has now become 'Exe'. But in addition to this, you get 2 more objects - System (for filesystem activities) & Warp (whatever is outside the scope of the other two) Many of the functions used for retrieving some constant information in the 'Exe' have become properties now. For e.g. PEoffset, ImageBase, BuildDate, etc. During patching, the Diff section is only added if you have inserted any code using one of the 'Add' functions. Also, the Diff section now grows dynamically as per requirement (in increments of Section Alignment of course). In addition to the Patched Exe, The tool also generates an (Extra Patch Info) file with the suffix '.epi'. It holds just enough info for the tool to recognize existing patches in an exe from a previous patch session. So how is it useful? Let's say you have a patched client and its EPI file. But you don't have the original anymore. Now you can remove 1 or 2 patches and keep the rest OR even restore the original from the patched exe. Last, but not least, I am providing documentation about everything including the API. But bear with me for a bit, as I am still working on the documentation part. I probably forgot more points to add here, but I think this pretty much covers the important stuff. Anyways you can read in detail at the Wiki Is it ready to be used now? The tool is definitely ready. I have added most of the patches but not all just yet. But I was not able to test all the patches in-game. So please don't attack me if something failed. I would appreciate a Bug Request in Github instead. You can also come to Discord as well, if you prefer that. Also note, that some patches are still failing for new clients, and some failing for old ones. However, I saw the same behavior in NEMO, so that would be part of the next stage of operations - Updating Patch scripts. So, where do I get it from? https://github.com/Neo-Mind/WARP How to use it? There is a User Guide in the git repo (best viewed from Github itself). Everyone is used to NEMO by now, so it shouldn't be difficult to use this even without the guide. Plus the Github wiki is pretty detailed. Any last words before we close this? Just like in the case of NEMO, my intention with WARP is to create a common tool for patching without being restricted to RO or which OS you use it in. For this reason, you will be seeing multiple branches in the Git repo. If you are planning to use WARP for patching some other application, Create a branch using the 'win32' branch as a starting point That's about it from me for now.
  6. 3 points

    Version 1.0.0


    an alternative effect for MVP.str


  7. 3 points
    There aren't really pros and cons anymore to well known hosts, Really it just boils down to price and whether or not they provide adequate support. You don't need to waste money on a dedicated server to run rAthena. You should know that
  8. 2 points
    Try this script https://upaste.me/r/a04e54027f405c652
  9. 2 points
  10. 2 points
    If someone looking for a working diff on latest rA. https://github.com/coookie1010/Server-Patches/blob/main/rA-whosell.diff
  11. 2 points
    Hi everyone, It's been a while since I've published something. Today I'm releasing the code of a patcher I've been working on for some time. The idea was to make an open-source drop-in replacement for the Thor patcher while also bringing some improvements. The project has been developed in Rust and the UI is based on the webview project. The patcher's current features are the following: Customizable, web-based UI Cross-platform (Windows 7/8/10, Linux, macOS) Configurable through an external YAML file HTTP/HTTPS support GRF file patching (version 0x101, 0x102, 0x103 and 0x200) THOR patch format support Drop-in replacement for the Thor patcher SSO login support (i.e., can act as a launcher) The project's repository can be found here: https://github.com/L1nkZ/rpatchur (and documentation can be found here). Contributions are welcome! Releases v0.2.0: https://github.com/L1nkZ/rpatchur/releases/tag/v0.2.0 v0.1.0: https://github.com/L1nkZ/rpatchur/releases/tag/v0.1.0
  12. 2 points
    Hello! My name (not real life) is James. I am a 16 year old programmer from Denver. I code in multiple languages, such as C++, C, NodeJS, Typescript, and Rust! I also do Web Development :3. I've been playing Ragnarok Online since i was a kid, taught by my parents and to this day actually. I hope i can contribute to the rAthena community with my skills in programming. Thank you. Have a good day!
  13. 2 points

    Version 1.0.0


    I did this effect some time ago, I think it would be cool to share it.


  14. 2 points

    Version 2.0


    You know when you login to your server that you work on, or even play on, and you always end up typing the same commands each time before you even say hello to anyone? @autoloot, then @uptime to see when the last reboot was, @rates if you've got fluctuating exp/drop rates, etc etc. @showexp cos you want to know what's going on, blah blah blah. With this Settings NPC, a player can set those commands to automatically execute when they login. These are account based, but could easily be modified to char based. Following the general format of the script, it should be easy to add/remove commands from those available to the player. @main is listed at the bottom of the script, so if you don't use it you may as-well remove that line. This script is years old, revamped to make it work with recent revisions - I've tested it on both our live server, and my dev server and seems to work.. but if you find any bugs or glitches, or something that could be optimised a bit more, please let me know


  15. 2 points

    Version 1.0.0


    I took a modified version of the original and fixed it for the current version of rathena 2020+, I saw that there were a lot of people asking for it, so I decided to post my diff, the project is not mine nor the code, I just fixed it for the new emulator.


  16. 2 points


    Original Topics : TW Gamer Forum Give credits to original author in the forum / like their topics if you like their artworks.


  17. 1 point

    Version 1.0.0


    My take on the @restock command. This script allows you to set a list of item to restock from your storage, for example 100 blue gemstones and 300 white potions. When using the command, a ticket item will be consumed to get the specified items from storage. This script is so that you'll always have the needed quantity of items in the list. for example, if you have 22 gemstones in your inventory and you use @restock, you'll get the 78 gemstones missing to the full 100 any feedback is appreciated.


  18. 1 point
  19. 1 point
    - script whosell -1,{ OnWhoSellACMD: searchstores 99,1; end; OnInit: bindatcmd "whosell",strnpcinfo(0)+"::OnWhoSellACMD"; end; }
  20. 1 point
    If this one doesnt help you. Try this. refine.txt
  21. 1 point
  22. 1 point
    You can do also. // Settings set .mode, 1; // Set it as following: 0 - 2nd to 3rd class suits ; set [email protected], 1000; // Zeny required if (.mode == 0) goto normal; if (Zeny < [email protected]) goto Nozeny1; normal: mes "[suit Provider]"; mes "So, wanna change your appearance?"; menu "Change to Third class suit",thirdclass,"Reset appearance",reset; Nozeny1: mes "[suit Provider]"; mes "You need zeny to talk to me."; close; thirdclass: if(class == Job_Knight) { Zeny -= [email protected]; changebase 4060; close; end; } if(class == Job_Assassin) {Zeny -= [email protected]; changebase 4065; close; end; } if(class == Job_Crusader) { Zeny -= [email protected]; changebase 4073; close; end; } if(class == Job_Blacksmith) { Zeny -= [email protected]; changebase 4064; close; end; } if(class == Job_Alchemist) { Zeny -= [email protected]; changebase 4078; close; end; } if(class == Job_Rouge) {Zeny -= [email protected]; changebase 4079; close; end; } if(class == Job_Sage) { Zeny -= [email protected]; changebase 4074; close; end; } if(class == Job_Dancer) { Zeny -= [email protected]; changebase 4076; close; end; } if(class == Job_Monk) { Zeny -= [email protected]; changebase 4077; close; end; } if(class == Job_Hunter) { Zeny -= [email protected]; changebase 4062; close; end; } if(class == Job_Bard) { Zeny -= [email protected]; changebase 4075; close; end; } if(class == Job_Wizard) { Zeny -= [email protected]; changebase 4061; close; end; }
  23. 1 point
  24. 1 point
    That might be an font issue
  25. 1 point
    [email protected] = 10; monster "prontera",0,0,"Quest Poring",1002,[email protected],"NPCNAME::OnPoringKilled"; copyarray [email protected]_gid, [email protected], [email protected]; for ([email protected] = 0; [email protected] < [email protected]; [email protected]++) { getunitdata [email protected]_gid[[email protected]], [email protected]; if ([email protected][UMOB_MODE] & MD_AGGRESSIVE) setunitdata [email protected]_gid[[email protected]], UMOB_MODE, ([email protected][UMOB_MODE] - MD_AGGRESSIVE); }
  26. 1 point
    View File Alon Event Alon Event Alon is a Tagalog translate from Wave Alon Event is another Team Event and consist of 10 party member as a default. Player must be clean all monster in map Round 1-4 is easy Wave , Round 5 is Bonus round & Final Round & Round 6-9 is the hard part Good for High Rate Server & Mid rate server . Enjoy! Do not claim as your own work. Removing my Author in script meaning you claiming my works! Submitter Poring King Submitted 08/26/2020 Category Games, Events, Quests Video Content Author Poring King  
  27. 1 point
    Why are you going to remove close button? try using end;. The player will hang up on that dialog if you remove close button.
  28. 1 point
    You have to recompile and @vip should be working.
  29. 1 point
    try https://github.com/rathena/rathena/blob/master/npc/custom/quests/quest_shop.txt
  30. 1 point
    Another one. ~ In this post I'd like to show the result of a map that I've been working on and off on since late 2017. With much delight, I'm happy to say that it's finally completed! Well, for the most part-- while making the vid, I actually came across a few minor glitches that still need to be taken care of, but... I hope it turned out alright.
  31. 1 point
  32. 1 point
    Story Time: A lot of players run into problems. They disconnected in an instance, they bought the wrong item, someone is being a nuisance in battlegrounds. After cursing, they usually type `@request`. But alas, none of the GMs you hired are online! You need to dock their pay. The message is lost in the void. Until now. Discord has support for webhooks, which is a way to associate callbacks to HTTP requests. Their developer docs for webhooks can be found here. Basically, you can send a POST to your discord webhook url, and the contents will be printed to the associated channel. "So?" When someone uses `@request`, the message is sent from the map server to the character server, which then sends it back to all map servers, and the map servers send the message to all connected GMs. Because it sends it to the character server, we're able to send the POST request from the character server. This helps performance, since the map server is constantly doing things and the character server generally uses less resources. "That's great! But how do we send this POST request? Do I need a stamp?" If you're on Linux, there's a great command line tool called `curl`. It's mostly used to download files from a server, but it also has support for all other HTTP methods. "Command line? How do we put it in rathena?" Curl also comes with a library called libcurl that we can use in c/c++ programs! "I see, so we use libcurl to send the message to the discord webhook!" Exactly! How it looks: Installation: Two config options are added in this patch: gm_whisp_webhook and gm_whisp_webhook_url This makes a change to configure, and adds a new flag. You need to add --with-lcurl to your arguments. Example: ./configure --enable-prere --enable-vip --enable-packetver=20170614 --with-lcurl Disclaimers: This only works on linux. I don't run rAthena servers on windows, and neither should you. (personal opinion) You need to install libcurl-devel. On some OSes it could be called something else; on Ubuntu, it's libcurl4-openssl-dev. Don't ask me for a lot of help if you can't get it to work. This is supposed to be a showcase, but I'm giving the code out. I made this in a day, it's not the greatest code. Initializing curl and cleaning up on every call is not the greatest, but unless you are getting 100 requests a minute, it should be ok for now. Eventually, I want to add it to src/common or something. But that'll happen in a future weekend. Code: The code is here: https://pastebin.com/Z82M9ssf
  33. 1 point
    Nice Guide, Keep it Up Teaching Me Step By Step How To Build everything spend couple hours teamviewer just for help me fix the errors and show me how should i fix the error Pretty Friendly &Patiently
  34. 1 point
  35. 1 point
    *checkoption(<option number>{,<char_id>}) *checkoption1(<option number>{,<char_id>}) *checkoption2(<option number>{,<char_id>}) *setoption <option number>{,<flag>{,<char_id>}}; The 'setoption' series of functions check for a so-called option that is set on the invoking character. 'Options' are used to store status conditions and a lot of other non-permanent character data of the yes-no kind. For most common cases, it is better to use 'checkcart','checkfalcon','checkriding' and other similar functions, but there are some options which you cannot get at this way. They return 1 if the option is set and 0 if the option is not set. Option numbers valid for the first (option) version of this command are: 0x1 - Sight in effect. 0x2 - Hide in effect. 0x4 - Cloaking in effect. 0x8 - Cart number 1 present. 0x10 - Falcon present. 0x20 - Peco Peco present. 0x40 - GM Perfect Hide in effect. 0x80 - Cart number 2 present. 0x100 - Cart number 3 present. 0x200 - Cart number 4 present. 0x400 - Cart number 5 present. 0x800 - Orc head present. 0x1000 - The character is wearing a wedding sprite. 0x2000 - Ruwach is in effect. 0x4000 - Chasewalk in effect. 0x8000 - Flying or Xmas suit. 0x10000 - Sighttrasher. 0x100000 - Warg present. 0x200000 - The character is riding a warg. Grandcross is an AoE skill will most likely fail if it doesn't have stats not like sight thrasher.. you need target skills
  36. 1 point
    Since you are exchanging it already.. the input is from 1 to 1000 input [email protected],1,1000; You just need to change this line and add 1 line after it.. should be like this input [email protected],0,1000; if([email protected]) end;
  37. 1 point
    prontera,155,181,3 script Yumi Test 94,{ for([email protected]=0;[email protected]<getarraysize(.Require);[email protected]++) [email protected]$ += (countitem(.Require[[email protected]]) ? "- Exchange ^0055FF"+.ReqAmount[[email protected]]+"^000000 "+getitemname(.Require[[email protected]])+" to "+getitemname(.Exchange[[email protected]])+":":":"); [email protected] = select([email protected]$)-1; message strcharinfo(0),"Input amount 1-1000"; input [email protected],1,1000; if(countitem(.Require[[email protected]]) < .ReqAmount[[email protected]]*[email protected]){ message strcharinfo(0),"Insufficient "+getitemname(.Require[[email protected]])+""; end; } if(!checkweight(.Exchange[[email protected]],[email protected])){ message strcharinfo(0),"Insufficient inventory space"; end; } delitem .Require[[email protected]],.ReqAmount[[email protected]]*[email protected]; getitem .Exchange[[email protected]],[email protected]; end; OnInit: setarray .Require[0],501,502,503,504,505; setarray .ReqAmount[0],5,2,3,4,1; setarray .Exchange[0],512,513,514,515,516; end; }
  38. 1 point
    prontera,155,181,3 script Yumi Test 94,{ for([email protected]=0;[email protected]<getarraysize(.Require);[email protected]++) [email protected]$ += (countitem(.Require[[email protected]]) ? "- Exchange with "+getitemname(.Require[[email protected]])+":":":"); [email protected] = select([email protected]$)-1; npctalk "Exchange with "+getitemname(.Require[[email protected]]); OnInit: setarray .Require[0],501,502,503,504,505; end; }
  39. 1 point
    Spend time reading the rAthena-Master/doc/script_commands.txt to answer your question find this inside the file *stopnpctimer
  40. 1 point
    Converted item database to YAML (#4335) · rathena/[email protected] (github.com)
  41. 1 point
    ... same person ... ok I answer this one, my main forum is hercules so I wont be around forever the trick is ... add return; to all the functions containing title MAIL, this will effectively block all the codes of mail to run src/map/clif.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index da270e2ff..13658d283 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -15342,6 +15342,7 @@ void clif_parse_Check(int fd, struct map_session_data *sd) /// 1 = over weight /// 2 = fatal error void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount, uint8 flag ){ + return; int fd = sd->fd; #if PACKETVER < 20150513 @@ -15397,6 +15398,7 @@ void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount /// 09f2 <mail id>.Q <mail tab>.B <result>.B (ZC_ACK_ZENY_FROM_MAIL) /// 09f4 <mail id>.Q <mail tab>.B <result>.B (ZC_ACK_ITEM_FROM_MAIL) void clif_mail_getattachment(struct map_session_data* sd, struct mail_message *msg, uint8 result, enum mail_attachment_type type) { + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15433,6 +15435,7 @@ void clif_mail_getattachment(struct map_session_data* sd, struct mail_message *m /// 1 = recipinent does not exist /// 09ed <result>.B (ZC_ACK_WRITE_MAIL) void clif_Mail_send(struct map_session_data* sd, enum mail_send_result result){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15457,6 +15460,7 @@ void clif_Mail_send(struct map_session_data* sd, enum mail_send_result result){ /// 1 = failure // 09f6 <mail tab>.B <mail id>.Q (ZC_ACK_DELETE_MAIL) void clif_mail_delete( struct map_session_data* sd, struct mail_message *msg, bool success ){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15486,6 +15490,7 @@ void clif_mail_delete( struct map_session_data* sd, struct mail_message *msg, bo /// 1 = failure void clif_Mail_return(int fd, int mail_id, short fail) { + return; WFIFOHEAD(fd,packet_len(0x274)); WFIFOW(fd,0) = 0x274; WFIFOL(fd,2) = mail_id; @@ -15497,6 +15502,7 @@ void clif_Mail_return(int fd, int mail_id, short fail) /// 024a <mail id>.L <title>.40B <sender>.24B (ZC_MAIL_RECEIVE) /// 09e7 <result>.B (ZC_NOTIFY_UNREADMAIL) void clif_Mail_new(struct map_session_data* sd, int mail_id, const char *sender, const char *title){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15522,6 +15528,7 @@ void clif_Mail_new(struct map_session_data* sd, int mail_id, const char *sender, /// 1 = close void clif_Mail_window(int fd, int flag) { + return; WFIFOHEAD(fd,packet_len(0x260)); WFIFOW(fd,0) = 0x260; WFIFOL(fd,2) = flag; @@ -15540,6 +15547,7 @@ void clif_Mail_window(int fd, int flag) /// 0ac2 <packet len>.W <unknown>.B (ZC_ACK_MAIL_LIST3) /// { <type>.B <mail id>.Q <read>.B <type>.B <sender>.24B <expires>.L <title length>.W <title>.?B }* void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type type,int64 mailID){ + return; #if PACKETVER < 20150513 int fd = sd->fd; struct mail_data *md = &sd->mail.inbox; @@ -15733,6 +15741,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type typ /// 0ac0 <mail id>.Q <unknown>.16B (CZ_OPEN_MAILBOX2) /// 0ac1 <mail id>.Q <unknown>.16B (CZ_REQ_REFRESH_MAIL_LIST2) void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 struct mail_data* md = &sd->mail.inbox; @@ -15796,6 +15805,7 @@ void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){ /// { }*n // TODO: Packet description => for repeated block void clif_Mail_read( struct map_session_data *sd, int mail_id ){ + return; int i, fd = sd->fd; ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id); @@ -15911,6 +15921,7 @@ void clif_Mail_read( struct map_session_data *sd, int mail_id ){ /// 0241 <mail id>.L (CZ_MAIL_OPEN) /// 09ea <mail tab>.B <mail id>.Q (CZ_REQ_READ_MAIL) void clif_parse_Mail_read(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else @@ -15929,6 +15940,7 @@ void clif_parse_Mail_read(int fd, struct map_session_data *sd){ /// Allow a player to begin writing a mail /// 0a12 <receiver>.24B <success>.B (ZC_ACK_OPEN_WRITE_MAIL) void clif_send_Mail_beginwrite_ack( struct map_session_data *sd, char* name, bool success ){ + return; PACKET_ZC_ACK_OPEN_WRITE_MAIL p = { 0 }; p.PacketType = rodexopenwrite; @@ -15940,6 +15952,7 @@ void clif_send_Mail_beginwrite_ack( struct map_session_data *sd, char* name, boo /// Request to start writing a mail /// 0a08 <receiver>.24B (CZ_REQ_OPEN_WRITE_MAIL) void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){ + return; char name[NAME_LENGTH]; safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH); @@ -15958,6 +15971,7 @@ void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){ /// Notification that the client cancelled writing a mail /// 0a03 (CZ_REQ_CANCEL_WRITE_MAIL) void clif_parse_Mail_cancelwrite( int fd, struct map_session_data *sd ){ + return; sd->state.mail_writing = false; } @@ -15965,6 +15979,7 @@ void clif_parse_Mail_cancelwrite( int fd, struct map_session_data *sd ){ /// 0a14 <char id>.L <class>.W <base level>.W (ZC_CHECK_RECEIVE_CHARACTER_NAME) /// 0a51 <char id>.L <class>.W <base level>.W <name>.24B (ZC_CHECK_RECEIVE_CHARACTER_NAME2) void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short class_, uint32 level, const char* name ){ + return; PACKET_ZC_CHECKNAME p = { 0 }; p.PacketType = rodexcheckplayer; @@ -15980,6 +15995,7 @@ void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short /// Request information about the recipient /// 0a13 <name>.24B (CZ_CHECK_RECEIVE_CHARACTER_NAME) void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) { + return; static char name[NAME_LENGTH]; safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH); @@ -15992,6 +16008,7 @@ void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) { /// 09f1 <mail id>.Q <mail tab>.B (CZ_REQ_ZENY_FROM_MAIL) /// 09f3 <mail id>.Q <mail tab>.B (CZ_REQ_ITEM_FROM_MAIL) void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ + return; int i; struct mail_message* msg; #if PACKETVER < 20150513 @@ -16090,6 +16107,7 @@ void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ /// 0243 <mail id>.L (CZ_MAIL_DELETE) /// 09f5 <mail tab>.B <mail id>.Q (CZ_REQ_DELETE_MAIL) void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else @@ -16134,6 +16152,7 @@ void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ /// Request to return a mail (CZ_REQ_MAIL_RETURN). /// 0273 <mail id>.L <receive name>.24B void clif_parse_Mail_return(int fd, struct map_session_data *sd){ + return; int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); //char *rec_name = RFIFOP(fd,packet_db[RFIFOW(fd,0)].pos[1]); int i; @@ -16155,6 +16174,7 @@ void clif_parse_Mail_return(int fd, struct map_session_data *sd){ /// 0247 <index>.W <amount>.L (CZ_MAIL_ADD_ITEM) /// 0a04 <index>.W <amount>.W (CZ_REQ_ADD_ITEM_TO_MAIL) void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ + return; struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; uint16 idx = RFIFOW(fd,info->pos[0]); #if PACKETVER < 20150513 @@ -16184,6 +16204,7 @@ void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ /// Remove an item from a mail /// 0a07 <result>.B <index>.W <amount>.W <weight>.W void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, int amount ){ + return; PACKET_ZC_ACK_REMOVE_ITEM_MAIL p = { 0 }; p.PacketType = rodexremoveitem; @@ -16213,6 +16234,7 @@ void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, /// 0a06 <index>.W <amount>.W (CZ_REQ_REMOVE_ITEM_MAIL) void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) { + return; #if PACKETVER < 20150513 int type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); @@ -16233,6 +16255,7 @@ void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) /// 09ec <packet len>.W <recipient>.24B <sender>.24B <zeny>.Q <title length>.W <body length>.W <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL) /// 0a6e <packet len>.W <recipient>.24B <sender>.24B <zeny>.Q <title length>.W <body length>.W <char id>.L <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL2) void clif_parse_Mail_send(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
  42. 1 point
    View File Slot Machine - Items / Credits Songbird's Repo NPC, Scripts, Maps, Sprites, Mobs & More ========================================================================================================================================== Players love Slot Machines! Specially if it is easy to use with a pretty cutin-based interface! This is a configurable Slot Machine where you're able to change the Item ID allowing you to use a custom or existing item, like Apples or a Casino exclusive coin bought with Zeny, this NPC allows you to configure the Odds, Payoff, and Winnings so you will always win! It is user-friendly and has a realistic cutin-based animation (575 .bmp files where used to create this). WARNING: Bad use of this NPC can break your server's economy, if you don't know about Slot Machine formulas and odds, just configure the item ID ".CoinID" and "$SlotCoinPrice" variables. NPC INFORMATION: Slot Machine - This script is going to create 8 NPCs in the Comodo Casino, it is recommended to replace the cmd_in02 map with the provided one if you plan to use this location. This Slot Machine has 5 images, here is the order from best to worse: Chest Coin, Bell, Yggdrasil, and Apple. Configuration is script-based. Prize is X times the bet (Depending on the multiplier) if the GiveItems feature is disabled. Features for GMs: You can configure the Odds, Winnings, and Payoff (An excel document is provided to help you configure this). GM Menu where you can see/erase statistics (Password protected), batch play-test to calculate winning chance or play normally (this doesn't affect common player statistics). General Player statistics (Gives you information about how many games have been lost, how much Zeny has been spent and the quantity of items earned by the users. (You can set Credit - Zeny price relation to calculate this: Default = 0). 2 Prize options: Credit Mode: Give credits like normal Slot Machines, you get X times the bet for combinations. GiveItem Mode: Instead of earning credits, users will earn Items. This option disables the option to bet more than 1 coin per game. Play Test Mode: You can batch-play X number of games to see quick statistics. Features for Players: Clean interface and easy to use (cutin-based animation). Users can configure the spin speed so they can play faster. Users can bet X1, X2, or x3 times in a single play. If they play x3 the Jackpot (3 Chests) pays extra (This is configurable too). NPC Information (provided to the players) is updated automatically based in your configuration like winnings and prizes. Sound feedback and effects! WINNING COMBINATIONS (AND DEFAULT PRIZES): x125 x40 x15 x6 x3 A A x2 A B x1 Where A and B can be any object. WHAT CAN I DO WITH THIS NPC? You can use it in a lot of ways! Here are some examples: To get event coins/tickets to be exchanged for other prices. Zeny sink. Poring Coins. Cash Shop Pints (Custom item needed). Costume Hat Ticket exchange. Give coins so players can change them for items in this NPC, let luck decide. And more! FILE CONTENTS: (167 MB - 3 .rar files) 1 Excel document to help you decide your winnings and payoff. 1 Script 1 Map (Replace cmd_in02 with this one if you plan to use this NPC here) 6 .wav files (Sound effects) 576 .bmp files (Cutins) 1 sprite (A silver-colored version of the original Slot Machine NPC to match cutin) BUYING TERMS: You are not allowed to redistribute this script in any way, shape, or form. Chargeback scams are not tolerated and will get you punished on rAthena. I still retain all rights to this script. You can modify this script as you like, but to receive support you must tell me what you changed. No Renewal, free updates. Contact Me on Discord: Songbird#3918 Submitter Songbird Submitted 03/04/2020 Category Games, Events, Quests Video Content Author Songbird  
  43. 1 point

    Version 1.0


    Report all error/bugs in the forum post not in the PM for faster fix, Thanks! By downloading this file, you agree with my Terms of Service: You are not allowed remove my signature from any of the included files. You are not allowed claim my work as yours. If you like it, give me a


  44. 1 point
    Did you try to reloadbattleconf or restart your server? or made some modification in the source side that might be related to your issue?
  45. 1 point

    Version 1.0.1


    Freebies NPC with gepard function (UniqueID) In response to this post :


  46. 1 point

    Version 1.2.1


    Original Topic: http://herc.ws/board/topic/16037-campfire-to-regenerate-hpsp/ Herc Script Link : https://pastebin.com/fksPdpFQ The Idea: Camp Fire to restore / regenerate HP & SP. When you sit by the Camp fire, you start feeling the warmth and the comfort, so your HP & SP begin to regenerate. How to use : 1. add the source mode provided in the script. (or here) 2. make a usable item_db with these bonus script. callfunc("func_CreateCampFire", <range>, <duration>, <heal_rate>); // create campfire callfunc("func_UpdateCampFire", <range>, <duration>, <heal_rate>); // update the campfire duration/heal rate. Preview: Credits : @Dastgir & @Radian for the src mod and @Habilis for the idea


  47. 1 point
    https://github.com/rathena/rathena/blob/master/conf/battle/skill.conf Devotion part.
  48. 1 point
    Cash Shop Sale System As of Git Hash: aaa4ea9, rAthena supports the official Cash Shop Sale System! Features: Requires 2013-12-23 client or newer. Requires GM level 99; until permission settings are implemented (implemented in Git Hash: 9384bd0). Usage: Enter the item(s) you want to sell in your item_cash_db.txt using Type 8. Start the server or @reloaditemdb. The Special tab will be empty at this time, which is fine. Type /limitedsale and hit enter in the chat window in the client. Enter the item name into the Item DB Name field in the sale window. Fill in the data you want for the item: Number of Sale: Amount of this item that is sold to players. Sale Start Time: This is the Month / Day and then Hour : Minute of the start of the sale Time to sell: How many hours the sale will last. 24h is max tested so far. Click Add Limited Item and wait for the start time that was entered to pass. Thanks to @Lemongrass for implementing this! Don't forget to leave comments and testing results! Thanks! Don't forget to update your SQL tables with upgrade_20161224.sql!
  49. 1 point

    Version 2.2.6


    !! UPDATE !! If there is still interst in this project, and you really would like a update with better performance. Write me a private message. I would like to renew this, but i dont have any server to test it. Also if no one want a new version, i dont see any reason to rewrite it. -- -- -- -- -- -- -- -- This application is made for windows servers, since it doesn't make much sense to have something like this on a linux system. Login-, Char- and Map-Server gets started without a window. All Output is redirected to this application so you can see all 3 windows in 1 application. Version 2.2.6 is really old, but still have some "nice" features like coloring of [info], [status], etc. Also it counts different messages. (Error, Warning, ...) [How-To] 1. Download the newest Version. 2. Unrar it & Place it where you want. 3. Start the Application and go to "Options". 4. Configurate the Path to your executables. 5. Click on Start. Have fun. [source] I'm sorry. This project is by the time i changed this, about 4,2 years old. After cleaning my github i deleted it without thinking about it. The only thing i can say is.. it was a horrible source code... I'm sorry for all the developers who looked at it. ^^ >> Please, no mirrors without asking. <<


  50. 1 point
    I'd recommend displaying the item IDs as well as names in the window, and using 'input' instead of 'menu' since you'd likely get huge menus that are hard to find things in. xP mes "Your inventory:"; getinventorylist; for(set [email protected],0; [email protected]<@inventorylist_count; set [email protected],[email protected]+1) mes "[ "[email protected]_id[[email protected]]+" ] "+getitemname(@inventorylist_id[[email protected]])+" x"[email protected]_amount[[email protected]]; next; input [email protected]; if (getitemname([email protected]) != "null") { if (countitem([email protected])) { input [email protected]; if ([email protected] && countitem([email protected]) >= [email protected]) { delitem [email protected],[email protected]; mes getitemname([email protected])+" x"[email protected]+" deleted."; close; } else { mes "Invalid amount "[email protected]+"."; close; } } } mes "Invalid input "[email protected]+"."; close; Or better yet, invoke the atcommands @itemlist / @delitem if you want to save yourself work. (Not that it matters since I gave you the script, but in the future... XD)
  • Newsletter

    Sign Up
  • Create New...

Important Information

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