Jump to content

KirieZ

Core Developers
  • Content Count

    231
  • Joined

  • Last visited

  • Days Won

    22

KirieZ last won the day on August 31

KirieZ had the most liked content!

4 Followers

About KirieZ

  • Rank
    Advanced Member

Profile Information

  • Gender
    Male
  • Location:
    Brazil
  • Github
    guilherme-gm
  • Emulator
    Hercules

Recent Profile Visitors

6039 profile views
  1. Hello and welcome to Hercules I can't answer all of those topics, and I think some of them would be really dependent on your project/team (like how to prioritize -- you can use general software development techniques, I guess, but it really depends on your team). But, let me try to give some tips: 1. I am not sure what you mean by "improve NPC interactions", but everything boils down to coding your changes. I think the best place to go for is to read scripts and check the commands at https://github.com/HerculesWS/Hercules/blob/stable/doc/script_commands.txt This will tell what you can do with the script engine, and if it is not there, you can go to source next to implement what you need. 2. For seasonal events, you can either use time commands to enable/disable stuff, or simply enable/disable stuff during server maintenance. Depends on what you are trying to accomplish, but Hercules has events for dates. 3. For performance, I usually start thinking about how much load my changes would cause based on what they are. But I think you can use any performance tooling that works for C... I haven't tried those though, so I can't give a suggestion there. But for example, avoiding your npcs/map-server running lots of SQL queries -- which would block the process -- is one kind of thing that is easy to note that would be bad and should be avoided
  2. For the map, you are correct, you need the old map files since RO changed the academy several times. I have uploaded the files here: For a clean hercules, you should use Academy 2012 and start 2015 (2018 also works ok). I noticed that RE map cache is wrong for iz_ac02, so until this gets merged: https://github.com/HerculesWS/Hercules/pull/3316 you have to update your map cache for iz_ac02 for it to work properly. About the combination kit, I think it is not implemented yet.
  3. Version 1.0.0

    4 downloads

    Since RO starting point in renewal changed several times, and finding those files are getting increasingly hard, I decided to group them all and release here. This only includes the original map files, no changes, no NPCs adjustments. When downloading, you will find 6 options, pick the ones that you need. Hercules is currently (as of v2024.08) using 2012 Academy and 2015 Start Point (or 2018 with wrong map cache?). Files: - academy_2012 -- Criatura Academy 2012 version. Corridors in both floors, everything linked together - academy_2015 -- Criatura Academy 2015 version. 2nd floor changed to have rooms separate from the corridor ("making it smaller") - academy_2017 -- Criatura Academy 2017 version. 1st floor changed to a big open area - start_2012 -- iz_int is a boat for players to leave to izlude (NPCs not included) - start_2015 -- iz_int is a sunken ship; int_land is a island linking the sunken ship to the new one. Players can walk over the ship. - start_2018 -- the ship at int_land is no longer walkable Usage: - Download the ones that you need, - extract it somewhere - copy the content of the data folder to your data folder or GRF - you may need to regenerate your map cache and adjust the NPCs if the map is not the one for your Hercules version
  4. View File All versions of Start Island and Criatura Academy (iz_ac01, int_land, iz_int) Since RO starting point in renewal changed several times, and finding those files are getting increasingly hard, I decided to group them all and release here. This only includes the original map files, no changes, no NPCs adjustments. When downloading, you will find 6 options, pick the ones that you need. Hercules is currently (as of v2024.08) using 2012 Academy and 2015 Start Point (or 2018 with wrong map cache?). Files: - academy_2012 -- Criatura Academy 2012 version. Corridors in both floors, everything linked together - academy_2015 -- Criatura Academy 2015 version. 2nd floor changed to have rooms separate from the corridor ("making it smaller") - academy_2017 -- Criatura Academy 2017 version. 1st floor changed to a big open area - start_2012 -- iz_int is a boat for players to leave to izlude (NPCs not included) - start_2015 -- iz_int is a sunken ship; int_land is a island linking the sunken ship to the new one. Players can walk over the ship. - start_2018 -- the ship at int_land is no longer walkable Usage: - Download the ones that you need, - extract it somewhere - copy the content of the data folder to your data folder or GRF - you may need to regenerate your map cache and adjust the NPCs if the map is not the one for your Hercules version Submitter KirieZ Submitted 08/31/24 Category Maps & Textures  
  5. Hello, I think you have uploaded the wrong file here it is a card collector.txt, not endless tower. On a side note, doing this change in setunitdata: case UDT_DMOTION: //setunitdata_check_bounds(4, 0, USHRT_MAX); <---comment out then add setunitdata_check_min(4, 0); break; is not increasing the limit. You just disabled the safety check and is letting the compiler set whatever value it wants (there is a logic to what is setting but this is a bit level and I don't know 100% how to expain/whether it is consistent on all compilers). These variables are not big enough to support values higher than ~65000 (USHRT_MAX). It doesn't error out because the code is doing a cast, and it will simply ignore part of the value and go ahead with whatever the casting resolves to. (Which will be between 0 and ~65000). From an online compiler, 96,000 will actually become 30,464 and 120,000 will actually be 54,464. Try doing a getunitdata after you set it and you will see the real value. To go over 65k at least the variables needs to be changed from short to int, I am not sure if this would be enough or this would cause issues in other parts, but unless this is done, you can't set a value higher than 65k (and that's why you see this error in vanilla herc)
  6. I've never done it and this answer may not be totally accurate... But I think the following is what you need to keep in mind: 1. NEMO probably won't be able to patch it, you will have to do by hand 2. The hardest part is not using the client, but usually each official server uses a different combination of packets. For example, if packet A was added in kRO in 2015, and packet B in 2016. For another server it may be the case that packet B was added in 2020 and packet A never came. Thus, relying in PACKETVER config will most of the time not work. So you will certainly need knowledge on how to customize packets read/sent by herc -- specailly clif.c and related packet structures (and their counterparts in char/login server) PEEK or BPE (Links to their topics below) may help you find the list of packets currently defined for the client. I did not test BPE for that, but I do remember PEEK being able to extract packet length table -- which would include the packet ID too. For packet structures (if any of them changed for any reason -- should not be the case, usually only versions change) that will be harder. If you need a different structure, I think you have 2 options: 1. Reverse engineer the client and find where it sends the packet you need with some reverse engineering tool (IDA, Ghidra, etc) 2. Capture the packet and find the data by trial and error and guessing -- A good amount of guessing is needed here, and you may get some thing wrong I am not sure if I can give much more info than that. But I guess it is better than nothing If you are really going this route, do know that it is some quite advanced stuff with barely any public info
  7. Yes, you are right about the cause. Your case seems to be causing a similar effect of a server crash, when it gets terminated in an abnormal situation. I am not sure if there is really something that can be done in this case... while you could create a script command to force saving the character data for this case, you would still have it open for others. I think the best option would be to: 1. When doing a production server normal shutdown, always do it properly. Kick all players (even better: do something to prevent them from logging back in) and wait some time (I think ~5 minutes would be more than enough). I think if map server is shut down separately first, it will send all data to char, but this is something that would need to be done manually 2. If there was a server crash, which could cause those dupes, you probably need to either review your logs of the last few minutes and check if actions are needed, or rollback to a recent backup if you think it would be safer
  8. Most likely your db is too new for your code. Try copying this commit: https://github.com/HerculesWS/Hercules/commit/bb5064f4f8e63364ddc8cb7523ebc3a7def905ed
  9. The error is due to the main NPC not being in a map. As it is not in a map, Herc most likely didn't initialize unit data for it (since it would be useless). Either put it in a map or add a check to not apply unitdata for it. Here is how to do the 2nd option: OnInit: if (strnpcinfo(NPC_MAP) == "") // Not in a map, can't set view data end; setunitdata(getnpcid(), UDT_GROUP, 1); setunittitle(getnpcid(), "Goddess Statue"); end;
  10. That's weird... cvc was implemented together with the clan system, not having cvc would mean you don't have the clan system too. I do recommend updating though, since it is there since 2017. But here is the PR that introduced it: https://github.com/HerculesWS/Hercules/pull/1718
  11. This seems somewhat undocumented, but there is a "cvc" mapflag that should make a clan vs clan. https://github.com/HerculesWS/Hercules/blob/stable/src/map/map.c#L5428 does that work for you? or there is a specific reason why you need to use gvg?
  12. what if you simply use "getnpcid()" without the NPC name? or use the full name. I am assuming your duplicates have a hidden or unique name added to them, so this getnpcid is not picking it and all of them are targeting the main one. Try to either use just "getnpcid()" (which should target the current NPC), or if this doesn't work, use strnpcinfo to get the full name instead of the display name
  13. How are you setting the title/group for the first one? OnInit should be called in every duplicate, so you could just use it to set the title/group
  14. Is that from rA? does areamonster there sets this variable? this does not happen in herc: https://github.com/HerculesWS/Hercules/blob/stable/doc/script_commands.txt#L695 Ah, the answer went up and I didn't saw it 😅 Glad you got it working
  15. I am not sure what exactly is wrong, but as far as I can tell, this code doesn't make much sense... I have only skimmed through the initial part, but: $@mobid is an empty array, and is being copied into .@GID (Thus, .@GID would be an array too?), but then .@GID is passed to getunitdata, which doesn't expect an array... and getunitdata result is not used at all.. So I am really not sure what it is trying to do
×
×
  • Create New...

Important Information

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