Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 08/30/2022 in all areas

  1. Hi all I haven't written any updates for a long time. Causes covid, life, work and more... Other full server configuration , i decide to implements a visual scripting editor like Blue Print (Unreal Engine) How to work is very simple, Just connect Node to Node, setting value, and the program, generate the npc script. The source code work like that. All nodes contains this function to generate code relative to parameters setting. public string CreateCode() { return map.Text + "," + x.Text + "," + y.Text + "," + dir.Text + " script " + name.Text + " " + graphics.Text + ",{"; } Really simple. And, this is Frontend Hope like this new NPC Editor. Actually need more time to create all Node and function relative to all npc command and sql operation. Follow for more news or join in rAthena Studio on discord
    5 points
  2. Update: Character creation function is now available. Character slot selection will be made soon. For the mean time, Character Slot Number will be included on the UI. To-do list: 1. Add Default Items on inventory like Knife and Cotton Shirt. 2. Add Optional Functions to set Starting Zeny. 3. Create the Character Selection and Remove Character Slot on the UI. PS: Rest of the functions are now working as normal character creation like on the client.
    2 points
  3. I'm triggered to make this addons. Update: Cleanup of the UI. Making it look like the normal character creation in-game. All hair color are now available. Gonna make the function scripts and will be done by weekends.
    2 points
  4. Need the latest kRO Install folder for your private server? Look no further! ----> Download <---- Latest: 2022-07-21 Installation: Official kRO Updated: 22/07/2022 Download Link: https://mega.nz/folder/jUsDgRxQ#ttLmLjPY9p9cfU5_ShWVCw Package contains RSU RO Patcher Lite for kRO and kRO RE by [Ai4rei] This package is maintained by [Akkarin] Note: Due to continued abuse of my webservers, the files have been moved to MEGA. You can download an extractable .zip of an installed kRO directory, or you can download the official installer from kRO's website. Note: If you require older maps that are compatible with 2021 and older clients, download the 2021 .zip instead of the 2022 .zip. A fan of this topic? Hit the rep button
    2 points
  5. https://github.com/rathena/rathena/commit/846dfd9bb4f21dd4622d289223d8d0785f28e35b
    2 points
  6. Ein paar Eckdaten wären interessant. Was wird das für ein Server? Welche Positionen müssen besetzt werden? Hast du Discord und wie lautet dein Username? Rynbef~
    2 points
  7. okay got it. the only thing now i can't get the time im using an NPC for that.
    2 points
  8. What up. The Map GOAT is back. Izlude is probably the ugliest, shittiest town map that Gravity has ever made so I decided to do it better. This is a lot bigger than the original, but I think it would've been missing something if I made it any smaller. Original Izlude doesn't have much character besides "Prontera but small and surrounded by water," so I tried to give it a little bit more of a nautical sorta theme with blue buildings, a lot of cargo/seafaring supplies, and a bunch of cute little piers and fishing spots. One of my goals was to make a town with little to no wasted space, so there are all sorts of little landmarks to see and seating areas to hang out in too. I hope you guys like it.
    2 points
  9. Version 1.1.0

    302 downloads

    Introduction: Due to the limitation of alootid that can only loot up to 10 items by default. (can change at /src/). However players are always greedy, they want to loot almost everything, but not every items, so 10 slots can't fill their desires. So this custom manager are introduced. It help player to setup different combination of alootid settings. (Different hunting monster/maps could switch to different settings) player no longer worry what their previous alootid settings was. player can switch/save any settings whenever they want. alootid settings could be auto loaded when they join the game. * In short, just a macro to use to the alootid atcommand. To make it less confusing to player, disable the alootid and start using alootid2 instead. Usage: Usage: @alootid2 list Usage: @alootid2 load <#> Usage: @alootid2 save <#> <item1> ... <item10> Usage: @alootid2 set <#> name <name> Usage: @alootid2 set <#> autoload <1/0> Example: chatbox: @alootid2 save 3 609 608 607 Usage: @alootid2 save <3> - save successfully. chatbox: @alootid2 load 1 Your autolootitem list has been reset. Autolooting item: 'Green_Herb'/'Green Herb' {511} Autolooting item: 'Apple'/'Apple' {512} Autolooting item: 'Banana'/'Banana' {513} Autolooting item: 'Grape'/'Grape' {514} Autolooting item: 'Carrot'/'Carrot' {515} Usage: @alootid2 load <2> - loaded successfully. chatbox: @alootid2 list <1> - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510 <2> - 511, 512, 513, 514, 515 (autoload upon login) <3> - 609, 608, 607 Usage: @alootid2 list - found 3 settings. Preview:
    Free
    2 points
  10. Version 1.8.0

    42,792 downloads

    Hey everyone, This is a GRF tool I started to develop for my own personnal use, but I thought I'd share it since I've upgraded the UI. Its primary goal is to be easy to use while offering a wide variety of options and customizations. The software is quite stable and can handle large operations easily. How to install Download the zip archive provided from the download link at the bottom of this description or directly from there : http://www.mediafire.com/?aflylbhblrzpz0h Install the application with GRF Editor Installer.exe; if you are missing a .NET Framework you will be prompted to download it. Once you are done, you can start the program from the link on your desktop. Key features Overall speed is faster (or at least equal) than any GRF tool. Common operations : add, delete, merge, extract, preview, save. Undo and redo for any operation. It can open any GRF file. Clean and very interactive interface. Saving formats supported : 0x200, 0x103 and 0x102 (through the Settings page) and conversion to the Thor format. Instant filter and search options (example : "map .gat"). File association and context menus integration for .grf, .gpf, .rgz and .thor (through the Settings page). Can rebuild separated images into one file easily. Drag and drop (with the ALT key, can be modified in the Settings page). This is a big part of the software; most of the items can be moved around within the application itself or from/to Windows Explorer. Tools Sprite editor : a simple sprite editor with powerful features. Semi-transparent images can be added, you can easily change the order or replace images, etc. This tool can convert images in the wrong type by showing you multiple solutions (merging a new palette, dithering the image by using current palette, using the closest color, and a few more). Grf validation : allows you to validate a GRF with multiple settings. It can detect corrupted GRF entries, invalid sprites, empty files, non-GRF files, duplicate files and a lot more. Flat maps maker : generates flat maps from .gat and .rsw files. Useful to generate WoE maps or to fasten up the loading time. Patch maker : generates a GRF patch based on two different GRFs. Hash viewer : shows the hash code (both CRC32 and MD5) for files. Image converter : converts an image to any format requested (BMP, PNG, JPG, TGA). GrfCL : used to create batch files (.bat) which can automate tasks on GRF files. See the content in GrfCL.rar in the download for more information. This tool can be customized from the sources as well. Palette recolorer : creates new sprites by changing their colors (this tool is now deprecated). Client database editor : allows modifications of the database client files (txt and lua) with easy and simple tools. Work in progress. Grf encryption The encryption feature has been enabled again. It's similar to what it used to be and it has been tested on client versions ranging from 2012-08-01 to 2014-02-05. Some error messages will be displayed if necessary. If you have an issue, copy the error message (with the code, if there's one) and send me the client executable with the cps.dll file generated by GRF Editor. There shouldn't be compatibility issues anymore though! Thor files Thor files are patches used by Thor Patcher ( http://thor.aeomin.net/ ). Because of their similarity with the GRF file structure, they have been integrated within GRF Editor. The primary utility of this feature is that it allows you to add encrypted files to a Thor patch. All the other options can be achieved by using Thor Maker. You'll find the necessary steps below, but test your patches before sending them off to players (I've done a lot of testing on my end, but better be safe). If you're using SecureGRF, then make a new GRF, add the files and encrypt it. In GRF Editor, open the encrypted GRF you just made, use "Save as" and name the new file with a .thor extension. That's it, if you want to change the output directory, click on the root node of the project and select the tab "Container options". You can select the output mode and the GRF to merge the patch with. Simply save again if you change these properties. If you're using GRF Editor's encryption, then make a new Thor file (File > New > New Thor) and add the files you want to patch it with. Right-click on the files you want to encrypt and use Encryption > Encrypt. Technical stuff Requires .Net Framework 3.5 (SP1) Client Profile to run (3.5 or more will work as well). Automatically converts file name encoding to their proper values (you can change the encoding). Data virtualization is used as much as possible to preview files, meaning the files aren't completely loaded. Right-clicking an item will bring up the available options with that file. Preview file formats : txt, log, xml, lua, lub, bmp, png, tga, jpp, db, ebm, pal, gnd, rsw, gat, rsm, str, spr, act, imf, fna and wav. Services are "crash ready", meaning that you will be warned about a failed operation and no work will be lost (the application won't close and crash). It tries to continue operating even if it meets unsual conditions. Operations can be cancelled by clicking on the button near the progress bar. The warning level can be changed to avoid messages like "Please select a folder first." When prompted with an error, use Ctrl-C to copy the current dialog's content. Some screenshots! 1) Previewing an act file, while showing the search feature 2) Preview of a model file (rsm) 3) Preview of GrfCL with the MakeGrf command 4) Preview of maps 5) Preview of Grf validation 6) Search feature (press Ctrl-F or Ctrl-H to bring up within a text editor) Got a feedback? I'd gladly hear you out and fix issues you have with the program.
    Free
    2 points
  11. prontera,100,100,0 script Seller 437,{ menu "Yes",-,"No",De; next; callshop "YOURSHOPAME",0; end; De: next; mes "Thank you come again!~"; close; } - itemshop YOURSHOPNAME -1,7179,501:1 Just change 7179 to your own costom id -%TAB%itemshop%TAB%<NPC Name>%TAB%<sprite id>,<costitemid>{:<discount>},<itemid>:<price>{,<itemid>:<price>...}
    1 point
  12. View File Cutin Checker I'm bored. So i made this simple Cutin Checker via @cutin command. To use this, simply type @cutin and input the EXACT cutin name. Cutin names can be found in data\texture\À¯ÀúÀÎÅÍÆäÀ̽º\illust Submitter Gidz Cross Submitted 07/06/2022 Category Scripts Video Content Author Gidz  
    1 point
  13. All I can say is... people fighting over piracy when you all in-fact are pirating Gravity's work, lol. It's nothing but a sea of thieves and there's no honor you can cry about, deal with it.
    1 point
  14. [email protected] = convertpcinfo(.players[[email protected]],CPC_ACCOUNT); getitem .item_win, .count_win, [email protected];
    1 point
  15. Version 1.0.0

    113 downloads

    if player upgrade item success [ refine ui ] The system will announce the message. can be configured in the file conf/battle/athenastudio.conf
    Free
    1 point
  16. ofc it wont refresh because thats not how you copy skills to the character. If your emulator is old then maybe try to update your emulator. try refer other posts on Stalker Skill copy there is this source code that allows u to copy skill directly as you wanted. im gonna drop the link here. also on [Error]: pc_checkskill: Invalid skill id 0 try refer Github Some sage skill provoke a error : pc_checkskill: Invalid skill id 0 · Issue #1154 · rathena/rathena · GitHub
    1 point
  17. if (!getskilllv("RG_PLAGIARISM")) { mes "You must have Plagiarism learned."; close; } just add this in the beginning of the code so it checks if player has Plagiarism skill. if they dont have the skill it will display that they need the skill inorder to use the NPC
    1 point
  18. grfeditor does not support data.grf more than 4GB, I tried to create a clean date with all contents of kRO, bRO, jRO, thRO and twRO. when finalizing all the files disappear inside the grf.
    1 point
  19. Theres a few section there. find it. if Pre-renewal, it will shows Pre-Renewal part remove all # that highlighted until reach level 255. Change MaxBaseLevel to 255 since that what you want, and insert the jobs that u want to reach that level in 'Insert jobs here'. you can see example in db/pre-re/job_stats.yml originally. Example : Knight: true Same goes to job level, edit MaxJobLevel, insert jobs, uncomment until the level that u want to reach. search until u find for HP and SP and do the same too.
    1 point
  20. Ive been using Rodex since 2019. I don't encounter problems with it.
    1 point
  21. So long yaml-cpp, hello rapidyaml! As of Git Hash: d1b7061, rAthena has transitioned from using yaml-cpp as the 3rd party tool for parsing YAML files to rapidyaml (or ryml). What this means: The yaml-cpp library gave us a great start into the world of yaml, but as we made more conversions of our databases from CSV to YAML, the load time began to grow. The ryml content is parsed into a single index-based array which is not like any standard STL. On average, ryml parses YAML at about ~150MB/s on Linux and ~100MB/s on Windows (vs2017). Compared to yaml-cpp, ryml is in general between 10 and 70 times faster! An optimization was also made to itemdb_searchname1 function which reduced its complexity to constant. Item database parsing function also has reduced complexity to linear complexity. This results in reduced loading time in debug mode to a fifth compared to using yaml-cpp! What this means to developers: Overall testing and usage of rAthena is much faster, in debug and release modes. We’ve kept our YamlDatabase class the same! This means that over 99% of the structure from using yaml-cpp carried over to ryml in terms of source side work. The YAML files themselves require no updates or changes! Other than that, enjoy the extra speed! Thanks to @Lemongrass, @Secrets, and @nitrous for their help in getting this implemented! PS: I realize I posted this on April 1st, but I can guarantee this update is quite the contrary!
    1 point
  22. Patch Notes Version 5.3 Add hide item id, hide sub-type setting Version 5.2 Aegis Name case in-sensitive Version 5.1 Support gradable Version 5.0 Support more 4 languages (But not translated) Version 4.9 Support timer abbreviation Version 4.8 Support sc_start with zero duration Support pet capture rate Remove tis-620 from encoding selection Version 4.7 Item script copier will copy combo too Version 4.6 Fix bonus3 bAddMonsterIdDropItem didn't convert monster name correctly Fix bonus4 bAddEffWhenHit didn't convert correctly Fix item_combo didn't remove comments when fetching Version 4.5 Item will print out in order by ID Add a item (script/equip script/unequip script) copier Fix item_combo didn't remove comments when fetching Version 4.4 Single job or class will print at same line (For setting use new line instead of ,) Version 4.3 Fix autobonus duration didn't convert correctly Settings button are functional now Version 4.2 Fix use sp rate not convert on some item (typo) Better autobonus & bonus_script converting Fix autobonus & bonus_script rate and duration will now print out Fix skill name didn't get convert on some item Version 4.1 Costume equipment will print costume = true instead of costume = false Version 4.0 Use UTF8 as default encoding Version 3.9 Use - instead of _ for line seperation for ANSI convert Version 3.8 Added tis-620 encoding selection Remove setting to replace new item bonus by new line on version 3.6 (Not good enough) Version 3.7 Change :: to - for ANSI convert Version 3.6 Add setting to replace new item bonus by new line Version 3.5 Fix fetching class number from custom item database error Version 3.4 Fix ANSI error cannot convert Version 3.3 Added ANSI encoding selection
    1 point
  23. Version 1.0.0

    878 downloads

    Experiment your First Bootstrap Flux. Design by @Mihael Flux Integrated Themes. Some of New rA Devs msg me to share the themes in Flux Integrated, Here you go I hope you like it. Thank you very much rAthena Developers. Installation: Step 1: upload the Addon Folder on your flux name skyzone.zip make sure it is extracted. Step 2: upload the themes on your themes name is purple_themes. Step 3: open the applocation.php that located on your config Folder Step 4: find 'ThemeName' => array('default', 'bootstrap'), and add the purple themes it is look like bellow + 'ThemeName' => array('purple_themes', 'default', 'bootstrap'), NOTE: - do not remove the default to override all pages on the default flux. - this is 100% free release. do not sell. - Orange Themes by Mihael will be next upload.
    Free
    1 point
  24. Good day, I am trying to add my custom items, item range 35000+, but the script won't allow me to enter these values in. it only lets me do the default items. veil,135,163,4 script ROTD 858,{ while(1){ mes "^FF0000ROTD^000000 refer to ^0000FFRace of the Day^000000"; mes "In another word, it mean that the ^FF0000Monster's Race^000000 that you killed by day will grant you ^FF0000Extra Bonus EXP / Item / Zeny ^000000."; next; mes "[ ^FF0000Today's ROTD^000000 ] = ^0000FF"+.ROTD$[.Race]+"^000000 Race"; mes "^FF0000_____________________________^000000"; mes "Bonus Lists :"; mes "^[email protected]^000000 EXP = ^0000FF"+( ( !.BonusEXP )?"No":.BonusEXP+" %" )+"^000000 EXP Bonus"; mes "^[email protected]^000000 Zeny = ^0000FF"+( ( !.BonusZeny )?"No":.BonusZeny )+"^000000 Zeny"; mes "^[email protected]^000000 Item = ^0000FF"+( ( !.BonusItemAmount )?"No Items":.BonusItemAmount+" x "+getitemname( .BonusItem ) )+"^000000"; if( .BonusItemAmount ){ mes "^[email protected]^000000 Rate = ^0000FF"+.BonusRate+"^000000 %"; mes "^FF0000_____________________________^000000"; mes "The Amount of Bonus Reward is given ^FF0000Randomly^000000 at a fixed Rate."; } next; switch(select("^4EEE94ROTD Information^000000", ( getgmlevel() < .GMLevel )?"":"^FF0000[GM]^000000Set a New Monster's Race", ( getgmlevel() < .GMLevel )?"":"^FF0000[GM]^000000Set EXP Bonus", ( getgmlevel() < .GMLevel )?"":"^FF0000[GM]^000000Set Item / Zeny Bonus")){ Case 1: mes "Today's ROTD has choosen ^0000FF"+.ROTD$[.Race]+"^000000 Race , which will grant you some ^FF0000Extra Bonus EXP^000000."; mes "The amount of ^FF0000EXP Bonus^000000 are ^0000FF"+.BonusEXP+" %^000000."; next; mes "For ^0000FFParty Members^000000 , they will only receive ^FF0000Bonus EXP^000000 if they didnt killed any monster."; mes "Besides, they have to stay in the ^FF0000Same Map^000000 in order to get the ^FF0000EXP Bonus^000000."; next; break; Case 2: mes "Choose ^FF0000Randomly / Manually^000000 ?"; for( set [email protected],0; [email protected] < getarraysize( .ROTD$ ); set [email protected],[email protected]+1 ){ mes "[ ^FF0000"[email protected]+"^000000. ] ^0000FF"+.ROTD$[[email protected]]+"^000000 Race"; } message strcharinfo(0),"Input the Number. Choose Random if you want it Randomise a Race for you."; input .Race,0,getarraysize( .ROTD$ )-1; next; if( .Race == getarraysize( .ROTD$ )-1 ){ set .Race,rand( getarraysize( .ROTD$ )-1 ); } mes "[ ^FF0000ROTD Update^000000 ]"; mes "[ ^FF0000Updated^000000 ] = ^0000FF"+.ROTD$[.Race]+"^000000 Race"; mes "[ ^FF0000Bonus EXP^000000 ] = Extra ^0000FF"+.BonusEXP+"^000000 %"; announce "[ ROTD ] : New Race : "+.ROTD$[.Race]+" with Bonus EXP of "+.BonusEXP+" % ",bc_blue; delwaitingroom; waitingroom "[ROTD]:"+.ROTD$[.Race]+" ",0; next; break; Case 3: mes "Set ^FF0000Random EXP / Manually^000000"; mes "Input 0 for ^0000FFRandom Bonus EXP Rate^000000"; mes "Input ^FF0000RATE^000000 for ^0000FFManual Bonus EXP Rate^000000"; mes "^FF0000EXP Range^000000 : 100% ~ 200%"; mes "Current Rate = [ ^0000FF"+.BonusEXP+"^000000 % ]"; input .BonusEXP,100,200; if( .BonusEXP == 0 ){ set .BonusEXP,rand( 100,200 ); } next; mes "The New EXP Rate is [ ^0000FF"+.BonusEXP+"^000000 % ]"; announce "[ ROTD ] : New Race : "+.ROTD$[.Race]+" with Bonus EXP of "+.BonusEXP+" % ",bc_blue; next; break; Case 4: mes "You may set a ^FF0000 Item / Zeny Bonus^000000 for the ^0000FFROTD^000000."; mes "This will work when you have killed a ^FF0000ROTD's Monster^000000, there will be a chances for Player to gain the ^FF0000Item / Zeny^000000."; next; mes "Input the ^FF0000Zeny Bonus^000000"; message strcharinfo(0),"You may input 0 to disable it. [ Use it Wisely ]"; input .BonusZeny;; mes "Input the ^FF0000Item ID^000000"; do{ input .BonusItem,0,32767; }while( getitemname( .BonusItem ) == "null" ); mes "Input the ^FF0000Item Bonus Amount^000000"; mes "Range of Amount = 0 ~ 30,000"; message strcharinfo(0),"You may input 0 to disable it. [ Use it Wisely ]"; input .BonusItemAmount,0,30000; next; mes "^FF0000Rate^000000 to get it ??"; mes "^FF0000100 = 100%^000000"; mes "^FF0000 10 = 10%^000000"; mes "^FF0000 1 = 1%^000000"; mes "^FF0000 0 = DISABLED^000000"; input .BonusRate,0,100; next; mes "[ ^FF0000ROTD Update^000000 ]"; mes "^0000FFZeny Bonus^000000 : "+.BonusZeny+" Zeny"; mes "^0000FFItem Bonus^000000 : "+.BonusItemAmount+" x "+getitemname( .BonusItem ); mes "^0000FFItem Rate^000000 : "+.BonusRate+" %"; next; break; } } close; OnInit: OnClock0000: set .GMLevel,80; setarray .ROTD$[0], "Formless", "Undead", "Brute", "Plant", "Insect", "Fish", "Demon", "Demi-Human", "Angel", "Dragon", "Random"; set .Race,rand( 10 ); set .BonusEXP,rand( 100,200 ); set .ExpLvlRange,50; delwaitingroom; waitingroom "[ROTD]:"+.ROTD$[.Race]+" ",0; end; OnNPCKillEvent: if( getmonsterinfo( killedrid,19 ) != .Race ) end; if( getcharid(1) ){ set [email protected]$,strcharinfo(3); set .BaseLvl,BaseLevel; getpartymember getcharid(1),1; getpartymember getcharid(1),2; for ( set [email protected], 0; [email protected] < .partymembercount; set [email protected], [email protected] +1 ) if ( isloggedin( .partymemberaid[[email protected]] ) ) attachrid( .partymemberaid[[email protected]] ); if( strcharinfo(3) == [email protected]$ && ( .BaseLvl - BaseLevel ) <= .ExpLvlRange ) getexp ( getmonsterinfo( killedrid,3 ) * .BonusEXP / 100 ),( getmonsterinfo( killedrid,4 ) * .BonusEXP / 100 ); }else{ getexp ( getmonsterinfo( killedrid,3 ) * .BonusEXP / 100 ),( getmonsterinfo( killedrid,4 ) * .BonusEXP / 100 ); } if( rand(100) <= .BonusRate && .BonusItemAmount ) getitem .BonusItem,rand( 1,.BonusItemAmount ); if( rand(100) <= .BonusRate && .BonusZeny ) set Zeny,Zeny + rand( 1,.BonusZeny ); end; }
    1 point
  25. you don't need to do source editing.. just client edit.. grf - client sprite.. just add costume_1 costume_2 folder and copy 1st or 2nd or 3rd jobs there. then replace the names. ^_~
    1 point
  26. Thanks! if (@inventorylist_bound[[email protected]] ) { if (@inventorylist_id[[email protected]] == getequipid([email protected])){ mes "Your item ( ^FF0000"+ getitemname(getequipid([email protected])) + "^0000FF ) is bounded. I cannot convert this item"; mes""; close; } }
    1 point
  27. https://github.com/rathena/rathena/blob/bdd63022a9c479df833304add9537eca7f39b331/conf/battle/items.conf#L139 set to 0
    1 point
  28. //===== rAthena Script ======================================= //= Ticket Refiner //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= [Official Conversion] //= Refiner that uses +5~9/+11 refine tickets to refine //= equipment with no chance of failure. //= NOTE: This NPC is currently disabled on official servers. //===== Additional Comments: ================================= //= 1.0 First version. [Euphy] //= 1.1 Do not refine above ticket level. [Euphy] //============================================================ // Main NPC :: safety_Ref_NPC //============================================================ prontera,184,177,6 script Refine Master 851,{ disable_items; if (countitem(6238) || countitem(6228) || countitem(6229) || countitem(6230) || countitem(6231) || countitem(6456)) set [email protected],1; if (countitem(6239) || countitem(6232) || countitem(6233) || countitem(6234) || countitem(6235) || countitem(6457)) set [email protected],1; if ([email protected] && [email protected]) { mes "[Refine Master]"; mes "Hello!"; mes "What's up?"; mes "I'm a specialist"; mes "for refining items,"; mes "but I don't work anymore."; next; switch(select("I'll go on my way.:Hmm... this makes me curious.")) { case 1: mes "[Refine Master]"; mes "Take care, adventurer."; close; case 2: mes "[Refine Master]"; mes "Actully, I sometimes provide refine services for adventurers with a ^006400Refine Ticket^000000..."; mes "Bye bye~!"; close; } } emotion ET_SURPRISE; mes "[Refine Master]"; mes "Greetings!"; mes "I can refine an item up to the ^006400same level as your ticket^000000."; mes "You don't have to worry! There's no chance of breaking your item."; next; if(select("I'll come back later.:Refine item with ticket.") == 1) { mes "[Refine Master]"; mes "Okay."; mes "You can come again later."; close; } mes "[Refine Master]"; mes "Which equipment would you like to refine?"; next; setarray [email protected]$[1],"Head upper","Armor","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head middle","Head lower"; setarray [email protected][1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW; for(set [email protected],1; [email protected]<=10; set [email protected],[email protected]+1) set [email protected]$, [email protected]$+((getequipisequiped([email protected][[email protected]]))?getequipname([email protected][[email protected]]):[email protected]$[[email protected]]+"- [Empty]")+":"; set [email protected], [email protected][ select([email protected]$) ]; if (!getequipisequiped([email protected])) { mes "[Refine Master]"; mes "You have to equip the item you want to refine."; close; } if (!getequipisenableref([email protected])) { emotion ET_OTL; mes "[Refine Master]"; mes "Oh, I'm sorry."; mes "This item is impossible to refine."; close; } [email protected] = getequipid([email protected]); // save id of the item [email protected] = getequiprefinerycnt([email protected]); //save refinery count setarray [email protected][0], getequipcardid([email protected],0), getequipcardid([email protected],1), getequipcardid([email protected],2), getequipcardid([email protected],3); switch(getequipweaponlv([email protected])) { default: case 0: setarray [email protected][0],6457,6235,6234,6233,6232,6239; setarray [email protected][0],5,6,7,8,9,11; set [email protected]$,"Armor"; set [email protected],[email protected]; break; case 1: case 2: case 3: case 4: setarray [email protected][0],6456,6231,6230,6229,6228,6238; setarray [email protected][0],5,6,7,8,9,11; set [email protected]$,"Weapon"; set [email protected],[email protected]; break; } if ([email protected]) { emotion ET_THINK; mes "[Refine Master]"; mes "If you want to refine this ^006400"[email protected]$+"^000000, please come along with ^006400"[email protected]$+" Refine Ticket^000000."; mes "See you later!"; close; } mes "[Refine Master]"; mes "Please choose which ^006400"[email protected]$+" Refine Ticket^000000 you want to use."; next; set [email protected]$,""; for(set [email protected],0; [email protected]<getarraysize([email protected]); set [email protected],[email protected]+1) set [email protected]$, [email protected]$+getitemname([email protected][[email protected]])+":"; set [email protected], select([email protected]$)-1; set [email protected]_lv, [email protected][[email protected]]; set [email protected]_id, [email protected][[email protected]]; if (countitem([email protected]_id) == 0) { emotion ET_QUESTION; mes "[Refine Master]"; mes getitemname([email protected]_id)+" is not in your inventory. Did you put it in your storage?"; mes "Please check again."; mes "See you later!"; close; } if (getequiprefinerycnt([email protected]) >= [email protected]_lv) { emotion ET_PROFUSELY_SWEAT; mes "[Refine Master]"; mes "^8B4513This item is already refined as much as your deed.^000000"; mes "Please come along with an item refined less than your ticket."; close; } mes "[Refine Master]"; mes "I'm going to refine ^006400"+getequipname([email protected])+"^8B4513 up to the +"[email protected]_lv+" level^000000 with ^006400"+getitemname([email protected]_id)+"^000000."; mes "May I proceed?"; next; if(select("No.:Yes.") == 1) { emotion ET_THINK; mes "[Refine Master]"; mes "Oh, you changed your mind."; mes "Ok."; mes "You can come back later."; close; } mes "[Refine Master]"; mes "Great."; mes "As you wish!"; mes "I have my own special way to refine..."; mes ".......ka boom!"; if (countitem([email protected]_id)) { delitem [email protected]_id,1; // anti-hack if (callfunc("F_IsEquipIDHack", [email protected], [email protected]) || callfunc("F_IsEquipRefineHack", [email protected], [email protected]) || callfunc("F_IsEquipCardHack", [email protected], [email protected][0], [email protected][1], [email protected][2], [email protected][3])) { mes "[Refine Master]"; emotion ET_FRET; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } } else { next; mes "Error!"; mes "Please report this."; close; } set .value, rand(0,100); if(.value >= 98){ specialeffect EF_SUI_EXPLOSION; successrefitem [email protected], [email protected]_lv - getequiprefinerycnt([email protected]); }else{ mes "Refinement failed, ticket was consuming. Try again."; } next; emotion ET_DELIGHT; mes "[Refine Master]"; mes "Alright, here it is~"; mes "Well, ^0000FF"+strcharinfo(0)+"^000000!"; mes "Congratulations on your shining "[email protected]$+"."; mes "You look GREAT!"; mes "Farewell~!"; close; } It's like 2% success, you'll see it will fail! Just edit the value down there again to correct it for 40 .. I changed the effect of success for when it succeeds, I have no way to test or refine the code now, because I'm in the company ...
    1 point
  29. You can use the Hikirikawa script and add maps in the array you see in the end. I edited the script a bit to use inarray rather than the loop it used. OnPCDieEvent: [email protected]$ = strcharinfo(3); if(inarray(.map$,[email protected]$) != -1){ for([email protected] = 5; [email protected]; [email protected]){ message strcharinfo(0),"You will respawn in "[email protected]+" second"+(([email protected] > 1)?"s":"")+"."; sleep2 1000; } recovery 0; warp [email protected]$,0,0; } end; OnInit: setarray .map$, "pvp_y_1-2","guild_vs2","guild_vs3"; end;
    1 point
  30. try this, just insert command for refresh - script paytowinbuffs -1,{ end; OnBuffs: [email protected] = getarraysize(.buffs$); for( [email protected] = 0; [email protected] < [email protected]; [email protected]++){ [email protected]$ = [email protected]$ + ""+.buffs$[[email protected]]+"" + ":"; } [email protected] = select([email protected]$) -1; sc_start .elements[[email protected]],180000,5; atcommand "@refresh "+strcharinfo(0); end; OnInit: setarray .buffs$, "Fire", "Water", "Earth", "Wind", "Holy", "Shadow", "Poison"; setarray .elements, 96, 97, "99", "98", "37", "144", "26"; bindatcmd "buffs2","paytowinbuffs::OnBuffs",5,99; end; }
    1 point
  31. Version 2.2.6

    6,843 downloads

    !! UPDATE !! If there is still interst in this project, and you really would like a update with better performance. Write me a private message. I would like to renew this, but i dont have any server to test it. Also if no one want a new version, i dont see any reason to rewrite it. -- -- -- -- -- -- -- -- This application is made for windows servers, since it doesn't make much sense to have something like this on a linux system. Login-, Char- and Map-Server gets started without a window. All Output is redirected to this application so you can see all 3 windows in 1 application. Version 2.2.6 is really old, but still have some "nice" features like coloring of [info], [status], etc. Also it counts different messages. (Error, Warning, ...) [How-To] 1. Download the newest Version. 2. Unrar it & Place it where you want. 3. Start the Application and go to "Options". 4. Configurate the Path to your executables. 5. Click on Start. Have fun. [source] I'm sorry. This project is by the time i changed this, about 4,2 years old. After cleaning my github i deleted it without thinking about it. The only thing i can say is.. it was a horrible source code... I'm sorry for all the developers who looked at it. ^^ >> Please, no mirrors without asking. <<
    Free
    1 point
  32. Compiled with no errors but not tested. use @gotm in-game non-gm chars: direct warp gm chars:brings up gm menu credits: Emistry for map validation - script GOTM -1,{ OnInit: bindatcmd "@gotm", strnpcinfo(0)+"::OnAtCommand"; set .gmlvl, 99; //gm level access end; OnAtCommand: if(getgroupid() < .gmlvl) { if ($gotm$ == "" || getmapusers($gotm$) < 0 ){ dispbottom "No Guild of the Month Map has been set yet."; end; } else { warpchar $gotm$,$gotmxy[0],$gotmxy[1],getcharid(0); } } else if (getgroupid() >= .gmlvl) { set .end, 0; while (!.end){ mes "[Guild of the Month]"; mes "Hi, What can I do for you today?"; Switch(Select("Warp to GOTM:Set GOTM Coordinates:Cancel")){ Case 1: if ($gotm$ == "" || getmapusers($gotm$) < 0){ mes "No Guild of the Month Map has been set yet."; } else { warpchar $gotm$,$gotmxy[0],$gotmxy[1],getcharid(0); set .end, 1; } break; Case 2: mes "[Guild of the Month]"; mes "Please enter the map's name"; input $gotm$; if (getmapusers($gotm$) < 0){ mes "Sorry, the map you entered is invalid."; } else { mes "Enter the X Coordinate"; input $gotmxy[0]; mes "Enter the Y Coordinate"; input $gotmxy[1]; next; mes "[Guild of the Month]"; mes "Guild of the Month Map successfully set."; mes $gotm$+": "+$gotmxy[0]+","+$gotmxy[1]; } break; Default: set .end,1; break; } next; } } end; } //edit changed something. please retry. added screenshots //edit Didn't work for him, he's using 3ceam.
    1 point
  33. As stated in the script_commands.txt file: It also has something to do with the mob's sight range, if not mistaken, just like how you can't directly walk to cells that is not within your character's view or walk range. (Not sure about this.) I don't recommend increasing it because the mob will be able to detect players from afar as well. Just try looping unitwalk until the mob reaches its destination.
    1 point
  34. script prontera,150,150,0 script Cleaner 1002,15,15,{ end; OnTouchNPC: [email protected] = monsterattached(); getmapxy [email protected]$, [email protected], [email protected], 3; // move to 1 cell near the mob / min distance between npc-mob if ( [email protected] > .x0 ) [email protected] = -1; else if ( [email protected] < .x0 ) [email protected] = 1; if ( [email protected] > .y0 ) [email protected] = -1; else if ( [email protected] < .y0 ) [email protected] = 1; [email protected]_tmp = [email protected] + [email protected]; [email protected]_tmp = [email protected] + [email protected]; if ( !checkcell([email protected]$,[email protected]_tmp,[email protected]_tmp,cell_chkpass) ) { for ( [email protected] = -1; [email protected] < 2 && [email protected] == 0; [email protected]++ ) for ( [email protected] = -1; [email protected] < 2; [email protected]++ ) { if ( [email protected] == 0 && [email protected] == 0 ) continue; [email protected]_tmp = [email protected] + [email protected]; [email protected]_tmp = [email protected] + [email protected]; if ( checkcell([email protected]$,[email protected]_tmp,[email protected]_tmp,cell_chkpass) ) { [email protected] = 1; break; } } } if ( [email protected]_tmp != [email protected] && [email protected]_tmp != [email protected] ) movenpc strnpcinfo(3), [email protected]_tmp, [email protected]_tmp; specialeffectmob 10; unitkill [email protected]; end; OnInit: getmapxy [email protected]$, .x0, .y0, 1; // [email protected]_name$ = strnpcinfo(3); npcspeed 50; freeloop 1; while( true ) { sleep 10000; do { [email protected] = .x0 + rand(-10,10); [email protected] = .y0 + rand(-10,10); } while( !checkcell([email protected]$,[email protected],[email protected],cell_chkpass) ); .x0 = [email protected]; .y0 = [email protected]; npcwalkto .x0, .y0; // movenpc [email protected]_name$, .x0, .y0; } } src src/custom/script.inc | 19 +++++++++++++++++++ src/custom/script_def.inc | 3 +++ src/map/script.c | 8 ++++++++ 3 files changed, 30 insertions(+) diff --git a/src/custom/script.inc b/src/custom/script.inc index 1e01c88..c8e825c 100644 --- a/src/custom/script.inc +++ b/src/custom/script.inc @@ -17,3 +17,22 @@ // script_pushint(st,1); // return 0; //} + +BUILDIN_FUNC(monsterattached) +{ + struct block_list *bl = map_id2bl(st->rid); + if(st->rid == 0 || bl == NULL || bl->type != BL_MOB) + script_pushint(st,0); + else + script_pushint(st,st->rid); + return SCRIPT_CMD_SUCCESS; +} + +BUILDIN_FUNC(specialeffectmob) +{ + int type = script_getnum(st,2); + struct block_list *bl=map_id2bl(st->rid); + if(bl != NULL && bl->type == BL_MOB) + clif_specialeffect(bl, type, AREA); + return SCRIPT_CMD_SUCCESS; +} \ No newline at end of file diff --git a/src/custom/script_def.inc b/src/custom/script_def.inc index 3319eea..5a75166 100644 --- a/src/custom/script_def.inc +++ b/src/custom/script_def.inc @@ -9,3 +9,6 @@ **/ //BUILDIN_DEF(example,""), + +BUILDIN_DEF(monsterattached,""), +BUILDIN_DEF(specialeffectmob,"i"), \ No newline at end of file diff --git a/src/map/script.c b/src/map/script.c index b6be34d..29d0634 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -13986,6 +13986,14 @@ int recovery_sub(struct map_session_data* sd, int revive) bl = &sd->pd->bl; break; case 3: //Get Mob Position + if( script_hasdata(st,6) ) { + struct script_data *data = script_getdata(st,6); + get_val(st, data); + if( !data_isstring(data) ) + bl = map_id2bl(script_getnum(st, 6)); + } + else if( st->rid && map_id2bl(st->rid) != NULL ) + bl = map_id2bl(st->rid); break; //Not supported? case 4: //Get Homun Position if(script_hasdata(st,6)) I didn't thought about friendly mob
    1 point
  35. waitingroom " Test [ "+( getmapusers("custom_fild01") + getmapusers("custom_fild02") + getmapusers("custom_fild03") + getmapusers("custom_dun01") )+" ]",0; you mean add all value together ?
    1 point
  36. @Yonko createchatroom works as the following // createchatroom( <char|account|name>, <title>, <password>, {<limit>, <type>} ); the title is the 2nd parameter - script atcmd_example -1,{ OnInit: bindatcmd "question",strnpcinfo(3)+"::OnAtcommand"; end; OnAtcommand: warp "prontera",150,150; if ( [email protected]_numparameters == 0 ) [email protected]_parameters$[0] = "Question";// default value createchatroom( getcharid(3), [email protected]_parameters$[0], "",5 ); sit; end; }
    1 point
  37. You can use getitem2 to do this... Here's a small example I came up with. - script at_signed_item -1,{ function sf { function s; [email protected] = getarg(2); [email protected] = getarg(3); return ( sprintf( getarg(0), s([email protected], [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)), s([email protected]++, [email protected], getarg(1)) ) +(( [email protected]+1 < [email protected] )?":Next":":") +(( [email protected] > 0 )?":Back":":") +":Cancel" ); function s { if( getarg(0) >= getarg(1) ) return ""; else { [email protected]$ = getelementofarray( getarg(2), getarg(0) ); return [email protected]$=="null"?"":"Character [^0054ff"[email protected]$+"^000000]"; } }; }; function nex { return((getarg(0)+10)<getarg(1)?getarg(0)+10:getarg(1)-(getarg(1)%10)); }; function bac { return((getarg(0)-10)>=0?getarg(0)-10:0); }; OnCreate: //@signeditem <item_id>{ "<Signed Name>"{ <amount>{ <refine>{ <VVV Strong>{ <element>{ "Receiving Player"}}}}}; switch( [email protected]_numparameters ) { default: dispbottom "Error: Too many parameters sent! ( @signeditem <item_id>{ <Signed Name>{ <amount>{ <refine>{ <VVV Strong>{ <element>{ Receiving Player}}}}}} ) "; end; case 7: [email protected] = getcharid( 3, [email protected]_parameters$[6] ); if( [email protected] ) { dispbottom "Error: Player not found! ( Maybe they aren't online! )"; end; } case 6: [email protected] = atoi( [email protected]_parameters$[5] ); if( [email protected] > 4 ) { dispbottom "Error: Element not found! ( 1 - Ice, 2 - Earth, 3 - Fire, 4 - Wind )"; end; } case 5: [email protected] = atoi( [email protected]_parameters$[4] ); case 4: [email protected] = atoi( [email protected]_parameters$[3] ); case 3: [email protected] = atoi( [email protected]_parameters$[2] ); case 2: [email protected]$ = [email protected]_parameters$[1]; case 1: [email protected] = atoi( [email protected]_parameters$ ); } [email protected] = query_sql( "SELECT `char_id`,`name` FROM `char` WHERE `name` LIKE '%"[email protected]$+"%' LIMIT 127;", [email protected], [email protected]_name$ ); if( [email protected] > 1 ) { mes "[ Signed @item ]"; mes "There was more than one result. Please select the correct name."; [email protected]$ = "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s"; next; while( 1 ) { select( sf( [email protected]$, [email protected]_name$, [email protected], [email protected] ) ); switch( @menu ) { case 11: [email protected] = nex( [email protected], [email protected] ); break; case 12: [email protected] = bac( [email protected] ); break; case 13: end; default: [email protected] = [email protected][email protected]; mes "[ Signed @item ]"; mes "You've selected ^0000FF["[email protected]_name$[[email protected]]+"]^000000, is this correct?"; next; if( select("Yes:No") == 1 ) callsub Sub_NamedItem, [email protected], [email protected][[email protected]], [email protected], [email protected], [email protected], [email protected], [email protected]; close; } } } else if( [email protected] ) callsub Sub_NamedItem, [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]; dispbottom "Error: Signature could not be identified! ( Maybe that player doesn't exist! )"; end; Sub_NamedItem: [email protected] = getarg(1); [email protected] = [email protected] & 65535; [email protected] = [email protected] >> 16; [email protected] = !getarg(0,501)?501:getarg(0); [email protected] = !getarg(2,1)?1:getarg(2); [email protected] = getarg(3,0); [email protected] = getiteminfo( [email protected], 5 ); if( [email protected] == 0 || [email protected] == 32768 ) [email protected] = 254; else { [email protected] = getarg(4,0); [email protected] = getarg(5,0); [email protected] = 255; [email protected] = [email protected]+(([email protected]*5)<<8); } if( [email protected] ) getitem2 [email protected], [email protected], 1, [email protected], 0, [email protected], [email protected], [email protected], [email protected], [email protected]; else getitem2 [email protected], [email protected], 1, [email protected], 0, [email protected], [email protected], [email protected], [email protected]; dispbottom "Item"+(([email protected]>1)?"s":"")+" Created!"; end; OnInit: bindatcmd "signeditem", "at_signed_item::OnCreate", 99, 99; } Usage: @signeditem <item_id>{ "<Signed Name>"{ <amount>{ <refine>{ <VVV Strong>{ <element>{ "Receiving Player"}}}}}; Example: @signeditem 1599 Lovely 1 10 3 >> +10 Very Very Very Strong Lovely's Fire Angra Manyu x1 Alternately the command can be used to search for players by letter or displaying the first 127 results directly from the database if nothing is provided.
    1 point
  38. prontera,150,150,0 script Sample 100,{ OnInit: setarray .Buffs[0], SC_BLESSING, SC_KYRIE, SC_ANGELUS; setarray .Effects[0], EF_BLESSING, EF_KYRIE, EF_ANGELUS; set .Size, getarraysize( .Buffs ); set .Buff, 0; // 1 to enabled buff, 0 otherwise set .Price, 100000; defpattern 1, "buff please", "OnBuff"; activatepset 1; end; OnBuff: if ( Zeny < .Price ) { npctalk "Can't buff you " + strcharinfo( 0 ) + ", You don't have zeny"; end; } Zeny -= .Price; percentheal 100, 100; specialeffect2 EF_HEAL2; if ( .Buff ) { for ( [email protected] = 0; [email protected] < .Size; [email protected]++ ) { specialeffect2 .Effects[ [email protected] ]; sc_start .Buffs[ [email protected] ], 300000, 10; } } end; }
    1 point
  39. Bulk Ori/Elu maker - pretty much the same as the one located at south-east pront building. but also that allows you to exchange rough oris/elus in a higher rate than one a time. // Ori/Elu Functions //============================================================ function script orimain { if (checkweight(1201,1) == 0) { mes "- Wait a minute !! -"; mes "- Currently you're carrying -"; mes "- too many items with you. -"; mes "- Please try again -"; mes "- after you loose some weight. -"; close; } mes "[" + getarg(0) + "]"; mes "Puedo purificar tus"; mes "Rough Oridecons o Rough Eluniums."; mes " Para ello voy a necesitar"; mes "5 Rough Stones del que elijas elaborar"; next; switch(select("Purificar Oridecon:Purificar Elunium:Ask about Enchanted Stones")) { case 1: if (countitem(756) > 4) { mes "puedo hacer ^FF0000" + countitem(756)/5 + "^000000 Oridecon"; mes "de tus ^0000FF" + countitem(756) + "^000000 Rough Oridecon."; if (select("Adelante","No") == 1) { set [email protected],countitem(756)/5; delitem 756, [email protected] * 5; //delete the rough oridecons getitem 984, [email protected]; //get oridecons specialeffect 101; mes " "; mes "Aqui tienes tu Oridecon!"; } close; } else { mes "[" + getarg(0) + "]"; mes "Debes estar bromeando!"; mes "Te acabo de decir que necesito 5 Rough Oridecons para hacer un Oridecon purificado."; close; } case 2: if (countitem(757) > 4) { mes "Puedo hacer hasta ^FF0000" + countitem(757)/5 + "^000000 Elunium"; mes "de tus ^0000FF" + countitem(757) + "^000000 Rough Elunium."; if (select("Adelante","No") == 1) { set [email protected],countitem(757)/5; delitem 757, [email protected] * 5; //delete the rough eluniums getitem 985, [email protected]; //get eluniums specialeffect 101; mes " "; mes "Aqui tienes tu Elunium!"; } close; } else { mes "[" + getarg(0) + "]"; mes "Debes estar bromeando!"; mes "Te acabo de decir que necesito 5 Rough Eluniums para hacer un Elunium purificado."; close; } case 3: mes "[" + getarg(0) + "]"; mes "Enchanted Stones...?"; mes "I've been a stonesmith for 20 years, so I've heard a lot about them. Supposedly, there are"; mes "four different kinds."; next; mes "[" + getarg(0) + "]"; mes "Each Enchanted Stone possesses one of the following elemental properties: Earth, Wind, Water and Fire."; next; mes "[" + getarg(0) + "]"; mes "If someone combines a Enchanted Stone with a weapon while smithing, that weapon will possess the same property as the Stone."; next; mes "[" + getarg(0) + "]"; mes "Needless to say, you need to have some smithing skill to produce this kind of elemental weapon."; close; } }
    1 point
  40. This script is old and I'm not using it anymore so I decided to share this here. Chained Quest ~ Scripts including 9 NPCs ~ ~ Dende ~ Master Popo ~ Bulma ~ Chi-Chi ~ Master Roshi ~ Krillin ~ Goku ~ Master Karin ~ Shenron Can set Random Prizes ~ set [email protected],rand(1,10); if ([email protected] == 1) set [email protected],1161; else if ([email protected] == 2) set [email protected],30021; // Change else if ([email protected] == 3) set [email protected],2115; // Change else if ([email protected] == 4) set [email protected],2421; // Change else if ([email protected] == 5) set [email protected],30029; // Change else if ([email protected] == 6) set [email protected],7086; // Change else if ([email protected] == 7) set [email protected],30013; // Change else if ([email protected] == 8) set [email protected],675; // Change else if ([email protected] == 9) set [email protected],30014; // Change else if ([email protected] == 10) set [email protected],30004; // Change getitem [email protected],1; Dragon Ball Z Quest.txt
    1 point
  41. - script atcmd_example -1,{ OnInit: bindatcmd "question",strnpcinfo(3)+"::OnAtcommand"; end; OnAtcommand: warp "prontera",150,150; createchatroom( getcharid(3), "Question", "",5 ); sit; end; } Add in src/custom/script.inc // createchatroom( <char|account|name>, <title>, <password>, {<limit>, <type>} ); // password : only enabled for type 0 // limit[ 1,20 ], 1 by default // type : 1 -> public, 0 -> private BUILDIN_FUNC(createchatroom) { int len = strlen( script_getstr(st,3) ); int limit = 1; char title[ CHATROOM_TITLE_SIZE ]; char password[ CHATROOM_PASS_SIZE ]; bool type = 1;// chat public by default TBL_PC *sd = NULL; if ( script_isstring(st,2) ) sd = map_nick2sd( script_getstr(st,2) ); else { int id = script_getnum(st,2); sd = map_charid2sd(id) ? map_charid2sd(id) : map_id2sd(id); } if ( sd == NULL ) { ShowWarning( "createchatroom : none player attached.\n" ); return 0; } if ( (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM) || (battle_config.basic_skill_check && pc_checkskill(sd,NV_BASIC) < 4 ) || npc_isnear(&sd->bl) ) return 0; if ( len > CHATROOM_TITLE_SIZE || strlen( script_getstr(st,4) ) > CHATROOM_PASS_SIZE ) return 0; if ( sd->chatID != 0 ) return 0; safestrncpy( title, script_getstr(st,3), min( len+1,CHATROOM_TITLE_SIZE ) ); safestrncpy( password, script_getstr(st,4), CHATROOM_PASS_SIZE ); if ( script_hasdata(st,5) ) { int tmp = script_getnum(st,5); if ( tmp > limit && tmp <= 20 ) limit = tmp; else if ( tmp > 20 ) limit = 20; } if ( script_hasdata(st,6) && script_getnum(st,6) == 0 ) type = 0; chat_createpcchat( sd, title, password, limit, type ); chat_changechatstatus( sd, title, password, limit, type ); return 0; } and in src/custom/script_def.inc BUILDIN_DEF(createchatroom,"vss??"), then recompile
    1 point
  42. prontera,128,213,5 script Coin Manager#1::CM 733,{ // Your Server Max Zeny Amount set .MaxZeny,1000000000; // Coins Item ID and each Coins Costs setarray .Coins[1],677; setarray .Zeny[1],10000000; set [email protected]_zeny_per_day, 2000000000; // Quest setarray [email protected]_need, 7227,5, 7444,100, 969,100, 999,100; [email protected]_need = getarraysize( [email protected]_need ); set @Menu$,""; for( set [email protected],1; [email protected] < getarraysize( .Coins ); set [email protected],[email protected]+1 ) set @Menu$,@Menu$ + getitemname( .Coins[[email protected]] )+":"; while( 1 ){ mes "Hello I am the Coin Manager, if you are interested in coins you have to talk with me,What can i help you with?"; next; switch( select( "I want trade Coin to Zeny:I want trade Zeny to Coin" ) ){ Case 1: mes "Very well. But im only interested on really expensive Coins made of Platinum:"; for( set [email protected],1; [email protected] < getarraysize( .Coins ); set [email protected],[email protected]+1 ){ mes "^0000FF"+getitemname( .Coins[[email protected]] )+" ^FF0000"+.Zeny[[email protected]]+"^000000 Zeny."; } next; set [email protected],select( @Menu$ ); mes "Select the Amount of Coins you want to trade into Zeny."; mes "You have "+countitem( .Coins[[email protected]] )+" "+getitemname( .Coins[[email protected]] )+"."; input @Amount,0,countitem( .Coins[[email protected]] ); if( @Amount < 1 ){ mes "You don't have that quantity of Coins."; }else if( ( Zeny + ( @Amount * .Zeny[[email protected]] ) ) > .MaxZeny ){ mes "You can't hold this amount of Zeny."; }else{ set Zeny,Zeny + ( @Amount * .Zeny[[email protected]] ); delitem .Coins[[email protected]],@Amount; mes "Done, you have traded "[email protected]+" of "+getitemname(.Coins[[email protected]])+" into "+( @Amount * .Zeny[[email protected]] )+" Zeny."; } next; break; Case 2: if ( zeny_coin_quest < gettimetick(2) ) { mes "im sory but you have to make platinum permit quest to trade zeny into platinum coins, do you want to make platinum permit quest?"; next; if ( select( "yes", "no" ) -1 ) end; mes "you need :"; for ( [email protected] = 0; [email protected] < [email protected]_need; [email protected] += 2 ) mes "- "+ [email protected]_need[[email protected]+1] +" "+ getitemname( [email protected]_need[[email protected]] ); mes "and 100,000,000z"; next; if ( select( "give the items", "leave" ) -1 ) close; [email protected] = 0; for ( [email protected] = 0; [email protected] < [email protected]_need; [email protected] += 2 ) if ( countitem( [email protected]_need[[email protected]] ) < [email protected]_need[[email protected]+1] ) { if ( [email protected] ) mes "I'm sorry you need"; mes "- "+ ( [email protected]_need[[email protected]+1] - countitem( [email protected]_need[[email protected]] ) ) +" "+ getitemname( [email protected]_need[[email protected]] ); [email protected]++; } if ( Zeny < 100000000 ) mes "You need "+ ( 100000000 - Zeny ) +" zeny."; if ( [email protected] || Zeny < 100000000 ) close; for ( [email protected] = 0; [email protected] < [email protected]_need; [email protected] += 2 ) delitem [email protected]_need[[email protected]], [email protected]_need[[email protected]+1]; Zeny = Zeny - 100000000; zeny_coin_quest = gettimetick(2) + 30 * 86400; close; } else if ( getstrlen( maxchange_zeny_per_day$ ) ) { explode( [email protected]$, maxchange_zeny_per_day$, "|" ); if ( atoi( [email protected]$ ) == gettime(4) && atoi( [email protected]$[1] ) > [email protected]_zeny_per_day ) { mes "I'm sorry you can't exchange more than "+ [email protected]_zeny_per_day +" zeny per day."; close; } else if ( atoi( [email protected]$ ) != gettime(4) ) [email protected]$[1] = 0; } mes "Very well. Here is the list on how much each coin is worth:"; for( set [email protected],1; [email protected] < getarraysize( .Coins ); set [email protected],[email protected]+1 ){ mes "^0000FF"+getitemname( .Coins[[email protected]] )+" ^FF0000"+.Zeny[[email protected]]+"^000000 Zeny."; } next; set [email protected],select( @Menu$ ); mes "Select the Amount of Zeny you want to trade into "+getitemname( .Coins[[email protected]] )+"."; mes "You can get maximum of "+Zeny/.Zeny[[email protected]]+" "+getitemname( .Coins[[email protected]] )+"."; input @Amount,0,Zeny/.Zeny[[email protected]]; if( @Amount < 1 ){ mes "You don't have that quantity of Zeny."; }else{ set Zeny,Zeny - ( @Amount * .Zeny[[email protected]] ); getitem .Coins[[email protected]],@Amount; mes "Done, you have traded "+( @Amount * .Zeny[[email protected]] )+" Zeny into "[email protected]+" of "+getitemname(.Coins[[email protected]])+" ."; [email protected]$ = gettime(4); [email protected]$[1] = atoi( [email protected]$[1] ) + @Amount * .Zeny[[email protected]]; maxchange_zeny_per_day$ = implode( [email protected]$, "|" ); } next; break; } } close; } payon,164,222,2 duplicate(CM) Coin Manager#2 733 turbo_room,93,117,5 duplicate(CM) Coin Manager#3 733
    1 point
  43. gonryun,160,118,4 script Guild of The Month 722,{ mes "[Guild of the Month]"; mes "The Guild of the Month is the ^ff0000"+getguildname(.a)+"^000000 Guild"; mes "Their Guild Master is ^FF0000"+.b$+"^000000"; close; OnInit: set .guild$, "Amateurs"; query_sql("SELECT `guild_id`,`master` FROM `guild` WHERE `name` = '"+.guild$+"';",.a,.b$); flagemblem .a; }UntestedEdit: Thank you for the example it made my job 100% easier.
    1 point
  44. Try this http://pastebin.com/QfydWwrY Put your item id to be restricted in this line of code : setarray [email protected][0],607,608; // Restricted items
    1 point
  45. // Rough / Ori/Elu to Enriched Refiners //============================================================ - script Refiner_Quest#ref -1,{ mes "[Refiner Quest]"; mes "If you bring me 50"; mes "Rough Oridecon or 50 Rough Elunium"; mes "or 10 Elunium or 10 Oridecon"; mes "I can exchange them for"; mes "Enriched Elunium or Enriched Oridecon."; next; switch(select("Rough Oridecon to Enriched Oridecon.:Oridecon to Enriched Oridecon.:Rough Elunium to Enriched Elunium.:Elunium to Enriched Elunium.:No thanks.")) { case 1: setarray [email protected][0],756,50,7620; //Rough Oridecon -> Enriched Oridecon break; case 2: setarray [email protected][0],984,10,7620; //Oridecon -> Enriched Oridecon break; case 3: setarray [email protected][0],757,50,7619; //Rough Elunium -> Enriched Elunium break; case 4: setarray [email protected][0],985,10,7619; //Elunium -> Enriched Elunium break; case 5: mes "[Refiner Quest]"; mes "Hmm..."; close; } if (countitem([email protected][0]) >= [email protected][1]) { delitem [email protected][0],[email protected][1]; getitem [email protected][2],1; mes "[Refiner Quest]"; mes "Ok! Here is your "+getitemname([email protected][2])+"."; mes "Take it and use it well."; close; } mes "[Refiner Quest]"; mes "You better not be trying"; mes "to cheat me because you"; mes "don't have"; mes ""+getitemname([email protected][0])+"."; close; } prt_in,85,71,5 duplicate(Refiner_Quest#ref) Refiner Quest#prt 826
    1 point
  46. "100,100" would be mean between 100 and 100 which is 0%. If you do not change the thing Emistry did, then you can achieve 100% success by doing this: case 1: callfunc "Func_Socket",1460,1461,0,101,200,1010,10; An easier way is to just change the if to something that is always true like "if(1)" or "if(true)" (not sure if that works in scripts, though).
    1 point
  47. Search and replace if (getgmlevel()>[email protected]){goto GM_Player;} by if (getgmlevel()>[email protected] || getgroupid() == 2 || getgroupid() == 5) goto GM_Player; and menu "Turn ^FF0000ON^000000 / ^0000FFOFF^000000 Event",iEvent,"Event Settings",iSettings; by menu "Turn ^FF0000ON^000000 / ^0000FFOFF^000000 Event",iEvent, ( ( getgmlevel() == 99 || getgroupid() == 5 ) ? "Event Settings" : "" ),iSettings;
    1 point
  48. I'm starting a list with my scripts, PT-BR and EN 1- Slot Machine/Caça Níqueis Simple slot machine game, but there's no animation, just the 'mes' window PT-BR > http://code.google.com/p/ctscripts/downloads/detail?name=caça_níqueis_v1.0.4.txt EN > http://code.google.com/p/ctscripts/downloads/detail?name=caça_níqueis_v1.0.4_EN.txt 2- Vip Discount/Desconto Vip When you click, if you're a vip user, it call's a x shop, if not, y shop PT-BR > http://code.google.c..._vip_v1.0.0.txt EN > http://code.google.c..._vip_v1.0.0.txt 3- Login Event On player login, it activades/deactivates some features. PT-BR > http://code.google.c...vent_v1.0.1.txt EN > http://code.google.c...t_v1.0.1_EN.txt 4- Daily Login Prize/Premio Login Diário There's not too much to explain PT-BR > http://code.google.c...ario_v1.0.1.txt EN > http://code.google.c...o_v1.0.1_EN.txt 5- Killing Titles After x kills player gets a new title till gets pk Pt-BR > http://code.google.c...tles_v1.0.4.txt EN > http://code.google.com/p/ctscripts/downloads/detail?name=killing_titles_v1.0.5_EN.txt 6- GitBox Open Opens git boxes. PT-BR > http://code.google.c...open_v1.0.0.txt EN > Translating. 7- Upper/Upadora Level up players PT-BR > http://code.google.c...dora_v1.0.0.txt EN > http://code.google.c...dora_v1.0.0.txt 8- BankItem/Banco Item Same as common bank, but it's used by one item. (useless) PT-BR > http://code.google.c...item_v1.0.0.txt EN > Translating. 9- Missions/Missões Player do missions for #pointsmis, that can be used in shops/quests etc... I didn't do the shops etc... PT-BR > http://code.google.c...soes_v1.0.3.txt EN > Translating. 10- Bomb Poring/Poring Bomba Poring invading Izlude (simple, but requested by one 'friend') PT-BR > http://code.google.c...ring_v1.0.2.txt EN > Translating. 11- Item for VIPs/Item para VIPs Check on login if a member have an item that is just for VIPs, and delete it if not vip and give it if vip & don't have. PT-BR > http://code.google.c..._vip_v1.0.0.txt EN > Translating. (just the conf is in PT-BR, if you want try googletranslate) 12- Merchant/Mercante A merchant that buys/sells itens from players, depending on stock. ADM set what is sold/bought PT-BR > http://code.google.c...ante_v1.0.0.txt EN > Translating. 13- ZenyBet Simple game, player bets X zeny and wins or loses it. PT-BR > http://code.google.c...ybet_v1.0.0.txt EN > Translating. 14- Obb Open Same as gift box open but with obbs. PT-BR > http://code.google.c...open_v1.0.0.txt EN > Translating. 15- VIP Sistem/Sistema Vip VIP sistem with control/free VIP/VIP seller/VIP Room warper PT-BR > http://code.google.c...p_txt.1.0.1.txt EN > Translating. 16- Floating Rates Changes rates via pm to npc. PT-BR > http://code.google.c...ntes_v1.0.0.txt EN > Translating. (just the explanation of how to use is in pt, translate with googletranslate if you want) 17- Drops Extra DB You already know about it PT-BR > http://code.google.c...radb.v1.0.1.txt EN > http://code.google.c...radb.v1.0.1.txt 18- Carver/Entalhador After quests gives a title to the player PT-BR > http://code.google.c...ador_v1.0.0.txt EN > Translating. 19- Antibot Simple sistem of input x number. PT-BR > http://code.google.c...ibot_v1.0.0.txt EN > Translating. 20- Merchant with price rate/Mercante com juros Same as merchant, but as described, prices changes depending on stock. PT-BR > http://code.google.c...uros_v1.0.3.txt EN > Translating. 21- PlayersOnEvent/Evento Players On When server gets X players on activates a mob spawn in some cities, all configured by adm PT-BR > http://code.google.c...rson_v1.0.1.txt EN > Translating.
    1 point
  49. each Job Class got 1 Room ?? try this prontera,155,181,5 script Sample 733,{ set .name$,"[PvP Room]"; set [email protected]$, "All Jobs:"; for( set [email protected], 1; [email protected] < getarraysize(.pvproomsjob); set [email protected], [email protected]+1) { set [email protected]$, [email protected]$ + "^FF0000[" + [email protected] + "] ^0000FF"+jobname(.pvproomsjob[[email protected]])+"^000000:"; } set [email protected], select([email protected]$) -1; if([email protected]) { warp .mapname$[[email protected]],0,0; // Edit map for All Jobs end; } if(Class != .pvproomsjob[[email protected]]) { mes "You are not of Class "+jobname(.pvproomsjob[[email protected]]); close; } mapannounce .mapname$[[email protected]],strcharinfo(0) + " Entered the PvP Room.",0; warp .mapname$[[email protected]],0,0; end; OnInit: setarray .pvproomsjob[1],4009,4016,4010,4017,4011,4018,4012,4019,4013,4020; // Put job id's here setarray .mapname$[0],"guild_vs5","pvp_y_7-2","pvp_y_6-2","pvp_y_5-2","pvp_y_4-2","pvp_y_3-2","pvp_y_2-2","pvp_y_1-2","pvp_y_8-2","pvp_y_6-5","pvp_y_7-5"; // Put map name for those jobs. end; } the 1st Map is "All Job Class" the rest will follow the Job Id Lists
    1 point
×
×
  • Create New...

Important Information

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