Jump to content

Tokeiburu

Members
  • Content Count

    202
  • Joined

  • Last visited

  • Days Won

    37

Posts posted by Tokeiburu


  1. 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...!


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


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


  4. @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.

     

    @@Tokeiburu

    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.


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


  6. 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:

     

    attachicon.giferror.png

     

    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.


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


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


  9. 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 :

    2SRsrem.png

     

    The trail sprite :

    2zQjbtv.png

     

    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!

    thief_trail.rar


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


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


  12. 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 : 

    CM2nzFT.png


  13. 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;}

     


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


  15. 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).

×
×
  • Create New...

Important Information

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