Leaderboard
Popular Content
Showing content with the highest reputation on 12/10/12 in Posts
-
1 point
-
This is designed for the incompetent. The same information can be found in my nfo file. If you wish to keep a little pice of me with you. You can download it off of my public cloud. Spread me around like a cancer! Pour some sugar on me~ P.S. This will be updated, improved regularly. If I miss something please get in touch with me. Keep it up everyone, let's work together! ^_^V SVN rAthena GIT~ https://github.com/rathena/rathena SVN Downloader TortoiseSVN ~ http://tortoisesvn.net/downloads.html Codeplex ~ http://downloadsvn.codeplex.com/ SmartSVN ~ http://www.syntevo.c...n/download.html KRO Installer Miruku ~ http://miruku.rathena.org/ RateMyServer ~ http://ratemyserver....wnload_kROLinks RSU ~ http://nn.nachtwolke.com/dev/rsu/ Clients & Diff Patchers k3dT 2013 Clients - http://k3dt.eu/Ragexe/unpacked/ Weetools Clients ~ https://subversion.a...etools/clients/ Supportmii Clients ~ http://supportmii.com/ro1/Clients/ Earthlingz CleintSide ~ http://www.assembla....bversion/nodes/ ShinsDiffPatcher ~ https://subversion.a...insDiffPatcher/ rAthena's Online Diff Patcher ~ http://rathena.org/t...iff_patcher.php LUA/LUB & Data LUA/Data ~ http://svn6.assembla...svn/ClientSide/ LUB ~ http://code.google.c.../downloads/list Packet_dbs & Packet_lengths Packets ~ http://svn6.assembla...ntSide/Packets/ actRO, Browedit, GRF, Sprite, Client Tools Ratemyserver Tools ~ http://ratemyserver....e=download_tool Supportmii Tools ~ http://supportmii.com/ro1/tools/ Browedit ~ http://browedit.exca...com/?a=download Shins Programs WeeMapCache ~ https://subversion.a...nk/WeeMapCache/ WeeThumbnail ~ https://subversion.a...k/WeeThumbnail/ rAthena's Tools rA's Login Background Screen Generator ~ http://rathena.org/t...gin_background/ Game Server Patchers Thor ~ http://thor.aeomin.net/ Triad ~ http://www.nitroconc...d/index_eng.php Control Panels FluxCP ~ https://github.com/c.../fluxcp-renewal CeresCP ~ http://sourceforge.n.../cerescp/files/ Guides & Info Judas Bible ~ http://supportmii.co.../JudasBible.pdf rAthena Wiki ~ http://rathena.org/wiki/ Misc Helpful Links eAthena Board ~ http://eathena.ws/forum/ RMS Sprite Bible ~ http://ratemyserver....riot_bible_main Web Host Talk ~ http://www.webhostingtalk.com/ Codes / Scripts Paste Sites kPaste ~ http://rathena.kpaste.net/ uPaste ~ http://upaste.me Pastebin ~ http://pastebin.com/ Security / Client Protection Harmony ~ https://harmonize.it/ Setup.exe BlueGhost Setup.exe ~ http://rathena.org/b...up/#entry144124 OpenSetup ~ http://www.mediafire...abj2jau2wxbvoiu1 point
-
Hi everyone, I think we need to prioritize this matter since its the most basic system in a RPG..specially RO..I know Wilcard and Epoque already started it however they disappear for a long time or no news on their progress.. and I know there is a lot of information out there however this is not enough since most of the formula is not accurate and they vary from each other. And by having this system implemented we can clear all the concerns from items, skills and others. and here are some of my concern.. 1. Can we have a team/volunteers to gather info/test in official server?(I can provide kRO accounts if needed even though iRO/pRO is a valid source since they have the same formula) 2. Does anyone from the Dev team already working on this matter? Thank you. Information from an IRC discussion1 point
-
A newbie-friendly Lua to Lub compiler for folders! What This program allows you to compile a whole "lua files" folder's LUA files into LUB files. I found it annoying that I'd need to do it manually for each file (Or maybe there is a simpler way, I just didn't know how). I know not every file needs to be protected since not all LUA files are customized by most RO server owners but oh well. The files are saved in their corresponding folders. How to use Save the RAR file in a simple directory like C:/lua2lub/ or D:/lua2lub/. Extract in the same folder so that the 2 applications and the lua files folder are in the D:/lua2lub/ folder. Run lua2lub.exe Set the directory path ( option 2 ) Start compiling ( option 1 ) Exit ( option 4 ) Credits Revisions and downloads Version 1.0 : May 20, 2012 First release. Basic functions. Side note: I've always dreamed of contributing to eAthena (Ragnarok Online Private Server community in general) since I was 12 years old. 7 years later, here I am.1 point
-
yes you need the same date of your packet_db for you client and 2012+ clients read .lub files instead lua files so get a latest compiler for it.1 point
-
1 point
-
are you doing this for event ? ( I can't think of other situation that need to do something like this ) if it is, then save them into an array when they register then its very easy to retrieve them later on example like this script1 point
-
I was trying to do this years ago. However it's not optimized and query_sql will really simplify and speed up everything, that's a sample of what I planned years ago (also, when my scripting abilities were not great.) First, I was saving all the players IDs into an array each time they log in, and deleting them each time they log out. OnPCLoginEvent: set .PeopleOnline[getarraysize(.PeopleOnline)], getcharid(0); //... OnPCLogoutEvent: set .@tmp$, strcharinfo(0); for( .@i = 0; .@i < getarraysize(.PeopleOnline$); .@i++ ) if( .@tmp$ == PeopleOnline$[.@i] ) { deletearray PeopleOnline$[.@i], 1; break; //Useless to keep the for loop } Second, I looped all the online players to check whoever was in that map. then, I save players into a temporary array //Save my AID set .@myAid, getcharid(3); for( for( .@i = 0; .@i < getarraysize(.PeopleOnline$); .@i++ ) { attachrid(getcharid(3,.PeopleOnline$[.@i])); //Actually it shouldn't be necessary an online check for obvious reason. if( strcharinfo(3) == "Your_map" ) set .@array$[getarraysize(.@array)], .PeopleOnline$[.@i]; } //Attaching back my RID attachrid(.@myAid); //There, maybe a check should be added. So, you now have .@array$ array that has stored the names of who is in "Your_map" map. So you can choose one randomly... set .@randomPlayer$, .@array$[rand(getarraysize(.@array$))]; dispbottom "You randomly selected " + .@randomPlayer$;1 point
-
update to this topic same thing ... negative number support function script int__ { .@i = getstrlen( .@str$ = getarg(0) ) -3; .@is_negative = charat( .@str$, 0 ) == "-"; while ( .@i > .@is_negative ) { .@str$ = insertchar( .@str$, ",", .@i ); .@i -= 3; } return .@str$; }1 point
-
for NO MSG use latest msgstringtable.txt for buf error, 2012 clients uses folder "luafiles514/lua files" and compiled with luac v5.1.4 unlike 2011 client which is compiled with luac v5.0.2 and having folder "lua files"1 point
-
did you use the latest data folder and lub files?1 point
-
Thanks for the eval KeyWorld. Overall was it a fun script? I will refine it and continue to improve it. It was pointed out that the game was impossible to make fun because it was a dialog based game, so I went away from that and made it use cutins. That wasn't all that bad compared to the hundreds of cutins for my multiplayer texas holdem script I made! 1) I'm not sure what you means its not user friendly to use switch/if. 2) I can easily change .@StrPick to any variable I need to, but it doesn't affect the overall operation of the script. 3) Good point on removing the end and close. I just alway format in a consistant manner and seem to put them like that. Same with me and taking the spaces out of if ( and etc... 4) Replaced .@RouletteMenu$ with @RouletteMenu$. Nice catch. 5) I could reduce some code by optomizing "switch(rand(0,36)) { case 0: goto Slot00; case 1: goto Slot01; case 2: go with a array". I will change that later when I get a chance. 6) The idea there was that if the character closed out of the script they could still go back in it and still have all the same bets and info. I need to test this script with multiple characters playing and see how it works out. I must confess it only speant about 4 hours total working on it and didn't do much testing of it. I can change that easy. Peopleperson491 point
-
1 point
-
1 point
-
http://www.eathena.ws/board/index.php?showtopic=269783 /* create table log.gm_item_giver ( id int(11) not null auto_increment primary key, `time` datetime, gm_give varchar(23), receiver varchar(23), itemid smallint(11), amount smallint(6) ) engine = archive; */ // ~~~~~ show time left in days, hours, minutes and seconds ~~~~~ function script timeleft__ { if ( ( .@left = getarg(0) ) <= 0 ) return getarg(0); set .@day, .@left / 86400; set .@hour, .@left % 86400 / 3600; set .@min, .@left % 3600 / 60; set .@sec, .@left % 60; if ( .@day ) return .@day +" day "+ .@hour +" hour"; else if ( .@hour ) return .@hour +" hour "+ .@min +" min"; else if ( .@min ) return .@min +" min "+ .@sec +" sec"; else return .@sec +" sec"; } prontera,155,184,4 script dksfjskjf 100,{ set .@eventgmlevel, 60; // event gm level setarray .@itemid, 7227, 7711; // the only item id to give setarray .@maxamount, 5, 20; // maximum amount of item to give. this is give 1000 red pot maximum setarray .@delay, 60, 60; // delay in minute // can give red potion , max 1000, delay 1 minute // can give orange potion, max 100, delay 2 minute if ( getgmlevel() < .@eventgmlevel ) end; mes "input the player name"; next; if ( input(.@name$, 4,23) ) close; else if ( set( .@aid, getcharid(3, .@name$) ) == 0 ) { mes "player not exist or not online"; close; } else if ( .@aid == getcharid(3) ) { mes "that's you ... baka"; close; } mes "select the item to give"; next; set .@size, getarraysize(.@itemid); for ( set .@i, 0; .@i < .@size; set .@i, .@i +1 ) set .@menu$, .@menu$ + getitemname(.@itemid[.@i]) +":"; set .@menu, select(.@menu$) -1; if ( getd( "#gm_give_"+ .@itemid[.@menu] ) + .@delay[.@menu] * 60 > gettimetick(2) ) { mes "you still can't give this prize to players"; mes "time left: "+ callfunc("timeleft__", getd( "#gm_give_"+ .@itemid[.@menu] ) + .@delay[.@menu] * 60 - gettimetick(2) ); close; } mes "input amount to give."; mes "max = "+ .@maxamount[.@menu]; next; if ( input(.@amount, 1, .@maxamount[.@menu]) ) close; set .@name$, rid2name(.@aid); mes "are you sure want to give"; mes .@name$ +" "+ .@amount +" "+ getitemname(.@itemid[.@menu]) +" ?"; next; if ( select ("Yes:No") == 2 ) close; else if ( isloggedin(.@aid) == 0 ) { mes "player suddenly log off"; close; } .@origin = getcharid(3); attachrid .@aid; if ( !checkweight( .@itemid[.@menu], .@amount ) ) { attachrid .@origin; mes "player is currently overweight"; close; } getitem .@itemid[.@menu], .@amount; attachrid .@origin; announce strcharinfo(0) +" give "+ .@name$ +" "+ .@amount +" "+ getitemname(.@itemid[.@menu]), 0; setd "#gm_give_"+ .@itemid[.@menu], gettimetick(2); query_logsql "insert into gm_item_giver values ( null, now(), '"+ escape_sql( strcharinfo(0) ) +"', '"+ escape_sql(.@name$) +"', "+ .@itemid[.@menu] +", "+ .@amount +")"; close; } EDIT: update timeleft__ function -- offtopic -- LMAO !!! I forgotten I said that XD1 point
-
more tricks XD prontera,156,184,4 script ksdjfhskhfj 100,{ mes "blah"; .@job = getd( ".job"+ basejob ); // note : if basejob is out of range, will default to novice because its 0 .@s = select( .menu$[ .@job ] ) -1; close2; // callshop "weapon_shop#"+ getd( ".weaponselect"+ getd( ".job"+ basejob ) +"["+ .@s +"]" ), 1; // PS: ... seen this in my mission board script ? XD callshop "weapon_shop#"+ getd( ".weaponselect"+ .@job +"["+ .@s +"]" ), 1; // EDITED : optimized a little bit end; OnInit: setd ".job"+ Job_Novice, 0; setd ".job"+ Job_SuperNovice, 0; setd ".job"+ Job_Swordman, 1; setd ".job"+ Job_Mage, 2; setd ".job"+ Job_Archer, 3; setd ".job"+ Job_Acolyte, 4; setd ".job"+ Job_Merchant, 5; setd ".job"+ Job_Thief, 6; setd ".job"+ Job_Knight, 7; setd ".job"+ Job_Priest, 8; setd ".job"+ Job_Wizard, 9; setd ".job"+ Job_Blacksmith, 10; setd ".job"+ Job_Hunter, 11; setd ".job"+ Job_Assassin, 12; setd ".job"+ Job_Crusader, 14; setd ".job"+ Job_Monk, 15; setd ".job"+ Job_Sage, 16; setd ".job"+ Job_Rogue, 17; setd ".job"+ Job_Alchemist, 18; setd ".job"+ Job_Bard, 19; setd ".job"+ Job_Dancer, 19; setd ".job"+ Job_Taekwon, 21; setd ".job"+ Job_Star_Gladiator, 22; setd ".job"+ Job_Soul_Linker, 23; setd ".job"+ Job_Gunslinger, 24; setd ".job"+ Job_Ninja, 25; setarray .@weaponname$[1], "Daggers", "One-handed swords", "Two-handed swords", "One-handed spears", "Two-handed spears", "One-handed axes", "Two-handed axes", "Maces", "", // <-- stupid unused "Staves", "Bows", "Knuckles", "Musical Instruments", "Whips", "Books", "Katars", "Revolvers", "Rifles", "Gatling guns", "Shotguns", "Grenade launchers", "Fuuma Shurikens", "Two-handed staves"; // select hex( sum(aaa) ) from ( select 1 << view as aaa from item_db where type = 4 && equip_jobs & 1<<0 group by view ) as zzz; setarray .@weaponbits, 0x54E, // 0 novice 0x1FE, // 1 swordsman 0x80050A, // 2 mage 0x90A, // 3 archer 0x80050A, // 4 acolyte 0x1CE, // 5 merchant 0x94E, // 6 thief 0x1FE, // 7 knight 0x80950A, // 8 priest 0x80050A, // 9 wizard 0x1CE, // 10 blacksmith 0x90A, // 11 hunter 0x1014E, // 12 assassin -1, // 13 unused 0x1FE, // 14 crusader 0x80150A, // 15 monk 0x80850A, // 16 sage 0x94E, // 17 rogue 0x1CE, // 18 alchemist 0x690A, // 19 barddancer -1, // 20 unused 0x10A, // 21 taekwon 0x810A, // 22 star gladiator 0x80050A, // 23 soul linker 0x3E010A, // 24 gunslinger 0x40010A; // 25 ninja freeloop 1; .@i = 0; while ( .@i <= 25 ) { // job index if ( .@i != 13 && .@i != 20 ) { // unused .@j = 1; .@c1 = .@c2 = 0; while ( .@j <= 22 ) { // weapon index if ( .@j != 9 ) { if ( .@weaponbits[.@i] & 1 << .@j ) { .menu$[.@i] = .menu$[.@i] +"^00CC00"+ .@weaponname$[.@j] +":"; setd ".weaponselect"+ .@i +"["+ .@c1 +"]", .@j; .@c1++; } else { .@menu$[.@i] = .@menu$[.@i] +"^FF0000"+ .@weaponname$[.@j] +":"; setd ".@weaponselect"+ .@i +"["+ .@c2 +"]", .@j; .@c2++; } } .@j++; } .menu$[.@i] = .menu$[.@i] + .@menu$[.@i]; copyarray getd( ".weaponselect"+ .@i +"["+ .@c1 +"]" ), getd( ".@weaponselect"+ .@i ), .@c2; } .@i++; } .@i = 1; while ( .@i <= 22 ){ // weapon shops .@nb = query_sql( "select id from item_db where type = 4 && view = "+ .@i +" limit 128", .@id ); npcshopdelitem "weapon_shop#"+ .@i, 501; .@j = 0; while ( .@j < .@nb ) { npcshopadditem "weapon_shop#"+ .@i, .@id[.@j], getiteminfo( .@id[.@j], 0 ); .@j++; } .@i++; } freeloop 0; end; } - shop weapon_shop#1 -1,501:1000 - shop weapon_shop#2 -1,501:1000 - shop weapon_shop#3 -1,501:1000 - shop weapon_shop#4 -1,501:1000 - shop weapon_shop#5 -1,501:1000 - shop weapon_shop#6 -1,501:1000 - shop weapon_shop#7 -1,501:1000 - shop weapon_shop#8 -1,501:1000 - shop weapon_shop#10 -1,501:1000 - shop weapon_shop#11 -1,501:1000 - shop weapon_shop#12 -1,501:1000 - shop weapon_shop#13 -1,501:1000 - shop weapon_shop#14 -1,501:1000 - shop weapon_shop#15 -1,501:1000 - shop weapon_shop#16 -1,501:1000 - shop weapon_shop#17 -1,501:1000 - shop weapon_shop#18 -1,501:1000 - shop weapon_shop#19 -1,501:1000 - shop weapon_shop#20 -1,501:1000 - shop weapon_shop#21 -1,501:1000 - shop weapon_shop#22 -1,501:1000 1. after browse through euphy and emistry script ... only I realize I forgot to make available weapon selection to top of the menu as green ... so I split them out into 2 dimension array ... then crunch them with copyarray 2. hint: ... I completely rewrite from yours because my script is based on doc\item_db.txt documentation 3. yeah I also same as @ToastOfDoom prefer to move calculations to server startup so when accessing this script, the server will do as few calculations as possible EDITED: @keyworld yeah I also realized that later on ... though before you post that though for 2 days my internet connection is unstable ... now ok a bit ... but still slow sometimes EDIT on 19/April/2018 http://upaste.me/1879496403dd64bde might as well update this a little bit, though I don't think its good idea to bump such old topic since the topic starter has already inactive1 point
-
1 point
-
// SetShop({#{,#{,...}}}); function SetShop { // Create the first, red menu options based on arguments passed. for(set .@i,0; .@i<getargcount(); set .@i,.@i+1) { // Add each shop name, in order, to the menu. set .@menu$, .@menu$+"( ^FF0000"+.Shops$[getarg(.@i)]+"^000000 ):"; // Store shop number in an array to call later. // Has +1 to prevent skipping an element if 0 is passed (subtract 1 later). set .@j[getarraysize(.@j)], getarg(.@i)+1; // Set the bit for the shop number passed, so // that it doesn't get added twice (in the next loop). set .@k, .@k | (1<<getarg(.@i)); } // Create the other default, blue menu options. for(set .@i,0; .@i<getarraysize(.Shops$); set .@i,.@i+1) // Only run if the shop bit is NOT set, or // you'll get duplicates from the first loop. if (!(.@k & (1<<.@i))) { // Add each shop name to the menu. set .@menu$, .@menu$+"( ^0000FF"+.Shops$[.@i]+"^000000 ):"; // Store shop number in an array. set .@j[getarraysize(.@j)], .@i+1; } mes "[ ^0000FFWeapon Shop^000000 ]"; mes "Please choose your desired shop."; next; // Call shop based on menu option selected. // select(.@menu$)-1 : returns menu array element. // .@j[]-1 : array element in relation to .Shops$ array. // .Shops$[] : stores shop names. callshop .Shops$[.@j[select(.@menu$)-1]-1],1; close; }1 point
-
erm...my script..is almost the same like yours....for the Job Checking part... you can still do it exactly like you want...use a switch( BaseJob ) or etc...then give a correspond array list...( which is the shop listing ).... i didnt set 2 array for shop name and menu listing because all this can be done using 1 array in your case.... the .@shop_list[0] show that how many shop in the menu will be coloured as Blue...the first X-th Shop will be coloured in blue...depend on the number in index 0... and yes...the select command will start with 1 and not 0..so i have to -1 to get the correct shop index to call for the correspond shop1 point
-
1 point