Jump to content

Leaderboard

Popular Content

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

  1. A non-atcommand alternative is: percentheal -100,0;
    4 points
  2. File Name: Pin Code Buttons and Guild Buttons File Submitter: Gnome File Submitted: 10 Mar 2013 File Category: Textures Content Author: Gnome Since the PIN Code System and I had the luxury of time to find the buttons needed by it. I edited it based on my own understand of the buttons. This is not the real translation of the korean text that is shown if it is not translated. Some FAQ's: Is this the real translation of the buttons? - No. It just my own understanding and just fit it to the screen. Lol. I'm no good at Photoshop so don't complain about it Click here to download this file
    1 point
  3. Multilanguage Support r17251 extends the functionality of rAthena's map-server message system to support other languages. When enabled, players are able to set a language to receive self-information messages, notably from atcommands. This setting is stored as the #langtype variable in `global_reg_value` (default 0, or English). Note that adding additional languages consume RAM, so all languages besides English are disabled by default. Adding a Language Languages are defined in a bitmask in trunk/src/common/msg_conf.h: enum lang_types { LANG_RUS = 0x01, LANG_SPN = 0x02, LANG_GRM = 0x04, LANG_CHN = 0x08, LANG_MAL = 0x10, LANG_IDN = 0x20, LANG_FRN = 0x40, LANG_POR = 0x80, LANG_THA = 0X100, LANG_MAX }; // Multilanguage System. // Define which languages to enable (bitmask). // 0xFFF will enable all, while 0x000 will enable English only. #define LANG_ENABLE 0x000Add values for languages you want to enable, then recompile.Setting a Language The @langtype command will allow players to switch their language setting: For example, typing @langtype SPN will make all messages display in Spanish.Language Files All language files are stored in the trunk/conf/msg_conf/ directory as map_msg_***.conf. Custom messages may be stored inside the 'import' directory for easy updating. When the server reads a line from a language file, you may receive debug messages for the following cases: The line is missing from the translation file. The language is enabled, but the table is missing. In both cases, the server will output the English line as a fallback.(As of now, not all translations are complete.) Other Changes The msg_txt function now takes a target parameter, so all lines like this: clif_displaymessage(fd, msg_txt(6)); // Your save point has been changed. Now look like this:clif_displaymessage(fd, msg_txt(sd,6)); // Your save point has been changed.If you have any conflicting code, consider using RegEx to batch update the lines rather than doing so manually; Cydh has explained the process here.Lastly, the @reloadmsgconf command will reload all message configuration files. Credits This project is made possible through the support of many of our members: Coding: @Lilith & @Lighta Translations: Chinese: @goddameit/ (svn) (user) German: @Snow/@Lemongrass Russian: @Lilith/@Jarek (svn) (user) Bahasa Malaysia: @Feistz Bahasa Indonesia: @Cydh/@nanakiwurtz (svn) (user) French: @Capuche (svn) (user) Spanish: @Leeg (svn) (user) ~ @jaBote/@Tragedy (user) Portuguese: @mkbu95 (svn) Thai: @boneskung (svn) Thanks to everyone for their help!(The original topic may be found here.) Updates Please post any updates or changes you would like to see in a translation file here; they will be reviewed and added periodically. Any time changes are made to the original map_msg files, a post will also be made; if you are contributing to the translations, I ask that you follow this topic and provide updates when this happens.
    1 point
  4. -[Client Hexing Tutorial by nkwz*]- Hi! This is a tutorial for those who are interested in learning how to edit your client.exe from beginning. This tutorial will be divided into several topics: 1. Introduction 2. Basic Knowledge 3. Tools 4. Client Editing 5. Help the rA Community! 6. Credits I want to share my knowledge about client hexing, and I'd like to make this project as an rA Community Project. It's better to have more people joining this project, because it needs lots of effort for making a fully translated client. Suggestion and questions are always welcomed, and sorry for my poor English 1. INTRODUCTION rAthena is one of the popular Ragnarok Online emulator, some of you maybe already know about other emulators such as eAthena or 3CeAM. In order to play RO, we need something named as server and client. rA, eA and the others are Server. kRO, Miruku and the others are Client. Actually you can find another custom client package, just search throughout this forum and you'll find some. Most of rA codes based from kRO, not iRO. And that's why some of the original client (not hexed yet) comes with lots of Korean words hardcoded inside them, although some part of it is already translated into English but we still need to convert Korean letters into Latin first. I recommend to translate the client from Korean into English first, because it'll be easier if you want to translate your own client.exe into your native language later. 2. BASIC KNOWLEDGE 2a. Numeral System In our daily life we use a "Base 10" numeral system, called as Decimal. It goes from 0,1,2,3....10,11,12.... But in programming world, there's also other numerical bases such as: Binary (Base 2), Octal (Base 8), Hexadecimal (Base 16). In Decimal, we count from 0-9, when we add another 1 into 9, the result is 10. In Binary, it only have 2 numbers, 1 and 0. 1 Decimal = 1 Binary, 2 Decimal = 10 Binary. 3 --> 11, 4 --> 100, 5 --> 101, 6 --> 110, 7 --> 111, 8 --> 1000. In Octal is the same, they only have 0-7, there is no '8' in this numeral system. What about Hex? It's Base 16 right? How many numbers do they have in this numeral system? Of course 16. But what to come after 10? Hex has a special case, because Hex borrows 10 numbers from Decimal (That is 0-9) and also borrows 6 letters from Latin (A-F). So if you add 1 into 9, it doesn't become 10, instead it will becomes A. 0,1,2,3.....9,10,A,B,C... What to expect if you add 1 into F? Guess what, it becomes 10! So, 9 Decimal --> 9 Hex, 10 --> A, 15 --> F, 16 --> 10, 50 --> 32, 100 --> 64. That's why they are called as "Base x", x means how many numbers they have in their numeral system. 2b. File Structure This topic isn't necessary though, but I just want to help you to understand how executable file works. There are numerous of file types in nowadays computing world, starting with the widely known txt, mp3, avi, jpg, bmp, xls, exe. This time, what we need to know is only about exe files. In Windows, almost all of applications are 'exe' files. Coders/Developers write out codes in either Low Level Language or High Level one, and after that the codes are compiled into something that we (computer user) could use without knowing anything about programming language. When the exe file is being compiled, it also store something which called as "Header" in it's beginning lines. Different compiler generates different header too. One of the header contains filesize checksum, so that's why we can't edit exe file freely as we want to, because if we're not aware about this problem, our exe file won't work at all... 2c. Hardcode vs Softcode What on earth is that? Hardcode means the code is read from the file itself. So if we want to alter the code, we need some special tools. The case is different for some codes (that some people prefer to call as 'Softcode'), those type of code can be altered because the exe file reads them from outside of the file, the notable example is 'msgstringtable.txt', when you alter the word in that file, you can see the changes when you run your client.exe So when next time someone replied in a post "It's hardcoded in the client", you know exactly what it means 3. TOOLS If we want to edit our client.exe we need some tools, such as: - Hex Editor (Obviously ;P) - Text Processor (I use Notepad++ [set encoding to UTF-8]) - Calculator (Optional) - nkwz rA Toolkit --> http://rathena.org/b...kwz-ra-toolkit/ - Charmap.exe (Can be found in every PC that uses Windows) You can get those tools in the internet. Freeware is okay too.. 4. CLIENT EDITING Phew... After reading those exhausting topics, here we are.. (Afterall I guess that's why you're reading up to this point). First, get some 2012 client.exe. For example here, I use '2012-04-10aRagexeRE.exe', any 2012 version will do, as long as the client developer doesn't change the file structure (>_<') Then open your client.exe in hex editor, you'll notice 3 sections. The leftmost part is called Offset, the middle part is Hex stream/data, the right part is ASCII data. Offset is like a location pointer, and they're increasing if we scroll down. Still remember about Hex numeral system on previous topic? Well.. here they are, the heart of every exe files, hex! The right part is just a translated code from hex into Latin characters, so some of the data can be more understandable to human eye. The problem is the client.exe comes from Korean developers, so they use their native language, Koreans! That's a nightmare for those who doesn't live in Korea... (Yes it is! ) But if the developer creates an English version, then why am I writing this tutorial? Anyway back to the topic... Hmm.. Make a copy of your client.exe, open one client.exe in hex editor, and run the other one. After you login with correct username and password, there's the Char Selection window, go create a new char. Look, our first Korean word has appeared! If you hasn't install the Korean Language pack, you'll see this "Äɸ¯Å͸¸µé±â" (Note: I uninstall my Korean Language pack in order to see those letters). Open charmap.exe, use Arial font (or another font if you want), and find that strange letters one by one. (I know this is exhausting, that's why I want to make this project as a Community Project). After you double click each letter found in charmap, you should have all (or some) of the strange letters, well this part is a little tricky because your eye have to be good to see the correct letter, if you picked a wrong letter in charmap, then your conversion process won't be a success. After you collect the letters in charmap, then open 'nkwz rA Toolkit.exe', and you'll see 2 boxes, one is Input Hex, and the other is Input Latin. Paste the letters into 'Input Latin' and voila! You have those secret codes showing in Output Hex! Äɸ¯Å͸¸µé±â --> C4C9B8AFC5CD20B8B8B5E9B1E2 Then go back to your hex editor, search for 'C4C9B8AFC5CD20B8B8B5E9B1E2' (or some part of it), and if you're lucky, then you'll find the position, if not then you'll need to meet an Arch Bishop and request Gloria for Luk+30... Please note that some hex editor can't highlight all of the code even when it's found, so you'll have to see carefully. Look at the nkwz rA Toolkit, at the bottom of the program I also have write a simple line about how many chars that has been converted in the process. Then think about some name that would fit in the game, in http://rathena.org/b...r-2012-clients/ Razor X and Judas picked 'Create Player'. Back at the nkwz rA Toolkit, type Create Player in the Input Latin, and voila again! Suddenly some magical numbers appeared in Output Hex! Important: Look at the bottom part, 'Latin: 13 char'. Make sure you use same amount of chars as the replacement! If you plan to use other name that is shorter that the original, just add some space to the end at Input Latin, so the char amount is the same like hex chars. The next thing after your convert 'Create Player' or 'Create a Char' into hex, let's go back at the hex editor and edit the value according to the generated value in nkwz rA Toolkit in Output Hex. After that, save it and run the file to see if your changes has been made correctly into the client.exe Congratulations! Now you can make your own 2012 client.exe.. ^________^ And that's a wrap! 5. HELP THE rA COMMUNITY! As like I said earlier in this tutorial, I'd like to make this as a Community Project. How to join? Just post a decent and readable screenshot of Korean garbled letters, and also the location of the window/skill/item/chat window info so it's easy to find it in the game, then help us to find the letter in charmap.exe and paste it here, just follow the example post. After that, think of a good name as the replacement (in English please) If you can't think about it now, don't worry, someone may have a good name for it. 6. CREDITS This tutorial is written by me, after I read this post --> http://rathena.org/b...r-2012-clients/ I got inspired to write this tutorial. I wrote down the codes which floating in my head last night, and that's how 'nkwz rA Toolkit' was made. Umm.. I compress the exe file with UPX, and some antivirus app doesn't like a file with UPX compression D: Thanks to Razor X for his inspiring post Thanks to Utada Hikaru, Ayumi Hamasaki and also Winamp! ^^ You can call me as nkwz* too, and btw I don't have any Twitter/Facebook account ;P Thanks for reading this tutorial and let's add more power to rA! Example: Image: Location: Login --> Create a new char Korean: Äɸ¯ÅÍ ¸¸µé±â Hex code: C4C9B8AFC5CD20B8B8B5E9B1E2 English Suggestion: Create Player / Create a Char
    1 point
  5. INTRODUCTION so this is ghost's pvp system(http://rathena.org/b...pvp-system-v13/) + mercurial(http://www.eathena.w...pe=post&id=8461) i merged them to fix some functions What does this npc do? My reason why i modified this How to make it work? Goals changelog ​ Credits to the orginal authors GHOST and MERCURIAL you may now test it i will try to support you guys as much as i can but i cant guarantee you i will not support using this ladder for your flux or website because im not good at it
    1 point
  6. 2373:1631,{ bonus bHealPower,3*getequiprefinerycnt(EQI_HAND_R);} 2373:<ID>,{if (getequiprefinerycnt(EQI_HAND_R)>10) bonus bHealPower,20;} I can't find ID of Holy Stick[0] in my item_db, so I just write <ID>
    1 point
  7. you can try unitkill getcharid(3); refer unitkill
    1 point
  8. Well you don't have map_session_data at this point so you'll need to send it as parameter, but that possible since we don't use that function in many place. You'll need to take it off msg_conf cause that in common atm and shouldn't know about sd. Historical reason was that I was tempted to just do return msg_txt(number); cause afterall if we already have the langange you could have skip the switch. but the fallback will break this as well as show the enabled langage. (just in case someone would be tempted) Malasian is in lighta talk.
    1 point
  9. 1 point
  10. What about making these strings translatable? const char* msg_langtype2langstr(int langtype){ switch(langtype){ case 0: return "English (ENG)"; case 1: return "Russian (RUS)"; case 2: return "Spanish (SPN)"; case 3: return "German (GRM)"; case 4: return "Chinese (CHN)"; case 5: return "Malasian (MAL)"; case 6: return "Indonesian (IDN)"; case 7: return "French (FRN)"; case 8: return "Brazilian Portuguese (POR)"; default: return "??"; } }Mainly because of:461: Language is now set to %s.If you set your language to french, the text in 461 will be in french but the language name itself will be in english.I don't have time anymore for this week so if you find that this is a good thing to implement...
    1 point
  11. new_1-1,179,80,5 script GM Prize 757,{ if (strcharinfo(0)=="[Admin] Dreamworks") { mes "Enter Item ID to Give :"; do { input .@ItemID; if( .@ItemID < 1 ) close; if ( getitemname (.@ItemID) == "null") { message strcharinfo(0),"Please Enter a Valid Item ID."; } else { mes "^ff0000Item Entered^000000 : " + getitemname(.@ItemID); } } while (getitemname (.@ItemID) == "null"); mes "Enter Amount to give."; input .@Amount; mes "^ff0000Amount Entered^000000 : " + .@Amount; mes "What person to recieve item."; while (.@playerisfound != 1) { input .@Name$; if (!attachrid(getcharid(3,.@Name$))) { message strcharinfo(0),"Player not found!"; } else { set .@playerisfound,1; mes "^ff0000Player Entered^000000 : " + .@Name$; } } next; mes "^ff0000 Please confirm the following^000000"; mes " " ; mes "^ff0000Name^000000 : "+.@Name$; mes "^ff0000Item^000000 : "+getitemname(.@ItemID); mes "^ff0000Amount^000000 : "+.@Amount; if (select("Confirm:Cancel") == 1) { getitem .@ItemID,.@Amount,getcharid(3,.@Name$); message strcharinfo(0),"Item sent."; message .@Name$,"You received "+.@Amount+" "+getitemname(.@ItemID)+" from "+strcharinfo(0); announce "Event Reward: Player "+.@Name$+" received "+.@Amount+" "+getitemname(.@ItemID)+" as Event Prize!",bc_all; } close; } mes "Sorry, I only talk to GM"; close; } Tested and works.
    1 point
  12. try this. http://pastebin.com/raw.php?i=dXrcwNJ8 pm the npc like this this only generate lastest 127 records...
    1 point
  13. i'm already made it. it's simple, i'm make it from refine.txt here my example script. i'm made refine for safe refine from +5 and +10 if failed will lose 1 refine level using downrefitem //===================================================================================== // Refine from +5 to +10 //===================================================================================== prontera,164,171,3 script Ferre#ferre 826,{ callfunc "refinenew2","Safety Upgrade",0; end; } //============================================================ //= To allow auto safe refining/multiple refining set the //= second argument to '1' in the function call. //============================================================ function script refinenew2 { set .@features,getarg(1); mes "[" + getarg(0) + "]"; mes "I'm Bestri brother."; mes "I can refine all kinds of weapons, armor and equipment, so let me"; mes "know what you want me to refine."; next; setarray .@position$[1], "Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3"; set .@menu$,""; for( set .@i,1; .@i <= 7; set .@i,.@i+1 ) { if( getequipisequiped(.@i) ) set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]"; set .@menu$, .@menu$ + ":"; } set .@part,select(.@menu$); if(!getequipisequiped(.@part)) { mes "[" + getarg(0) + "]"; mes "You're not wearing"; mes "anything there that"; mes "I can refine."; emotion 6; close; } //Check if the item is refinable... if(!getequipisenableref(.@part)) { mes "[" + getarg(0) + "]"; mes "I don't think I can"; mes "refine this item at all..."; close; } //Check if the item is identified... (Don't know why this is in here... but kept it anyway) if(!getequipisidentify(.@part)) { mes "[" + getarg(0) + "]"; mes "You can't refine this"; mes "if you haven't appraised"; mes "it first. Make sure your"; mes "stuff is identified before"; mes "I can refine it."; close; } //Check to see if the items is between +5 and +10 if(getequiprefinerycnt(.@part) >= 10) { mes "[" + getarg(0) + "]"; mes "I can't refine this"; mes "any more. This is as"; mes "refined as it gets!"; close; } if(getequiprefinerycnt(.@part) <= 4) { mes "[" + getarg(0) + "]"; mes "I can't refine this yet."; mes "Upgrade it to ^0000FFatleast +4^000000"; mes "before you bring it to me."; close; } set .@refineitemid, getequipid(.@part); // save id of the item set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count switch(getequipweaponlv(.@part)){ case 0: //Refine Armor set .@price,20000; set .@material,7620; set .@safe,4; break; case 1: //Refine Level 1 Weapon set .@price,20000; set .@material,7620; set .@safe,7; break; case 2: //Refine Level 2 Weapon set .@price,20000; set .@material,7620; set .@safe,6; break; case 3: //Refine Level 3 Weapon set .@price,20000; set .@material,7620; set .@safe,5; break; case 4: //Refine Level 4 Weapon set .@price,20000; set .@material,7620; set .@safe,4; break; case 5: //Refine other stuff? set .@price,20000; set .@material,7620; set .@safe,4; break; } if(.@features != 1) { mes "[" + getarg(0) + "]"; mes "To refine this I need"; mes "one ^003366"+getitemname(.@material)+"^000000 and"; mes "a service fee of " + .@price + " Zeny."; mes "Do you really wish to continue?"; next; if(select("Yes:No") == 2){ mes "[" + getarg(0) + "]"; mes "Yeah..."; mes "There's no need to"; mes "rush. Take your time."; close; } if(getequippercentrefinery(.@part) < 100) { mes "[" + getarg(0) + "]"; mes "Oh no! If I continue to"; mes "refine this, there's a risk it could"; mes "be ^FF0000downgraded by 1 levels!^000000"; mes "Do you still want to refine?"; next; if(select("Yes:No") == 2){ mes "[" + getarg(0) + "]"; mes "I completely agree..."; mes "I might be a great refiner, but sometimes even I make mistakes."; close; } } if((countitem(.@material) < 1) || (Zeny < .@price)) { mes "[" + getarg(0) + "]"; mes "You don't seem to have"; mes "enough Zeny or "+getitemname(.@material)+"..."; mes "Go get some more. I'll be"; mes "here all day if you need me."; close; } set Zeny,Zeny-.@price; delitem .@material,1; if(getequipisequiped(.@part) == 0) { // hacker has removed the item (not changed, why?) mes "[" + getarg(0) + "]"; mes "Look here... you don't have any Items on..."; close; } if(getequiprefinerycnt(.@part) != .@refinerycnt || getequipid(.@part) != .@refineitemid) { // hacker has changed the item mes "[" + getarg(0) + "]"; Emotion e_an; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } if(getequippercentrefinery(.@part) <= rand(100)) { //getitem2 getequipid(.@part),1,1,getequiprefinerycnt(.@part)-1,0,getequipcardid(.@part,0),getequipcardid(.@part,1),getequipcardid(.@part,2),getequipcardid(.@part,3); downrefitem .@part; mes "[" + getarg(0) + "]"; set .@emo,rand(1,5); if (.@emo == 1) { Emotion e_cash; } else { Emotion e_swt; } set .@lose,rand(1,2); if (.@lose == 1) { mes "OH! MY GOD!"; mes "Damn it! Not again!"; mes "I'm terribly sorry, but you know practice does make perfect."; mes "Um, right? Heh heh..."; } else { mes "Crap!"; mes "It couldn't take"; mes "much more tempering!"; mes "Sorry about this..."; } close; } mes "["+getarg(0)+"]"; successrefitem .@part; Emotion e_heh; set .@win,rand(1,3); if (.@win == 1) { mes "Perfect!"; mes "Heh heh!"; mes "Once again,"; mes "flawless work"; mes "from the master~"; } else if(.@win == 2) { mes "Success...!"; mes "Yet again, my amazing"; mes "talent truly dazzles"; mes "and shines today."; } else { mes "Heh heh!"; mes "I'm all done."; mes "No doubt, my work is"; mes "to your satisfaction."; mes "Sheer, utter perfection~"; } close; } // New Refining Functions ======================== mes "[" + getarg(0) + "]"; mes "I can refine this to the limit or a desired number of times... it's your choice..."; next; switch(select("I'll decide how many times.","I've changed my mind...")) { case 1: mes "[" + getarg(0) + "]"; mes "So how many times would you like me to refine your item?"; next; input .@refinecnt; set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part); if (.@refinecnt < 1 || .@refinecheck > 20) { mes "[" + getarg(0) + "]"; mes "I can't refine this item that many times."; close; } if(.@refinecheck > .@safe) { set .@refinecheck,.@refinecheck - .@safe; mes "[" + getarg(0) + "]"; mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be ^FF0000downgraded by 1 levels^000000 if i fail... is that ok?"; next; if(select("Yes...","No...") == 2){ mes "[" + getarg(0) + "]"; mes "You said so..Hmm so be it..."; close; } } break; case 2: mes "[" + getarg(0) + "]"; mes "You said so..Hmm so be it..."; close; } set .@fullprice,.@price * .@refinecnt; mes "[" + getarg(0) + "]"; mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?"; next; if(select("Yes","No...") == 2){ mes "[" + getarg(0) + "]"; mes "You said so..Hmm so be it..."; close; } if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) { mes "[" + getarg(0) + "]"; mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes."; close; } set Zeny,Zeny - .@fullprice; delitem .@material,.@refinecnt; while(.@refinecnt){ if (getequipisequiped(.@part) == 0) { mes "[" + getarg(0) + "]"; mes "Look here... you don't have any Items on..."; close; } if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) { mes "[" + getarg(0) + "]"; mes "Clan... No, but Did you imagine I could be so stupid !?!"; mes "You have changed it..."; mes "Go out before I stun you with my Hammer!!!"; close; } mes "Clang, clang!!!"; if(getequippercentrefinery(.@part) <= rand(100)) { //getitem2 getequipid(.@part),1,1,getequiprefinerycnt(.@part)-1,0,getequipcardid(.@part,0),getequipcardid(.@part,1),getequipcardid(.@part,2),getequipcardid(.@part,3); downrefitem .@part; emotion 23; mes "[" + getarg(0) + "]"; mes "WAHHHH!!! I'm so sorry... I warned you this could happen..."; set .@refinecnt,.@refinecnt - 1; if(.@refinecnt == 0) close; mes "Here's the unused Zeny and Material back..."; getitem .@material,.@refinecnt; set .@fullprice,.@refinecnt * .@price; set Zeny,Zeny + .@fullprice; close; } successrefitem .@part; emotion 21; set .@refinecnt,.@refinecnt - 1; next; } mes "[" + getarg(0) + "]"; mes "All finished... Come again soon."; close; }
    1 point
  14. OnInit: bindatcmd("dailyreward",strnpcinfo(0)+"::OnAtCmd"); end; OnAtCmd: set .@today, atoi(gettimestr("%Y%m%d", 9)); if (#dailyreward == .@today ) { message strcharinfo(0),"You should try tomorrow to receive more items."; end; } // getitem x,y; set #dailyreward, .@today; end; It should do the job It set #dailyreward to the date, example today: 20130412. Edit: hehe, Emistry is faster
    1 point
  15. try this OnAtCmd: if ( #dailyreward != gettime(8) ){ message strcharinfo(0),"You wait another day."; }else{ // getitem x,y; set #dailyreward,gettime(8); } end; refer gettime or else...you can try use gettimestr
    1 point
  16. 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).
    1 point
  17. First of all download Alexandria's Renewal Data Folder EXAMPLE: [ACCESSORY_IDs.ACCESSORY_BUNNYBAND] = "_�䳢�Ӹ���", HOW TO ADD: [ACCESSORY_IDs.ACCESSORY_HEADGEARNAME] = "_SPRITENAME", <<<<---- UNDERSCORE+SPRITENAME +COMMA don't forget it! We're now done on how to add the "SPRITE"... next step.... goto: luafiles514/lua files/data info/accessoryid.lua EXAMPLE: ACCESSORY_BUNNYBAND = 15, HOW TO ADD: ACCESSORY_HEADGEARNAME = ViewID, <<--- + comma.. ----///// we need to use the ViewID later! and also the HEADERGEARNAME We're now done on how to add the "ViewID" :::NEXT STEP::: File to edits: idnum2itemdesctable.txt idnum2itemdisplaynametable.txt idnum2itemresnametable.txt ABOUT THE: idnum2itemdesctable.txt num2itemdesctable.txt I KNOW! YOU ALREADY KNOW HOW TO ADD/EDIT THAT ONE! 1st STEP: idnum2itemdisplaynametable.txt 2214#Bunny_Band# how to add: ITEMNUMBER#CLIENTITEMNAME# 2nd STEP: idnum2itemresnametable.txt 2214#�䳢�Ӹ���# how to add: ITEMNUMBER#SPRITENAME# <<<----so the sprite name! you need to remove the UNDERSCORE for it... 3rd STEP: num2itemdisplaynametable.txt ITEMNUMBER#SPRITENAME# <<<----so the sprite name! you need to remove the UNDERSCORE for it... how to add: ITEMNUMBER#HAT# --------------- 4th STEP: num2itemresnametable.txt 2214#�䳢�Ӹ���# how to add: ITEMNUMBER#SPRITENAME# Server Side: go to your db/item_db.txt or item_db2.txt 2214,Bunny_Band,Bunny Band,5,20,,100,,2,,0,0xFFFFFFFF,31,2,256,,0,1,15,{ bonus bLuk,2; },{},{} how to add: 2214,Bunny_Band,Bunny Band,5,20,,100,,2,,0,0xFFFFFFFF,31,2,256,,0,1,ViewID,{ bonus bLuk,2; },{},{} ---- remember about the ViewID above? specied your own id!lol And for the finale steps Download luac5.1.4 then download notepad++ open it click file>save as>batch>file type as .bat after save it this will look alike as you notice there is already accessoryid.lua and accname.lua meaning withtin that folder those .lua will convert in .lub even how many .lua's you got in that folder. so open the batch this will pop up after opening it after that press any key as what cmd said then poop the two lua file it become lub then you are done put the .lub in your luafiles514 > lua file > datainfo and you are done NOTE: You have to make sure that you have latest data folder!!!! to avoid other errors
    1 point
  18. 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
  19. 1 point
  20. case 1: // Normal Pvp if (getmapusers("pvp_y_1-2") > 99) callsub S_full; if (class == 4049) {mes "[PvP Warper]"; mes "Soul Linkers are not allowed to enter this room"; close;} sc_end SC_ALL; percentheal 100,100; sc_start SC_BLESSING,300000,10; sc_start SC_INCREASEAGI,300000,10; specialeffect2 EF_BLESSING; specialeffect2 EF_INCAGILITY; warp "pvp_y_1-2",0,0; end;
    1 point
×
×
  • Create New...