-
Posts
700 -
Joined
-
Last visited
-
Days Won
108
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by Tokei
-
-
Well,
JT_MD_Airboat_Poring
JT_MD_AIRBOAT_PORING
are not the same. If anything, you can also just set it directly:[jobtbl.JT_MD_AIRBOAT_PORING] = 1.2, or [20887] = 1.2,
-
Heya,
Don't use SDE to connect to your server via SFTP. I'll be removing the feature as it's bad practice to do that in the first place. Use a git service like github or gitlab and then use SDE locally if you want.
-
On 4/5/2022 at 11:13 AM, DR4LUC0N said:
When using the patch maker, is there a way to add the password to each grf or the key file so we can make a patch from encrypted grf and make the patch also encrypted using a password/key?
Also is there a way to make a setting to allow "patch maker" put the new grf into a specific folder?
No on all questions. Full disclosure, I forgot this feature even existed and I'm really tempted to simply nuke it. I'd say it's not a good practice to generate patches using this tool.
-
Heya,
If you are following the recommended setup, then the only required files are main.sql and logs.sql.
The item_cash SQL file is the alternative to db/(pre-)re/item_cash_db.txt. Seeing are you're using the text/yaml version of the databases, you don't need it.
As for roulette_default_data.sql, that's optional. If you plan on setting your own values in it, then you don't need the default values from the file. If you want pre-made values for it, then yes, use the file. The roulette system has not been converted to a text/yaml version for some reason. That seems like a forgotten feature.
The other SQL files are not meant for performance. You will most likely be using them for your website though, since it will want to know your item/mob data from somewhere.
-
1
-
-
Heya,
That's intended, surprisingly. When you are editing the hat sprite, you are viewing the world from the perspective of the hat. So if you set all the XY offsets the same, from... the perspective of the hat, nothing seems to be moving. That makes sense. But that doesn't work in-game because the body sprite has anchors points, which decides where the hat will be drawn. This position moves depending of the body's orientation. To "recreate" this, you'd have to use Anchors > Use body as base (this essentially attaches the current sprite to the body instead). In other words, this will set the perspective from the body.
Though, in the end, that's not really that helpful to you because you'd have to set the offsets one by one. Plus, that's not possible to fully match those offsets, it will never work. Instead, do the following:
- Align all the hat's anchors points with the base body.
- Set all the offsets to a fixed value.
This is not really possible by hand, so the following should do the trick (it uses the default body as reference, but it should be good enough):
// Change to ref_body_f.act for the female anchor points var body = new Act(ApplicationManager.GetResource("ref_body_m.act")); for (int aid = 0; aid < act.Actions.Count; aid++) { var action = act[aid]; for (int fid = 0; fid < action.Frames.Count; fid++) { var frame = action[fid]; var frameReference = body.TryGetFrame(aid, fid); if (frameReference != null) { frame.Anchors[0].OffsetX = frameReference.Anchors[0].OffsetX; frame.Anchors[0].OffsetY = frameReference.Anchors[0].OffsetY; } } } // Uncomment below if you want to set the same offsets for all your layers //foreach(var action in act.Actions) { // foreach(var frame in action.Frames) { // foreach(var layer in frame.Layers) { // layer.OffsetY = -38; // layer.OffsetX = 0; // } // } //}
This will achieve what you're looking for. And yes, anchors points are quite confusing.
Without using a script, this could also be done via Anchors > Set anchors > Set from file... > Select a base body sprite for reference.
-
7 hours ago, mizuki04 said:
Hi rA, just needing help understanding how it works.. I wanted to fix some mini boss to not spawn slaves with exp bonus and drops from second summon forward like MvPs
e.g
1310,Majoruros@NPC_SUMMONSLAVE,idle,196,2,10000,2000,60000,no,self,slavele,0,1149,,,,,, 1310,Majoruros@NPC_SUMMONSLAVE,idle,196,2,10000,2000,60000,no,self,slavele,0,1461,,,,,,
what i did is i replaced the second one from mob ID 1149 to it's counterpart 1461 with no exp and drops but it didn't work. Any help would be suggested. Thank you!
Heya,
The last line is correct and should work as you want. Did you perhaps keep both lines? If so, when the mob goes through its skills it will execute them in order and since the first line has a 100% chance, it will always spawn the 1149 mobs. You have to comment it out or remove it. Otherwise, it could be a matter of not having reloaded your mob skills properly via @reloadmobdb (or a server restart I guess). Besides that, I do not see what could be the problem.
-
Alright, there's been some updates...!
-
Texture names will be displayed over the keyframes.
- Re-organized the UI to clear up the right-sided panel.
- The Play button has been moved on the menu bar itself, with the Space shortcut.
- Adding a Snap option which is set to 1 pixel by default.
- Added an experiemental feature to retrieve the bias values from str files (does not recognize bezier nor uvbias).
- Can load and save with some EZV files (currently only tested with version 0.94 and 0.95). I haven't seen newer versions (not in RO anyway). It currently saves as version 0.94.
- Added background selection via Edit > Select background.
- (There are some unused buttons added, will clean up later.)
- I do plan on supporting bezier curves, but there aren't for now.
-
3
-
2
-
Texture names will be displayed over the keyframes.
-
7 hours ago, ez2ac said:
If you increase and decrease the zoom with the mouse wheel, the image position will be out of place.
It zooms at your cursor position, that is intended.
-
Heya,
I missed quite a few posts there, sorry. I didn't know this format was used on other platforms. The Ez2Visual tool was quite interesting actually, it almost feels like it could be the original tool for this file format. There are however issues with the conversion between STR and EZV. As @intron pointed out, there is an easing method used on some RO animations and that information is lost in the STR files. It's possible to retrieve it, to a degree, with some magic and guessing.
The layer 0 now makes more sense. RO never uses it, so I simply skipped its visual in my tool instead. Though... what are you supposed to be able to do with the layer 0 exactly? Does it have restrictions? Is it simply another layer? I'm not sure about what its properties are meant to be.
The UV parameters can be shown via File > Settings > Show texture coordinates fields. Though it only shows the first set of UV coordinates. The "uv2=0.0000,0.0000" and "uvs2=1.0000,1.0000" do not appear to be used in RO and I do not know what their purpose is. So I've hidden those fields entirely. The UVs in RO are pretty much always static and never used, so this option is hidden by default.
It appears that the easing method used is r = time ^ (1 + bias / 5).
I do see a field for "bezier=0.0000,0.0000 0.0000,0.0000", but I have not... found where this is used Ez2Visual. Where is this setting at? What does it actually do?
STR files also lose the scale value in the process. I haven't played enough to see what can be done about this one, but that might be possible to retrieve.
The ez2on link was not working for me, so I... have no idea what this tool is.
So all in all, it would be possible to convert STR to EZV and vice versa. I'll have a bit more time to continue this tool in the following days.
-
A few things were updated:
-
Zoom in and zoom out for the timeline preview panel.
- When playing back the animations, the speed will now actually match the FPS.
- Fixed a bug where frames would not show if they didn't explicitly have the interpolated markers.
-
3
-
Zoom in and zoom out for the timeline preview panel.
-
- Popular Post
- Popular Post
Heya,
I've been working on a tool for a few weeks now and I believe it is in a ready enough state to be shown. This software is meant to edit str files, which are mostly used to display skill animations in-game. There may still be bugs left in the tool; reporting them here would be appreciated. You can download the software here:
Generic
- Ctrl-Z/Ctrl-Y to undo and redo an action.
- You can edit most shortcuts via File > Settings > Shortcuts.
Transformations for the preview panel (same shortcuts as Act Editor)
- Translate: Left Mouse Button on the selected frame.
- Rotate: Shift-Left Mouse Button on the selected frame.
- Preview panel move: Right Mouse Button.
- Horizontal/vertical scaling: Ctrl-Shift-Left Mouse Button.
- Uniform scaling: Ctrl-Alt-Left Mouse Button.
- Unbound scaling: Ctrl-Left Mouse Button.
Transformations for the edition panel
- Each layer can have multiple textures. To add a new one, click the texture combo box and select "Add new...". It will bring you to where the file is currently loaded from. While you can browse elsewhere, the textures must be in the same folder as your str file will be in.
- You can edit textures more rapidly with the gear button next to it.
-
You can edit some fields by clicking the text before them. If you hold down the Left Mouse Button on this field (P1XY), you will be able to move it freely without moving the entire texture. This is especially handy when dealing with angles as those can give you unwanted results if you are editing them via the preview panel.
- The FPS property can be changed and saved. However, the client appears to completely ignore it and runs your animations at 60 FPS regardless.
- Editing an interpolated key frame will automatically create a new key frame on the timeline.
Timeline panel
-
A dot represents an existing key frame. An arrow represents an interpolated animation from the left key frame to the right key frame.
-
You can right-click a key frame to bring up options:
- You can also copy the frame and move it elsewhere. The texture indexes are not re-adjusted. It copies the key frame as is.
-
You can select multiple key frames by holding down the Left Shift key and holding down the Left Mouse Button.
-
The traditional windows shortcuts can also be used for selection. These include:
- Arrow Key: move to the desired next frame.
- Ctrl-Arrow Key: move to the next key frame block in the wanted direction.
- Shift-Arrow Key: move to the next key frame for selection.
- Ctrl-Shift-Arrow Key: move to the next frame block while selecting what's inbetween.
- Double-Left Mouse Button: selects an entire frame and its interpolated section.
- Ctrl-A: selects the entire layer.
-
You can move a key frame by selecting the key frame, clicking on the dot and then moving the key frame to the desired location.
- The operation above can also be done by selecting multiple rows at the same time.
-
You can do a quick preview of the animation by moving the timeline selector.
-
You can move a layer up and down by holding down the Left Mouse Button and moving it where you want it to.
-
Right-clicking a layer also brings up more options.
And I believe that's it! The next "feature" I wanted to implement was editing multiple frames at the same time, but unfortunately this project needs a small break from my end...! Hopefully some of you may have an use for it.
Edit: I am most certainly not an animator and I do not know the real needs of those who will actually use the software. That is why it's being posted as a work in progress rather than a finished tool. If you have requests, feel free to post them below and I'll add as much as I can.
-
5
-
15
-
5
-
On 1/23/2022 at 3:15 PM, healthydude said:
Apologies for bumping the thread,
First of all, thank you for taking the time to read my message.
I also have similar issue.
May I ask what I should do to fix this?
Here are the things I did:
1. Download GRF Editor via rAthena
2. Install the latest GRF Editor (newest as of this date)3. No other DLLs in the GRF Editor folder
4. Currently have .NET framework 4 (higher version, because when I tried downloading this, it told me that the .NET version is higher already)
5. Run GRF Editor
Note: I have used this software successfully before around 2020 but when I tried again today, on the same laptop, it starts not working anymore and showing up this error.
Exact error that shows up for me:Hmmm, not entirely sure about the issue. This part though:
Quote1. Download GRF Editor via rAthena
2. Install the latest GRF Editor (newest as of this date)is confusing to me. The version on rAthena is not updated; the latest version available is "GRF Editor v1.8.4.1" and can be found on the mediafire link given on the download page ( https://www.mediafire.com/file/aflylbhblrzpz0h ). But it seems you have mismatching DLL files...? You could try moving the executable (GRF Editor.exe) to its own empty folder. The error itself is quite vague though. GRF Editor is compiled with .NET 3.5 (Client Profile), so you could try installing 3.5 alongside as well. 4.0 should work, but it's hard to tell with Windows's shenanigans sometimes. Can't really help you more though, it seems to be working fine for most people as far as I know, so the issue seems very specific to your Windows configuration.
-
1
-
-
There are many ways to achieve that:
foreach (var action in act) { action.Frames = action.Frames.Take(1).ToList(); }
If you need more... "control" with indexes and which animations to remove exactly, you can do it this way too:
for (int aid = 0; aid < act.Actions.Count; aid++) { for (int fid = act.Actions[aid].Frames.Count - 1; fid >= 1; fid--) { act[aid].Frames.RemoveAt(fid); } }
If you want to apply this to a batch of files, you can do it this way too:
var path = @"C:\Sprites\"; foreach (var file in Directory.GetFiles(path, "*.act")) { var actFile = new Act(file); actFile.Actions.ForEach(p => p.Frames = p.Frames.Take(1).ToList()); actFile.Save(file); }
-
On 1/20/2022 at 9:23 PM, skyeang3l said:
Hello. I'm new to this. Thanks for your work.
I am trying to add some custom sprites to my .grf but everytime I save I am getting the error "There is not enough space on the disk".
You need more space on your Windows partition drive (normally C) as it writes temporary files in "%appdata%/GRF Editor".
It can require to write the entire file to the temporary folder (and then move it to your actual desired location) if GRF Editor "defragments" your GRF while saving.
-
On 1/8/2022 at 9:34 AM, oil753951 said:
hello when I save data.grf file even without edit anything data.grf file size is change and when open RO it closed immediately and when I validate content it got error
when install grf editor what is other program needed to support grf editor?
Your error is too vague, it's impossible to know the issue from it. As for the size, it changes because it removes unused space from the file.
-
Heya,
Well, as the error says, your table index is nil, meaning either EFST_PAD_READER_KNIGHT or EFST_PAD_READER_CRUSADER is not defined (probably both and more below too). It's an issue with your lub, make sure your effectid.lub matches properly. This has nothing to do with NEMO.
-
9 hours ago, ocarinas said:
Hello, in Flatmap maker, is it possible to let walkable tiles on objects stay at its original height levels?
In the first pic belows you can see that the walkable tiles for the boat drop to the bottom of the map when made into a flatmap.
This might be a weird question but I really need a way to achieve this for my own project.
Hmm, you could just replace the gat files with the original ones. That should achieve the results you're looking for.
-
Heya,
Make sure you have the increase guild tax limit patch when you made your client. The restriction is client-sided, not server-sided.
-
Heya,
The error message tells you the error:
if (.msg_die) message .@victimaid, "You have been killed by "+ .@killername$; if (.msg_kill) message .@killeraid, "You just killed "+ .@victimname$;
The "message" script command on rAthena requires two strings as parameters. First parameter is the player name (which is pretty weird, not gonna lie), so you should change those to:
if (.msg_die) message .@victimname$, "You have been killed by "+ .@killername$; if (.msg_kill) message .@killername$, "You just killed "+ .@victimname$;
Though clearly this script wasn't meant for rAthena.
-
Heya,
Well there's a big amount of information missing here, but if it's activating stone curse, it's usually because the status given to sc_start is 0. This happens because your new status is not defined as a constant that can be used in your scripts. So go in map/script_constants.hpp, and make sure that your variable is listed, for example:
export_constant(SC_CUSTOMSTATUS);
Also make sure that the status used in your item script matches the name of the status correctly.
-
if (rand(1,100) < 1){
^ is an impossible condition. Use
if (rand(100) < 1) {
instead.
-
1
-
-
It's a client issue. Change the clif_add_random_options function to skip empty entries. Something like...
/// Fills in part of the item buffers that calls for variable bonuses data. [Napster] /// A maximum of 5 random options can be supported. static uint8 clif_add_random_options( struct ItemOptions buf[MAX_ITEM_RDM_OPT], struct item* it ){ nullpo_retr( 0, it ); uint8 count = 0; memset(buf, 0, sizeof(struct ItemOptions) * MAX_ITEM_RDM_OPT); for( int i = 0; i < MAX_ITEM_RDM_OPT; i++ ){ if( it->option[i].id ){ buf[count].index = it->option[i].id; // OptIndex buf[count].value = it->option[i].value; // Value buf[count].param = it->option[i].param; // Param1 count++; } } #if MAX_ITEM_RDM_OPT < 5 for( ; i < 5; i++ ){ buf[i].index = 0; // OptIndex buf[i].value = 0; // Value buf[i].param = 0; // Param1 } #endif return count; }
-
1
-
-
1 hour ago, Almond Snicker said:
that would be correct. yaml is just new to me still so I think I'll stick with the script.
However, question.. as long as other monsters are not included on the "case", they won't be triggered right? what I mean is that it won't affect the server load if you attack other monsters?
Thank you so much for the clarification and the assistance.It will affect your server load, yes. You would need to add a restriction in the source such as:
if (src && src->type == BL_PC && bl->type == BL_MOB && damage > 0) { struct mob_data *md = (struct mob_data *)bl; if (md->id == 1002) { mapreg_setreg(reference_uid(add_str("$@attacked_mid"), 0), md->id); mapreg_setreg(reference_uid(add_str("$@attacked_gid"), 0), md->bl.id); npc_event_do_id("MyNPC::OnEvent", src->id); } }
That on its own would be more reasonable, but if you have... I don't know, 10 people attacking the mob with 193 aspd, I'd be concerned. You'd probably want to do it all in the source instead, or at the very least put the chance of drop in the source. Something like...
if (src && src->type == BL_PC && bl->type == BL_MOB && damage > 0) { struct mob_data *md = (struct mob_data *)bl; struct map_session_data *sd = (struct map_session_data *)src; if (md->id == 1002 && (rnd() % 100) < 5) { // 5% chance struct item it; t_itemid nameid = 501; int flag; memset(&it,0,sizeof(it)); it.nameid = nameid; it.identify = 1; it.bound = BOUND_NONE; // Assuming it is not a pet egg, you can skip some checks. Up to you at this point. if ((flag = pc_additem(sd, &it, 1, LOG_TYPE_SCRIPT))) { clif_additem(sd, 0, 0, flag); } } }
-
Personally though, I'd say you should make a yaml conf file where you define drop groups with a chance, then assign a mob to a drop group in your mob_db.yml file instead. It's more work, but it's also much more effecient than running a script. Then again, that requires more source knowledge I suppose.
[Error]: Server received crash signal! Attempting to save all online characters! Segmentation fault
in General Support
Posted
The error you received, "Server received crash signal! Attempting to save all online characters!", is a generic error that means absolutely nothing besides "your server crashed". You will always get this same error. You most likely have two unrelated crashes there.
As cook1e said above, you want to run your server with gdb (there is a link provided in his post that explains how to use it). Gdb is a debugging tool that will give you a stack trace. You will get the crash reason, followed by the line in your source code that crashed the server, followed by the functions that called your code step by step. To print the stack trace, you will want to use "bt full" after the crash.
You should also always run your server with gdb as you can't predict when a crash will happen.
Once you have the stack trace, you can share it here and people can tell you how to fix your code. Or they'll ask you to provide the code surrouding the crash. Or, if the error is obvious, you might be able to fix it yourself. But either way, we can't help you without a gdb stack trace. Goodluck!