Jump to content

Tokei

Members
  • Posts

    665
  • Joined

  • Last visited

  • Days Won

    91

Everything posted by Tokei

  1. Hello, GRF Editor forces the text file display back to what you have in the Settings > General > Display encoding (it does this on purpose to prevent you from doing mistakes). Your text file is encoded as UTF-8, which is not supported by your client and which will show up as what you see in GRF Editor. You have to change your text file encoding to Thai (Encoding > Character sets > Thai). In your case, you'll want to do it by "tricking" Notepad++ : Make a new text file, change the encoding to Thai. Copy your whole msgstringtable.txt file > paste it to your new file. Use your new file as msgstringtable.txt instead. As for what you'll see in GRF Editor, it should be the common 'gibberish' (unless you change it manually from Settings > General > Display encoding > Custom... > Thai is... 874).
  2. The luafiles514 folder is meant for the newer compiled lub format (version 514 = 0x202). kRO upgraded to the new version quite a while ago, what's left in the data\lua files folder should no longer be used and it can be entirely removed. I see you have both the lua and lub file formats in there though. Depending on how you diffed your client, it will attempt to read the lua/lub before the lub/lua, so make sure you're editing the corret files.
  3. I'm a bit confused as to what you're trying to achieve. From my understanding, you wanted to retrieve the account ID from a deleted character ID, to which the following did the work: select `account_id` from `charlog` where `char_msg` like 'Deleted char (CID 1369541%' But now you're joining tables and I don't really see why you would want to do that. (Side note, joining the picklog table is a death wish, you should never do that.)
  4. You can use: select * from `charlog` where `char_msg` like '%150368%' (The table could use some updates though.)
  5. That would be charlog on your main SQL database. Or your map-server logs (assuming you log the servers' console outputs).
  6. Well, I've updated the version to 1.1.0, the Alt-Move should now work. Bunch of other changes as well, looks like I forgot to push the updates for this software (I got pretty busy!). Although I'll just mention that this was always possible via scripting: Script > Script Runner... > act[selectedActionIndex].Translate(0, -100); or // Translates by 100 up for the whole act file act.Translate(0, -100);
  7. You cannot use GPF's packing for LZMA compression. Use version 0x200 and don't forget to use Curiosity's DLL afterwards.
  8. The files are encrypted. You cannot open them unless you use their client.
  9. Have you tried holding down alt + moving the image? I reallyyy need to remake that software.
  10. Well if the file is encrypted then you won't be able to view its content (or extract it). Otherwise it would be a permission issue that prevents the software from extracting the files. Or perhaps the extraction path has a problem, so try to use "Extract..." instead.
  11. Well you'll have to provide more details than that.
  12. You... must have the wrong files somewhere ;O. This issue doesn't happen on my end. If you see black squares like that, it means you didn't import the generated textures to your data\texture folder. But you shouldn't be seeing this on a map generated with no options checked (unless you're using a previous generated map and that you forgot to copy the new map textures, which is what I'm assuming happened here). The tool should be generating a maps.grf file; copy paste the file in your ragnarok folder and then extract it if you want to use the data folder. Make sure the file has the payon map files inside the GRF though. Or just modify your data.ini to read maps.grf first and then clear your data folder from any map in there.
  13. These are meant to further customize the flat maps creation. If you uncheck Remove all objects, you must also uncheck Make the ground flat. This is meant to keep the objects while only changing the textures and it would create the map shown below. Otherwise you would have objects floating in mid-air. Making gat cells stick to the ground will be the difference between the left screenshot and the right screenshot. The gat cells are usually on top of objects so that you can walk over them. Obviously this doesn't apply if Make the ground flat is checked as you'd be walking on air otherwise. As far as the lightmap and shadowmap goes, I'd have to refer you to https://en.wikipedia.org/wiki/Lightmap and https://en.wikipedia.org/wiki/Shadow_mapping . The difference can be seen here I guess, if you keep the lightmaps: As for the global lighting, that's a setting used on some maps to dim the ambient light. Not many maps use this, but it is best to remove it when making flat maps. Using the default options would be best for a regular usage of course.
  14. Make sure you're up to date:
  15. Heya, You can use GRF Editor (version 1.8.2.4) and then use File > New > New Thor, then just drag and drop your BGM files. By default it's already set to what you need, but if you want to merge into your GRF in the future, click on root > Container options > Patching mode > Merge into GRF.
  16. As the error mentions, the function (mobcount) doesn't have enough argument: *mobcount("<map name>","<event label>"). Refer to: https://github.com/rathena/rathena/blob/d770de8015afd31be89e1b125a8c3615a0453f88/doc/script_commands.txt#L5974 for more info. mobcount(instance_mapname("prt_fild08"), instance_npcname("monster_death")+"::OnMobKill")
  17. Well, I don't know if you have to as far as parsing the file goes, but a big part of the purpose of completing achievements is getting those points and increasing your rank. The server does need to know the scores to show them properly on the client side, but you can put whatever value you want to there. The default score value is around 20.
  18. Your score for each achievement you've completed is added together (top left of the achievement window). When you have enough points, you go up to the next achievement rank. Each time you 'level up', you get another achievement (Achievement Rank 5, for example). But other than that, it's pretty much useless.
  19. Hmm, I believe the following would be easier to maintain: prontera,153,193,6 script Fake_Npc 123,{ .@menu$ = implode(.tmenu$, ":"); .@option = select(.@menu$ + ":Info") - 1; if (.@option < getarraysize(.tmenu$)) { Var1 = .@option; } else { dispbottom "Test"; dispbottom .tmenu$[Var1]; } end; OnInit: setarray .tmenu$, "Dog", "Cat"; end; }
  20. Copy and paste this file to Scripts > Open scripts folder (name it "SetColor.cs"): using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Media; using System.Windows.Media.Imaging; using ErrorManager; using GRF.FileFormats.ActFormat; using GRF.FileFormats.SprFormat; using GRF.FileFormats.PalFormat; using GRF.Image; using GRF.Image.Decoders; using GRF.Graphics; using GrfToWpfBridge; using TokeiLibrary; using TokeiLibrary.WPF; using Action = GRF.FileFormats.ActFormat.Action; using Frame = GRF.FileFormats.ActFormat.Frame; using Point = System.Windows.Point; namespace Scripts { public class Script : IActScript { public object DisplayName { get { return "Change all layer color"; } } public string Group { get { return "Scripts"; } } public string InputGesture { get { return null; } } public string Image { get { return null; } } public void Execute(Act act, int selectedActionIndex, int selectedFrameIndex, int[] selectedLayerIndexes) { if (act == null) return; var frame = act[selectedActionIndex, selectedFrameIndex]; GrfColor startColor; if (frame.Layers.Count == 0) { startColor = GrfColor.White; } else { startColor = act[selectedActionIndex, selectedFrameIndex, 0].Color; } ColorPicker.PickerDialog picker = new ColorPicker.PickerDialog(startColor.ToColor(), ColorPicker.Core.ColorMode.Hue); picker.Owner = WpfUtilities.TopWindow; picker.ShowDialog(); if (picker.DialogResult) { try { act.Commands.Begin(); GrfColor newColor = picker.PickerControl.SelectedColor.ToGrfColor(); act.Commands.SetColor(newColor); } catch (Exception err) { act.Commands.CancelEdit(); ErrorHandler.HandleException(err, ErrorLevel.Warning); } finally { act.Commands.End(); act.InvalidateVisual(); } } } public bool CanExecute(Act act, int selectedActionIndex, int selectedFrameIndex, int[] selectedLayerIndexes) { return act != null; } } } Then you can use Scripts > Change all layer color. I really should update Act Editor @@...
  21. You can check out the script commands over here: https://github.com/rathena/rathena/blob/master/doc/script_commands.txt Search for *implode.
  22. The drag and drop feature has issues when two processes have different access privileges. Since explorer.exe is not started with admin rights (even if you're an administrator), GRF Editor won't be able to receive messages from explorer. I've seen many posts regarding this issue (it applies well beyong GRF Editor) but there are no apparent solutions to resolve this other than fully disabling UAC from the registry. So if you want to drag and drop, you should not start GRFE as an admin, simply open it normally and it should work fine. The file extension feature will require access to the registry and therefore will need admin privileges, which, as you can guess, is a problem. I do not have a copy of Windows 10 yet, so I'm not sure if the file extension even works. I presume it doesn't since Windows always changes how shortcuts work in every update. (Updated the mediafire link to fix the "Add..." box with thor files.)
  23. The "Add..." feature is deprecated and should have been removed a while ago. I left it there if people were having trouble with drag & drop, but drag and dropping is still preferred. I'll go see what's wrong with the thor format and the "Add..." feature though, thanks ~!
  24. Counter type achievements work a bit differently; the target counter that you set (in achievement_db.yml) is your actual goal/condition. So first thing first, you want to add it to your achievement definition: - ID: 500001 Group: "AG_BATTLE" Name: "Name" Target: Count: 500 Score: 10 What you want to do isn't compatible with counter type achievements (you'd have to create a new group, pass it to AG_CHAT, and set the start value manually, etc). However you can do this easily via scripting instead: OnPCKillNPC: if (CONQ_KILLNPC < 500) { CONQ_KILLNPC++; achievementupdate 500001, ACHIEVEINFO_COUNT1, CONQ_KILLNPC; if (CONQ_KILLNPC == 500) { achievementcomplete 500001; } } end; Hmmm, it appears achievementupdate isn't included...! You can add this script function in your source: //BUILDIN_DEF(achievementupdate,"iii?"), BUILDIN_FUNC(achievementupdate) { struct map_session_data *sd; int i, achievement_id, type, value; achievement_id = script_getnum(st, 2); type = script_getnum(st, 3); value = script_getnum(st, 4); if (!script_charid2sd(5, sd)) { return SCRIPT_CMD_FAILURE; } if (achievement_search(achievement_id) == NULL) { ShowWarning("buildin_achievementupdate: Achievement '%d' doesn't exist.\n", achievement_id); return SCRIPT_CMD_FAILURE; } ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id); if (i == sd->achievement_data.count) achievement_add(sd, achievement_id); ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id); if (i == sd->achievement_data.count) { return SCRIPT_CMD_FAILURE; } if (type >= ACHIEVEINFO_COUNT1 && type <= ACHIEVEINFO_COUNT10) sd->achievement_data.achievements[i].count[type - 1] = value; else if (type == ACHIEVEINFO_COMPLETE) sd->achievement_data.achievements[i].complete = value ? true : false; else if (type == ACHIEVEINFO_COMPLETEDATE) sd->achievement_data.achievements[i].completeDate = value; else if (type == ACHIEVEINFO_GOTREWARD) sd->achievement_data.achievements[i].gotReward = value ? true : false; else { ShowWarning("buildin_achievementupdate: Unknown type '%d'.\n", type); return SCRIPT_CMD_FAILURE; } achievement_update_achievement(sd, achievement_id, false); return SCRIPT_CMD_SUCCESS; } Best of luck ~!
  25. I remember Emistry answering me with this trick when I asked the same question xD. Getmapusers returns -1 if the map doesn't exist (and you can't have negative players on a map).
×
×
  • Create New...