Jump to content
The forums will be going offline for an extended maintenance period at 1400hrs GMT on 19th June 2025. The number of hours for this downtime is intentionally not advertised due to the nature of these upgrades. ×

Winterfox

Members
  • Posts

    248
  • Joined

  • Last visited

  • Days Won

    19

Everything posted by Winterfox

  1. It isn't empty. Look at the Size it says 90.9 KB. Your problem is that you are in the tree view of the lub file. You need to switch to the raw view.
  2. Why don't you update your client with kro lite patcher to get the latest client version and extract the AccessoryId.lub from the grf?
  3. You could create a registration function to register a streamer via @command which sets an account variable that you can check for in another npc. A small example: - script STREAMER_SUPPLY FAKE_NPC,{ OnInit: bindatcmd("registerStreamer", strnpcinfo(3) + "::OnRegisterStreamer", 99); bindatcmd("unregisterStreamer", strnpcinfo(3) + "::OnUnregisterStreamer", 99); end; OnRegisterStreamer: OnUnregisterStreamer: if(.@atcmd_numparameters < 1) dispbottom("Usage: " + .@atcmd_command$ + " <charname>"); .@switch = (.@atcmd_command$ == "@registerStreamer") ? 1 : 0; charcommand("#set " + .@atcmd_parameters$[0] + " #STREAMER " + .@switch); } prontera,124,201,1 script Streamer Supplies 726,{ mes "[ Streamer Supplies ]"; mes "You are " + ((#STREAMER == 0) ? "no" : "an") + " Streamer!"; close; } @registerStreamer <charname> to register an account as streamer and @unregisterStreamer <charname> to unregister an account as streamer.
  4. When you use the monster command with a label, the rid of the player that killed the mob is already attached to it, so you can execute all commands like he started the script himself. For example, you can give him an item with getitem. - script LAST_HIT_MONSTER FAKE_NPC,{ OnInit: monster("prontera", 0, 0, "Demo Poring", 1002, 10, strnpcinfo(3) + "::OnDemoPoringDead"); end; OnDemoPoringDead: getitem(502, 1); }
  5. Your script thinks MD_CANATTACKMOB is a permanent variable attached to a character, but since this script doesn't get executed by a character, there is no rid attached. Therefore, the parser doesn't have a character it can get the MD_CANATTACKMOB variable from and defaults to 0. The reason why the parser thinks MD_CANATTACKMOB is a permanent character variable is because it isn't an existing monster mode flag. This means there is also no constant exported to the script space.
  6. In OnSellItem and OnBuyItem replace close with end. This removes the error and just works like expected. Don't ask me why end has the same effect as close in these labels and seemingly creates a close button in the message box. I have no idea.
  7. That is good to hear. I already finished my version of the script I did out of curiosity, the only thing missing is a fitting map.
  8. Hu? I thought my link gave you a virus, so to prevent spreading a malicious link I removed it.
  9. I never heard of such problems with anonfiles, but I will remove the link from my post so no one else is in danger. Sorry for the inconvenience. As I said before, you can of course get the illustrations from a patched kro client. I will explain the process in detail: 1. Install a kro client. 2. Get the ro patcher lite from here: https://nn.ai4rei.net/dev/rsu/ 3. Put it in your kro client root folder. 4. Run the patcher till it says it is finished. 5. Open the data.grf in your kro client folder with a grf editor. I recommend this one: https://rathena.org/board/files/file/2766-grf-editor/ 6. Go to data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/illust and put into the searchfilter: ep18 this will show you all illustrations of the ep 18 npcs in your grf. From there you can do whatever you want with them. Extract them and put them in your custom grf etc. The cutin function reads the pictures from the data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/illust folder. Every .bmp file you put in there can be shown by the client via this function. You also can omit the .bmp extension when passing the filename to the function.
  10. Why don't you update your grf using ro patcher lite from here: https://nn.ai4rei.net/dev/rsu/? Then you have always the latest content.
  11. - Id: 6010 AegisName: Pickaxe Name: Pickaxe Type: Armor Buy: 10 Weight: 10 Attack: 10 Range: 1 Classes: Normal: true Upper: true Baby: true Gender: Female Locations: Both_Hand: true Script: | bonus bAspd,-30; bonus bCritical,100; bonus bAtkRate,-100; autobonus "{ callfunc \"Minner_Main\",1; }",10000,1,BF_WEAPON; EquipScript: | callfunc "Minner_Main",0; UnEquipScript: | callfunc "Minner_Main",2; According to the csv2yaml tool, your item should look like above. I can't check it, since I can't find the documentation of the old rathena text format. But without knowing the details of the item, it seems weird that it gets typed as armor and female only.
  12. Then you are doing something wrong. I tested it and it works fine for me. prontera,155,177,5 script Test 100,{ if(select("Yes:No") == 1) $@yes++; else $@no++; announce("Yes: " + $@yes + " No: " + $@no, bc_all); end; }
  13. if(select("Yes:No") == 1) $@yes++; else $@no++; announce("Yes: " + $@yes + " No: " + $@no, bc_all);
  14. How do you create these special auras?
  15. There is a slight mistake in the script, it has a chance of 1:99 instead of 1:100. if( .@rnd < .item_arrays[.@i+2] ) { Makes it range from 1 to 99 since the last check is: 1 - 100 < 100. //Created Date: 04/07/2022 - script AEOUS_MVP_DROP FAKE_NPC,{ OnNPCKillEvent: .@rnd = rand(1,100); if( getmonsterinfo( killedrid,MOB_MVPEXP ) <= 0) end; for( .@i = 0; .@i < getarraysize(.item_arrays); .@i += 3 ) { if( .@rnd <= .item_arrays[.@i+2] ) { getitem .item_arrays[.@i], .item_arrays[.@i+1]; announce "Congratulations! Player "+ strcharinfo(0) +" has obtained "+ getitemname( .item_arrays[.@i] ) +" ["+ .item_arrays[.@i+1] +"] from "+ getmonsterinfo(killedrid, 0) +" (chance: "+.item_arrays[.@i+2]+"%) MVP Drop(s).",bc_all,0x00FF00; } } end; } OnInit: // (<structure,<item_id>,<chances>) setarray .item_arrays[0], 675, 1, 10, 677, 1, 30, 7539, 1, 100; end; }
  16. What happened is that rAthena uses a new format for the databases since the release of the script you are using. For the first, I assume the 200 is the ID to make sure it doesn't collide with upcoming instances. - Id: 200 Name: Emperium Test Breaker TimeLimit: 3600 Enter: Map: job3_arch01 X: 26 Y: 28 For the mob db you could simply copy the original Emperium und use the ID 3002 for the copy. But beware: You can't add 3002 if you use renewal, since a mob is already defined at this ID. In this case you would have to take an ID that is higher and match the script and mob avail accordingly. You mixed the order up in your mob avail: - Mob: 3002 Sprite: 1288 The first ID is the mob, the second is the sprite it should use, in this case the sprite of the emperium. The client doesn't know what sprite to show for your mob, so you have to tell the server to send it a known ID the client can use to show the mob.
  17. mes "Pick your number!"; next; input(.@number); .@rowCount = query_sql("SELECT `number` FROM numberdb WHERE `number` = " + .@number + ";"); if(.@rowCount == 1) { mes "This number is already used. Try again."; close; } query_sql("INSERT INTO numberdb (`number`) VALUES (" + .@number + ");");
  18. Logically, that would make sense, yes. But the calculations in ragnarok don't seem to always work exactly as one would expect under all circumstances.
  19. It is hard to help you when parts of the NPC are missing.
  20. Well in this case you will have to use a script to add the itemscript to the items. setarray(.@itemIds[0], 1101, 1102); for (.@i; .@i < ; .@i++) setitemscript(.@itemIds[.@i], "{ bonus(bMaxHP, 100); }");
  21. bonus2 bSubEle,e,x; +x% damage reduction against attack element e I couldn't find a state bonus that gives immunity to an element. So I am not sure if something like that exists.
  22. You have to put the script in the item you want to use it on in the item_db_equip.yml. - Id: 1101 AegisName: Sword Name: Sword Type: Weapon SubType: 1hSword Buy: 100 Weight: 500 Attack: 25 Range: 1 Slots: 3 Jobs: Alchemist: true Assassin: true Blacksmith: true Crusader: true Knight: true Merchant: true Novice: true Rogue: true SuperNovice: true Swordman: true Thief: true Locations: Right_Hand: true WeaponLevel: 1 EquipLevelMin: 2 Refineable: true Script: | bonus bMaxHP,100; - Id: 1102 AegisName: Sword_ Name: Sword Type: Weapon SubType: 1hSword Buy: 100 Weight: 500 Attack: 25 Range: 1 Slots: 4 Jobs: Alchemist: true Assassin: true Blacksmith: true Crusader: true Knight: true Merchant: true Novice: true Rogue: true SuperNovice: true Swordman: true Thief: true Locations: Right_Hand: true WeaponLevel: 1 EquipLevelMin: 2 Refineable: true Script: | bonus bMaxHP,100;
  23. I think supportwise the best option is to use a client with a date according to the packet version rathena uses by default or earlier, since I assume the packet version defined by rathena is the latest stable one and backwards compatibility is given by the server naturally growing with the version numbers of the client.
  24. I added the possibility to change the server to work with Argon2id hashes, since md5 is insecure since forever and there is no alternative, which bugged me for a while now. If someone of you is interested, you can find the source changes here: https://github.com/Reilaen/rathena/tree/feature/argon_2_hashing
  25. You are in the scripting section, but this is clearly a source question. Your chances are higher to get help when you put it in the right section.
×
×
  • Create New...