Popular Content

Showing content with the highest reputation since 09/22/2018 in all areas

  1. 15 points

    Version 1.0.0


    Hello everyone! I'm maken06. I'm learning to create sprites and this is my first monster "Wooden Training Doll from Maple Story". Special thanks to @smiths12 thanks to his teachings, I managed to animate the monster. pd: Do not forget to give me a reputation or reaction.


  2. 8 points
    I tried so hard not to post this..but today I really make my heart strong and ask this question. first of all to all rathena authorities please don't get angry and don't ban me for asking this, the paid shop system is not a very good reason is as follows in my opinion. 1] the system of once a week payment is very very bad. 2] I really don't like the 20$ limit of withdrawing. [ say a 80$ payment will take 4 days just to put withdraw the request and then waiting for infinity for 20$-20$ payments ]. 3] if rathena is worried about the refund from PayPal,.. then they should make it clear that the payment will be released after refund date limit of PayPal.. i guess that is 60days, to be on safer side rathena can keep 90days fixed payment schedule. 4] the uncertain waiting time just kills. there is nowhere i would know, when will be our payments be released, if asked your answers sound very very harsh with alot of anger. 4] if a person receives a payment 80$ on day 1... then he should get his payment on 90th day. [deducting the rathena margin] 5] people are waiting for 4 to 6 months or maybe more than that,..and still not getting payments. 6] i am sure everyone selling on rathena shop is not satisfied with the shop system. 7] people want to sell more on rathena, if have a guarantee about their payments. Please do something on this. rathena authorities please don't get angry on me or ban me for posting this.[ i am not against rathena, I am just posting the problems that I am facing ] if I am the only one having this problem, sorry for generalizing the problem. please don't say that if you have a problem, why are you still at rathena ?
  3. 5 points
    To make an RO offline server usually you need: setup and configure MySQL database git clone emulator source code get from somewhere client files create a database for the emulator set correct permissions for database users which will be used via emulator for working with DB download and install Visual Studio Community 2017 with all packages (size ~10GB) configure mechanic, turn off some SRC functionality and so on Take from somewhere exe file, apply correct patches to your exe Build a GRF with all required for exe resources and files Compile the server (from sources to a binary file (what you can run on your OS)) Configure server-side (emulator), set proper settings, and so on to make it work copy-paste your game-client files and exe to kRO game client start MySQL database, run the emulator, launch game client This is hard for newbies. Because you will do a lot of mistakes because you can't know different details. The package solve almost all steps above and leave to you only 2 last steps (copypaste, launch, and play) How to make everything work (2-minute guide) Download Extract Watch video or read readme.txt Launch OpenServer and start server (Green Flag) Copy-paste 1 time only game client files to kRO folder Launch emulator Launch game exe from kRO client folder Login and play This is super easy, is not it? I have prepared for you almost everything, to make sure that you will skip painful newbie entry point with making it just work. This package can be used as a template for building your own server (if you really wish to and will be stuck somewhere). All emulators, client, repository folders are connected to remote repos, so you can always easy update emulator or client by yourself without waiting for any updates from my side. I made almost everything what you need to keep always up to date emulator. But for making it up to date, please read the section below later, this requires some steps and understanding from your side (I failed to make 1 click solution to update it, because of problems inside emulator) Download Links Google Drive | Fast Mirror 2 | Mega Please download the whole folder what you see if you are newbie. Current Full Pack Size: 3.36 GB (include kRO client and everything else) 1.2GB = emulators, packed grfs, tools, openserver, and so on (this is raw package) 2.16GB = kRO clean game client which is required for the files above (07_clean_kRO_client) Old topic (first version from 2017 year): https://web.archive.org/web/20180420124127/https://rathena.org/board/topic/109823-ragnarok-online-complete-local-server-client-pack-2018-make-your-ro-server-in-less-then-5-minutes Please read readme.txt before asking any question. Changelog: 07 July 2018 - updated all content inside the package to their actual versions. Also, changed exe to 20180530 one from 20170614, and also repacked game clients as well too. Fixed small minor reported issues. Download links updated (please use the client) 01 June 2018 - updated and repacked kRO client (merged rdata.grf into data.grf for reducing total size of full kRO client), updated rAthena codebase up to 01 June 2018, recompiled all servers, fixed reported bugs related to the VIP system, fixed crash issue with Gentleman Pipe, all download links updated, if you want to take the update, re-download the whole package. 02 May 2018 - added VIP system options April 2018 - second unbounded version from the anacondaqq (you can update manually the whole package) March 2017 - initial release
  4. 5 points

    Version 1.0.3


    Extended Vending 2.0 Made in Git Hash: '042b88623bf549b88ba619991aaa186d45f7f998' Description Yet another version of Extended Vending, this one works in actual rA c++. It has a few fixes, including vending tax only working with Zeny as currency. What is new? I tried to improve this amazing mod adding a new feature: Vending Report (Mailbox). Basically... whenever you buy items to a vendor, he receive a report that who bough,what items, how many and total profit of them. You can disable this feature through conf/feature, or If you want to disable it for a specific player you must set the permanent variable called NOVREPORT (by a NPC/Bindatcmd/Idk) For < 2015-05-13 Clients Since old mailbox has 300 characters less than RoDex, I decided to take off items name and amount. So only will send 'who bought' and 'total profit'. Feel free to Donate If you want to support me.


  5. 5 points

    Version 1.0.0


    I'm not that good at scripting but I want to help the community by making this Lucky Roulette Prize Changer so you won't need to go to your sql just to update the prize. To display the guide, you need to upload the rouletteGuide.bmp in your GRF. ( The file is included in the download. ) Reminder : Lucky Roulette's Prizes will only refresh when the server restarts but the list is updated instantly.


  6. 3 points

    Version 1.0.0


    Custom Monster from MS.


  7. 3 points
    Hey all. I'll be on a cruise until October 20th, so messages sent through the communication platforms that I use (Skype, Discord, rAthena, FB, e-mail) will likely be answered with severe delay. My apologies in advance and thank you for your patience!
  8. 3 points
    Weekends are for taking a rest, except for people who can pay double rate
  9. 3 points

    Version 2.2.0


    Third Job Costumes + New Classes The Correction With the advent of jRO releasing new Job Costumes, and also, the new classes from the Taekwon branch, many of server owners want to replace the vanilla sprites or even, implement the bodystyle system. But, there's a catch! Originally jRO, and now, even kRO spriters, have made it completely off of the default pattern of palette. In a classic example, you can notice the pattern of the RO palettes. What matters is the position of the colours, as an example, for all jobs, the white-ish tones will be always on the same row, so we can use it to create custom palettes. See how it works: But jRO didn't follow the classic pattern, making it incompatible with custom palettes (@Kamishi ones included). So, I edited frame by frame of each job sprite, of each gender, mounted or not, correcting them, converting them in a way so many of the previously created palettes will work. This package includes: Alternate Outfits: Alternate Royal Guard M/F + Gryffon Battlemount + Lion Mount Alternate Ranger M/F + Warg Battlemount + Ostrich Mount Alternate Minstrel/Wanderer + Ostrich Mount Alternate ArchBishop M/F + Alpaca Mount Alternate Warlock M/F + Fox Mount Alternate Mechanic M/F + Savage Mount Alternate Genetic M/F + Savage Mount Alternate Guillotine Cross M/F + Hyena Mount Alternate Shadow Chaser M/F + Hyena Mount Alternate Sorcerer M/F + Fox Mount Alternate Sura M/F + Alpaca Mount Alternate Rune Knight M/F + Dragon Battlemount + Lion Mount New Classes Star Emperor M/F + Wolf Mount Soul Reaper M/F + Wolf Mount As requested by @Emistry, I also added an extra, making it more compatible to default palettes: Kagerou/Oboro + Frog Mount Following the another @Emistry's request, all files are now already on GRFs. The previous version had no Cashmount palette included, this one fixes the issue. Only the already released costumes are supported at this moment. The Rune Knight seems to be the last of them, it's over a year from the first release! As a final part of the package, I'm including Classic Palettes for all Alternate Costumes. Enjoy the final product!


  10. 2 points
    View File Extended Vending 2.0 Extended Vending 2.0 Made in Git Hash: '042b88623bf549b88ba619991aaa186d45f7f998' Description Yet another version of Extended Vending, this one works in actual rA c++. It has a few fixes, including vending tax only working with Zeny as currency. What is new? I tried to improve this amazing mod adding a new feature: Vending Report (Mailbox). Basically... whenever you buy items to a vendor, he receive a report that who bough,what items, how many and total profit of them. You can disable this feature through conf/feature, or If you want to disable it for a specific player you must set the permanent variable called NOVREPORT (by a NPC/Bindatcmd/Idk) For < 2015-05-13 Clients Since old mailbox has 300 characters less than RoDex, I decided to take off items name and amount. So only will send 'who bought' and 'total profit'. Feel free to Donate If you want to support me. Submitter Easycore Submitted 07/10/2018 Category Source Modifications Video Content Author Lilith, Easycore  
  11. 2 points
    Idea Create a package of code compiler for the emulator, which took up little space, and will as portable as possible, it will not require installation, and which can be stored on a USB flash drive. Current Status: semi-done (works with almost emulator, except rAthena for reasons inside CMakeList.txt and other broken parts in code) Download Link: MEGA or Google Drive (189MB) How to use? Like on Linux, but on windows (thx to Cygwin) Download, extract, run start_console.cmd cd D:\path\to\your\emulator make clean && ./configure && make server wait when compilation will finish ./run-server.bat make sure that your SQL server is working fine (if you don't have any install, or take OpenServer from RO offline pack) If you wish to run a server outside the Cygwin environment, you need a lot of dlls copy-paste from /bin/ folder to emulator I give up to finish it and fix rAthena compiler issue (because the issue with CMake files, they are weird), because I have no time and it's out of my interest. Extra Notes Request: please, someone who can fix the rAthena to make work with this release. 189MB compiler is very helpful, because not need to download 1.9GB for lite MSBuild, and ~8-9GB for Visual Studio. Feel the difference. Note: cygwin always slower than original native code. Note: rAhena can't compile with -stl=c++11, use -stl=gnu++11 Note: even with this -stl=gnu+11 you will get a crash a char-server, if you are a developer, try to debug it by yourself and fix, this is rAthena issue, not a package issue. Note: tested: hercules, eathena, brathena, 3ceam -> works fine without any issues, even in gdb mode.
  12. 2 points
    Original guide is in Hercules forum, I just import the information into rAthena since both emulator share most of the similar trait when using query_sql and I guess the main reason is Olrox reminded me to do so ... because someone else might claim it as their own ... etc Anyway, this guide is a compilation of SQL commands that I have used, or Questions answered on the forum every single subject here are related to rAthena/Ragnarok Online in some ways, so you won't feel bored reading them XD Table of Content 1. When to use *escape_sql script command 2. How to build a case-sensitive table 3. Choose a table type, MyISAM or InnoDB ? 3a. How to index a table properly 3b. Why you shouldn't use `char_reg_num` table 4. AUTO_INCREMENT 5. How to do IF-ELSE in SQL query ? 5a. How to update multiple rows on different conditions in a single query 6. How to show the current rank of the player 7. INSERT INTO ... SELECT ... 8. Table JOIN vs AS 9. What is the maximum string limit for *query_sql 9a. UNION This topic will open to Suggestions, Ideas, Improvements, and Questions ~ You may also post up your tricks if you want to share with us 1. When to use escape_sql script command . input [email protected]$; dispbottom [email protected]$; dispbottom escape_sql([email protected]$); it doesn't has much differences, because it only affect 3 special characters ' <- single quotation mark " <- double quotation mark \ <- left slash if I input -> haha"lala'hehe <- it will return -> haha\"lala\'hehe <- this is what we call, Escape a character in rAthena script, we also know we can use " symbol in any string input mes "Susan says :\" Today I ate 3 eggs \"."; where in the game client, you can see the " symbol in the npc msg box let's say I have a sql script like this prontera,153,171,5 script Show Characters 1_F_MARIA,{ mes "input name, I'll show you all characters name it has on that player's account"; input [email protected]$; [email protected] = query_sql("SELECT `char_id`, `name` FROM `char` WHERE `name` LIKE '"+ [email protected]$ +"'", [email protected], [email protected]$); if ( [email protected] ) { mes "no result"; close; } for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) mes [email protected][[email protected]] +" "+ [email protected]$[[email protected]]; close; } this script has a possibility to be hacked because to perform sql injection, I can enclose the string with quotation mark, then use another sql command to hack BUT with an escape_sql command, if the user want to enclose the string with quotation mark to hack the script the escape_sql command escaped the string, the quotation mark the user input will be escaped thus the script will become impossible to hack just now that script was for string input prontera,153,171,5 script Show Characters 1_F_MARIA,{ mes "input account ID, I'll show you all characters name it has on that player's account"; input [email protected]$; [email protected] = query_sql("SELECT `char_id`, `name` FROM `char` WHERE `account_id` = "+ escape_sql([email protected]$), [email protected], [email protected]$); if ( [email protected] ) { mes "no result"; close; } for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) mes [email protected][[email protected]] +" "+ [email protected]$[[email protected]]; close; } this is another stupid case. 1. the scripter use string input while the script just needed a number 2. even with escape_sql command over there, there is no quotation mark at all yes this script also has a risk to be hack because escape_sql only escape quotation mark. that hacker don't even have to input quotation mark because it is a number and an injection query can be sent without any quotation mark input there are 2 ways to solve this either use numeric variable for the input command or enclose that .... ..... WHERE `account_id` = '"+ escape_sql([email protected]$) +"'", .... with single quotation mark, when the hacker input a quotation mark will be escaped by escape_sql command Reference : https://www.w3schools.com/sql/sql_injection.asp escape_sql command for another thing is if the player register their names containing ' or ", these characters are escaped only happens when the server have no restriction on the creation of players name rAthena\conf\char_athena.conf // Manage possible letters/symbol in the name of charater. Control character (0x00-0x1f) are never accepted. Possible values are: // NOTE: Applies to character, party and guild names. // 0: no restriction (default) // 1: only letters/symbols in 'char_name_letters' option. // 2: Letters/symbols in 'char_name_letters' option are forbidden. All others are possibles. char_name_option: 1 and this was what happened to my SQL dota pvpladder script Silo's Babies <-- this is a guild name you can see the 5th string has a single quotation mark with escape_sql command, that string will turn into Silo\'s Babies <-- the quotation mark is escaped when send to sql query 2. How to build a case-sensitive table this is the answer I found Reference : http://dba.stackexchange.com/questions/15250/how-to-do-a-case-sensitive-search-in-where-clause by default, the table creation use charset = latin1; means it couldn't do a case-sensitive search if you want to do a case-sensitive in a query, use BINARY SELECT * FROM `char` WHERE `name` = BINARY('AnnieRuru'); however using BINARY might have performance hit if it is a big table so its more recommend to convert your SQL table to collate with latin1_general_cs let's say this is a sample table CREATE TABLE `test` ( `id` INT(11) PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(23) )ENGINE = InnoDB; do an ALTER table syntax ALTER TABLE `test` MODIFY COLUMN `name` VARCHAR(23) COLLATE latin1_general_cs; or just put it into the table creation CREATE TABLE `test` ( `id` INT(11) PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(23) )ENGINE = InnoDB DEFAULT CHARSET = latin1 COLLATE latin1_general_cs; 3. Choose a table type, MyISAM or InnoDB ? https://stackoverflow.com/questions/20148/myisam-versus-innodb Before MySQL 5.5, MyISAM is mostly use for read-heavy + table locking storage engine = such as pvp ladder ( always select ... order by kill desc ) InnoDB is mostly use for write-heavy + row locking storage engine = such as quest script ( select ... from char_id ... only 1 row is retrieve ) After MySQL 5.6, (currently is 8.0) just stick to InnoDB there is only 1 reason MyISAM is better than InnoDB - MyISAM use smaller disk usage than InnoDB let's take a look at rAthena MyISAM to InnoDB converter https://github.com/rathena/rathena/blob/master/sql-files/tools/convert_engine_innodb.sql This converter is useful if you are using MySQL 5.6 or above There are 4 tables that are commented out the reason is simple, these 4 tables only read once and forgotten when server is live since MyISAM is good at reading (SELECT) + smaller disk usage, its no use to convert these 4 tables into InnoDB 3a. How to index a table properly http://mysql.rjweb.org/doc.php/index_cookbook_mysql http://www.dbta.com/Columns/DBA-Corner/Top-10-Steps-to-Building-Useful-Database-Indexes-100498.aspx a simple thumb of rule, anything that is SELECT .... WHERE `field` = ..... that `field` has to be index let's take a look at this PVP Ladder script that use Kill/Death ratio CREATE TABLE `pvpladder` ( `char_id` INT(11), `name` VARCHAR(23), `kills` INT(11), `death` INT(11), PRIMARY KEY (`char_id`), KEY (`kills`, `death`) ) ENGINE = InnoDB; prontera,155,186,6 script PVP Ladder 1_F_MARIA,{ [email protected] = query_sql( "SELECT `name`, `kills`/(`death`+1) FROM `pvpladder` WHERE `kills` > 0 ORDER BY `kills`/(`death`+1) DESC LIMIT 10", [email protected]$, [email protected]$ ); if ( [email protected] ) { mes "no entry"; close; } mes "Current Ranking :"; for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) mes "No."+([email protected] +1)+" ["+ [email protected]$[[email protected]] +"] "+ [email protected]$[[email protected]] +" kill"; close; OnPCKillEvent: if ( killedrid == getcharid(3) ) { // killing self should only increase death count. EG: Grand-cross query_sql "INSERT INTO `pvpladder` VALUES ( "+ getcharid(0) +", '"+ escape_sql( strcharinfo(0) )+"', 0,1 ) ON DUPLICATE KEY UPDATE `death` = `death` +1"; end; } query_sql "INSERT INTO `pvpladder` VALUES ( "+ getcharid(0) +", '"+ escape_sql( strcharinfo(0) )+"', 1,0 ) ON DUPLICATE KEY UPDATE `kills` = `kills` +1"; attachrid killedrid; query_sql "INSERT INTO `pvpladder` VALUES ( "+ getcharid(0) +", '"+ escape_sql( strcharinfo(0) )+"', 0,1 ) ON DUPLICATE KEY UPDATE `death` = `death` +1"; end; } This kind of query -> ORDER BY kills/death, needs to index them together like this KEY (`kills`, `death`) 3b. Why you shouldn't use `char_reg_num` table There are 2 reasons why you shouldn't even touch all these variable tables Reason no.1 This table is sorely meant for server usage Once these data is loaded, it is process internally, and only save character data according to this configuration Reason no.2 The `value` field is not index ! This line has ORDER BY `value`, try recheck our main.sql file CREATE TABLE IF NOT EXISTS `char_reg_num` ( `char_id` int(11) unsigned NOT NULL default '0', `key` varchar(32) binary NOT NULL default '', `index` int(11) unsigned NOT NULL default '0', `value` int(11) NOT NULL default '0', PRIMARY KEY (`char_id`,`key`,`index`), KEY `char_id` (`char_id`) ) ENGINE=MyISAM; SQL will search through every single line in the `value` field if that column isn't index Of course you can ... do ALTER table to add KEY to the `value` field but this table has already optimized in that way for server usage the more field you index into the table, the more disk usage space it use Conclusion : If you want to make a custom script, then make a custom table. Leave these table alone ! 4. AUTO_INCREMENT CREATE TABLE `support_ticket` ( `id` INT(11) AUTO_INCREMENT, `title` VARCHAR(70), `message` VARCHAR(255), PRIMARY KEY (`id`) ) ENGINE = InnoDB; In this kind of query that has AUTO_INCREMENT, many people do .... $support_ticket_id++; query_sql "INSERT INTO `support_ticket` VALUES ( "+ $support_ticket_id +", '"+ escape_sql([email protected]$) ... can be optimize .... using NULL query_sql "INSERT INTO `support_ticket` VALUES ( NULL, '"+ escape_sql([email protected]$) ... can retrieve the last row with query_sql "SELECT MAX(`id`) FROM `support_ticket`", [email protected]; // ----- OR ----- query_sql "SELECT LAST_INSERT_ID()", [email protected]; Question : This question was asked on eathena forum board One of my friend touched my custom table and the AUTO_INCREMENT has jump off the value | 1 | <data set 1> | 2 | <data set 2> | 3 | <data set 3> | 25854 | <data set 4> | 25855 | <data set 5> | 25856 | <data set 6> I want to make the value return back to normal as shown | 1 | <data set 1> | 2 | <data set 2> | 3 | <data set 3> | 4 | <data set 4> | 5 | <data set 5> | 6 | <data set 6> How to do this WITHOUT losing any of the current data ? Answer: The trick is ... just drop that column and rebuild it ALTER TABLE `inventory` DROP COLUMN `id`; ALTER TABLE `inventory` ADD COLUMN `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; convert the table into MyISAM will process the query much faster 5. How to do IF-ELSE in SQL query ? Question : I have a PVP ladder script that runs on Points system. Each kill plus 1 point and each death minus 1 point. The problem is, this query will make the points go into negative value if the player is being kill repeatedly query_sql "UPDATE `pvp_points` SET `points` = `points` - 1 WHERE `char_id` = "+ getcharid(0); How do I make the points stop at 0 if the player is already at 0 points ? Answer : query_sql "UPDATE `pvp_points` SET `points` = IF(`points` = 0, 0, `points` - 1) WHERE `char_id` = "+ getcharid(0); query_sql "UPDATE `pvp_points` SET `points` = (CASE WHEN `points` = 0 THEN 0 ELSE `points` - 1 END) WHERE `char_id` = "+ getcharid(0); Explanations: similar to rAthena script language, if (<condition>) <execute true condition>; else <execute false condition>; in SQL language IF(<condition>, <execute true condition>, <execute false condition>) CASE WHEN <condition> THEN <execute true condition> ELSE <execute false condition> END Reference : https://www.w3schools.com/sql/func_mysql_if.asp https://stackoverflow.com/questions/63447/how-do-i-perform-an-if-then-in-an-sql-select 5a. How to update multiple rows on different conditions in a single query This query will update multiple rows on different condition UPDATE `pvpladder` SET `points` = CASE WHEN `char_id` = 150000 THEN `points` +1 WHEN `char_id` = 150001 THEN `points` -1 END WHERE `char_id` IN (150000,150001); Reference : https://stackoverflow.com/questions/20255138/sql-update-multiple-records-in-one-query 6. How to show the current rank of the player Question : This is the part of the script, output as below [email protected] = query_sql("SELECT `name`, `kills` FROM `pvpladder` ORDER BY `kills` DESC LIMIT 5", [email protected]$, [email protected]); for ( [email protected] = 0; [email protected] < [email protected]; [email protected]++ ) mes "No."+([email protected]+1)+" ["+ [email protected]$[[email protected]] +"] ~ "+ [email protected][[email protected]] +" kills"; No.1 [Alice] ~ 19 kills No.2 [Emily] ~ 11 kills No.3 [Irene] ~ 11 kills No.4 [Brittany] ~ 8 kills No.5 [Fiona] ~ 7 kills 2nd place and 3rd place has the same amount of kills, how do I make both of them display as 2nd place like this ? No.1 [Alice] ~ 19 kills No.2 [Emily] ~ 11 kills No.2 [Irene] ~ 11 kills No.4 [Brittany] ~ 8 kills No.5 [Fiona] ~ 7 kills Answer : Method no.1: Convert the table into InnoDB will return the result faster. Allow to use OFFSET [email protected] = query_sql("SELECT `name`, `kills`, FIND_IN_SET(`kills`, (SELECT GROUP_CONCAT(`kills` ORDER BY `kills` DESC) FROM `pvpladder`)) FROM `pvpladder` ORDER BY `kills` DESC LIMIT 5", [email protected]$, [email protected], [email protected]); for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) mes "No."+ [email protected][[email protected]] +" ["+ [email protected]$[[email protected]] +"] ~ "+ [email protected][[email protected]] +" kills"; Method no.2: This method return result faster than method 1 in huge table. Not allow to use OFFSET [email protected]$ = "SELECT `name`, IF(@d=t.`kills`, @r, @r:[email protected]), @d:=t.`kills`, @i:[email protected]+1 "; [email protected]$ += "FROM `pvpladder` t, (SELECT @d:=0, @r:=0, @i:=1)q "; [email protected]$ += "ORDER BY `kills` DESC LIMIT 5"; [email protected] = query_sql([email protected]$, [email protected]$, [email protected], [email protected], [email protected]); for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) mes "No."+ [email protected][[email protected]] +" ["+ [email protected]$[[email protected]] +"] ~ "+ [email protected][[email protected]] +" kills"; . . Question : How do I show the current ranking of the player ? mes "Your kills -> "+ [email protected]; mes "Your rank -> "+ [email protected]; Answer : query_sql "SELECT `kills`, 1+(SELECT COUNT(1) FROM `pvpladder` t1 WHERE t1.`kills` > t2.`kills`) FROM `pvpladder` t2 WHERE `char_id` = "+ getcharid(0), [email protected], [email protected]; Remember to index the `kills` field Reference : https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table . 7. INSERT INTO ... SELECT ... Question : This question was asked on eathena forum . Note: at the time the old mail system was unstable and not many server use it I want to reward my players for supporting my server. I want to give every player who are still actively login in this year (2010) an item ID 22574 in their storage How do I achieve this ? Answer : Run this SQL command when your server is offline INSERT INTO `storage` (`account_id`, `nameid`, `amount`, `identify`) SELECT `account_id`, '22574', '1', '1' FROM `login` WHERE DATE(`lastlogin`) >= '2010-01-01' && `account_id` !=1; The reply from the topic starter gives a feed back, including this Inserted rows: 7738 Inserted row id: 8244859 (Query took 13.6253 sec) 8. Table JOIN vs AS CREATE TABLE `pvpladder` ( `char_id` int(11) PRIMARY KEY, `points` int(11) ) ENGINE = InnoDB; This table is missing the `name` field. So have to retrieve the `name` from the `char` table. A simple way is using table JOIN SELECT `char`.`char_id`, `char`.`name` , `pvpladder`.`points` FROM `pvpladder` LEFT JOIN `char` ON `pvpladder`.`char_id` = `char`.`char_id` ORDER BY `pvpladder`.`points` DESC LIMIT 10; However, there is an uncommon method, the same thing can be done using Aliases SELECT `char_id` AS `CID`, (SELECT `name` FROM `char` WHERE `char_id` = `CID`), `points` FROM `pvpladder` ORDER BY `points` DESC LIMIT 10; In this example, both tables `char` and `pvpladder` have the `char_id` field index as PRIMARY KEY and thus both examples return the result in same amount of time However, there is a key difference on the optimization speed if the one of the table is not index properly The below example, `item_id`.`id` field is index as PRIMARY KEY, but `mob_db`.`DropCardid` is not index SELECT `mob_db`.`ID`, `mob_db`.`kname`, `item_db`.`id`, `item_db`.`name_japanese` FROM `mob_db` LEFT JOIN `item_db` ON `mob_db`.`DropCardid` = `item_db`.`id` WHERE `mob_db`.`DropCardid` > 0; SELECT `ID`, `kname`, `DropCardid` AS `ITEM_ID`, (SELECT `name_japanese` FROM `item_db` WHERE `id` = `ITEM_ID`) FROM `mob_db` WHERE `mob_db`.`DropCardid` > 0; The 2nd query that uses Aliases will return result faster than table JOIN in this case Conclusion : If use table JOIN, you have to keep in mind that the joined column has to be index but if use AS, there is no need to consider this issue 9. What is the maximum string limit for *query_sql Since query_sql sending the query as a string, we can actually use string manipulation script commands such as *sprintf and *implode Example : *sprintf Example : *implode So, someone might ask, what is the string limit for query_sql until the map-server show error ? The answer is very surprising ... I just tested with above script, and it still works perfectly fine ! loop -> 64.210 seconds query -> 3.229 seconds it means, ahh .... or maybe ... The answer might be ... [SQL]: DB error - MySQL server has gone away [Debug]: showmsg: dynamic buffer used, increase the static buffer size to 4306185 or more. until MySQL stop responding XD 9a. UNION Just now the *implode example, it just shows the `mvp_id`, but if we want to display the information like this, +--------+------------------+------------+-----------------------+ | MVP_ID | MVP_NAME | DropCardid | MVP_CARD_NAME | +--------+------------------+------------+-----------------------+ | 1086 | Golden Thief Bug | 4128 | Golden Thiefbug Card | | 1115 | Eddga | 4123 | Eddga Card | | 1150 | Moonlight Flower | 4131 | Moonlight Flower Card | for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) [email protected]$[[email protected]] = "( "+ [email protected][[email protected]] +", (SELECT `kname` FROM `mob_db` WHERE ID = "+ [email protected][[email protected]] +"), (SELECT `DropCardid` FROM `mob_db` WHERE ID = "+ [email protected][[email protected]] +"), (SELECT `item_db`.`name_japanese` FROM `item_db` LEFT JOIN `mob_db` ON `item_db`.`id` = `mob_db`.`DropCardid` WHERE `mob_db`.`ID` = "+ [email protected][[email protected]] +") )"; query_sql "INSERT IGNORE INTO `mvp_table` VALUES "+ implode( [email protected]$, ", " ); This part ... can be optimize with UNION for ( [email protected] = 0; [email protected] < [email protected]; [email protected] ) [email protected]$[[email protected]] = "SELECT "+ [email protected][[email protected]] +", `kname`, `DropCardid` AS `MVP_CARD`, (SELECT `name_japanese` FROM `item_db` WHERE `id` = `MVP_CARD`) FROM `mob_db` WHERE ID = "+ [email protected][[email protected]]; query_sql "INSERT IGNORE INTO `mvp_table` "+ implode( [email protected]$, " UNION " ); DONE ---- FINALLY !! Yes, I knew the chapter 5 and beyond is very tough to understand ... it also took me longer time to write and test all these advance SQL techniques too Anyway, this topic is now open to Suggestions, Ideas, Improvements, and Questions ~ You may also post up your tricks if you want to share with us
  13. 2 points

    Version 2.1


    A modern theme for rAthena Flux CP CSS Framework Used: Bootstrap 4 Installation: 1.) Extract all the contents of the zip file inside { fluxcp/themes } folder 2.) Modify fluxcp/config/application.php'ThemeName' => array('default', 'bootstrap'),to'ThemeName' => array('brynhild_blue'), 3.) Done By downloading this file, you agree to the following terms: You are not allowed to remove my signature written inside the footer section of the theme. You are not allowed to sell, resell, or gain any form of money or incentives from using my work. You are not allowed to claim my work as yours. Terms stated above may be changed without prior notice.


  14. 2 points
    Hello everyone, I guess this is my first topic ever in Graphic Section since I joined eA/rA/Herc back in 2009 till today! This is my first time succeed in create a custom mob sprite that usable in RO. The monster look familiar to you? Yes, it's indeed one of the monster in MapleStory. Monster from MapleStory are always one of my favourite, they are adorable and cute. I like it very much! Hopefully I will be able to create more of those sprites, so that I maybe able to start writing a MapleStory Party Quests into RO. * Newbie in this spriting field.
  15. 2 points
    Try to add this in your data/resnametable.txt : bat_a03.gnd#bat_a01.gnd# bat_a03.gat#bat_a01.gat# bat_a03.rsw#bat_a01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_a03.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_a01.bmp# bat_a04.gnd#bat_a01.gnd# bat_a04.gat#bat_a01.gat# bat_a04.rsw#bat_a01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_a04.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_a01.bmp# bat_a05.gnd#bat_a01.gnd# bat_a05.gat#bat_a01.gat# bat_a05.rsw#bat_a01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_a05.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_a01.bmp# bat_b03.gnd#bat_b01.gnd# bat_b03.gat#bat_b01.gat# bat_b03.rsw#bat_b01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_b03.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_b01.bmp# bat_b04.gnd#bat_b01.gnd# bat_b04.gat#bat_b01.gat# bat_b04.rsw#bat_b01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_b04.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_b01.bmp# bat_b05.gnd#bat_b01.gnd# bat_b05.gat#bat_b01.gat# bat_b05.rsw#bat_b01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_b05.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_b01.bmp# bat_c04.gnd#bat_c01.gnd# bat_c04.gat#bat_c01.gat# bat_c04.rsw#bat_c01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c04.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c01.bmp# bat_c05.gnd#bat_c01.gnd# bat_c05.gat#bat_c01.gat# bat_c05.rsw#bat_c01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c05.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c01.bmp# bat_c06.gnd#bat_c01.gnd# bat_c06.gat#bat_c01.gat# bat_c06.rsw#bat_c01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c06.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c01.bmp# bat_c07.gnd#bat_c01.gnd# bat_c07.gat#bat_c01.gat# bat_c07.rsw#bat_c01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c07.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c01.bmp# bat_c08.gnd#bat_c01.gnd# bat_c08.gat#bat_c01.gat# bat_c08.rsw#bat_c01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c08.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\bat_c01.bmp# schg_cas06.gnd#schg_cas01.gnd# schg_cas06.gat#schg_cas01.gat# schg_cas06.rsw#schg_cas01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\schg_cas06.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\schg_cas01.bmp# schg_cas07.gnd#schg_cas02.gnd# schg_cas07.gat#schg_cas02.gat# schg_cas07.rsw#schg_cas02.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\schg_cas07.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\schg_cas02.bmp# schg_cas08.gnd#schg_cas03.gnd# schg_cas08.gat#schg_cas03.gat# schg_cas08.rsw#schg_cas03.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\schg_cas08.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\schg_cas03.bmp# arug_cas06.gnd#arug_cas01.gnd# arug_cas06.gat#arug_cas01.gat# arug_cas06.rsw#arug_cas01.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\arug_cas06.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\arug_cas01.bmp# arug_cas07.gnd#arug_cas02.gnd# arug_cas07.gat#arug_cas02.gat# arug_cas07.rsw#arug_cas02.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\arug_cas07.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\arug_cas02.bmp# arug_cas08.gnd#arug_cas03.gnd# arug_cas08.gat#arug_cas03.gat# arug_cas08.rsw#arug_cas03.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\arug_cas08.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\arug_cas03.bmp# rush_cas01.rsw#prtg_cas02.rsw# rush_cas01.gat#prtg_cas02.gat# rush_cas01.gnd#prtg_cas02.gnd# À¯ÀúÀÎÅÍÆäÀ̽º\map\rush_cas01.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prtg_cas02.bmp# rush_cas02.rsw#payg_cas04.rsw# rush_cas02.gat#payg_cas04.gat# rush_cas02.gnd#payg_cas04.gnd# À¯ÀúÀÎÅÍÆäÀ̽º\map\rush_cas02.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payg_cas04.bmp# rush_cas03.rsw#aldeg_cas05.rsw# rush_cas03.gat#aldeg_cas05.gat# rush_cas03.gnd#aldeg_cas05.gnd# À¯ÀúÀÎÅÍÆäÀ̽º\map\rush_cas03.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\aldeg_cas05.bmp# rush_cas04.rsw#gefg_cas03.rsw# rush_cas04.gat#gefg_cas03.gat# rush_cas04.gnd#gefg_cas03.gnd# À¯ÀúÀÎÅÍÆäÀ̽º\map\rush_cas04.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\gefg_cas03.bmp# region_8.gnd#guild_vs2.gnd# region_8.gat#guild_vs2.gat# region_8.rsw#guild_vs2.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\region_8.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\guild_vs2.bmp#
  16. 2 points

    Version 1.0.0


    //===== rAthena Script ======================================= //= saders Vote Manager //===== By: ================================================== //= Sader1992 //https://rathena.org/board/profile/30766-sader1992/ //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //https://github.com/sader1992/sader_scripts //===== Description: ========================================= //==== GEPARD OR IP (NOT BOTH!) [SEE THE LINES UNDER THE NPC NAME TO ENABLE ONE AND DISABLE ANOTHER!] //==== vote npc , you can add up to 5 options for each vote and you can add multiple votes //==== test it before using it so you know how it work //==== if you use 'false' as an option the option would be empty so you can use less than 5 options //==== [email protected] //============================================================ //==== I DON'T SUPPORT FREE SCRIPTS ON MY PM , IF YOU HAVE QUESTION YOU CAN POST AT THE TOPIC IN RATHENA! //============================================================


  17. 2 points
    View File Item_db.txt Translator Sync with iteminfo Hello everyone. Many ask me how I translate my item_db with my iteminfo, so today I came to teach how to do it. 1 - Download the program that I made available. 2 - Replace iteminfo.lua inside content with your iteminfo.lub or lua content. 3 - Run the program. 4 - A file named item.txt was generated. 5 - Copy the contents of this file and now into ServerDatabaseEditor, click on Tools after loading your database and copy all contents of item.txt and after that click on Run. 6 - Okay, you just translated your item_db into the language of your iteminfo! Special thanks to Tokei for making the most difficult, which was the SDE Submitter Zell Submitted 09/17/2018 Category Server Managers/Editors Video Content Author Zell  
  18. 2 points
    With 2018 Clients you can do one of two things to support langtype 1; 1. In your `luafiles514/lua files/` folder there is a folder called "Service_Korea" and within it a file called "ExternalSettings_KR"; Rename the folder to "service_usa" and the file to "externalsettings_usa" 2. With NEMO diff your client to use the "Always read Korean External Settings" This is not true so please do not spread false information
  19. 2 points
    updated for rathena Git Hash: ae89b3a7 and press the upvote is easy, thank me
  20. 2 points

    Version 1.0


    (I am not the creator of this set!) Here is an updated version of the well known 553 Clothes Dyes / 251 Hair Dyes Pack. I duplicated the existing palettes from the pack to fill the missing gaps. It now works with 3rd classes, kagerou, oboro, and everything. However, I didn't fix any of the issues in this pack, you may see: - Black Areas on clothes - Ugly colors that doesn't fit ragnarok like flashy yellow - Many palettes which look the same - 3rd classes which doesn't look really good - Blacks Pecos etc.... I made a picture with all the palettes, you can check it. If you want palettes of a better quality, you may want to check My Palleting Services. Thank you!


  21. 1 point
    bom dia como faço para adquirir o Gepard Shield 3.0 pois nao to conseguindo nada que me diga como adquirir e vou colocar em meu servidor
  22. 1 point
    You know, I just could not take and not make the full version of the map ja_yavin01 released earlier. So look and be surprised .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•. yavin1b Please rate it if the map is good enough
  23. 1 point
  24. 1 point
    Hello @Sehrentos Thank you very much for your help. It totally worked!
  25. 1 point
    Thank you very much @Skorm Love you
  • Newsletter

    Want to keep up to date with all our latest news and information?

    Sign Up