Jump to content

Kyoya G

Members
  • Content Count

    8
  • Joined

  • Last visited


Reputation Activity

  1. Upvote
    Kyoya G reacted to Aeomin in Thor Patcher   
    File Name: Thor Patcher
    File Submitter: Aeomin
    File Submitted: 05 Apr 2014
    File Category: Client Resources
     



    Please do not send me private message as my response would be in lowest priority.
     
    2.6.4.0 UPDATE IMPORTANT NOTICE: Not only this release is beta, there are few important changes need to note of: You now may modify the icon, code sign after pack configuration data. Some configuration entries are deprecated. Additionally, as you can tell, script support is coming...
     
    System Requirement: Windows 2000 or higher.
     
    Features
    Pack into single/multi grf file(s) [0x200]
    Automatically generates GRF if not exist
    RGZ support
    Customizable skin & language entries
    Background music
    No extra dll, not even config file is needed when distribute.
    Embed config file and resource data (images for background/buttons)
    Custom Button
    Remote config file
    Self update and client update [supports multi client exe update(Up to 255)]
    Tools
     
    ConfigGenerator - Packs configuration and resources into the patcher or generate as a binary config pack.
    ThorMaker - make patch files into thor file, there two options file & grf, when choose file, the patcher will extract file into disk, and grf simply put in GRF. [Please do not pack GRF, instead you should pack the actual data.]
    CheckSum - Simply a crc32 tool, used to make sure patcher & client/game exe is up to date
    ========================
     
    Internal Config and Remote Config:
    Internal config is simply the one embed inside patcher, store basic information required to run
    Remote config, is on web server (of course), it used configure extended features.
     
    Click here to download this file
  2. Upvote
    Kyoya G reacted to Khazou in browedit 620 and 586   
    It should be the same, 620 is used to build your whole map whereas 586 is use to save maps you've created with 620 because 620 doesn't save them right, you can have some models that disappears in game.
     
    So:
     
    620: Build your maps, save it
    586: Open your 620 maps, save it
  3. Upvote
    Kyoya G reacted to Khazou in browedit 620 and 586   
    Yup
     
    You can download every version from there: http://browedit.excalibur-nw.com/release/
     
    If you want here is mine: https://mega.nz/#!7B1SmCQC!suqfj5ZLBc2Y-L2SEybgIaJMZ7e4tl6CuikzC6ZicPM
  4. Like
    Kyoya G reacted to Neo-Mind in NEMO - Client Patcher   
    N.E.M.O. - Neo Exe Modification Organizer

    Why another client patcher? well
    1) WeeDiffGen - isn't working for 2013 clients + it depends on dlls (not that its a bad thing but i like scripting )
    2) xDiffGen - yes its scripted but we need to depend on xdiff files.

    so i made a new one based on xDiffGen and here it is. The patches are written in QtScript format.
    Details of making a patch have already been written in a seperate topic - although now it needs to be updated with more details.
    I have already converted most of the patches from xDiffGen.

    Why this name? - well I didn't want it to be called * Gen No offense  
    plus someone keeps calling me Nemo in IRC which gave me the idea

    Snapshot
    -----------------


    How to use?
    ---------------------
    1) First you need to specify your client file in Input Exe file box. If you browse to select the file name, Output Patched box gets updated with a _patched suffix filename automatically. Ofcourse you can select your own name for the output.
     
    2) Next we need to load both the client and the scripts (patches & addons). so click Load Client button.
     
    3) Select the patches you want . In case you patched once before (for whatever date) they will be saved in your local and you can use the Select Previous button to select them again. Also you can try using the Select Rcomnded button to select all the Recommended patches.
     
    4) So your patches are selected and client is loaded what next but to Apply Patches  which will generate the output file. In 2.0 version , NEMO also generates a .secure.txt file containing the MD5, SHA1 and CRC32 values of the output exe file which you can use in various tools.
     
    5) You can use the Save Profile and  Load Profile buttons for saving/reloading a set of patches & input values, that you have selected (even if they are not applied) for future use.
     
    6) Whenever you apply patches to a client, NEMO updates the patchlist.log file (along with Inputlist.db) in the folder where NEMO.exe is. This file will contain the list of patches you have applied along with their IDs (do not tamper with either of them).
     
    Changes in 2.0:
    ----------------------
    1) I have made some obvious modifications to the interface (you can definitely see the change in case you have seen v1.0).
         i) Buttons have come downwards and is no longer strippable (toolbar has been fixed in position)
     
         ii) New status Label has been added which shows your currently loaded client date and how many patches are selected.
     
         iii) NEMO now has support for Addons - scripts that are meant to retrieve data from the client and do its own thing (not patch the client).
              All the Extract xDiff patches has been added here already. 1 extra addon will be coming soon once i can fix it.
     
         iv) New Filter box has been added which does live search (i.e. filter as you type) for filtering out only the patches u want to see.
               For e.g. if you type color, it will only show patches that have the string color in either it's name or the description.
              You can also use regular expression . Also you can sort the columns now
     
        v) An upcoming feature - Test Patches. this one you can use for testing a newly added patch for a variety of clients that you select.
     
    2) NEMO is no longer there in SVN. I have shifted it to GitHub . The rar file uploaded has the .git file so you should be able to directly pull to get updates. But just in case I have also provided the repository link below.
     
    Remember to pull for updates before using NEMO and let me know if you are facing any bugs or issues or if i have missed out on anything. Enjoy .
     
    Repository: https://github.com/MStr3am/NEMO.git
     
    Download Link: NEMO zip file 
  5. Like
    Kyoya G reacted to Sephus in get rid of less than overcharged selling price warning   
    This is not good code practice but here's how you do it
    if( type == SHOP && value*0.75 < id->value_sell*1.24 && nameid != 607 ) { // Exploit possible: you can buy and sell back with profit ShowWarning("npc_parse_shop: Item %s [%d] discounted buying price (%d->%d) is less than overcharged selling price (%d->%d) in file '%s', line '%d'.n", id->name, nameid, value, (int)(value*0.75), id->value_sell, (int)(id->value_sell*1.24), filepath, strline(buffer,start-buffer)); if (retval) *retval = EXIT_FAILURE;} notice the && nameid != 607
  6. Like
    Kyoya G reacted to Lord Ganja in get rid of less than overcharged selling price warning   
    Okay, I intentionally added an item with less than overcharged selling price.
    Now I was thinking if I can get rid of the warnings that appear by adding the item id to the source so it won't show the warning even if these 'ids' are less than overcharged selling price.
     
    For example, if I set the id 607 less than overcharged selling price. I'll add the id 607 to the src so the warning won't appear.
     
     ' if( type == SHOP && value*0.75 < id->value_sell*1.24 && itemid != 607) { ' <== This is just my idea for excluding items id's.
     
     
    How do I do that?   Thanks in advance.
     
     
    this is the part in npc.c 
    if( type == SHOP && value*0.75 < id->value_sell*1.24 ) { // Exploit possible: you can buy and sell back with profit ShowWarning("npc_parse_shop: Item %s [%d] discounted buying price (%d->%d) is less than overcharged selling price (%d->%d) in file '%s', line '%d'.n", id->name, nameid, value, (int)(value*0.75), id->value_sell, (int)(id->value_sell*1.24), filepath, strline(buffer,start-buffer)); if (retval) *retval = EXIT_FAILURE;}  
  7. Upvote
    Kyoya G reacted to RagnarokOnline2015 in [Guide] Mapcache Generation 2018   
    Sorry For My English
  8. Upvote
    Kyoya G reacted to w0wZukuBg in [w0w] Advanced Maps Project   
    Probably my most ambitious and personal project. I often met on my way
    interesting places in the world of RO, to which it was impossible to get.
    Then I began to find such places with the help of the BrowEdit program
    and make them available for visiting. As the project expanded,
    I decided to allow shooting and use skills from the hills on the maps,
    where this feature was disabled (or Gravity was too lazy busy),
    add plants and trees, create comfortable climbs and so on.
    I suggest you watch a promo video that clearly explains my idea.
    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.
    At the moment, almost ready the locations of the Schwartzwald and Arunafeltz for the release,
    there is a reserve for many other locations. Since the appearance of the video, there have been
    some changes, so the final result may be different. Below I attach screenshots from BrowEdit
    "before" and "after" and gif files with changes of territories on the finished mini-maps.
    Some screenshots of my work:
    From the important places are opened: the airport in Veins, the left exit from Einbroch, the northern Einbroch railway station on Ein_Field04, the industrial zone on Ein_Field02, the border post between Ein_Field04 and Ein_Field05, the fortress on the map of Yuno_Field12, the entrance to the tower of Thanatos on Hu_Field01, the arch with a fountain on Ein_Fild09, the bridge in Lhz_Field02, the road from Ra_Fild06 to Ein_Field03 and more.
    Mini-maps changes (if any map is missing, it means everything is fine with it):

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.

    .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.
    P>S> Since the map of Ein_Field05 won in the nomination of the most extended territory -
    a small comic video showing progress in its honor:
    CODE: Warps lines below:
    //===== eAthena Script ======================================= //= New Warps for AMP //===== By: ================================================== //= w0wZukuBg //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= eAthena SVN //===== Description: ========================================= //= New Warps for AMP //===== Additional Comments: ================================= //= The NPC's were born. [w0wZukuBg] //============================================================ //======================================================= // ein_fild //======================================================= ein_fild02,134,123,0 warp newein01 1,1,ein_fild02,118,134 ein_fild02,121,131,0 warp newein02 1,1,ein_fild02,137,123 ein_fild02,223,137,0 warp newein03 1,1,ein_fild02,223,148 ein_fild02,223,145,0 warp newein04 1,1,ein_fild02,220,137 ein_fild02,186,226,0 warp newein05 1,1,ein_fild02,204,224 ein_fild02,201,224,0 warp newein06 1,1,ein_fild02,183,229 ein_fild04,385,181,0 warp newein07 1,1,ein_fild05,36,185 ein_fild05,33,185,0 warp newein08 1,1,ein_fild04,382,181 ein_fild05,35,167,0 warp newein09 1,1,ein_fild04,382,181 ein_fild05,120,292,0 warp newein10 1,1,ein_fild05,120,300 ein_fild05,120,297,0 warp newein11 1,1,ein_fild05,120,289 ein_fild06,231,81,0 warp newein12 1,1,ein_fild06,231,67 ein_fild06,231,70,0 warp newein13 1,1,ein_fild06,231,84 ein_fild03,245,55,0 script Lift-E02 139,2,2,{ OnTouch: mes "Lift up?"; next; if(select("Yes","Stay")==1) warp "ein_fild03",201,41; close; } ein_fild03,204,43,0 script Lift-E01 139,2,2,{ OnTouch: mes "Lift down?"; next; if(select("Yes","Stay")==1) warp "ein_fild03",248,53; close; } //======================================================= // ra_fild //======================================================= ra_fild09,362,76,0 warp newra01 1,1,lhz_fild01,15,79 lhz_fild01,12,79,0 warp newra02 1,1,ra_fild09,359,76 //======================================================= // ra_fild -> ein_fild //======================================================= ein_fild03,19,181,0 warp newraein01 1,1,ra_fild06,374,223; ra_fild06,377,223,0 warp newraein02 1,1,ein_fild03,22,181; //======================================================= // hu_fild //======================================================= hu_fild02,378,244,0 warp newhu01 1,1,hu_fild03,22,253 hu_fild03,19,253,0 warp newhu02 1,1,hu_fild02,375,244 hu_fild02,378,194,0 warp newhu03 1,1,hu_fild03,22,205 hu_fild03,19,205,0 warp newhu04 1,1,hu_fild02,375,194 hu_fild02,375,303,0 warp newhu05 1,1,hu_fild03,22,308 hu_fild03,19,308,0 warp newhu06 1,1,hu_fild02,372,303 hu_fild02,378,125,0 warp newhu07 1,1,hu_fild03,22,129 hu_fild03,19,129,0 warp newhu08 1,1,hu_fild02,375,125 //======================================================= // ve_fild //======================================================= ve_fild03,327,294,0 warp newve01 1,1,ve_fild04,34,322 ve_fild04,31,322,0 warp newve02 1,1,ve_fild03,324,294 ve_fild03,316,251,0 warp newve03 1,1,ve_fild04,42,295 ve_fild04,39,295,0 warp newve04 1,1,ve_fild03,312,251 //======================================================= // einbroch //======================================================= einbech,50,223,0 warp neweinb01 1,1,einbech,50,230 einbech,50,227,0 warp neweinb02 1,1,einbech,50,220 einbech,37,223,0 warp neweinb03 1,1,einbech,37,230 einbech,37,227,0 warp neweinb04 1,1,einbech,37,220 //======================================================= // veins //======================================================= veins,296,335,0 warp newve05 1,1,veins,290,342 veins,293,342,0 warp newve06 1,1,veins,275,352 veins,278,352,0 warp newve07 1,1,veins,296,332 //======================================================= // lighthalzen //======================================================= lighthalzen,241,163,0 warp newlhzs01 1,1,lighthalzen,265,163 lighthalzen,262,163,0 warp newlhzs02 1,1,lighthalzen,238,163 lighthalzen,282,327,0 warp newlhzs03 1,1,lhz_fild01,278,19 lhz_fild01,278,16,0 warp newlhzs04 1,1,lighthalzen,282,324 //======================================================= // juperos_ //======================================================= juperos_01,96,220,0 warp newjup01 1,1,juperos_01,152,183 juperos_01,149,185,0 warp newjup01-1 1,1,juperos_01,93,217 //======================================================= // jawaii //======================================================= jawaii,138,182,4 script Stairs#ja1 111,{ mes "[Stairs]"; mes "Want to go up or go down?"; next; switch(select("Up","Down")) { case 1: warp "jawaii",136,183; close; case 2: warp "jawaii",140,180; close; } close; }
  9. Upvote
    Kyoya G reacted to evilpuncker in itemInfo.lua [semi-traduzido]   
    última atualização: 13/04/2016
     
     
    chega de guardar as coisas só pra mim, tá ai galera
     
    créditos: GRAVITY
     
    PS: o que tem traduzido nos arquivos do bRO estão traduzidos aqui, o que falta no bRO está em inglês aqui.
     
    itemInfo.zip
  10. Upvote
    Kyoya G got a reaction from IndieRO in Tictac with required zeny   
    Try this:
    If you got any problem just tell me here.
  11. Upvote
    Kyoya G reacted to Senos in Ajuda com servidor novo   
    Não muda muita coisa, o que mudam são os caminhos dos arquivos e alguns modos de configurar, pare um tempo e estude os arquivos, entre nas pastas, leia, que rapidamente você pegará o jeito. 
    E aqui tem diversos tutorias: http://herc.ws/wiki/Main_Page
  12. Upvote
    Kyoya G reacted to 4144 in Custom Quest Sprites (alt+u)   
    all files. you should find official kro files for exact client exe version. If versions bit different you still may have some errors.
    After if all works without errors, you can mod data, add / remove files etc.
     
  13. Upvote
    Kyoya G reacted to 4144 in Custom Quest Sprites (alt+u)   
    if you using 2016 exe, then you must use lua/txt and other files from 2016 version. 2018 files with outdated client exe may not works.
     
  14. Upvote
    Kyoya G reacted to Dastgir in Custom Quest Sprites (alt+u)   
    For newish client like early 2018(ragexeRE) clients you can edit System/OngoingQuestInfoList_Sakray.lub, I guess quest lub which you are currently editing was introduced on early 2013.
    The file you are editing does not show npc image if it's on progress, you have added it in ep14.1, so if you check there, it would show npc I suppose(if those Lua/lub is even read by 2016 client)
  15. Upvote
    Kyoya G reacted to ossi0110 in Custom Quests Lists (bad argument #1 to 'ipairs')   
    Hello perculis
     
    yes it is possibl to add custom quest lub files ,   the most existing servers are adding new Tabs into a existing lub file . BUT  with the NEMO patcher you can add your own lub files .
     
    Since the quest_lubs are hardcoded into the client ,  NEO made a patch to add custom entrys for it.
     
    if you dont got NEMO Patcher , you can Download it here.
     
    http://herc.ws/board/topic/2905-nemo-client-patcher/
     
     
    when you download it , you will need a  .txt file what contains the path and names of your custom lub files.
     
    example:
     
    i made a txt file called  endlessro.txt
     
    and i want to have ingame a EndlessRO quest tab
     
     
     
    then you have to add into txt file this 2 lines
     
    localquestlocal_endlessroquest_list             <------------ Just an Examplelocalquestquestinfol_endlessro_list                <------------ Just an Example      if you want them displayed ingame in the  Episode Tab you can need to write this in the txt file epquestep_146quest_list <------------ Just an Exampleepquestquestinfoepsoid146_list   <------------ Just an Example   
        if you got the txt file rdy , open up nemo and select the Read custom quest lubs , and browse him to your  txt file and patch it.     after your done with it be sure to add the corrext values into the quest_function.lub  what is loacted in the  quest/ lub folder. makeLocalQuestList(LOCAL_EndlessroQuest_List)QuestTable.EndlessroQuest = EndlessroQuest_List   
      after your done with the quest_function.lub  be sure to create the correct custom quest lubs , Be sure the names are all matching     /localquest/local_endlessroquest_list   LOCAL_EndlessroQuest_List = { { name = [[EndlessRO Quests]], imagefile = [[ep_test_sample.bmp]], list = { { name = [[Test entry 1]], list = { { name =[[Test entry 2]], scrfilename = [[EndlessroQuest]], questID = 15000, }, }, } }, }, }  
     
    /localquest/quest/l_endlessro_list.lub
     
    EndlessroQuest_List = {[15000] = { NPCFromName = [[4_MAL_CAPTAIN]], NPCFromMap = [[malaya]], NPCFromSpr = [[4_MAL_CAPTAIN]], NPCFromX = 290, NPCFromY = 340, NPCToName = [[Guard Leader]], NPCToMap = [[malaya]], NPCToSpr = [[4_MAL_CAPTAIN]], NPCToX = 290, NPCToY = 340, Item = [[]], PrizeItem = [[ < image = "6497">Lesser Agimat<end> (3) < image = "6497">Lesser Agimat(PC)<end> (6)]], Title = [[Hello Neo Its Working]], Info = [[Hello Neo Its Working]], Hunt1 = [[ < link = "PORING">Poring<end>]], Hunt2 = [[]], Hunt3 = [[]], Time = [[0]], LV = [[0]], },}  
  16. Upvote
    Kyoya G reacted to Ridley in Custom Quest Sprites (alt+u)   
    as for the count, you need to add a target and the count in quest_db.conf
     
    { Id: 20017 Name: "Treinamento Inicial" Targets: ( { MobId: 1002 Count: 10 }, }, for your lua file, I'm pretty sure it's not read. Try putting it into the official one and if it works, check your custom settings.
  17. Upvote
    Kyoya G reacted to Dastgir in Custom Quest Sprites (alt+u)   
    My mistake, it seems that's correct name.
    Which client are you using? (By the looks of screenshot, it seems it isn't reading Lua file).
  18. Upvote
    Kyoya G got a reaction from w0wZukuBg in [w0w] Sample Music Project   
    Amazing
  19. Upvote
    Kyoya G reacted to Monsieur Panda in [Guide] Create your server & Client (2016/08)   
    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
  20. Upvote
    Kyoya G reacted to w0wZukuBg in [w0w] Sample Music Project   
    Sample 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]
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.