Tokeiburu
-
Content Count
202 -
Joined
-
Last visited
-
Days Won
37
Posts posted by Tokeiburu
-
-
It's... nothing really; It's just an Inno Setup script to create client installers. I've been using it for a while but I wasn't sure if it was worth uploading or not. It's mostly for people who have no idea how to make installers or end up using weird tools like Winrar's SFX tool...!
-
Everything's now working fine, thank you ;]!
-
It's 4.5MB, pretty far away from the limit xD. Some quick tests show a limit of 2MB, which is the same as the limit on regular posts for attached files. Perhaps that could be related?
-
-
Mysterious is correct. If it were just me, it would probably be released freely, but it's a team project, so I can't ;P.
-
Well, I guess I could give a few updates...!
There's been a couple of bug fixes and some compatibility issues have been resolved with Windows XP. The CPU usage has been drastically lowered (down to almost nothing). We are currently working on making RagnaShield more flexible :
- You will now be able to let the client read from the data folder while still being able to protect your files (job sprites, etc).
- Clientinfo.xml won't be hidden anymore to allow server owners to edit some of the content without having to rebuild the game guard all the time. The IP and port fields will still be hidden however (and cannot be modified).
- data.ini won't be embedded (in the client) anymore either. The first two entries, in data.ini, are reserved by RagnaShield to ensure its own protected files are read first.
The third-party protection has to be tweaked a little, it detects too many false positives and that's currently an issue. We've switched (not fully) to a file signature protection instead, since this is much more reliable to begin with.
The server installation process has been made easier; an executable will patch your source files for you (though, this program is not shared to server owners yet, but we plan to). A plugin for Hercules would indeed be nice, but also requires more work on our hand to keep multiple files up-to-date. So currently, there are no plans to make this into a plugin.
The game guard is still in beta for now, mostly because of Windows XP causing issues "every now and then". That's... pretty much covers most of it ;].
Edit : Oh and, we've made the error codes clearer too.
-
Heya,
If you're going to do a patcher via C#, then you can download GRF Editor's sources over here : http://www.mediafire.com/download/7z6hkdag4ayj8rs
Add a reference to the dlls found in the "Output Libraries" folder to your project and you can use the following code to get you started :
using System;using System.Diagnostics;using System.IO;using System.Windows.Forms;using GRF.Core;using GRF.FileFormats.RgzFormat;using GRF.FileFormats.ThorFormat;using GRF.IO;using Utilities.Extension;namespace TestPatcher { public partial class Form1 : Form { public Form1() { InitializeComponent(); Patch(); } public void Patch() { var patchesPath = @"C:Patches"; var patcherExeName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); var roDirectory = Directory.GetCurrentDirectory(); var serverGrfName = @"server.grf"; var temporaryGrfName = @"temp.grf"; using (var output = new GrfHolder(temporaryGrfName, GrfLoadOptions.New)) { foreach (var patchFile in Directory.GetFiles(patchesPath)) { if (patchFile.IsExtension(".grf", ".gpf")) { using (var grf = new GrfHolder(patchFile)) { output.QuickMerge(grf); } } else if (patchFile.IsExtension(".rgz")) { using (var rgz = new Rgz(patchFile)) { if (rgz.Table.ContainsFile(patcherExeName)) { // Updating on this executable, do something...! throw new NotImplementedException(); } foreach (var entry in rgz.Table) { entry.ExtractFromRelative(roDirectory); } } } else if (patchFile.IsExtension(".thor")) { using (var thor = new Thor(patchFile)) { if (thor.Header.UseGrfMerging) { string targetGrf = thor.Header.UseDefaultTargetGrf ? serverGrfName : thor.Header.TargetGrf; if (string.IsNullOrEmpty(targetGrf)) throw new Exception("THOR extraction failed : no target GRF identified."); if (String.Compare(serverGrfName, targetGrf, StringComparison.OrdinalIgnoreCase) == 0) { output.QuickMerge(thor.ToGrfHolderQuick()); } else { using (var grf = new GrfHolder(targetGrf, GrfLoadOptions.OpenOrNew)) { grf.QuickMerge(thor.ToGrfHolderQuick()); } } } else { if (thor.Table.ContainsFile(patcherExeName)) { // Updating on this executable, do something...! throw new NotImplementedException(); } foreach (var entry in thor.Table) { entry.ExtractFromRelative(roDirectory); } } } } } using (var serverGrf = new GrfHolder(serverGrfName, GrfLoadOptions.OpenOrNew)) { serverGrf.QuickMerge(output); } } GrfPath.Delete(temporaryGrfName); } }}
Obviously this is not optimized and errors are not handled at all, but it yields good results nonetheless. I would definitely not recommend you to start from scratch to make a patcher.
evilpuncker and mleo1 reacted to this -
@Tokei
Option, that allowed extraction in AppData folder has disappeared. ^ ^; It's removed from GRF Editor?
It was quite comfortable in some situations like extracting lot's of files from different GRF in different folders one by one right in one output folder.
Updated to 1.7.7.4; the option has been brought back.
Is it possible, some kind of notification or something when opening GRF editor, which says new version available?
There used to be a similar feature before in GRFE, but it was too troublesome to maintain and I dropped it. On the other hand, I don't plan on updating GRF Editor much at all anymore. No new tools will be added to the software; the only remaining updates would be the lub decompiler (which has yet to be fixed/completed) and other bug fixes, which should be very rare by now.
If you dont mind, can you create an option that allow user to set a custom directory as default file extracting location ?
Sometime feel kinda lost to find the files I extracted when I opened more than 1 GRF to extract files.
Updated to 1.7.7.5. By default the files are extracted where your GRF has been opened, you can now change that from Tools > Settings > General > Override default extraction path > Edit the [Roaming folder] path.
-
You could use TRUNCATE(weight/10,1) or ROUND(...) in your query, although the result may not be what you'd except. You could also simply convert the weight manually instead (and make it a function) :
.@weight$ = .@weight;if (.@weight % 10 != 0) { .@length = getstrlen(.@weight$); .@weight$ = (.@length == 1 ? "0" : "") + insertchar(.@weight$, ".", .@length - 1);}else { .@weight$ = .@weight / 10;}
This would give you :
500 > 50
505 > 50.5
8 > 0.8
-
First thing first, fix that msgstringtable file : http://www.mediafire.com/view/7jdzlggzlf39c1a/msgstringtable.txt
As for your card issue, are you sure it's in the correct location in your GRF/data folder (should be in datatextureÀ¯ÀúÀÎÅÍÆäÀ̽ºcardbmp)? Is the image format valid? Your image must be 24bit or 8bit-indexed, aka a palette image.
-
Hello Tokeiburu,
I have a question. Why I cant open some of the files using the GRF Editor? I am having an Error. Like This:
And the message on it is:
Please help me. I want to extract some files that I got online specially those maps.
This error can be from multiple reasons... the file was encrypted, it can be using a different compression method, the content is, like the error says, not a gat one, etc.
-
The client version tells you which file you have to edit (idnum2itemdesctable or itemInfo - from rA's wiki : Renewal Clients <= 2012-04-10a & Main Clients <= 2012-07-10a use the .txt files version while clients above this date uses itemInfo).
As for itemInfo.lua versus itemInfo.lub, that depends on how you diffed your client ("Load custom lua file instead of itemInfo.lub", itemInfo.lub is the default one but it is recommended to use itemInfo.lua to avoid kRO updates overwriting your own file).
As for idnum2itemdesctable, it can be in any of your GRF or in your data folder if you've enabled the feature while diffing your client. You have to check your GRF order in that case (from data.ini) to see which one is read first (and the data folder is read before any GRF if enabled). I would recommended putting these files in your data folder because it's easier to edit and kRO updates won't overwrite your files.
There is indeed no itemInfo.lub/lua in GRFs normally.
-
What is your client version? You should also put those files (idnum2itemdesctable) in your data folder; it's easier to modify and update them.
-
Try waveffectvalentine.wav
Edit : the way you can find which sounds belong to which effects is by renmaing the waveffect folder to... waveffect.bak in your GRF and then play the effect ingame. It will throw you an error such as "resource missing: waveffectvalentine.wav" and then crash your client. When you're done you rename the folder back obviously.
-
Your client is looking for spriteÀΰ£Á·µµµÏµµµÏ_³²_īŸ¸£_īŸ¸£_°Ë±¤ , which means :
For the male (³²) thief (µµµÏ) class, for the weapon sprite (_īŸ¸£_īŸ¸£, which is view ID 16 - WEAPONTYPE_CATARRH), for the weapon trail sprite (_°Ë±¤).
Basically, one of your katar weapon is usable by the thief class (normally they're only usable by assassin or assassin cross classes, so I'm assuming you've changed the applicable job field xD). The trail sprite is missing (it is usually required for the default weapon types). For example, the weapon sprite :
The trail sprite :
I'm not sure when this is actually displayed ingame though... anyway, you can create empty act/spr files and it will fix the issue. Good luck!
-
First reason why I ask is because you've shown us your data folder and not your GRF. It is also because reading from the data folder is sometimes "safer" than reading from the GRFs. Some clients may ignore your data.ini priorities and read your lubs from rdata.grf (even if rdata.grf isn't in your data.ini). Not sure if this is a bug specific to NEMO, I haven't tried another client differ.
Putting your files in the data folder ensures they're going to be read before anything else. If reading from the data folder is not an option for you, then you may want to use the "Read lua before lub" diff + rename your lubs to luas.
-
Have you selected "Read Data Folder First" in NEMO (from what I can see, you haven't)?
-
This client version is somewhat old, perhaps it's still using the .txt formats (idnum2itemdisplaynametable.txt, etc)? Same for the lua files, the old path being datalua files instead of dataluafiles514lua files (edit: zackdreamer is right, 2012-04-18aRagexeRE reads from LuaFiles514, the client does not read iteminfo.lua/lub however). Test around and you'll know soon enough which is which.
-
Hmm, what's wrong with using the new prontera? Anyhow, if you want to use the old maps, you have to find an older version of the kRO files (the link evilpuncker put is probably valid, haven't checked) and copy all related textures and models.
Let's say you want the old prt_in. Go in GRF Editor, find prt_in.rsw, go in "Extract resources", check both prt_in.gnd and prt_in.rsw, then use "Export..." and select your folder. Extract prt_in.gat/.gnd/.rsw as well. Create a new GRF, put all those files you just extracted in it and you're done. Make sure your new GRF/your files are read first of course.
Ex :
-
The issue is because .@mob is a temporary variable, it cannot be read outside Onsummon. For that, you'd have to use .mob. On a side note, it's preferred to use .@var = value; instead of set .@var, value;
Onsummon: // Select Coordinates to summon a random MVP on setarray .@positions, 140, 232, 75, 138, 140, 87, 205, 140, 123, 137, 175, 137; .mob = rand(1646,1651); .@rnd = rand(0, 5); monster "lhz_dun03",.@positions[2 * .@rnd],.@positions[2 * .@rnd + 1],"--ja--",.mob,1,"summon_boss_lt::OnMyMvPDead"; // Select Coordinates to summon a random 99 on setarray .@positions, 183, 97, 97, 96, 47, 139, 231, 140, 139, 211, 139, 259; .@mob2 = rand(1640,1645); .@rnd = rand(0, 5); monster "lhz_dun03",.@positions[2 * .@rnd],.@positions[2 * .@rnd + 1],"--ja--",.@mob2,1,"summon_boss_lt::OnMVP"; end;OnMyMvPDead: if ( .mob == 1646 ) getitem 20051,1; if ( .mob == 1647 ) getitem 20023,1; if ( .mob == 1648 ) getitem 20075,1; if ( .mob == 1649 ) getitem 20044,1; if ( .mob == 1650 ) getitem 20067,1; if ( .mob == 1651 ) getitem 20045,1; killmonster "lhz_dun03","summon_boss_lt::OnMVP"; initnpctimer; end;//Required to keep from erroringOnMVP: end;}
-
I had a really great idea: what if when browsing an grf, let's say that I liked an item from kRO grf and then there was an option to "extract" that item and it would extract all related files about that item, like: drop sprites/act, equipped sprites/act, collection and item bmp images and even the related part of it in ItemInfo file into a single data folder or even better, a new file that would be a bundle of everything just like the .sde file concept of the server db editor, so we would be able to provide customs for download in an even better format that would be handled by the grf editor wiht something like "add/export item" and it would add all necessary files to the grf and even the entry in ItemInfo file (and even add the option to change itemID and an option to set viewID or just auto select viewID), that would really make things easy to work with custom items! hope I was clear enough lol
That... would actually be rather awesome ;O. Which format would these be though? I was thinking about using the zip archives; I could... 'translate' the folder names, since this is how most custom items are uploaded anyway, something similar to :
Itemmysprite.bmp
Collectionmysprite.bmp
Inventorymysprite.act/spr
Ingamemale_sprite.spr/act
Ingamefemale_sprite.spr/act
itemInfo.lua
etc
That would work, but I'd probably have to detect which file is which in the end, to be able to read all currently uploaded zip custom sprites on rAthena and Hercules. If you have a better idea, let me know. I can't start this feature right now though, so... it'll take some time before I even begin to be implement it xD.
evilpuncker reacted to this -
Well it's not an encoding issue since those are fixed for you. Perhaps you missed a few files, you maybe didn't use the right path in the GRF or your files were actually the Korean textures, that would be my guess...!
-
Don't forget to remove the Korean interface images from your data folder, in your RO folder (your data folder is probably being read before your GRFs).
-
can you make we be able to multi select? (http://i.imgur.com/Lc8qMMV.png)
I used to use grf tool to extract only text files, wanted to do the same with grf editor (without the need of ctrl+click)
Can you clarify or give me an example of this multi-selection? Currently :
- You can change the state of an item selection with Ctrl-LeftClick
- You can select a range of items with Shift+LeftClick
- You can select all items with Ctrl-A.
- You can unselect all items with Ctrl-<.
- Edit : You can copy the name of the file(s) with Ctrl-C.
- Edit : You can extract files quickly with Alt-MouseMove (slow).
- You can change the state of an item selection with Ctrl-LeftClick
RO Installer Script (Inno Setup)
in Client-Side Releases
Posted · Edited by Tokeiburu
File Name: RO Installer Script (Inno Setup)
File Submitter: Tokeiburu
File Submitted: 17 Aug 2015
File Category: Client Resources
Heya!
This 'release' is a very simple Inno Setup script to create Full or Lite client installers.
It requires Inno Setup, which can be downloaded here : http://www.jrsoftware.org/isdl.php#stable. While installing Inno Setup, make sure the "Install Inno Setup Preprocessor" option is checked; otherwise you will get an "unknown option" error.
How to make this work?
Put your client files in either RO_Lite or RO_Full and then run the "_Make New Installer.bat" files. This will output a new installer called "YourRO Installer.exe".
Customization
The default installer icon used comes from Lykos's icon pack, which can be found here : https://rathena.org/board/files/file/3190-s1-lykos-icon-pack/. It has been modified through hexing to allow the icon to be resizable by Windows Vista or more recent.
Click here to download this file