Jump to content

KirieZ

Core Developers
  • Content Count

    211
  • Joined

  • Last visited

  • Days Won

    17

Posts posted by KirieZ


  1. Well, the short answer is: It depends.

     

    But let's go for the long answer:

     

    RO is a game that uses client/server model, and the server (in our case, Hercules) is the one which holds most of the game logic.

     

    What this mean is, pretty much everything only happens in the game because the server tells the client to do so. To name a few examples:

    - When you click to walk, Hercules is the one saying the client it can walk, and Hercules is the one letting other knows the player is walking

    - A monster spawn only happens because Hercules is creating it and just letting the client knows the monster is there

    - An attack (and a skill) only happens because Hercules calculated it and told the client that it happened

    - A NPC is only shown in the screen because Hercules created it and told the client about its existence

    - A Quest is received by the player because, for example, a NPC in Hercules added a quest to the player, and thus Hercules told the client about that

     

    So, as you can see, pretty much everything requires something on Hercules side to work.

     

    The client also plays some part on this:

    - There are hardcoded limits of which IDs can be used

        - For example, an item which has an ID > 32k would only work on clients that supports IDs above 32k

        - Certain IDs for monsters/NPCs/etc won't be properly recognized in certain client versions

    - There are some hardcoded logic on how skills works or shows up

       - For example, the old, ground-based effect of bard/dancer performances doesn't show in 2019 clients and newer (unless you use a patch to restore the old code in client). The ground effect would still happen (Because Hercules is controlling it), but the player would see nothing in the ground.

    - UI elements are part of the client, so an older client may not have certain windows

       - But depending on the window, Hercules also needs to implement the network code to allow that window to work (e.g. Achievements, RoDEX, Equipment switch, etc)

     

    Going back to your example about 4th jobs. Having a 2022 client means:

    1. The visual effect for the 4th job skills are there

    2. If the server says your job is one of the 4th jobs, you will see the sprite and it will be treated as a player sprite

    3. You can see the new attributes window

    4. You can see the new AP bar

     

    But:

    1. You don't have job change quests (Hercules must have the NPCs, which we don't as of April/2024)

    2. You don't have a working skill tree and skills (Hercules must have the skill trees and skills coded, which we don't as of April/2024)

    3. You don't have the effect of the new attributes being applied to your damage (Hercules must have new formulas for it, which we don't as of April/2024)

     

    So:

    Base client: kRO 2023 08 04

    This means your resource files (sprites, luas, textures, maps, etc. the "visual" content and config files are from how kRO looked like in 2023-08-04).

     

    For example, if a new hat is released in 2023-05, you will have the .spr file in your data.grf (but you can't get it in game if Hercules doesn't have it)

     

    Client exe: 2022-04-06_Ragexe_1648707856

    This means that your client will process client sided things as kRO did in 2022-04-06, this means it will be affected by client limitations from this date, and it will only load files that were expected at that time.


    For example:

    - if a new UI was released in 2023, you won't see it in a 2022 client, because the code was not there yet. (even if you have the images for that UI in your data.grf, you don't have the code to actually use them)

    - if there is a new map format released in 2023 (map format meaning the structure of the files in the data.grf), this map file won't work here. On the other hand, if a map was released in 2023 using a structure that is compatible with a 2022 client, you can use it just fine.

     

    Generally, having too different dates between Client exe and Base client may give you issues, because:

    1. You have incompatible lua files (usually worked around by using translation projects)

    2. You have new resources that are not compatible with your client (usually worked around by replacing the files or avoiding certain things)

     

     

    Hercules: v2024.03

    This is Hercules release date. This just means this is the state of Hercules code as of March/2024.

     

    Hercules makes a new release every month, which may include bug fixes, new features, some custom code for something Hercules thinks is worth having, etc. You can see the changelog here: https://github.com/HerculesWS/Hercules/blob/stable/CHANGELOG.md

     

    This date has pretty much nothing to do with the other 2. The only thing that it may suggest is that a 2018 Hercules will probably not work with a 2020 client, because we couldn't even imagine what 2020 client would look like when developing code in 2018.

     

    But a 2024 Hercules doesn't mean it supports features from 2024 official servers, nor that a 2024 client would flawlessly work in Hercules. Currently, Hercules v2024.03 is a mix of content:

    1. NPC/quest/job/monsters wise, I think we are around kRO 2015

    2. Our client support is better, I think a 2022 client should work fine most of the time (some buttons won't work, though -- e.g. Equipment Switch is not there)

     

     

    Hope this clarifies a bit


  2. 11 hours ago, 4144 said:

    better not do direct overloading without reason. Because it may break other plugins if you not do correct overloading.

    better use hpm overload things

     

    by "hpm overload things" you mean hookPre/hookPost?

     

    As far as I remember, overloading, as in "I want to completely skip hercules original function" (maybe it should actually be called override?) were always made with a direct assignment to the interface (like in the original post here), while hookPre/hookPost would be used if you want to keep the original code running, but wants to do something else before/after it.

     

    Example: https://github.com/HerculesWS/Hercules/blob/stable/src/plugins/db2sql.c#L1180

     

    I am not aware of another method for overloading/overriding.

     

    I do agree that you should only do it if you have a reason to, but is there a better way to overload/override than a direct assignment?


  3. You are right, looks like "server_ready" is not part of the HPM events, so it is never called. I think the docs actually meant "server_online" (which means the server is ready / online).

     

    I generally prefer using plugin_init, as you said, since server_online runs after several processing already happened (e.g. config loading). So the tutorial should probably use "plugin_init" instead.

     

    Nice finding!

     

    Do you want to PR a fix to the docs? :) If not, I can edit it later


  4. Your script is most likely creating a new item (delitem + getitem) instead of identifying it, and it is likely doing a basic item ignoring all of its enchants. Thus, it is a complete new item and loses everything.

     

    To properly identify items via script you should use one of these commands:

    - identify -- https://github.com/HerculesWS/Hercules/blob/stable/doc/script_commands.txt#L3656

    - identifyidx -- https://github.com/HerculesWS/Hercules/blob/stable/doc/script_commands.txt#L3665

     

     


  5. 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.


  6. This is not Hercules, is it?

    "mob_db.yml" is not part of Hercules...

     

    I am not sure if I can really help, but you are trying to reduce the players Max Level? I don't think you need to change MAX_LEVEL constant in source for that. You only need to change it to go higher.

     

    To cap to lower levels, you can just change exp_group_db.conf. It will use a bit more memory than it really needed, but will be much easier, and you won't have issues like in your print, where the server MAX_LEVEL is lower than the monsters you are trying to load.

     

    See https://docs.herc.ws/customization/edit-max-level/#configuration-files for more info (I think this is still up to date)

     

    Although I don't think this is the cause for you to get inf% exp... unless you changed some source code that broke that.


  7. 9 hours ago, botka4aet said:

    Any idea why map-server restarts with generate-translations plugin?

    [Status]: Event 'OnInit' executed with '2405' NPCs. [Info]: Hercules, Copyright (C) 2012-2024, Hercules Dev Team and others. [Info]: Licensed under the GNU General Public License, version 3 or later. [Status]: Server is 'ready' and listening on port '5121'. [Status]: Terminating... [Status]: Cleaned up 1156 maps. [Status]: Close Map DB Connection.... [Status]: Close Log DB Connection.... [Status]: Finished. [Info]: Memory manager: No memory leaks found. Map-Server has shutdown successfully. Restarting in 15 seconds, press Ctrl+C to cancel.

    
    [Status]: Event 'OnInit' executed with '2405' NPCs.
    [Info]: Hercules, Copyright (C) 2012-2024, Hercules Dev Team and others.
    [Info]: Licensed under the GNU General Public License, version 3 or later.
    [Status]: Server is 'ready' and listening on port '5121'.
    
    [Status]: Terminating...
    [Status]: Cleaned up 1156 maps.
    [Status]: Close Map DB Connection....
    [Status]: Close Log DB Connection....
    [Status]: Finished.
    [Info]: Memory manager: No memory leaks found.
    
    Map-Server has shutdown successfully.
    Restarting in 15 seconds, press Ctrl+C to cancel.

     

    You are not supposed to keep the server online with generate-translations plugin. This plugin is only meant for you to use when generating the PO files. e.g.:

    ./map-server --load-plugin generate-translations --generate-translations

     

    After you run it, it will generate the translation files and shut down. After that you don't need the plugin anymore, unless you have new NPCs that you want to generate new translation files.


  8. I think you are missing a ; at the end of the alter table statement. not sure if this solves everything, but looking into a bit of SQL syntax should help understanding the other errors.


  9. Yes, SpriteId is the sprite you are copying from.

     

    SpriteName is the sprite/unique name for this monster you are creating now.

    ViewData / SpriteId is the sprite you are copying the image from.

     

    So if you want your mercenary to look like a Knight (Id = 7), SpriteId = 7 should work ( from https://github.com/HerculesWS/Hercules/blob/stable/db/constants.conf#L83 )

     

    It has been ages since I last used that... but I don't think you need to touch client


  10. If you are looking to make monsters look like players, but still be a monster (like mob_avail used to do), use "ViewData" field in mob_db.conf. This field was created to replace mob_avail.txt and is equivalent to it, but better for reading/setting up


  11. Hello and welcome :)

     

    1. I am not sure what you meant or what to answer... If you are asking whether there is an injector ready to use (I think 7 days to day uses BepInEx?) the answer is not really. You can use NEMO to inject windows DLLs, but this is just basic DLL injection. Anything you want to do you are on your own. Talking about RO this is very low level stuff that only a few people know and maybe it is not what you are looking for...

     

    2. Most of this stuff is server sided (a.k.a. in Hercules folders). The GRF will only keep resource files and some lua files will batch some info like map path and descriptions. But exp tables and etc are server sided. For your plans, I think most of the things will be done in Hercules and client lua files, I am not a pro in custom skills though.

     

    3. Player data is saved in you SQL database. Should be possible to play in LAN with some configuration in your clientinfo and hercules files (conf folder)


  12. You didn't say what you are stuck at, so I will assume you are just new to hercules and don't know where to look for docs.

     

    For bonuses conceded by equipment, item bonus docs is the place to go. You can use general script commands, but for character bonuses, item bonus docs is where you will find the commands specific for items.

     

    You can check it here: https://github.com/HerculesWS/Hercules/blob/stable/doc/item_bonus.md (it is also in your hercules copy, at doc/item_bonus.md)


  13. This indeed looks like a mapcache issue.

     

    'Map Cache' is what we call the copy of the maps that Hercules keeps on the server side. While the client has the gat/rsw/gnd files to define what the map looks like and how each cell behaves, the server also needs its own data, specially for the cell part, and this comes into the Map Cache file.

     

    The Map Cache files are meant for things like determining water in the map (for skills that needs that) and to tell which cells are walkable/not walkable/shootable/etc. Without it, a modded client could walk through walls and etc.

     

    When your client has map files that doesn't match the server ones, you get things like you see a path but clicking it doesn't let you walk through. Because the server sees the map as a completely different thing than what you are seeing in-game. From your description, this seems exactly the case.

     

    To fix that, you should regenerate the map cache file for this map using the map cache plugin. I think this guide may help you, it is in the repository docs folder: https://github.com/HerculesWS/Hercules/blob/stable/doc/map_cache.md

     

    you should pick the files from your GRF and follow the steps to recreate the map cache of the map you are having issues with.

     

    and yes, izlude and the academy map changed a few times along the years.


  14. If I understood right, you want to put the emperium in the middle of the area and spawn barricade monsters in the black line. And while the barricade is still up, no one can go through the cell?

     

    I think you can follow how official servers does it (more or less), spawn barricade mosnters + set the cells to not walkable, when the barricade monster is killed, you trigger an event and change the cell to walkable.

     

    check out setcell script command


  15. Hello,

    This is Hercules emulator forum, not rAthena emulator, I think you will have better answers asking in the right place ( https://rathena.org/board/ ). Although versions this old did share some similarities with Hercules, Hercules is quite a different project from rA nowadays. Asking in the rAthena website will allow your question to be seen by rAthena users, and you will get answers from people who actually use rAthena.

     

    If it helps, I think you may able to find some info by looking into the vcproj files in your emulator folder, but if I remember correctly, Hercules and rAthena did not name them the same, and I don't know how rAthena did it.  Perhaps someone in rAthena forums knows how they were organized back then.

     

    CentOS 6 is still downloadable. It is no longer supported, but it still available for download at their own site (just google "centos 6" and look at CentOS website). https://www.centos.org/download/#older-versions


  16. Oh, sorry, I misread that part.

     

    Hmm, it does look correct to me.  I tried copying to my own server and it works. Which client version are you using?

     

    One thing I think it is worth trying is to use an ItemId < 32k. Although it shouldn't be an issue, but just to rule out the client doing something weird. Older clients used to support only up to 32k item ids and I think there was a period of time where ETC items could have IDs > 32k but equipments could not (I may be wrong). so I would test a smaller id just to rule this out.

     


  17. 16 hours ago, arminarlett said:

    i manage to figure out questinfo_f.lub is inherited from loaded grf's so i needed to add it to other grfs to make it function, i just wanted to understand how the cooldown tab is rendered cause in a lot of servers its just a dead tab and cooltimequests are displayed in the main active tab. Im assuming its an emulator fix that was made for it to function properly.

    I am making a hard guess here since I never used it. But did you try setting "CoolTimeQuest = 1" in OngoingQuestInfoList_True ? The quest from your screenshot has this property set.


  18. Since there is a lot of info going on here, I will try to break into a few questions and possibilities for you to investigate.

     

    First, are you using Hercules? Because job_exp.conf doesn't exists in Hercules. We have exp_group_db.conf. I will assume it was just a typo and that you meant exp_group_db.conf for the rest of this answer.

     

    1. you mention HP and SP going to 1 when you change job exp and level. Does this happen while you are below level 99 or because after doing that you are able to go over it and then the issue shows up?

    Usually, new levels will have issues because the HP and SP tables are not ready for them. To fix this, you have to expand the HP and SP tables in job_db.conf

     

    2. From your print, you mean that you simply doesn't see the EXP bars, right?

    if I recall correctly, the EXP bars get hidden on clients due to a lua config in the client side. I don't know which config though

×
×
  • Create New...

Important Information

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