Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/12/13 in all areas

  1. A video to show the cloud/sky feature from the post above, (you can also see how fast is it to load a map compared to the map-viewer video).
    3 points
  2. Hi. If I remember correctly I wrote some things related to this post on the forum, at the beginning of rathena, I'm not able to find it ever, so maybe it was in the staff section. It was talking about script optimization, more specially, how some fake commands (if/else/while/for) are converting to label in the source and can be improved. Since I don't have the motivation (and the time) to work on a patch, I let you the result of my investigations here (because it was waiting from one year on my ftp). So first of all, this modifications required two commands : jump_nonzero, goto_ifexist. There will be used to rewrite all the for() while() code and optimize the code. // jump_nonzero() - inverse of jump_zero. BUILDIN_DEF(jump_nonzero,"il") BUILDIN_FUNC(jump_nonzero) { if( script_getnum(st,2) ) { if( !data_islabel(script_getdata(st,3)) ){ ShowError("script: jump_zero: not label !\n"); st->state=END; return 1; } st->pos = script_getnum(st,3); st->state = GOTO; } return 0; } // goto_ifexist() - Jump to a label if it exist (required a string !) BUILDIN_DEF(goto_ifexist,"s") BUILDIN_FUNC(goto_ifexist) { int n = search_str( script_getstr(st,2) ); if( n == -1 || str_data[n].type != C_POS ) {// label not found return 0; } st->pos = str_data[n].label; st->state = GOTO; return 0; } ---------------------------------------------------- Now, let's have fun: For NPC Script: for ( <a>; <b>; <c> ) { <d>; }Currently compiled to:<a>; __FR%x_J: jump_zero( <b>, __FR%x_FIN ); goto __FR%x_BGN; __FR%x_NXT: <c>; goto __FR%x_J; __FR%x_BGN: <d>; goto __FR%x_NXT; __FR%x_FIN:My proposal:<a>; jump_zero( <b>, __FR%x_FIN ); __FR%x_J: <d>; __FR%x_NXT: <c>; jump_nonzero( <b>, __FR%x_J ); __FR%x_FIN: While NPC Script: while ( <a> ) { <b> } Currently compiled to: __WL%x_NXT: jump_zero( <a>, __WL%x_FIN ); <b> goto __WL%x_NXT; __WL%x_FIN: My proposal: goto __WL%x_NXT; __WL%x_BGN: <b>; __WL%x_NXT: jump_nonzero( <a>, __WL%x_BGN ); __WL%x_FIN: Do-While NPC Script: do { <a> } while( <b> ); Currently compiled to: __DO%x_BGN: <a>; __DO%x_NXT: jump_zero( <b>, __DO%x_FIN ); goto __DO%x_BGN; __DO%x_FIN: My proposal: __DO%x_BGN: <a>; __DO%x_NXT: jump_nonzero( <b>, __DO%x_BGN ); __DO%x_FIN: Switch NPC Script: switch(<a>) { case 1: <b> break; default: <c> } Currently compiled code (simplify, the original is more obscure): set $@__SW%x_VAL, <a>; goto __SW%x_%xJ; __SW%x_%xJ: __SW%x_%x: if(%d != $@__SW%x_VAL) goto __SW%x_%x; <b>; goto __SW%x_FIN; // break __SW%x_%x: goto __SW%x_DEF; __SW%x_DEF: <c>; set $@__SW%x_VAL,0; goto __SW%x_FIN; __SW%x_FIN: My proposal: goto_ifexist("__SW%x_" + <a>); goto_ifexist("__SW%x_DEF"); goto __SW%x_FIN; __SW%x_1: <b> goto __SW%x_FIN; // break; __SW%x_DEF: <d> __SW%x_FIN:
    2 points
  3. View File Thor Patcher Please do not send me private message as my response would be in lowest priority. 2.6.4.0 UPDATE IMPORTANT NOTICE: Not only this release is beta, there are few important changes need to note of: You now may modify the icon, code sign after pack configuration data. Some configuration entries are deprecated. Additionally, as you can tell, script support is coming... System Requirement: Windows 2000 or higher. Features Pack into single/multi grf file(s) [0x200] Automatically generates GRF if not exist RGZ support Customizable skin & language entries Background music No extra dll, not even config file is needed when distribute. Embed config file and resource data (images for background/buttons) Custom Button Remote config file Self update and client update [supports multi client exe update(Up to 255)] Tools ConfigGenerator - Packs configuration and resources into the patcher or generate as a binary config pack. ThorMaker - make patch files into thor file, there two options file & grf, when choose file, the patcher will extract file into disk, and grf simply put in GRF. [Please do not pack GRF, instead you should pack the actual data.] CheckSum - Simply a crc32 tool, used to make sure patcher & client/game exe is up to date ======================== Internal Config and Remote Config: Internal config is simply the one embed inside patcher, store basic information required to run Remote config, is on web server (of course), it used configure extended features. Submitter Aeomin Submitted 12/27/2011 Category Patchers Video Content Author Aeomin  
    1 point
  4. Translated iteminfo/cskroption.lub (Lua_Project: Revision 272) w/ additional item translations (2011~2012++ items) for 2012-04-18 RagexeRE Clients & up (Sakray) 2012-07-10 Ragexe Clients & up (Main) ■Updates -Initial Realease: Translated malangdo/ bio labs 4 & vellum weapons (rev1) -Update #1: Added translations for some armors/shield/footgears/garments (rev2) -Update #2: Added translations for more weapons/sealed cards and malangdo related stuffs (rev3) -Update #3: Major Cleanup; Added/Translated/Updated/Reworked usable items & more (rev4) -Update #4: Translated Uprade Items/Metal Weapons/Costume Items & etc (rev 5) -Update #5: Merged items up to 03/21/2013, Etc item revamp, Tanos Weapons, bunch of official non-kRO items & more (rev 6) Read the Changelog.txt for more info ■Downloads -cskroption beta 1.rar -cskroption beta 2.rar -cskroption rev 3.rar -cskroption rev4.rar -cskroption rev5.rar -cskroption rev6.rar ■Notes: -Translations for new items(kRO) which are not yet translated in English on any official RO are "Google Translated" which are reworked and rephrased by me (to the best of my knowledge). -This also applies on official non-kRO items from aRO,bRO,cRO,jRO,ruRO,twRO which are not present on any English Server -Also note that many official item descriptions were modified/reworked bec. of official grammatical errors (we all know that) ■Credits: -Lua Project Team members -& all ■Pls visit my post here if you have time... (maybe you can help me.) kindly spare a sec and give me a click if you find my work somewhat helpful or useful.
    1 point
  5. Hey everyone. Im releasing a client pack I put together that contains everything needed for making a client to make things as easy as possible for new and current users. Making a client or updating from a old one has proven to be difficult for many and im hoping to put a end to this issue. Below is info from the readme about the client pack. The readme also contains information on how to make and install the client. ================================ The Purpose Of This Client Pack ================================ This pack was created as my response to helping the community with a few common issues. The main issue im hoping this will resolve for most users is getting all the needed files easly. During my time as a developer, ive noticed many users having issues staying up-to-date with things because of the fact that you would normally have to search here and there for all the files, tools, and other things needed just to make a fully working client. I also found myself getting outdated at times because of how things change. Many users out there still arn't fully aware of where to get up-to-date diff plugins for the WeeDiffGen program. With the release of this client pack, I hope it be less time consuming for users and allow them to catch up with everything to allow them to run a fully up-to-date server with the latest server revision with the latest client files. Their's still people out there using clients from mid 2010. Come on people. Its time to catch up. ================================ Whats Included In This Pack ================================ This client pack includes the following.... 2012-04-10aRagexeRE.exe which will be the core of your client. Pre-client generated DATA.INI file used to set what GRF files will be loaded when the client is started. The RO Mouse Freedom Plugin V1.8.4.0 (dinput.dll) to allow the mouse to freely leave the screen if your in a window. Ai4rei's kRO and RE Patchers V2.4.1.574 to patch up your official RO files. Ai4rei's Open Setup V2.5.1.147 to use as a user friendly english client options program. clientinfo.xml for setting up connection information to tell the client what IP and port to connect to, and other things. Translation Files r224 which contains translated text and texture files. Decompiled LUA files r221 for 2012-04-10 clients fully formatted and translated. WeeDiffGen r40 with all diff generator plugin's for diffing (modifying) the client exe. All of Ai4rei's latest diff generator plugin's for WeeDiffGen as of December 2nd, 2012 (already installed to WeeDiffGen) ================================ WARNING!!!! ================================ Some security programs will attack and remove some of the files included in this pack. The files itl mark as a threat are the dll plugin files used in the WeeDiffGen program and are not viruses. Before extracting, its recommended you make a new folder on your desktop and set your security software to exclude scans and real time protection for this folder, sub-folders, and files in them. Once done, extract your files in the folder. ================================ Credits ================================ All of this stuff wouldn't be possiable or exist without these people.... Ai4rei = RO Open Setup, RO Patcher Lite, and updated plugins for the WeeDiffGen program. Earthlingz = Decompiled LUA files. Gravity = Client EXE and a number of other things. (Hey, gotta give them credit too right? We wouldn't be here if RO didnt exist.) Shinryo = WeeDiffGen and original plugins for the program. Translations Team = Translated text files and textures. TrueNoir = Translated msgstringtable.txt file for 2012-04-10 client. Everyone else who helped / worked on this stuff. ================================ Change Log ================================ 12/2/2012 US = V1.0 Released. Rytech's Client Pack 2012-04-10 V1.rar
    1 point
  6. 19 Magic target Collection With Simple Images Download Here http://rathena.org/b...get-collection/
    1 point
  7. I just tested there is no bug, whenever "accidentally killed the poring!" is announced a new poring is spawned I even mentioned in my previous post how to change that. Anyways I removed that so now they have to go back to the npc to spawn a new one, but because character specific monsters summoned on the map would be... a pain... if 3 people summon porings and 1 person kills 2 and the third person just left the map reguardless of whatever porings the first guy killed there will still be 1 poring left on the map for the second player. Do @mobsearch poring and you'll see. function script timeleft__ { set .@left, getarg(0); if ( .@left <= 0 ) return getarg(0); set .@day, .@left / 86400; set .@hour, .@left % 86400 / 3600; set .@min, .@left % 3600 / 60; set .@sec, .@left % 60; return ( ( .@day )?.@day +" day ":"" )+( ( .@day || .@hour )?.@hour +" hour ":"" )+( ( .@day == 0 && ( .@hour || .@min ) )?.@min +" min ":"" )+( ( .@day || .@hour )?"":.@sec +" sec" ); } prontera,95,96,2 script Bloody Branch Quest 76,{ if(!#Bloody_b_Q){ set .QNPC$,"[^0000FF???^000000]"; } else { set .QNPC$,"[^0000FFAlice^000000]"; } if(!mobcount("prontera","Bloody Branch Quest::OnPoringDead")&Bloody_b_Q==1){ npctalk "Hmm... *looks around* Ahh, I see one over there!"; monster "prontera",0,0,"Poring",1002,1,"Bloody Branch Quest::OnPoringDead"; emotion e_gasp; end; } if(#Bloody_b_Q==2){ npctalk "Thanks again, come back in 3 hours and I'm sure another one will slip through!"; getitem 12103,2; set #Bloody_b_Q,(gettimetick(0)+(3*60*60*1000)); end; } if(#Bloody_b_Q==1) { mes .QNPC$; mes "There's already a Poring out there with your name on it!"; close; } if(((#Bloody_b_Q-gettimetick(0))/1000)>0&Bloody_b_Q){ mes .QNPC$; mes strcharinfo(0)+" you have "+callfunc("timeleft__",((#Bloody_b_Q-gettimetick(0))/1000))+"left."; close; } if(BaseLevel<255){ mes .QNPC$; mes "I'm sorry, but only the truly strong can do this quest. Come back with a base level of 255 or higher."; close; } mes .QNPC$; mes "Hello I need your help, Porings from the surounding feilds slip past our lazy guards, and I'm to cute to hunt them down now they're running a muk!"; next; mes .QNPC$; mes "Would you like to participate in our daily Poring Hunt?"; mes "Oh- I almost forgot to mention, we need 300m to cover any casualities."; if(select("Yes:No")-1){ next; mes .QNPC$; mes "What!- You expect me to just kill all these porings bymyself?!"; emotion e_sob; close; } if(Zeny<3000000) { next; mes .QNPC$; mes "Look I can't just let you loose swinging a sword at everything you think is a poring without some funding!"; mes "Come back when you get some more cash!"; close; } emotion e_no1; set Zeny,Zeny-3000000; next; if(!#Bloody_b_Q){ mes "[^0000FFAlice^000000]"; mes "Thanks for your patronage."; mes "You can call me ^0000FFAlice^000000 from now on..."; mes "Now get to work rookie!"; } else { mes .QNPC$; mes "Welcome back!"; mes "Good luck on your hunt!"; } set #Bloody_b_Q,1; monster "prontera",0,0,"Poring",1002,1,"Bloody Branch Quest::OnPoringDead"; close; OnPoringDead: if(#Bloody_b_Q==1){ mapannounce "prontera",strcharinfo(0)+" has found the poring!",bc_map,"0xFFCE00"; set #Bloody_b_Q,2; end; } if(!#Bloody_b_Q||((#Bloody_b_Q-gettimetick(0))/1000)>0&Bloody_b_Q&&Bloody_b_Q!=1){ mapannounce "prontera",strcharinfo(0)+" accidentally killed the poring!",bc_map,"0xFFCE00"; end; } }^ this version the player has to go back and summon a new poring if "There's already a Poring out there with your name on it!" is announced there is a poring on the map already.
    1 point
  8. File Name: Client Cleaner File Submitter: Hiero File Submitted: 06 Apr 2013 File Category: Client Tools Content Author: Hiero Hi everyone, Few mounths ago, I decided to develop a software which is able to clean all the files useless to the private server creation process in official Ragnarök Online client. It deletes by default all the files related to the client's protection such as nProtect GameGuard and HackShield. Moreover, it is simply customizable thanks to its interface. Key features : Multilingual software (English and French) Management interface Selecting files to delete Add a file to delete Delete a file added Restore the default files Add / read the description of a file Restore default descriptions Choice to create a zip file containing deleted items (folder "backup" to the root of the executable) Things to do : Complete the database Saving preferences Restore backup with software Code optimization if necessary (bug(s) correction, improvements to the developer maniac I am, etc.) Sharing sources if you wish This application is developed in C# with WinForms, if you don't have an updated Windows, you must download the .NET Framework 4. Several features will be created based on the feedback I have. Also, sorry for my bad english. I hope it will be useful ! Click here to download this file
    1 point
  9. //=================================== // Pincode system //=================================== // NOTE: Requires client 2011-03-09aragexeRE or newer. // A window is opened before you can select your character and you will have to enter a pincode by using only your mouse. // Default: yes pincode_enabled: no
    1 point
  10. Hi, You have to add in script.c: BUILDIN_FUNC(getchardirection) { TBL_PC *sd; if( script_hasdata(st,2) ) sd = map_nick2sd(script_getstr(st,2)); else sd = script_rid2sd(st); if( sd == NULL ){ script_pushint(st, -1); return 0; } script_pushint(st, sd->ud.dir); return 0; }And:BUILDIN_DEF(getchardirection,"?"),In your script:set .@dir, getchardirection(); if( .@dir == DIR_NORTHWEST ) { // You can see all DIR_* constantes in db/const.txt mes "Nice !"; }It's also possible to check the direction of another player by adding his name as argument:set .@direction , getchardirection("PlayerTester");Have fun.
    1 point
  11. hmm looks like the line numbers are incremented by 1 in your msgstringtable.txt Just change the lines 1467 for Usable Items, 1473 for Etc Items, 2052 for Equipment and 2053 for Favorite tab Your individual tab height is dependent on the longest tab name amongst the 4 of them. So like Kaitou Kid said if you reduce length of Equipment and Individual it will shrink.
    1 point
  12. Instead of "Equipment" why don't you change it to "Equip"? also for your "Individual" change it to "Fav" on you mgstringtable.txt BTW if your mgstringtable.txt is not the same with the guide provided. Just use CTRL+F search for this(w/out the double quotes) "Equipment#" and "Individual#" and replace it with my recommended label.
    1 point
  13. Damn, well then ive learned something new. Never tried to call an atcommand inside a bindatcmd NPC event label.
    1 point
  14. You want to give one item by account or one by character ?
    1 point
  15. Upon execution of the atcommand, the user invoke the NPC event label first. But you can call the initial atcommand with atcommand script npc. Use openstorage; instead of atcommand "@storage"; to avoid this error.
    1 point
  16. 1) (Euphy ways): function script getEquip { // get all equipped item IDs for (set .@i, 1; .@i < 11; set .@i, .@i + 1) { if (-1 != getequipid(.@i)) { set @items[.@idx], getequipid(.@i); set .@idx, .@idx + 1; } } return @items; } callfunc("getEquip"); // @items 2) Your way:function script getEquip { // get all equipped item IDs for (set .@i, 1; .@i < 11; set .@i, .@i + 1) { if (-1 != getequipid(.@i)) { set .@items[.@idx], getequipid(.@i); set .@idx, .@idx + 1; } } return .@items; } copyarray .@items, callfunc("getEquip"), 128; 3) By reference:function script getEquip { // get all equipped item IDs for (set .@i, 1; .@i < 11; set .@i, .@i + 1) { if (-1 != getequipid(.@i)) { set getelementofarray( getarg(0), .@idx), getequipid(.@i); set .@idx, .@idx + 1; } } return @items; } callfunc("getEquip", .@items);
    1 point
  17. You want to give an item to all online players directly in their inventory ?
    1 point
  18. No. The one in the SVN is official, the other is custom. Notably, the official script auto-detects equipment while the custom script does not.
    1 point
  19. prontera,155,170,5 script add storage 87,{ if( getgmlevel() < 98 ) end; mes "You can add an item in all account storage."; mes "Note: if one storage is full, the storage database will contain an extra line for this storage."; mes "(ID reins: ^ff000012622^000000)"; next; if( select( "Add an item ID", "Leave" ) -1 ) close; input .@item_id; if( getiteminfo( .@item_id,0 ) == -1 ) { mes "Unknown item id."; close; } query_sql "INSERT INTO `storage` (`id`, `account_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `expire_time`, `unique_id`) "+ "SELECT NULL, `login`.`account_id`, '"+ .@item_id +"', '1', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0' FROM `login` WHERE `account_id` > 1"; mes "Item add. Players must relog to see the item in storage."; close; }
    1 point
  20. Some news today. Map loading I really improve my map loading : update the zlib unpacker, optimize the mesh compilation. It's now about 2-3 times faster than before. It takes ~3 seconds to load a map like Izlude or Prontera, instant loading for little map. Lighthalzen seems to be the slowest to load : ~5 seconds. I'm quite happy of the result. Sound objects I added sound objects to the map, I'm not certain of the volume to use for this objects (Audio API allow a min volume of 0.0 and max volume of 1.0; there are some sound object with a volume of 2.0 so not sure yet what the max volume is here). You can see the sound visualization of aldebaran (all porings are a sound object): Lub files Since Renewal, a big part of servers use lub files to store data info, so it should be normal for robrowser to load this files at runtime to build its DB. So I wrote a Lub decompiler (PHP, and converted the code to JS), it don't support all opcode but is enough to extract tables (I don't care of extracting functions). Here the PHP code in action: http://www.robrowser.com/prototype/lub/ For now I'm only able to extract lub version 0x51 but it seems some client use the 0x50 version (why ? ), so I will have to extend the code later. Sprite Rendering I re-wrote the whole Entity Manager code, as the old one it support all actions/animations. I added some setter to update automatically the sprites/act/palettes when modifying/setting a new visual look, ex: you change the sex, it will automaticaly reload all sprites/actions (head, hat, weapon, ...). Palettes are applying on the pixel shader to avoid having to re-build each sprite image (faster and easier). I also face the same problem as Shinryo in his topic and used the same way to fix it, but it's definitively not the way to go : collision with roof, weird result when sprite is on the water. The better way is to project the top vertices to the up vector of the bottom part and modifying UVs to match the new form in the screen, but it's more complicate and I lack knowledge on 3D maths. Weather I just add sky and clouds to some maps (yuno, gonryun, thana_boss, 5@tower, ...) using a config file in the DB, it's funny how the client manage it. The result looks good: Other news IE11 will support webgl Web API Device Storage will allow to use local GRF without needed to select it each time at runtime (I hope this standard will be accept...). Firefox added ASM.js in the latest nighty build. It allow to run some js (at this time just arithmetic code) script at 2 times slower than native speed (comparable as Java and C#), by doing some low typage on variables.
    1 point
  21. Location: Press Esc --> Video Configuration Korean: ˟ˌ Hex: C0FCC0E5 (near 4E6F4374726C00006974656D00000000736B696C6C) Suggestion: More [4D6F7265]
    1 point
  22. I do not use it because there's no one else to chat with on my localhost test server.
    1 point
  23. Or you can use this one. This will automatically give your new player the freebies when they login. This is Account-Based. If you want to make it Character-Based, as "Master Emistry" Said, make the two "#givenStartItems" into "givenStartItems" - script ItemGiver 1,{ OnPCLoginEvent: if(!#givenStartItems) { set #givenStartItems, 1; //=== Freebies getitem <item_id>, <quantity>; } end; } PS: if you want an item to have an expiration, use "rentitem" instead of "getitem"
    1 point
×
×
  • Create New...