Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/21/23 in Posts

  1. This is a simple site that allows you to create your own RO Login Background. It's now fully functional. With this tool, you can upload any image of your choice and select the desired area to be cropped. You can also adjust the aspect ratio to your liking. Features: Support for t_login.jpg output for newer clients Multiple quantization algorithms for 8-bit mode (NeuQuant, Median Cut, K-Means, etc.) Optional noise dithering to improve quality of images with blending showed on the RO Client Output Options: Default output (24-bit BMP): Produces high quality images 8-bit BMP: Reduces the final output size significantly (with some quality loss) t_login.jpg: For modern clients that support JPEG backgrounds Tool URL: FroggoCutter (sapitosucio.github.io) The files generated have the following format: t_¹è°æX-Y.bmp, said files are compressed into a .zip file, then it's downloaded. Do remember those BMPs files should be placed on: data\texture\À¯ÀúÀÎÅÍÆäÀ̽º Btw everything is done locally, nothing is uploaded. You can see it's source code here Known Issues: When you try to slice a big image (>2000px) and 8Bit is selected, the browser may lock itself for a few seconds (❁´◡`❁) Froggo tip of the day: Use big images(>2000px), upscale them or something and then, slice it, the final result is quite gucci Some SS: The manipulation part: BMPs loaded by client:
    3 points
  2. These are some examples, I have more than 30 bosses ready, 80 different monsters like mobs and mini boss, between wings, weapons, etc. If you liked it, don't forget to like it, thank you all.
    1 point
  3. Heya, This tool parses replay files (rrf) and outputs a readable format. It is used to gather data from official replay files by extracting NPC dialogues, quest status, skill cast time, after-cast delay, etc. Say you want to replicate an official instance, you would get a replay of it and then extract the data using this tool. You'll be able to follow along the mes dialogues, the next statements, etc, when making the actual script. You can save a lot of time doing so. It is a tool I've been using heavily for many years now and it was made to fit my needs, so some stuff may not seem very useful to you. Because of this, I'm making the project public so you're free to add more features/information as you see fit. The source for the Replay format as far as I'm aware is from Dia (from Divine Pride), so huge thanks on that side. Download: https://github.com/Tokeiburu/Rrf-Parser/releases Git repo: https://github.com/Tokeiburu/Rrf-Parser Some replays may not work as this tool was made specifically for kRO replays (and I've been removing support for older versions throughout the years). How it works Change the replay path to your replay and click "Parse Replay" to start the process. Once that's done, you should get the output shown above. Choose the parsing options on the left if you don't want to include useless data. It may be useful for some though. The [output] options are files generated in your folder\output\file.txt. Main output NPC scripts. All the NPCs that have been seen (in order) will be put there with a pre-made script. It will also show "npc_avail" for some very specific NPCs. On kRO, some NPCs don't actually have a view ID but are actually characters with a style. This is what npc_avail is for (though it's not something rAthena supports at the moment). For example: 1@exnw,12,107,3 script ³ªÀÌÆ® ¿öÄ¡#nw3 npc_avail[4306,0,21,7,0,0,0,0,0,0,0],{ end; } Which corresponds to: p.job,p.sex,p.head,p.headpalette,p.weapon,p.shield,p.accessory,p.accessory2,p.accessory3,0,p.bodypalette Equipment. The next entry in the main output is the player equipment with the @item2 command to remake the gears quickly. This only includes equipped items. The other pieces of equipment in the inventory are not included there. Monster spawned. This part will include all the monsters that have spawned and it will not show them more than once. Packet output. That is the main part of the parsed script. It will give you the script lines, cutins, and much more. It will detect cloakoffnpcself, but don't trust the output blindly either. Sometimes kRO just hides a NPC for dumb reasons. Though usually it should be accurate. Parsing options Most of the fields are self-explanatory, so I'll only go over those that aren't. Show raw packets. Outputs the packets in hexadecimals rather than a readable format. Revert instance names. Looks for ###1@name in map names and reverts it back to the original map name. This also changes NPC names that got converted such as something#ins_0o1 to something#ins. Generic packet. This one contains pretty much everything not included in the other options. UnitWalk packet. This one is disabled by default, but you might consider turning it on if you're doing newer instances because kRO uses those a lot lately. When a NPC moves, it will be shown there. mob_data.conf A special file is generated alongside the replay in the output folder called "mob_data.conf" (though it's not a real libconf format). The mob_data.conf file contains data gathered from the mobs inside the replay such as mob level, speed, damage motion, attack motion, boss type, skills used and mob drops. As far as mob drops go however, be careful as the tool makes a lot of estimation there. For example: Mob Death: 148 Drops: 1000364,135 Dropped: 2 The above means the mob has been killed 148 times, and only one drop has been seen (1000364). The estimated drop rate is 1.35%. A drop is defined as an item dropped alongside the unit_dead packet. So it may be wrong, or if the mob is looter type, you'll get a bunch of invalid results. Though usually it's a fair estimation. Tool > Translation helper So if you put the following as the input: select("¾îµð·Î °¡¸é µÇÁÒ?:"); // TICK: 19263 ms, INTERVAL: 0, FORMAT: 0:19 mes "[¸¶¶÷]"; // TICK: 19746 ms, INTERVAL: 433, FORMAT: 0:19 mes "¾ÆÀÌ»þ°¡ ¾îµð¼­ »ì¾ÒÁö? ¾Æ! ÀÌ <NAVI>[À­ÂÊ]<INFO>wolfvill,99,178,0,101,0</INFO></NAVI>¿¡ °¡¸é ¾ÆÀÌ»þÀÇ ÁýÀÌ ÀÖ¾î¿ä."; // TICK: 19746 ms, INTERVAL: 0, FORMAT: 0:19 next; // TICK: 19746 ms, INTERVAL: 0, FORMAT: 0:19 mes "[½ºÄ«´Ï¾Æ]"; // TICK: 20129 ms, INTERVAL: 0, FORMAT: 0:20 mes "ÇÏÁö¸¸ ¸»Çصµ ¼Ò¿ë ¾øÀ» °É¿ä? ¼³µæÇÑ´Ù¸é, ´ç½Å¿¡ ´ëÇÑ ³» »ý°¢µµ ¹Ù²ÙÁÒ."; // TICK: 20129 ms, INTERVAL: 0, FORMAT: 0:20 npctalk "½ºÄ«´Ï¾Æ, ¸ðÇè°¡´ÔÀº ³× »ý°¢À¸·Î °¡Ä¡°¡ Æò°¡µÇ´Â ºÐÀÌ ¾Æ´Ï¼Å.", "¸¶¶÷#wms01"; // TICK: 20129 ms, INTERVAL: 0, FORMAT: 0:20 npctalk "´©°¡ ¹¹·¡? ÀßÇØÁÙ °Å¶ó°í.", "½ºÄ«´Ï¾Æ#wms01"; // TICK: 20129 ms, INTERVAL: 0, FORMAT: 0:20 next; // TICK: 20129 ms, INTERVAL: 0, FORMAT: 0:20 mes "[¸¶¶÷]"; // TICK: 20479 ms, INTERVAL: 33, FORMAT: 0:20 mes "¸ðÇè°¡´Ô, ±×·³ ´Ù³à¿À¼¼¿ä! ³ªµµ À̸¸ °¥°Ô!"; // TICK: 20479 ms, INTERVAL: 0, FORMAT: 0:20 setquest 17510; // State = 1, Time = 0 // TICK: 20479 ms, INTERVAL: 0, FORMAT: 0:20 close; // TICK: 20480 ms, INTERVAL: 1, FORMAT: 0:20 You would get the following as the output: 어디로 가면 되죠? [마람] 아이샤가 어디서 살았지? 아! 이 [윗쪽]에 가면 아이샤의 집이 있어요. <NAVI>[윗쪽]<INFO>wolfvill,99,178,0,101,0</INFO></NAVI> [윗쪽] next; [스카니아] 하지만 말해도 소용 없을 걸요? 설득한다면, 당신에 대한 내 생각도 바꾸죠. 스카니아, 모험가님은 네 생각으로 가치가 평가되는 분이 아니셔. 누가 뭐래? 잘해줄 거라고. next; [마람] 모험가님, 그럼 다녀오세요! 나도 이만 갈게! setquest 17510; close; It extracts the content and puts them in Korean for easier google/papago translate copy paste. The "select" content will be extracted, same for <NAVI> and a few other annoying cases where you end up spending more time removing the tags than actually translating. Tool > Replay simulation This one is meant to "transform" a replay into a script so that you can view it on your own server. The input account ID is your account id, on the test server you'll be on. This is required for the script to work correctly. You will get an output similar to - script REPLAY_SIMULATION -1,{ end; OnTimer1: attachrid(2000012); sendpacket("ff09620006aa010000000000002c0100000000040000008928000000000000000000000000000000000000000000000000000000000000000000000000000024472500000000000000ffffffffffffffff000000b9ccb8aebecf23657031385f7776"); sendpacket("ff09600006a9010000000000002c0100000000040000008828000000000000000000000000000000000000000000000000000000000000000000000000000023c72500000000000000ffffffffffffffff000000b8b6b6f723657031385f7776"); sendpacket("ff09620006ab010000000000002c0100000000000000008b28000000000000000000000000000000000000000000000000000000000000000000000000000023c71500000000000000ffffffffffffffff000000c0ccb9c7b8b123657031385f7776"); end; OnInit: initnpctimer; end; } Then load the script and your character will redo what the replay file was doing. You'll probably have to put your character where the replay starts as otherwise some weird stuff is gonna happen. You'll also need the following script command as well: BUILDIN_DEF(sendpacket,"s"), BUILDIN_FUNC(sendpacket) { const char *input = script_getstr(st,2); struct block_list *bl = map_id2bl(st->rid); unsigned char buf[10000]; int len = strlen(input); int i; for (i = 0; i < len; i += 2) { sscanf(&input[i], "%2hhx", &buf[i/2]); } if (!bl) { npc_timerevent_stop(map_id2nd(st->oid)); st->state = END; return SCRIPT_CMD_FAILURE; } clif_send(buf, len / 2, map_id2bl(st->rid), SELF); return SCRIPT_CMD_SUCCESS; } Notes This is a tool I do not plan on spending a whole lot of time on. It would be a nightmare to maintain in the first place. I will add requested features if any for a short time, but it would be much easier to add such features yourself if you are planning to use this as a base for your own needs. If you want to handle a new packet, simply go in RrfParser\Packet\PacketDecoder.cs and add it as you want. Only those I needed were handled. The display timers are both useful and annoying. Once I'm done with a script, I usually run a quick regex to wipe out all comments and that solves that problem. //.*
    1 point
  4. Calling all High-Rate lovers out there. Please help me by giving suggestions out there. I'm a fan of dark ro based setup. I do happen to have monster arena script. But it was based on low-rate server. I want some advice how will i set it up into high-rate type. So basically, my script summons declared monsters. And different monster will give specific point depends on my liking. setarray .MOBS[0], // MobID, MinAmount, MaxAmount, Time(ms), Points, X1, Y1, X2, Y2, // [1] [2] [3] [4] [5] [6] [7] [8] [9] // Low-Level Monster[Poring Family] 1002, 30, 50, 15000, 1, 0, 0, 0, 0, // Poring 1031, 30, 50, 15000, 1, 0, 0, 0, 0, // Poporing 1062, 30, 50, 15000, 1, 0, 0, 0, 0, // Santa Poring 1113, 30, 50, 15000, 1, 0, 0, 0, 0, // Drops 1242, 30, 50, 15000, 1, 0, 0, 0, 0, // Marin 1836, 30, 50, 15000, 1, 0, 0, 0, 0, // Magmaring So, this is the part of my script. When you kill a poring you will be given 1 point. Anyways, i want some suggetions how will monster arena will function on high rate setups. Any suggestion will be welcomed. Thanks guys!
    1 point
  5. Instance Difficulty Settings Instance Difficulty Settings is a powerful modification that allows you to set/modify an instance difficulty without touching the whole NPC Script of the instance and adding status penalties to the players. ?How it works?? This Mod works in base of a Custom Database (instance_mode_db.yml). Inside this file you can configurate a bunch of parameters related to Monster, Exp Rate and Drop Rate. ########################################################################### # Instance Mode Database ########################################################################### # # Instance Mode Settings # ########################################################################### # - Mode Instance Mode ID. # Exp Rate Experience rate percentage setting for Instance. (Default: 100) # Drop Rate Drop rate percentage setting for Instance. (Default: 100) # HP Mob's Max HP percentage. (Default: 100) # Speed Mob's Movement Speed percentage. Set it lower to increase speed. (Default: 100) # STR Mob's STR percentage. (Default: 100) # AGI Mob's AGI percentage. (Default: 100) # VIT Mob's VIT percentage. (Default: 100) # INT Mob's INT percentage. (Default: 100) # DEX Mob's DEX percentage. (Default: 100) # LUK Mob's LUK percentage. (Default: 100) # ATK Mob's ATK percentage. (Default: 100) # ATK2 Mob's ATK2 percentage. (Default: 100) # MATK Mob's MATK percentage. (Default: 100) # MATK2 Mob's MATK2 percentage. (Default: 100) # DEF Mob's DEF percentage. (Default: 100) # MDEF Mob's MDEF percentage. (Default: 100) # HIT Mob's HIT percentage. (Default: 100) # FLEE Mob's FLEE percentage. (Default: 100) # FLEE2 Mob's FLEE2 percentage. (Default: 100) # CRI Mob's CRI percentage. (Default: 100) # AMOTION Mob's AMOTION percentage. Set it lower to increase speed. (Default: 100) # ADELAY Mob's ADELAY percentage. Set it lower to increase speed. (Default: 100) # DMOTION Mob's DMOTION percentage. Set it lower to increase speed. (Default: 100) ########################################################################### Currently there are 4 premade difficulty modes ID_EASY: Easy mode, all monster stats are reduced by 20%. Exp & Drop rates reduced by 20%. ID_NORMAL: Default mode. No changes. ID_HARD: Hard mode, all monster stats increased by 50%, speed & ASPD +20%. Exp & Drop rates increased by 20%. ID_INSANE: Very hard mode, all monster stats increased by 100%, speed & ASPD +50%. Exp & Drop rates increased by 50%. You can easily modify each value in this file and even create your custom difficulty modes. ?Instance Penalty Debuffs? Instance penalty debuff is another way to make harder the experience of your players by adding permanents debuff while they are inside the instance. Currently there are 8 debuffs. Cast Time: Increases cast time by <value>%. ASPD: Decreases ASPD by <value>%. MaxHP: Decreases MaxHP by <value>%. MaxSP: Decreases MaxSP by <value>%. AllStats: Reduces All Stats by <value>. Speed: Decreases Movement Speed by <value>%. ATK: Decreases Base ATK by <value>%. MATK: Decreases MATK by <value>%. This all is great! But how can you set instance difficulty and penalties? ?Setting up Difficulty? There are 2 ways to set up this: Setting this up in instance_db.yml: There's a node called Difficulty inside this file where you can setup the difficulty. Setting this up through script command (Recommended): When you create an instance with instance_create script command, you can add an extra argument <difficulty>. Nice! But can I change the mode whenever I want? Yes, you can. There is a script command called instance_setdifficulty that allows you to change this. Whenever the difficulty is changed, all the monsters stats inside the instance are recalculated. So you can make a script that changes the difficulty when X players join from ID_NORMAL to ID_HARD. ?Setting up Penalties? For setup a instance penalty you have the script command instance_setpenalty. instance_setpenalty(<instance id>,<sc_type>,<value>) Example: // This will reduce players MaxHP by 75% when they enter to the instance instance_setpenalty(instance_id(IM_PARTY),SC_ID_MAXHP,75); Additionally this will give you a Status Icon and send you a message when you join the instance. And again, you can make a script that increases a penalty when X players join the instance or that penalty increases by each player in! ?Script Documentation?
    1 point
  6. Solve : inside GRF, just delete the hotkey. yourname.grf/data/luafile514/lua file/hotkey
    1 point
  7. depend on your script, you can do like these if (condition_A) { select("Menu 1", "Menu 2", "Menu 3"); } else { select("Menu 4", "Menu 5", "Menu 6"); } or select((condition_A ? "Menu 1" : ""), (condition_A ? "Menu 2" : ""), (condition_A ? "Menu 3" : ""), "Menu 4", "Menu 5", "Menu 6"); etc
    1 point
×
×
  • Create New...