• Content count

  • Avg. Content Per Day

  • Joined

  • Last visited

  • Days Won


Tokei last won the day on May 22

Tokei had the most liked content!

Community Reputation

301 Excellent

About Tokei

  • Rank

Profile Information

  • Gender
  • Location

Recent Profile Visitors

8,400 profile views
  1. Tokei

    npctalk problems

    Hmmm, that script won't work though, it will be shown on the character instead of the NPC. It looks like I modified the script command to work with any input and I've added an extra parameter for the player_gid. My bad! So... it doesn't seem possible to achieve the original goal without modifying your function in the source...! The closest you'll get to is the latest option: harboro1,215,212,3 script #rockno04 111,5,5,{ end; OnTouch: showscript "West: The Inn, East: The Sheriff's Office", getnpcid(0); end; } It's visible by other players, but it's not a huge deal for what you're trying to do.
  2. Tokei

    npctalk problems

    You're looking for showscript: harboro1,215,212,3 script #rockno04 111,5,5,{ end; OnTouch: showscript "West: The Inn, East: The Sheriff's Office", getnpcid(0, "#rockno04"), SELF, getcharid(3); end; } If you want others to see it as well, then you'd use: harboro1,215,212,3 script #rockno04 111,5,5,{ end; OnTouch: showscript "West: The Inn, East: The Sheriff's Office", getnpcid(0, "#rockno04"); end; }
  3. The script is from 2016, you'll have to use the newest rAthena standards and update the functions if you want to use this script.
  4. Tokei

    Detaching RID

    There's... probably a solution that will work, but I would recommend adding new script functions instead to make your life much easier: static int script_foreach_sub_va_bl(struct block_list* bl, va_list args) { const char* label = va_arg(args, const char*); return script_foreach_sub((TBL_PC*)bl, label); } // void foreachinmap "<npc_label>", "<map name>" BUILDIN_FUNC(foreachinmap) { const char* label = script_getstr(st,2); const char* mapname = script_getstr(st,3); TBL_NPC* nd = map_id2nd(st->oid); int16 m = (nd && strcmp(mapname, "this") == 0) ? nd->bl.m : map_mapname2mapid(mapname); if (m < 0) { return SCRIPT_CMD_SUCCESS; } map_foreachinmap(script_foreach_sub_va_bl, m, BL_PC, label); return SCRIPT_CMD_SUCCESS; } /// void foreachinarea "<npc_label>", "<map_name>", <x1>, <y1>, <x2>, <y2> BUILDIN_FUNC(foreachinarea) { const char* label = script_getstr(st,2); const char* mapname = script_getstr(st,3); int x1 = script_getnum(st,4); int y1 = script_getnum(st,5); int x2 = script_getnum(st,6); int y2 = script_getnum(st,7); TBL_NPC* nd = map_id2nd(st->oid); int16 m = (nd && strcmp(mapname, "this") == 0) ? nd->bl.m : map_mapname2mapid(mapname); if (m < 0) { return SCRIPT_CMD_SUCCESS; } map_foreachinarea(script_foreach_sub_va_bl, m, x1, y1, x2, y2, BL_PC, label); return SCRIPT_CMD_SUCCESS; } // defs BUILDIN_DEF(foreachinmap,"ss"), BUILDIN_DEF(foreachinarea,"ssiiii"), Then your script would be: prontera,156,188,0 script dummy_script 77,{ // ... OnScriptEnd: // not sure where you get the winner from! foreachinarea(strnpcinfo(0) + "::OnReward", "this", 36, 63, 63, 36); if (.consolation) { foreachinmap(strnpcinfo(0) + "::OnConsolation", "this"); } sleep 5000; announce "Thank you for playing..."; end; OnReward: for ([email protected] = 0; [email protected] < getarraysize(.prize); [email protected]++) { getitem .prize[[email protected]], .prize[[email protected]]; // ^ this won't work, you either need two arrays, or use [email protected] += 2 instead of [email protected]++ } announce .npcName$ + " : We have a winner. " + strcharinfo(0) + " wins the death by dice event round "+ .diceRound +".",0; // ^ This will be announced multiple times if you have more than one player remaining in that area, the winner announce // should be moved to "OnScriptEnd", but you didn't post your full script. end; OnConsolation: for ([email protected] = 0; [email protected] < getarraysize(.consolation); [email protected]++) { getitem .consolation[[email protected]], .consolation[[email protected]]; // ^ this won't work, you either need two arrays, or use [email protected] += 2 instead of [email protected]++ } end; } Using addrid is kind of a nightmare, and you lose the main script control which is very annoying.
  5. Tokei

    Script crashing map server

    You should be using a function for your item instead (and don't use attachrid), something along the lines of: getitem 57000,1; callfunc("summonfunction", 2); function script summonfunction { [email protected] = getarg(0); // ... close/return; }
  6. Tokei

    GRF: GRF Editor

    Heya, Here is the issue with any GRF encryption. No matter how strong it is, no matter how complex it gets, If someone is really willing to decrypt a GRF (and has enough knowledge), they'll be able to. The problem is that the protection is client-sided and your client needs to be able to decrypt the content to be able to access your files. So the deciphering code is in 'plain sight' on your computer. And no, doesn't do anything, it's simply a file to let GRF Editor know the GRF is encrypted and that it should scan the files when you open it. Deleting it wouldn't change anything and hiding it wouldn't achieve much either. And another no, GRF Editor encrypts the files you select entirely, not just the file header. Your client needs to be able to access the filename table to know where it is in your GRF. It's possible to encrypt the table, but then it makes it impossible to patch these GRFs (Thor Patcher needs to know your file positions in the GRF). Not that it would change much either way, it's simply more convenient to not encrypt the file table.
  7. 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).
  8. It depends what you're doing. If it's headgear, then no that's not possible. You'd have to do a garment sprite but that's a whole different category.
  9. Heya, This flag doesn't seem to be implemented yet; you'd have to open a bug report over here:
  10. 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.
  11. Tokei


    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.)
  12. Tokei


    You can use: select * from `charlog` where `char_msg` like '%150368%' (The table could use some updates though.)
  13. Tokei


    That would be charlog on your main SQL database. Or your map-server logs (assuming you log the servers' console outputs).
  14. Wouldn't these always be the same as the reflection of the non-mirror face? Updated to 1.1.1: Forced all scripts to be recompiled. Ctrl-Shift-S added. Added adjacent frames/actions from Edit > View > Show the adjacent frames (Ctrl-Shift-F). This option also works in Setup Headgear.
  15. Heya, Just wanted to highlight some of the changes in 1.1.0. New gender option for reference sprites: Animation > Setup Headgear... allows you to create a full headgear by positioning the sprite on a single head, saving a ton of work. It's relatively new and might have errors, but from what I've been testing it's been working out pretty well. It's fairly limited at the moment, but if it's requested I don't mind expanding on it. (It also fixes all the anchor positions to make the head stick better.) Holding down Alt and then moving the sprite will move all the layers in the current action. It's usually meant for a single sprite though. Added basic utilities to the Palette editor tool. You can now use a Pen, a Bucket, an Eraser and a Stamp-ish tool. The Stamp's brush size can be increased with + and - on the numpad. Also, I've combined both edition modes (Single edit and Gradient edit) in a single screen and removed the adjust mode which wasn't really useful and quite buggy anyway. (I forgot to add preset/saved gradients; will add it for the next update ;O.)