Leaderboard
Popular Content
Showing content with the highest reputation on 08/08/18 in Posts
-
1 point
[Guide] Create your server & Client (2016/08)
DejaVud reacted to Monsieur Panda for a post in a topic
Hello, For some reason, I decided to write my own guide for super newbie people. And when I say newbie, I say REAL newbie. I will not ask you to learn anything or saying rude things like "go google ffs". I believe people that want to create their server are not necessary interested being a linux master or whatever. Never people are saying that before leaning guitar, people should learn how string and guitar are made. Enough talk, lets start ! Prerequisites Patience, meticulousness, cogitation kRO full client: Mirror #1 (mediafire), Mirror #2 (Direct Link from my ftp) kRO last actual compatible exe: Mirror #1 (mega.nz), Mirror #2 (Direct Link from my ftp) Setup exe: Download (Page), Mirror #1 (Direct Link from my ftp) N.E.M.O. Diff Patcher Download (git) BGM parameter files. Download (Direct Link herc.ws), Mirror #1 (Direct Link from my ftp) Translation Package. Download (git) Putty: Download (Page) If Putty does not work, use Kitty Download (Page) 1~2 hours of your time Things you should know: You cannot see password in Putty / Kitty when you type it. nano is a text editor. At the bottom of the screen you can see a menu. To use it, press CTRL + the option's letter You cannot use numeric pad in nano Being polite is always rewarding I. Dedicated server A. Get your server You can find very cheap solution at Kimsufi. Choose anything you want. I recommend you to choose Debian 8 (Jessie) for your OS. In Kimsufi manager, you will find your server IP. You have your login (root) and password in an email after installing the OS B. Configure your server Start Putty and enter server's IP address Connect with root then type the password you got by email. (You wont see " * " when you type) To change your password enter the following line passwd Install required package by enter this (copy this and paste it with a right-click): apt-get install git make gcc mysql-server libmysqlclient-dev zlib1g-dev libpcre3-dev screen The following is meant to make a web server. Even if you don't plan to make a website, I suggest you to take it, just because phpmyadmin is easy to use. While installing phpmyadmin, select apache2. apt-get install apache2 apt-get install php5 php5-cli libapache2-mod-php5 php5-mysql apt-get install phpmyadmin ln -s /usr/share/phpmyadmin /var/www/html/ Because hercules doesn't work if you use root login, we will create a new user. useradd ragnarok passwd ragnarok [choose_a_password] Connect to phpmyadmin and login with the information you chose at this address: http://your_server_ip/phpmyadmin Create a new database ragnarok and choose utf8_unicode_ci as collation Create another database and name it ragnarok_log with same collation Click on the tab Users (top of the page), Add User and fill the form. Username: ragnarok, password: [choose_a_assword], Click on Check All in the privilege group. (or if you know what are you doing, select options you need) Now you can log out from your server in Putty logout C. Install Hercules Login again in Kitty with the new user ragnarok Download Hercules emulator git clone https://github.com/HerculesWS/Hercules.git ~/Hercules We will need to reach the database installation folder: cd Hercules/sql-files/ We will now import tables in the database. You will have to write your mysql password each time (set in step B.4). mysql -u ragnarok -p ragnarok < main.sql mysql -u ragnarok -p ragnarok_log < logs.sql mysql -u ragnarok -p ragnarok < item_db2.sql mysql -u ragnarok -p ragnarok < mob_db2.sql mysql -u ragnarok -p ragnarok < mob_skill_db2.sql if you want to make a PRE-RENEWAL server, enter also this mysql -u ragnarok -p ragnarok < item_db.sql mysql -u ragnarok -p ragnarok < mob_db.sql mysql -u ragnarok -p ragnarok < mob_skill_db.sql If you want to make a RENEWAL server: mysql -u ragnarok -p ragnarok < item_db_re.sql mysql -u ragnarok -p ragnarok < mob_db_re.sql mysql -u ragnarok -p ragnarok < mob_skill_db_re.sql D. Configure hercules It is required to set up a server login and password for char-server, map-server and the login database. It can be done by editing few files and the table login. Start by editing conf/inter-server.conf. cd ../ nano conf/inter-server.conf Find the line sql.db_username and fill it with the user and password we created in step B.10. fill also the database name with ragnarok As the same time, you will need to edit conf/import/inter_conf.txt. nano conf/import/inter_conf.txt sql.db_username: ragnarok sql.db_password: your_sql_password sql.db_database: ragnarok log_db_id: ragnarok log_db_pw: your_sql_password log_db_db: ragnarok_log now edit conf/import/char_conf.txt and fill it with this following text nano conf/import/char_conf.txt // Server Communication username and password. userid: [new user] passwd: [new password] Do the same to conf/import/map_conf.txt with the same userid and passwd. nano conf/import/map_conf.txt // Server Communication username and password. userid: [new user] passwd: [new password] You will need to update the login table from ragnarok database. Connect again to your phpmyadmin (I.B.7) Find the table login and edit the only row available. userid must have the same value as [new user] user_pass must have the same value as [new password] char-server.conf nano conf/char-server.conf server_name: [your_server_name] wisp_server_name: Admin For some reason, you must reboot your server. reboot Close the Terminal and connect again after a minute. Now you will need to work on your server ports iptables -I INPUT 1 -p tcp --dport 6900 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 5121 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 6121 -j ACCEPT iptables save We are done with the server for now. You can log out if you want. Lets prepare our client! II. Create the Client A. Organization Extract the full client in C:\ro_client\RO\ and launch update with rsu-kro-renewal-lite.exe or rsu-kro-rag-lite.exe if you set a pre-re server. Extract the Ragexe.exe in C:\ro_client\fresh\ Extract data and System folders from the translation Package in C:\ro_client\fresh\ Extract the opensetup.exe in C:\ro_client\fresh\ Extract Mssfast.m3d and Mp3dec.asi from BGM.zip in C:\ro_client\fresh\ Extract N.E.M.O. content in C:\ro_client\NEMO\ Once Step 1 is DONE: Copy All *.dll and *.INI files from C:\ro_client\RO\ to C:\ro_client\fresh\ Copy BGM and savedata folders from C:\ro_client\RO\ to C:\ro_client\fresh\ Copy rdata.grf and data.grf files from C:\ro_client\RO\ to C:\ro_client\fresh\ B. Configure the Client Launch N.E.M.O. and load 2015-05-13aRagexe.exe Hit "Select Recommended" Confirm DATA.INI Rename iteminfo.lub to iteminfo_n.lub Now search "Read Data Folder First" and check it Hit "Apply Selected" and you will have a new 2015-05-13aRagexe_patched.exe file. You should "Save Profile" now, because you will probably want to edit again your client later C. Add the translation Rename C:\ro_client\fresh\System\itemInfo.lub to iteminfo_n.lub You might need to rename C:\ro_client\fresh\data\texture\À¯ÀúÀÎÅÍÆäÀ̽º\ folder to 유저인터페이스 later, but for now, just skip this step (not sure if you encounter this problem). Open C:\ro_client\fresh\data\clientinfo.xml with a text editor (I recommend Notepad++) Update the address with your server IP <address>[ip_address]</address> Done with the translation. Now we will say to the server, which client players are using. III. Finish Server configuration A. Compile the server Launch Putty again and login to your server. We will compile Hercules. It will take time so be patient. cd ./Hercules ./configure --enable-packetver=20150513 make clean make sql once it is done, you can verify if the version has been properly set. nano src/common/mmo.h Find following lines #ifndef PACKETVER #define PACKETVER Change #define PACKETVER to #define PACKETVER 20150513 if not done yet. If you did change something in mmo.h, you need to recompile again. Process again the step III.A.1 B. Start the server To start the server, you simply need the following line (while being in Hercules folder) ./athena-start start IV. Player Side A. Create a Game Master Account Go to your phpmyadmin (step I.B.7) and find again the login table. Hit the Insert tab userid: [login_nickname] user_pass: [login_pass] group_id: 99 gender: M or F You have now your Game Master Account B. Play Launch C:\ro_client\fresh\2015-05-13aRagexe_patched.exe Login with your newly created game master account Process thru in game. type @go 0 Be happy. V. Customize A. Back to the N.E.M.O. This Diff patcher is really cool, be aware of that. You can now edit again your client. repeat the step II.B.1 Hit "Load Profile" and choose the previous file you created in step II.B.7 Check the list and hit option you want. repeat step II.B.6 and 7 B. Options & Fix Remove the Pin Secure Code Be sure to always be in Hercules folder ( cd ./Hercules) ./athena-start stop nano conf/import/char_conf.txt add this line: pincode_enabled: 0 process to step III.A.1 To edit clientinfo.xml, I suggest you to check the wiki page if you can't see in game button Rename C:\ro_client\fresh\data\texture\À¯ÀúÀÎÅÍÆäÀ̽º to 유저인터페이스 Get Unbollox: Download (Download Page), Mirror #1 (Direct Link from my ftp) In unbollox, select the texture folder and click on À¯ÀúÀÎÅÍÆäÀ̽º Changing starting point nano conf/import/char_conf.txt add start_point_re: prt_fild08,170,365 Changing starting items nano conf/import/char_conf.txt add start_items: 2393,1,0,5055,1,0,569,20,1 Changin starting Zeny nano conf/import/char_conf.txt add start_zeny: 5,000 == More options to come, just reply to this topic if you can't find how to do what == C. Adding Custom Content NPC Add your script in npc/custom/your_script_name.txt Edit npc/script_custom.conf and add the following line: npc: npc/custom/your_script_name.txt ITEM Read the wiki about custom item (Link) System/iteminfo_n.lub [<item id>] = { unidentifiedDisplayName = "My custom Item", // Or "Accessory" or "Headgear" if it is an equipment unidentifiedResourceName = "my_custom_item", //This will set the sprite you will use (ex: my_custom_item.spr / actmy_custom_item.act) unidentifiedDescriptionName = { "Unknown Item, can be identified by using a ^6666CCMagnifier^000000." }, //Or basically juste { }, if it is not an equipment. identifiedDisplayName = "My custom Item", identifiedResourceName = "my_custom_item", identifiedDescriptionName = { "Bleh this item is a custom item.", "Bleh this is a second line" }, // Description of your item. slotCount = 0, ClassNum = 0 // Read the wiki page for the list. }, Sprites. Drop item sprite (also the same as click and drag) must be in: data/sprite/¾ÆÀÌÅÛ/my_custom_item.spr / my_custom_item.act Inventory texture (24x24 size 256 bit bmp) must be in: data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/item/my_custom_item.bmp Headgears: Copy the headgear in: data\sprite\¾Ç¼¼»ç¸®\¿©\¿©_my_custom_item.spr / ¿©_Helmet.act for Female data\sprite\¾Ç¼¼»ç¸®\³²\³²_my_custom_item.spr / ³²_Helmet.act for Male Collection picture (75x100 256 bit bmp) must be in: data/sprite/¾ÆÀÌÅÛ/collection/my_custom_item.bmp MAP Cient side Your map file name and ID cannot be longer than 13 caracters. my_map.gat, my_map.gnd, my_map.rsw, my_map.extra must be in data/ folder (inside grf) Additional textures (bmp) must be in data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/map/ BGM must be in BGM/ folder. Add the bgm in data/mp3nametable.txt (ex: my_map.rsw#bgm\\44.mp3#) Add following lines to data/resnametable.txt my_map.gnd#my_map.gnd# my_map.gat#my_map.gat# my_map.rsw#my_map.rsw# Add this line to data/mapnametable.txt my_map.rsw#Title of my Map# Server Side Add the following line to db/map_index.txt my_map Add the following line to conf/maps.conf map: my_map Cache Create a map.grf and include a folder data/. Add inside your map files (gat, rsw, gnd, extra) Create a folder grf/ in your server root (Hercules/) and upload map.grf inside grf/ folder. Connect via ssh (putty) to your server and log in. Stop your server ./athena-start stop Edit conf/grf-files.txt nano conf/grf-files.txt Add the following line, save and close. grf: grf/map.grf Do the following command ./mapcache start your serveur ./athena-start start -
1 pointAs usual, I only write advance guides 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 Hercules/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_db` 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 is now open to Suggestions, Ideas, Improvements, and Questions ~ I'm sure many of you have some questions since the creation of this topic You may also post up your tricks if you want to share with us
-
1 pointSample Music Project .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•. Hello and hi!) My dear colleagues!) Honestly, I do not know if this is the first project of its kind, but it reached the point when I have something to show. I have noticed for a long time that there are enough musical instruments in RO, but there is no variability and the bards are rigidly driven into the framework of certain song skills. And what if, in the breaks between the endless standing in a party, casting «A Poem of Bragi», would they want to slightly improvise on favorite instruments? ~~~ About the SMP : ~~~ At the moment the "solo" command only calls up a certain sound sample, animation of the play on the instrument and emotion, which can be turned off together with the sound effects in the settings. It is collected exclusively for fun. For example, playing a show in a RO or conducting a meeting, you can create a background atmosphere. (!) All samples are taken from videos that demonstrate the sound of musical instruments on YouTube (!) The project consists of collected clean samples of musical instruments specially selected for the style of each instrument, so they can be easily distinguished from each other, even if it's another guitar. The length of the samples varies from 3 to 26 seconds, they are all collected in .wav format in good quality. (video quality is quite low, sorry) ~~~ A few statistics that are at the moment : ~~~ +) 821 ~1000 code lines for «@ solo» command activating samples that everyone can hear within the screen +) 282 355 music samples with 2753 3558 sec (~1 hour) of samples duration in total +) total weight about 500 mb in grf [In Video] 00:05 - Bass Guitar - 46 samples x 515 sec [In Video] 00:58 - Guitar - 17 samples x 155 sec - 21 samples x 274 sec [In Video] 01:47 - Burning Passion Guitar - 13 samples x 124 sec [In Video] 02:32 - Loner's Guitar - 9 samples x 99 sec - 17 samples x 155 sec [In Video] 03:15 - Gentle Breeze Guitar - 15 samples x 135 sec [In Video] 04:13 - Green Acre Guitar - 14 samples x 159 sec [In Video] 04:45 - Lute/Oriental Lute - 11 samples x 119 sec [In Video] 05:29 - Mandolin - 11 samples x 88 sec [In Video] 06:26 - Electric Guitar - 12 samples x 133 sec [In Video] 07:38 - Berserk Guitar - 17 samples x 147 sec [In Video] 08:42 - Cello - 20 samples x 210 sec [In Video] 09:48 - Violin - 26 samples x 211 sec [In Video] 10:52 - Gumoongoh - 21 samples x 197 sec [In Video] 12:09 - Harp, Harp of Nepenthes - 21 samples x 221 sec [In Video] 13:15 - Green Whistle - 18 samples x 129 sec [In Video] None - Contrabass - 11 samples x 111 sec - 16 samples x 169 sec [In Video] None - Oz's New Ukulele - 13 samples x 131 sec [In Video] None - Hippie Guitar - 30 samples x 295 sec [In Video] None - Brute Guitar - 13 samples x 146 sec ~~~ About the script part : ~~~ The script was tested on the emulator eAthena, because I was stuck in 2010. (This script wasn't tested with Herc in the case of this command, but you could test samples with @ sound command I suppose) In src/common/mmo.h : (w0w!) find these two lines #define WEDDING_RING_M 2634 #define WEDDING_RING_F 2635 (w0w!) add after the variables // @solo #define GUITAR 1907 #define GUITAR2 1908 #define ELE_GUITAR 1913 #define BER_GUITAR 1920 #define BAS_GUITAR 1919 #define FIRE_GUITAR 1914 #define WATER_GUITAR 1915 #define EARTH_GUITAR 1916 #define WIND_GUITAR 1917 #define CELLO 1925 #define GUMOONGOH 1911 #define GUMOONGOH2 1912 #define HARP 1909 #define HARP2 1910 #define HARP_OF_NEP 1926 #define LUTE 1905 #define LUTE2 1906 #define ORI_LUTE 1918 #define ORI_LUTE2 1922 #define MANDOLIN 1903 #define MANDOLIN2 1904 #define VIOLIN 1901 #define VIOLIN2 1902 #define GREEN_WHISTLE 1930 #define CONTRABASS 1934 #define OZ_UKULELE 1935 #define HIPPIE_GUITAR 1944 #define BRUTE_GUITAR 32100 In src/map/atcommand.c : ACMD_FUNC(solo) { int nameid; struct item_data* id; if(sd->weapontype1==W_MUSICAL) { // Guitar if(pc_isequipped(sd, GUITAR) || pc_isequipped(sd, GUITAR2)) { if(!message || !*message || atoi(message)<1 || atoi(message)>21){ clif_displaymessage(fd, "usage: @solo 1-21"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "gui01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "gui02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "gui03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "gui04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "gui05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "gui06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "gui07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "gui08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "gui09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "gui10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "gui11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "gui12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "gui13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "gui14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "gui15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "gui16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "gui17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "gui18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "gui19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "gui20.wav", 0, AREA); } else if ( atoi(message) == 21 ) { clif_soundeffectall(&sd->bl, "gui21.wav", 0, AREA); } return 0; } // Electric Guitar else if(pc_isequipped(sd, ELE_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>12){ clif_displaymessage(fd, "usage: @solo 1-12"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "ele01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "ele02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "ele03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "ele04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "ele05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "ele06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "ele07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "ele08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "ele09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "ele10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "ele11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "ele12.wav", 0, AREA); } return 0; } // Berserk Guitar else if(pc_isequipped(sd, BER_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>17){ clif_displaymessage(fd, "usage: @solo 1-17"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "ber01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "ber02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "ber03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "ber04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "ber05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "ber06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "ber07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "ber08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "ber09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "ber10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "ber11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "ber12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "ber13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "ber14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "ber15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "ber16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "ber17.wav", 0, AREA); } return 0; } // Bass Guitar else if(pc_isequipped(sd, BAS_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>46){ clif_displaymessage(fd, "usage: @solo 1-46"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "bas01.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "bas02.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "bas03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "bas04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "bas05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "bas06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "bas07.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "bas08.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "bas09.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "bas10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "bas11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "bas12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "bas13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "bas14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "bas15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "bas16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "bas17.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "bas18.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "bas19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "bas20.wav", 0, AREA); } else if ( atoi(message) == 21 ) { clif_soundeffectall(&sd->bl, "bas21.wav", 0, AREA); } else if ( atoi(message) == 22 ) { clif_soundeffectall(&sd->bl, "bas22.wav", 0, AREA); } else if ( atoi(message) == 23 ) { clif_soundeffectall(&sd->bl, "bas23.wav", 0, AREA); } else if ( atoi(message) == 24 ) { clif_soundeffectall(&sd->bl, "bas24.wav", 0, AREA); } else if ( atoi(message) == 25 ) { clif_soundeffectall(&sd->bl, "bas25.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas25.wav", 0, AREA); } else if ( atoi(message) == 26 ) { clif_soundeffectall(&sd->bl, "bas26.wav", 0, AREA); } else if ( atoi(message) == 27 ) { clif_soundeffectall(&sd->bl, "bas27.wav", 0, AREA); } else if ( atoi(message) == 28 ) { clif_soundeffectall(&sd->bl, "bas28.wav", 0, AREA); } else if ( atoi(message) == 29 ) { clif_soundeffectall(&sd->bl, "bas29.wav", 0, AREA); } else if ( atoi(message) == 30 ) { clif_soundeffectall(&sd->bl, "bas30.wav", 0, AREA); } else if ( atoi(message) == 31 ) { clif_soundeffectall(&sd->bl, "bas31.wav", 0, AREA); clif_soundeffectall(&sd->bl, "bas31.wav", 0, AREA); } else if ( atoi(message) == 32 ) { clif_soundeffectall(&sd->bl, "bas32.wav", 0, AREA); } else if ( atoi(message) == 33 ) { clif_soundeffectall(&sd->bl, "bas33.wav", 0, AREA); } else if ( atoi(message) == 34 ) { clif_soundeffectall(&sd->bl, "bas34.wav", 0, AREA); } else if ( atoi(message) == 35 ) { clif_soundeffectall(&sd->bl, "bas35.wav", 0, AREA); } else if ( atoi(message) == 36 ) { clif_soundeffectall(&sd->bl, "bas36.wav", 0, AREA); } else if ( atoi(message) == 37 ) { clif_soundeffectall(&sd->bl, "bas37.wav", 0, AREA); } else if ( atoi(message) == 38 ) { clif_soundeffectall(&sd->bl, "bas38.wav", 0, AREA); } else if ( atoi(message) == 39 ) { clif_soundeffectall(&sd->bl, "bas39.wav", 0, AREA); } else if ( atoi(message) == 40 ) { clif_soundeffectall(&sd->bl, "bas40.wav", 0, AREA); } else if ( atoi(message) == 41 ) { clif_soundeffectall(&sd->bl, "bas41.wav", 0, AREA); } else if ( atoi(message) == 42 ) { clif_soundeffectall(&sd->bl, "bas42.wav", 0, AREA); } else if ( atoi(message) == 43 ) { clif_soundeffectall(&sd->bl, "bas43.wav", 0, AREA); } else if ( atoi(message) == 44 ) { clif_soundeffectall(&sd->bl, "bas44.wav", 0, AREA); } else if ( atoi(message) == 45 ) { clif_soundeffectall(&sd->bl, "bas45.wav", 0, AREA); } else if ( atoi(message) == 46 ) { clif_soundeffectall(&sd->bl, "bas46.wav", 0, AREA); } return 0; } // Burning Passion Guitar else if(pc_isequipped(sd, FIRE_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>13){ clif_displaymessage(fd, "usage: @solo 1-13"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "pas01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "pas02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "pas03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "pas04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "pas05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "pas06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "pas07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "pas08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "pas09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "pas10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "pas11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "pas12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "pas13.wav", 0, AREA); } return 0; } // Loner's Guitar else if(pc_isequipped(sd, WATER_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>17){ clif_displaymessage(fd, "usage: @solo 1-17"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "lon01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "lon02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "lon03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "lon04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "lon05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "lon06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "lon07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "lon08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "lon09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "lon10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "lon11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "lon12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "lon13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "lon14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "lon15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "lon16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "lon17.wav", 0, AREA); } return 0; } // Green Acre Guitar else if(pc_isequipped(sd, EARTH_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>14){ clif_displaymessage(fd, "usage: @solo 1-14"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "acr01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "acr02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "acr03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "acr04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "acr05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "acr06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "acr07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "acr08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "acr09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "acr10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "acr11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "acr12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "acr13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "acr14.wav", 0, AREA); } return 0; } // Gentle Breeze Guitar else if(pc_isequipped(sd, WIND_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>15){ clif_displaymessage(fd, "usage: @solo 1-15"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "bre01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "bre02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "bre03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "bre04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "bre05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "bre06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "bre07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "bre08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "bre09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "bre10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "bre11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "bre12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "bre13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "bre14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "bre15.wav", 0, AREA); } return 0; } // Cello else if(pc_isequipped(sd, CELLO)) { if(!message || !*message || atoi(message)<1 || atoi(message)>20){ clif_displaymessage(fd, "usage: @solo 1-20"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "cel01.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "cel02.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "cel03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "cel04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "cel05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "cel06.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "cel07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "cel08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "cel09.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "cel10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "cel11.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "cel12.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "cel13.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "cel14.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "cel15.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "cel16.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "cel17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "cel18.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "cel19.wav", 0, AREA); clif_soundeffectall(&sd->bl, "cel19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "cel20.wav", 0, AREA); } return 0; } // Gumoongoh else if(pc_isequipped(sd, GUMOONGOH) || pc_isequipped(sd, GUMOONGOH2)) { if(!message || !*message || atoi(message)<1 || atoi(message)>21){ clif_displaymessage(fd, "usage: @solo 1-21"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "geo01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "geo02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "geo03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "geo04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "geo05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "geo06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "geo07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "geo08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "geo09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "geo10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "geo11.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "geo12.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "geo13.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "geo14.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "geo15.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "geo16.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "geo17.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "geo18.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "geo19.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "geo20.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo20.wav", 0, AREA); } else if ( atoi(message) == 21 ) { clif_soundeffectall(&sd->bl, "geo21.wav", 0, AREA); clif_soundeffectall(&sd->bl, "geo21.wav", 0, AREA); } return 0; } // Harp else if(pc_isequipped(sd, HARP) || pc_isequipped(sd, HARP2) || pc_isequipped(sd, HARP_OF_NEP)) { if(!message || !*message || atoi(message)<1 || atoi(message)>21){ clif_displaymessage(fd, "usage: @solo 1-21"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "har01.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "har02.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "har03.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "har04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "har05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "har06.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "har07.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "har08.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "har09.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "har10.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "har11.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "har12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "har13.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "har14.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "har15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "har16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "har17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "har18.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "har19.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "har20.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har20.wav", 0, AREA); } else if ( atoi(message) == 21 ) { clif_soundeffectall(&sd->bl, "har21.wav", 0, AREA); clif_soundeffectall(&sd->bl, "har21.wav", 0, AREA); } return 0; } // Lute else if(pc_isequipped(sd, LUTE) || pc_isequipped(sd, LUTE2) || pc_isequipped(sd, ORI_LUTE) || pc_isequipped(sd, ORI_LUTE2)) { if(!message || !*message || atoi(message)<1 || atoi(message)>11){ clif_displaymessage(fd, "usage: @solo 1-11"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "lut01.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "lut02.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "lut03.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "lut04.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "lut05.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "lut06.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "lut07.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "lut08.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "lut09.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "lut10.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "lut11.wav", 0, AREA); clif_soundeffectall(&sd->bl, "lut11.wav", 0, AREA); } return 0; } // Mandolin else if(pc_isequipped(sd, MANDOLIN) || pc_isequipped(sd, MANDOLIN2)) { if(!message || !*message || atoi(message)<1 || atoi(message)>11){ clif_displaymessage(fd, "usage: @solo 1-11"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "man01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "man02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "man03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "man04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "man05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "man06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "man07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "man08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "man09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "man10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "man11.wav", 0, AREA); } return 0; } // Violin else if(pc_isequipped(sd, VIOLIN) || pc_isequipped(sd, VIOLIN2)) { if(!message || !*message || atoi(message)<1 || atoi(message)>26){ clif_displaymessage(fd, "usage: @solo 1-26"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "vio01.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "vio02.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "vio03.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "vio04.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "vio05.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "vio06.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "vio07.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "vio08.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "vio09.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "vio10.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "vio11.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "vio12.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "vio13.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "vio14.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "vio15.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "vio16.wav", 0, AREA); clif_soundeffectall(&sd->bl, "vio16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "vio17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "vio18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "vio19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "vio20.wav", 0, AREA); } else if ( atoi(message) == 21 ) { clif_soundeffectall(&sd->bl, "vio21.wav", 0, AREA); } else if ( atoi(message) == 22 ) { clif_soundeffectall(&sd->bl, "vio22.wav", 0, AREA); } else if ( atoi(message) == 23 ) { clif_soundeffectall(&sd->bl, "vio23.wav", 0, AREA); } else if ( atoi(message) == 24 ) { clif_soundeffectall(&sd->bl, "vio24.wav", 0, AREA); } else if ( atoi(message) == 25 ) { clif_soundeffectall(&sd->bl, "vio25.wav", 0, AREA); } else if ( atoi(message) == 26 ) { clif_soundeffectall(&sd->bl, "vio26.wav", 0, AREA); } return 0; } // Green Whistle else if(pc_isequipped(sd, GREEN_WHISTLE)) { if(!message || !*message || atoi(message)<1 || atoi(message)>18){ clif_displaymessage(fd, "usage: @solo 1-18"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "gre01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "gre02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "gre03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "gre04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "gre05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "gre06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "gre07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "gre08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "gre09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "gre10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "gre11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "gre12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "gre13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "gre14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "gre15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "gre16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "gre17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "gre18.wav", 0, AREA); } return 0; } // Contrabass else if(pc_isequipped(sd, CONTRABASS)) { if(!message || !*message || atoi(message)<1 || atoi(message)>16){ clif_displaymessage(fd, "usage: @solo 1-16"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "con01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "con02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "con03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "con04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "con05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "con06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "con07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "con08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "con09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "con10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "con11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "con12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "con13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "con14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "con15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "con16.wav", 0, AREA); } return 0; } // Oz's New Ukulele else if(pc_isequipped(sd, OZ_UKULELE)) { if(!message || !*message || atoi(message)<1 || atoi(message)>13){ clif_displaymessage(fd, "usage: @solo 1-13"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "ozs01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "ozs02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "ozs03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "ozs04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "ozs05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "ozs06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "ozs07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "ozs08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "ozs09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "ozs10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "ozs11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "ozs12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "ozs13.wav", 0, AREA); } return 0; } // Hippie Guitar else if(pc_isequipped(sd, HIPPIE_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>30){ clif_displaymessage(fd, "usage: @solo 1-30"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "hip01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "hip02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "hip03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "hip04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "hip05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "hip06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "hip07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "hip08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "hip09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "hip10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "hip11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "hip12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "hip13.wav", 0, AREA); } else if ( atoi(message) == 14 ) { clif_soundeffectall(&sd->bl, "hip14.wav", 0, AREA); } else if ( atoi(message) == 15 ) { clif_soundeffectall(&sd->bl, "hip15.wav", 0, AREA); } else if ( atoi(message) == 16 ) { clif_soundeffectall(&sd->bl, "hip16.wav", 0, AREA); } else if ( atoi(message) == 17 ) { clif_soundeffectall(&sd->bl, "hip17.wav", 0, AREA); } else if ( atoi(message) == 18 ) { clif_soundeffectall(&sd->bl, "hip18.wav", 0, AREA); } else if ( atoi(message) == 19 ) { clif_soundeffectall(&sd->bl, "hip19.wav", 0, AREA); } else if ( atoi(message) == 20 ) { clif_soundeffectall(&sd->bl, "hip20.wav", 0, AREA); } else if ( atoi(message) == 21 ) { clif_soundeffectall(&sd->bl, "hip21.wav", 0, AREA); } else if ( atoi(message) == 22 ) { clif_soundeffectall(&sd->bl, "hip22.wav", 0, AREA); } else if ( atoi(message) == 23 ) { clif_soundeffectall(&sd->bl, "hip23.wav", 0, AREA); } else if ( atoi(message) == 24 ) { clif_soundeffectall(&sd->bl, "hip24.wav", 0, AREA); } else if ( atoi(message) == 25 ) { clif_soundeffectall(&sd->bl, "hip25.wav", 0, AREA); } else if ( atoi(message) == 26 ) { clif_soundeffectall(&sd->bl, "hip26.wav", 0, AREA); } else if ( atoi(message) == 27 ) { clif_soundeffectall(&sd->bl, "hip27.wav", 0, AREA); } else if ( atoi(message) == 28 ) { clif_soundeffectall(&sd->bl, "hip28.wav", 0, AREA); } else if ( atoi(message) == 29 ) { clif_soundeffectall(&sd->bl, "hip29.wav", 0, AREA); } else if ( atoi(message) == 30 ) { clif_soundeffectall(&sd->bl, "hip30.wav", 0, AREA); } return 0; } // Brute Guitar else if(pc_isequipped(sd, BRUTE_GUITAR)) { if(!message || !*message || atoi(message)<1 || atoi(message)>13){ clif_displaymessage(fd, "usage: @solo 1-13"); return -1; } clif_emotion(&sd->bl, E_HO); clif_skill_nodamage(&sd->bl,&sd->bl,317,-1,1); if ( atoi(message) == 1 ) { clif_soundeffectall(&sd->bl, "bru01.wav", 0, AREA); } else if ( atoi(message) == 2 ) { clif_soundeffectall(&sd->bl, "bru02.wav", 0, AREA); } else if ( atoi(message) == 3 ) { clif_soundeffectall(&sd->bl, "bru03.wav", 0, AREA); } else if ( atoi(message) == 4 ) { clif_soundeffectall(&sd->bl, "bru04.wav", 0, AREA); } else if ( atoi(message) == 5 ) { clif_soundeffectall(&sd->bl, "bru05.wav", 0, AREA); } else if ( atoi(message) == 6 ) { clif_soundeffectall(&sd->bl, "bru06.wav", 0, AREA); } else if ( atoi(message) == 7 ) { clif_soundeffectall(&sd->bl, "bru07.wav", 0, AREA); } else if ( atoi(message) == 8 ) { clif_soundeffectall(&sd->bl, "bru08.wav", 0, AREA); } else if ( atoi(message) == 9 ) { clif_soundeffectall(&sd->bl, "bru09.wav", 0, AREA); } else if ( atoi(message) == 10 ) { clif_soundeffectall(&sd->bl, "bru10.wav", 0, AREA); } else if ( atoi(message) == 11 ) { clif_soundeffectall(&sd->bl, "bru11.wav", 0, AREA); } else if ( atoi(message) == 12 ) { clif_soundeffectall(&sd->bl, "bru12.wav", 0, AREA); } else if ( atoi(message) == 13 ) { clif_soundeffectall(&sd->bl, "bru13.wav", 0, AREA); } return 0; } } } In src/map/atcommand.c also don't forget to add : { "solo", 0,0, atcommand_solo }, // solo [Download Link: https://www.mediafire.com/folder/pwcyadczve81h/sample_music_project] [The map used in this video - Barcode]
-
1 pointFor 64 bit 1. Copy ".\x64\WeeThumbnail.dll" & paste it into SystemRoot%\SysWOW64 folder 2. Run the command prompt as administrator and type the following command - regsvr32 /s "%SystemRoot%\SysWOW64\WeeThumbnail.dll"