Jump to content

Search the Community

Showing results for tags 'Script'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Bulletin Centre
    • Community News
    • Repository News
    • Ragnarok News
  • Hercules Development Centre
    • Development Discussion
    • Suggestions
    • Development Centre Archives
  • Support & Releases
    • General Server Support
    • Database
    • Scripting
    • Source
    • Plugin
    • Client-Side
    • Graphic Enhancements
    • Other Support & Releases
  • Hercules Community
    • General Discussion
    • Projects
    • Employment
    • Server Advertisement
    • Arts & Writings
    • Off Topic
  • 3CeAM Centre
    • News and Development
    • Community
  • International Communities
    • Filipino Community
    • Portuguese Community
    • Spanish Community
    • Other Communities

Categories

  • Client Resources
  • Graphic Resources
    • Sprites & Palettes
    • Maps & Textures
    • Other Graphics
  • Server Resources
    • Server Managers / Editors Releases
    • Script Releases
    • Source Modifications
    • Plugins
    • Pre-Compiled Server
  • Web Resources

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Discord


Skype


IRC Nickname


Website URL


Location:


Interests


Github

Found 59 results

  1. View File [Event] Wheel of fortune Wheel of fortune Fun event, this particular version is set to accept Zeny as a payment for gambling. Would like to thank a lot @Myriad for Improving my code! Package contains: data.zip data folder to put into your GRF file or straight into data folder. wheel_of_fortune.txt the script itself. WheelOfFortune.psd the Photoshop source file, you can edit the prizes pictures if you like. This event can be configured to run automatically OnClock0800: OnClock1200: OnClock1600: OnClock2000: OnClock2200: just change this part of the script, at what time you want the script to run. Or, a GM can start this event by running this command : @wheel_of_fortune start As a reference, This is a version of the script using event points as a payment (in case you would like to take a look) https://pastebin.com/wN6ZjxM0 Submitter Habilis Submitted 06/14/18 Category Events & Games  
  2. packet capture tool for official npc message, effect, pos, and monstar battle log. create official script support(ex. input long long message...) Ill tested in jRO and iRO //jRO charserver_port: 6121 prontera_port: 5121 //iRO charserver_port: 4500 prontera_port: 4511 map_port: 4512 //iRO Transcendence charserver_port: 4500 prontera_port: 4502 map_port: 4501 url jRO iRO
  3. View File Array manipulation functions This script provides various array manipulation functions, and more might be added in the future. All of those functions (except the arithmetic ones) work with both integer and string arrays. The start of the array is always implicitly index 0, unless an index is specified, ie @array[index] array_pad(<array>, <size>, <value>) pads the array left or right with <value> until it reaches <size> size. If <size> is negative it will pad left. > returns the number of added entries setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pad(.@foo, 8, 69); // => 3 // array is now: 1, 2, 3, 4, 5, 69, 69, 69 setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pad(.@foo, -8, 69); // => 3 // array is now: 69, 69, 69, 1, 2, 3, 4, 5 array_replace(<array>, <needle>, <replacement>{, <neq>}) finds every occurrence of <needle> within the array and replaces it with <replacement>. if <neq> is true, finds entries that do not match instead > returns the number of changed entries setarray(.@foo, 1, 1, 3, 1, 5); // initialize the array array_replace(.@foo, 1, 69); // => 3 // array is now: 69, 69, 3, 69, 5 array_find(<array>, <needle>{, <neq>}) finds the first occurrence of <needle> within the array. if <neq> is true, finds entries that do not match instead > returns the index, or if none is found returns -1 setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_find(.@foo, 3); // => 2 array_find(.@foo, 1); // => 0 array_find(.@foo, 6); // => -1 array_rfind(<array>, <needle>{, <neq>}) like array_find, but finds the last occurrence. if <neq> is true, finds entries that do not match instead > returns the index, or if none is found returns -1 setarray(.@foo, 1, 2, 3, 4, 3); // initialize the array array_rfind(.@foo, 3); // => 4 array_rfind(.@foo, 4); // => 3 array_rfind(.@foo, 6); // => -1 array_exists(<array>, <needle>{, <neq>}) very similar to array_find() but it instead just checks if it exists or not. if <neq> is true, finds entries that do not match instead > returns true or false setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_exists(.@foo, 3); // => true array_exists(.@foo, 6); // => false array_count(<array>, <needle>{, <neq>}) similar to array_find() but iterates through the whole array. if <neq> is true, finds entries that do not match instead > returns the total number of occurrences of <needle> setarray(.@foo, 1, 69, 3, 69, 5); // initialize the array array_count(.@foo, 69); // => 2 array_entries(<array>) a wrapper around array_count(). behaves similarly to getaraysize() but does not count holes > returns the number of non-empty entries setarray(.@foo, 1, 2, 0, 0, 5); // initialize the array getarraysize(.@foo); // => 5 array_entries(.@foo); // => 3 array_remove(<array>, <needle>{, <neq>}) finds and removes every occurrence of <needle> from the array, while shifting left. if <neq> is true, finds entries that do not match instead > returns the number of removed entries setarray(.@foo, 1, 69, 3, 69, 5); // initialize the array array_remove(.@foo, 69); // => 2 // array is now: 1, 3, 5 array_reverse(<array>) reverses the array > returns true setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_reverse(.@foo); // => true // array is now: 5, 4, 3, 2, 1 array_sum(<array>) iterates through the whole array to perform an arithmetic addition > returns the sum of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_sum(.@foo); // ((((1 + 2) + 3) + 4) + 5) => 15 array_difference(<array>) iterates through the whole array to perform an arithmetic subtraction > returns the difference of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_difference(.@foo); // ((((1 - 2) - 3) - 4) - 5) => -13 array_product(<array>) iterates through the whole array to perform an arithmetic multiplication > returns the product of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_product(.@foo); // ((((1 * 2) * 3) * 4) * 5) => 120 array_quotient(<array>) iterates through the whole array to perform an arithmetic division > returns the quotient of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_quotient(.@foo); // ((((1 / 2) / 3) / 4) / 5) => 0 array_shift(<array>) removes the first entry of the array, while shifting left > returns the value of the removed entry setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_shift(.@foo); // => 1 // array is now: 2, 3, 4, 5 array_unshift(<array>, <value>) adds <value> to the start of the array, while shifting right > returns the new size of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_unshift(.@foo, 69); // => 6 // array is now: 69, 1, 2, 3, 4, 5 array_pop(<array>) removes the last entry of the array > returns the value of the removed entry setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pop(.@foo); // => 5 // array is now: 1, 2, 3, 4 array_push(<array>, <value>) adds <value> to the end of the array > returns the new size of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_push(.@foo, 69); // => 6 // array is now: 1, 2, 3, 4, 5, 69 array_shuffle(<array>) shuffles the array > returns true setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_shuffle(.@foo); // => true // array is now: 1, 4, 2, 3, 5 (example, unpredictable) array_unique(<array>{, <threshold>}) allows array entries to appear up to <threshold> times (1 by default) and removes the extraneous ones. useful to remove duplicate entries > returns the number of removed entries setarray(.@foo, 1, 3, 3, 4, 5); // initialize the array array_unique(.@foo); // => 1 // array is now: 1, 3, 4, 5 array_diff(<base array>, <array>{, <array>...}, <result array>) compares the base array against one or more other arrays and fills the result array with the entries in base array that are not present in any of the other arrays > returns the number of entries not found in other arrays setarray(.@base, 1, 2, 3, 4, 5, 6, 7, 8); // initialize the base array // fill the arrays to compare with the base array: setarray(.@foo, 2, 3, 4, 5, 6, 7, 8); // missing "1" setarray(.@bar, 1, 2, 3, 4, 6, 7, 8); // missing "5" setarray(.@baz, 1, 2, 3, 4, 5, 6, 7); // missing "8" // compare foo, bar and baz against base, and fill result: array_diff(.@base, .@foo, .@bar, .@baz, .@result); // => 3 // .@result is now: 1, 5, 8 array_filter(<array>, "<function>") filters the array using a function that is tested against every entries. if the function returns false, the relevant entry is removed and the array is shifted left > returns the number of removed entries function script is_prime { if (getarg(0) <= 1) return false; for (.@i = 2; .@i <= getarg(0) / 2; ++.@i) if ((getarg(0) % .@i) == 0) return false; return true; } setarray(.@foo, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); array_filter(.@foo, "is_prime"); // => 9 // array is now: 2, 3, 5, 7, 11, 13 array_sort(<array>) sorts the array in ascending order > returns true setarray(.@foo, 2, 1, 8, 4, 5, 7, 6, 3); // initialize the array array_sort(.@foo); // => true // array is now: 1, 2, 3, 4, 5, 6, 7, 8 array_rsort(<array>) sorts the array in descending order > returns true setarray(.@foo, 2, 1, 8, 4, 5, 7, 6, 3); // initialize the array array_rsort(.@foo); // => true // array is now: 8, 7, 6, 5, 4, 3, 2, 1 Requires Hercules of June 24 2017 or newer version -------------------------------------------------------------------------------------- This script was made by me, for The Mana World + Evol. License: public domain (CC0) Submitter meko Submitted 05/29/17 Category Quest, Shops, Functions & Algorithms  
  4. View File race_resist A simple plugin that adds race_resist() into your emulator (Checks race resist of a player). //===== Description ========================================== //= Checks how much resistance a character has to a particular // race. // //= race_resist(<type>{, <account id>}); //= E.g. race_resist(RC_Player); //= E.g. race_resist(RC_Player, getcharid(CHAR_ID_ACCOUNT)); Its just actually a rip off plugin from @bWolfie's check_resist() plugin full credits goes to him. Submitter Kuroe Submitted 04/11/19 Category Plugins  
  5. Hi friends, I wanted to know if they could help me with a script or they could tell me where to modify the status points. I want level 99 to stop giving me status points and every 100 levels give me 100 more status points. If you could help me, I'd be very grateful.
  6. Version v10

    286 downloads

    This script provides various array manipulation functions, and more might be added in the future. All of those functions (except the arithmetic ones) work with both integer and string arrays. The start of the array is always implicitly index 0, unless an index is specified, ie @array[index] array_pad(<array>, <size>, <value>) pads the array left or right with <value> until it reaches <size> size. If <size> is negative it will pad left. > returns the number of added entries setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pad(.@foo, 8, 69); // => 3 // array is now: 1, 2, 3, 4, 5, 69, 69, 69 setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pad(.@foo, -8, 69); // => 3 // array is now: 69, 69, 69, 1, 2, 3, 4, 5 array_replace(<array>, <needle>, <replacement>{, <neq>}) finds every occurrence of <needle> within the array and replaces it with <replacement>. if <neq> is true, finds entries that do not match instead > returns the number of changed entries setarray(.@foo, 1, 1, 3, 1, 5); // initialize the array array_replace(.@foo, 1, 69); // => 3 // array is now: 69, 69, 3, 69, 5 array_find(<array>, <needle>{, <neq>}) finds the first occurrence of <needle> within the array. if <neq> is true, finds entries that do not match instead > returns the index, or if none is found returns -1 setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_find(.@foo, 3); // => 2 array_find(.@foo, 1); // => 0 array_find(.@foo, 6); // => -1 array_rfind(<array>, <needle>{, <neq>}) like array_find, but finds the last occurrence. if <neq> is true, finds entries that do not match instead > returns the index, or if none is found returns -1 setarray(.@foo, 1, 2, 3, 4, 3); // initialize the array array_rfind(.@foo, 3); // => 4 array_rfind(.@foo, 4); // => 3 array_rfind(.@foo, 6); // => -1 array_exists(<array>, <needle>{, <neq>}) very similar to array_find() but it instead just checks if it exists or not. if <neq> is true, finds entries that do not match instead > returns true or false setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_exists(.@foo, 3); // => true array_exists(.@foo, 6); // => false array_count(<array>, <needle>{, <neq>}) similar to array_find() but iterates through the whole array. if <neq> is true, finds entries that do not match instead > returns the total number of occurrences of <needle> setarray(.@foo, 1, 69, 3, 69, 5); // initialize the array array_count(.@foo, 69); // => 2 array_entries(<array>) a wrapper around array_count(). behaves similarly to getaraysize() but does not count holes > returns the number of non-empty entries setarray(.@foo, 1, 2, 0, 0, 5); // initialize the array getarraysize(.@foo); // => 5 array_entries(.@foo); // => 3 array_remove(<array>, <needle>{, <neq>}) finds and removes every occurrence of <needle> from the array, while shifting left. if <neq> is true, finds entries that do not match instead > returns the number of removed entries setarray(.@foo, 1, 69, 3, 69, 5); // initialize the array array_remove(.@foo, 69); // => 2 // array is now: 1, 3, 5 array_reverse(<array>) reverses the array > returns true setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_reverse(.@foo); // => true // array is now: 5, 4, 3, 2, 1 array_sum(<array>) iterates through the whole array to perform an arithmetic addition > returns the sum of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_sum(.@foo); // ((((1 + 2) + 3) + 4) + 5) => 15 array_difference(<array>) iterates through the whole array to perform an arithmetic subtraction > returns the difference of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_difference(.@foo); // ((((1 - 2) - 3) - 4) - 5) => -13 array_product(<array>) iterates through the whole array to perform an arithmetic multiplication > returns the product of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_product(.@foo); // ((((1 * 2) * 3) * 4) * 5) => 120 array_quotient(<array>) iterates through the whole array to perform an arithmetic division > returns the quotient of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_quotient(.@foo); // ((((1 / 2) / 3) / 4) / 5) => 0 array_shift(<array>) removes the first entry of the array, while shifting left > returns the value of the removed entry setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_shift(.@foo); // => 1 // array is now: 2, 3, 4, 5 array_unshift(<array>, <value>) adds <value> to the start of the array, while shifting right > returns the new size of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_unshift(.@foo, 69); // => 6 // array is now: 69, 1, 2, 3, 4, 5 array_pop(<array>) removes the last entry of the array > returns the value of the removed entry setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pop(.@foo); // => 5 // array is now: 1, 2, 3, 4 array_push(<array>, <value>) adds <value> to the end of the array > returns the new size of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_push(.@foo, 69); // => 6 // array is now: 1, 2, 3, 4, 5, 69 array_shuffle(<array>) shuffles the array > returns true setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_shuffle(.@foo); // => true // array is now: 1, 4, 2, 3, 5 (example, unpredictable) array_unique(<array>{, <threshold>}) allows array entries to appear up to <threshold> times (1 by default) and removes the extraneous ones. useful to remove duplicate entries > returns the number of removed entries setarray(.@foo, 1, 3, 3, 4, 5); // initialize the array array_unique(.@foo); // => 1 // array is now: 1, 3, 4, 5 array_diff(<base array>, <array>{, <array>...}, <result array>) compares the base array against one or more other arrays and fills the result array with the entries in base array that are not present in any of the other arrays > returns the number of entries not found in other arrays setarray(.@base, 1, 2, 3, 4, 5, 6, 7, 8); // initialize the base array // fill the arrays to compare with the base array: setarray(.@foo, 2, 3, 4, 5, 6, 7, 8); // missing "1" setarray(.@bar, 1, 2, 3, 4, 6, 7, 8); // missing "5" setarray(.@baz, 1, 2, 3, 4, 5, 6, 7); // missing "8" // compare foo, bar and baz against base, and fill result: array_diff(.@base, .@foo, .@bar, .@baz, .@result); // => 3 // .@result is now: 1, 5, 8 array_filter(<array>, "<function>") filters the array using a function that is tested against every entries. if the function returns false, the relevant entry is removed and the array is shifted left > returns the number of removed entries function script is_prime { if (getarg(0) <= 1) return false; for (.@i = 2; .@i <= getarg(0) / 2; ++.@i) if ((getarg(0) % .@i) == 0) return false; return true; } setarray(.@foo, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); array_filter(.@foo, "is_prime"); // => 9 // array is now: 2, 3, 5, 7, 11, 13 array_sort(<array>) sorts the array in ascending order > returns true setarray(.@foo, 2, 1, 8, 4, 5, 7, 6, 3); // initialize the array array_sort(.@foo); // => true // array is now: 1, 2, 3, 4, 5, 6, 7, 8 array_rsort(<array>) sorts the array in descending order > returns true setarray(.@foo, 2, 1, 8, 4, 5, 7, 6, 3); // initialize the array array_rsort(.@foo); // => true // array is now: 8, 7, 6, 5, 4, 3, 2, 1 Requires Hercules of June 24 2017 or newer version -------------------------------------------------------------------------------------- This script was made by me, for The Mana World + Evol. License: public domain (CC0)
  7. Status: Unavailable [0/0] Hello, I have been a part of this community for more than two years. I feel my skills have reached a point where I can offer them in a freelance manner. About Me I started scripting in 2016, as my server was in desperate need of developers. Over time, I branched into source. My specialties include editing skills, creating menu-based scripts, atcommands and script commands. Samples Below are some samples I created for the community. I believe they are proof of my ability and hopefully fill you with confidence to hire me. Scripts Function - Ordinal Suffix: Adds the ordinal suffix to a number. E.g. 1 -> 1st, 223 -> 223rd, 1000 -> 1000th, etc. Soul Link NPC: A basic NPC which allows players to pay for Soul Links. Wheel of Fortune: While not an original script idea of mine, the final version was revised and edited by me. Script Commands BUILDIN(getalliance): A script command which returns the Alliance and Opposition Guild IDs of the inputted Guild ID. Skill/Status Edits TF_BACKSLIDING: A plugin which re-enables Back Sliding's animation, the way it was in eAthena. Magic Rod Behavior: A pull request I made which allows you to configure Magic Rod to use its old eAthena behavior. SG_PARRYING_LOV: A plugin which gives a Star Gladiator the 'Lord of Vermilion' and 'Parrying' skills while Soul Linked. Services My specialties, the things you should absolutely hire me for: Atcommands. Script commands. Anything script related. Skill modification. Scripting: I consider myself proficient with the script engine. Pitch your idea to me, I'll make it work. Source Edits: When it comes to source edits, you should specify if you want it in plugin or diff/instruction form. In the case you want a plugin, I will investigate if it is feasible for the source to be in plugin format. Depending on my schedule (I am a University student) and the difficulty of the job, completion can take anywhere from 2-3 days to up to a week. When I agree to take on your job, I will usually inform you how long I believe it will take. I will only take on 2 jobs at any one time. Prices All prices start at $5, with the exception of scripts, which start at $3. Payment is only available through PayPal. No other methods will be accepted. Continued support after the completion of your job is free. Contact You can contact me via PM here on the Hercules forums or on Discord. I go by the same name 'Myriad' on the Hercules Discord. → I check these forums every 2-3 days. I have email alerts setup for my PMs, so if you message me here, I should get back to you in a day or two at the most. → I usually log into my Discord once or twice a day. It may take 24-48 hours to get a response from me, but in most cases it should be within 12 hours.
  8. i dont know how to use this forum, i'm apologize for my english and if i making something wrong!! i need help with this script after i set the account to vip, the player can't get in the vip room!! even having all the vip commands and the group_id in sql is set to 1 ( group vip in my server) (it was tested reloaded account) please someone help and again, so sorry for my english tks you all sistema_vip.txt
  9. Kuroe

    race_resist

    Version 1.1

    138 downloads

    A simple plugin that adds race_resist() into your emulator (Checks race resist of a player). //===== Description ========================================== //= Checks how much resistance a character has to a particular // race. // //= race_resist(<type>{, <account id>}); //= E.g. race_resist(RC_Player); //= E.g. race_resist(RC_Player, getcharid(CHAR_ID_ACCOUNT)); Its just actually a rip off plugin from @bWolfie's check_resist() plugin full credits goes to him.
  10. Hello, Hercules:) I make rockridge town script, but jRO official dialog it. and script format is Auriga emulator coding. Many incomplete... Please support me trancelate and hercules coding fix. Thx *These scripts are created by packet capture, and the pos, dir, viewid, dialog, etc of captured jRO.npc sorted of unitid. **LINK** https://github.com/refis/ScriptDustbox/blob/master/Auriga/town/npc_town_rockridge.sc
  11. Description: Adds the check_resist() script command to your script engine. With this command, you can retrieve elemental resistances for a character. check_resist(<type>{, <account id>}) e.g. check_resist(Ele_Water); check_resist(Ele_Wind, getcharid(CHAR_ID_ACCOUNT)); https://github.com/bWolfie/HPM-Plugins/blob/master/src/plugins/check_resist.c
  12. Hi all, For the longest time I've been creating custom script commands simply so I can read a value from struct map_session_data{}. For example, I wanted to return the value of sd->state.showzeny, so I created a simple buildin just for that purpose.It would go something like this: BUILDIN(read_showzeny) { struct map_session_data *sd = script->rid2sd(st); if (sd != NULL) script_pushint(st, sd->state.showzeny); else script_pushint(st, -1); return true; } Seems not bad, right? But then it got me thinking. I'm creating all these script commands for one simple action. Surely there's a better way? That's when I stumbled across the getunitdata() command. Then it came to me - create a script command which can fetch this data for a player. The Goal Create a script command which can fetch the data which map_session_data provides. It would work similar to getunitdata(): *getplayerdata(<account id>, <DataType>{,<Variable>}) Maybe also setplayerdata()? Helped needed: The one thing is, not all the stuff in there is useful. Maybe it would be best to selectively choose what can be retrieved as data? I made a list for this stuff. Let me know what you think.
  13. Version 1.0.2

    2069 downloads

    Wheel of fortune Fun event, this particular version is set to accept Zeny as a payment for gambling. Would like to thank a lot @Myriad for Improving my code! Package contains: data.zip data folder to put into your GRF file or straight into data folder. wheel_of_fortune.txt the script itself. WheelOfFortune.psd the Photoshop source file, you can edit the prizes pictures if you like. This event can be configured to run automatically OnClock0800: OnClock1200: OnClock1600: OnClock2000: OnClock2200: just change this part of the script, at what time you want the script to run. Or, a GM can start this event by running this command : @wheel_of_fortune start As a reference, This is a version of the script using event points as a payment (in case you would like to take a look) https://pastebin.com/wN6ZjxM0
  14. File Name: Special Shop File Submitter: Dastgir File Submitted: 15 May 2013 File Category: Source Modifications As Per This Topic: http://herc.ws/board/topic/3204-special-shop/#entry21298 Example of usage: For using ItemID x for buying Items <map name>,<x>,<y>,<facing> itemshop <npc name> <spriteid>,<item_id><itemid>:<amount>,..... This shop will use item id mentioned in the NPC. For Using Variable for buying items <map name>,<x>,<y>,<facing> pointshop <npc name> <spriteid>,"<variable_name>":"<variable_description>",<itemid>:<amount>,..... Variable_Name will be deducted from your variable,and it will show variable_description when click npc. Please See ScreenShot for More information. NOTE: Please Do Not Share without Credit.Please Do not Share this as Paid Service. Click here to download this file
  15. Version 1.0.0

    105 downloads

    Hello guys! This is my first script in the Hercules. Basically, do you receive damage while stay stepping. Main configurations: (I'm using the last version of hercules) //Damage Options: .DMG_Type = 1; // Type of damage - [0 - Normal] | [1 - Percentage of maximum health] .DMG_Attack = 5; // Damage per attack (1 to 100 if percentage damage) .DMG_Speed = 250; // Damage speed. The smaller faster (milisseconds) .CAN_Die = 0; // The character can die burned? - [0 - No] | [1 - Yes] // Effects: .DMG_Effect = 49; //When receive damage (Alternatives: 50 , 255 ) Default: 49 .FIRE_Effect = 25; //Flow Effect (Alternatives: 634 , 728, 920, 962) Default: 25 .EFFECT_Speed = 300; //The speed of loop effect (Advanced option. Not recommended change): //Time Options .TIME_DURATION_ON = 3000; // The time that the fire stay enable (milisseconds) .TIME_DURATION_OFF = 2000;// The time that the fire stay disable (milisseconds) .TIME_Quit = 500; // Burning time after leave of the danger area, (milisseconds) Cells configurations: //Bellow, do you configure the cells (Do you can add more, if want) pay_dun00,161,46,0 duplicate(FireArea) #FireArea11 HIDDEN_WARP_NPC,0,0 pay_dun00,161,45,0 duplicate(FireArea) #FireArea12 HIDDEN_WARP_NPC,0,0 pay_dun00,161,44,0 duplicate(FireArea) #FireArea13 HIDDEN_WARP_NPC,0,0 pay_dun00,160,46,0 duplicate(FireArea) #FireArea21 HIDDEN_WARP_NPC,0,0 pay_dun00,160,45,0 duplicate(FireArea) #FireArea22 HIDDEN_WARP_NPC,0,0 pay_dun00,160,44,0 duplicate(FireArea) #FireArea23 HIDDEN_WARP_NPC,0,0 pay_dun00,159,46,0 duplicate(FireArea) #FireArea31 HIDDEN_WARP_NPC,0,0 pay_dun00,159,45,0 duplicate(FireArea) #FireArea32 HIDDEN_WARP_NPC,0,0 pay_dun00,159,44,0 duplicate(FireArea) #FireArea33 HIDDEN_WARP_NPC,0,0 pay_dun00,158,46,0 duplicate(FireArea) #FireArea41 HIDDEN_WARP_NPC,0,0 pay_dun00,158,45,0 duplicate(FireArea) #FireArea42 HIDDEN_WARP_NPC,0,0 pay_dun00,158,44,0 duplicate(FireArea) #FireArea43 HIDDEN_WARP_NPC,0,0 Sorry for my bad english... Enjoy it OBS: If do you use @reloadscript in this script, reload your character.
  16. View File Fire Area Hello guys! This is my first script in the Hercules. Basically, do you receive damage while stay stepping. Main configurations: (I'm using the last version of hercules) //Damage Options: .DMG_Type = 1; // Type of damage - [0 - Normal] | [1 - Percentage of maximum health] .DMG_Attack = 5; // Damage per attack (1 to 100 if percentage damage) .DMG_Speed = 250; // Damage speed. The smaller faster (milisseconds) .CAN_Die = 0; // The character can die burned? - [0 - No] | [1 - Yes] // Effects: .DMG_Effect = 49; //When receive damage (Alternatives: 50 , 255 ) Default: 49 .FIRE_Effect = 25; //Flow Effect (Alternatives: 634 , 728, 920, 962) Default: 25 .EFFECT_Speed = 300; //The speed of loop effect (Advanced option. Not recommended change): //Time Options .TIME_DURATION_ON = 3000; // The time that the fire stay enable (milisseconds) .TIME_DURATION_OFF = 2000;// The time that the fire stay disable (milisseconds) .TIME_Quit = 500; // Burning time after leave of the danger area, (milisseconds) Cells configurations: //Bellow, do you configure the cells (Do you can add more, if want) pay_dun00,161,46,0 duplicate(FireArea) #FireArea11 HIDDEN_WARP_NPC,0,0 pay_dun00,161,45,0 duplicate(FireArea) #FireArea12 HIDDEN_WARP_NPC,0,0 pay_dun00,161,44,0 duplicate(FireArea) #FireArea13 HIDDEN_WARP_NPC,0,0 pay_dun00,160,46,0 duplicate(FireArea) #FireArea21 HIDDEN_WARP_NPC,0,0 pay_dun00,160,45,0 duplicate(FireArea) #FireArea22 HIDDEN_WARP_NPC,0,0 pay_dun00,160,44,0 duplicate(FireArea) #FireArea23 HIDDEN_WARP_NPC,0,0 pay_dun00,159,46,0 duplicate(FireArea) #FireArea31 HIDDEN_WARP_NPC,0,0 pay_dun00,159,45,0 duplicate(FireArea) #FireArea32 HIDDEN_WARP_NPC,0,0 pay_dun00,159,44,0 duplicate(FireArea) #FireArea33 HIDDEN_WARP_NPC,0,0 pay_dun00,158,46,0 duplicate(FireArea) #FireArea41 HIDDEN_WARP_NPC,0,0 pay_dun00,158,45,0 duplicate(FireArea) #FireArea42 HIDDEN_WARP_NPC,0,0 pay_dun00,158,44,0 duplicate(FireArea) #FireArea43 HIDDEN_WARP_NPC,0,0 Sorry for my bad english... Enjoy it OBS: If do you use @reloadscript in this script, reload your character. Submitter luizragna Submitted 03/02/18 Category Script Releases  
  17. Hello! The following plugin will grant your server the getguildid("<Guild Name>") script command. It is quite self-explanatory. Simply enter the Guild Name for which you need the GID. Make sure you capture it too! Example: .@GID = getguildid("My Pro Guild"); // .@GID will now be equal to whatever the guild id of 'My Pro Guild' is. // example, can be used with flagemblem flagemblem(.@GID); Hopefully no errors and compiles first time ...and hopefully this will get added to source as I hadn't found a similar functionality to it yet in our existing commands. Download: https://pastebin.com/CpyT7WKm
  18. Hello pessoal... eu quero fazer um item custom no meu servidor... mas eu queria fazer um script como do galho seco e galho sangrento mas eu queria fazer o item sumonar um boss no mesmo nivel do player que usou ele... vc's consegue me ajuda???...Obrigado!!!!!!!
  19. Hello. Does anyone has a VIP BUFFER script? I want it to gives +6 all stats food, 40 atk & m.atk, and +100% EXP & JOB EXP for 5 hours. Thank you.
  20. Please someone help me! I need put a "erasequest" any quest before Reborn to transclass! //===== Criado Por: ============================================== //= Euphy //===== Compatível Com: ========================================== //= BRathena -- Tradução por: Julinhobrow //===== Descrição: =============================================== //= Troca sua classe sem necessidade de quest. //===== Comentários Adicionais: ================================== //= com classes 3rd //= administre no final do arquivo. //================================================================ prontera,147,189,6 script Mestra das Classes 4_F_NACORURI,{ function Job_Menu; function A_An; mes "[^8A2BE2Mestre das Classes^000000]"; if (Class > Job_Soul_Linker) { mes "Não existem mais expansões para sua classe?"; close; } if (checkfalcon() || checkcart() || checkmount() || hascashmount()) { mes "Por favor remova seu "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkmount() || hascashmount())?"mount":"") +" para continuar."; close; } if (.skill_point_check && SkillPoint > 0) { mes "Por favor use todos os seus pontos de habilidade para continuar."; close; } .@eac = eaclass(); .@base = .third_classes ? roclass(.@eac&EAJ_UPPERMASK) : Class; if (.@base >= Job_Knight && .@base <= Job_Crusader2) { if (BaseLevel < .rebirth_blevel || JobLevel < .rebirth_jlevel) { .@blvl = .rebirth_blevel - BaseLevel; .@jlvl = .rebirth_jlevel - JobLevel; mes "Você precisa de mais" + (BaseLevel < .rebirth_blevel ? ((.rebirth_blevel - BaseLevel) +" base levels "+ (JobLevel < .rebirth_jlevel ? "e " : "")) : "") + (JobLevel < .rebirth_jlevel ? (.rebirth_jlevel - JobLevel) +" job levels " : "") + "para continuar."; close; } if (Class > Job_Crusader2) { mes "Avançar para a Terceira Classe?"; next; Job_Menu(roclass(.@eac|EAJL_THIRD)); close; } while (true) { mes "Selecione uma opção."; next; .@choice = select(" ~ ^0055FFRenascer^000000:"+(.third_classes ? " ~ ^FF0000Terceira Classe^000000" : "")+": ~ ^777777Sair^000000"); if (.@choice == 3) close; mes "[^8A2BE2Mestre das Classes^000000]"; mes "Você tem certeza?"; next; if (.@choice == 1) Job_Menu(Job_Novice_High); else Job_Menu(roclass(.@eac|EAJL_THIRD)); mes "[^8A2BE2Mestre das Classes^000000]"; } } .@job1 = roclass(.@eac|EAJL_2_1); .@job2 = roclass(.@eac|EAJL_2_2); if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) { .@newclass = roclass(.@eac|EAJL_THIRD); .@required_jlevel = 99; } else if (Class == Job_Ninja || Class == Job_Gunslinger) { .@newclass = .@job1; .@required_jlevel = 70; } if (.@newclass && .third_classes) { if (BaseLevel < .rebirth_blevel || JobLevel < .@required_jlevel) { mes "Você precisa de mais " + (BaseLevel < .rebirth_blevel ? ((.rebirth_blevel - BaseLevel) +" base levels "+ (JobLevel < .@required_jlevel ? "e " : "")) : "") + (JobLevel < .@required_jlevel ? (.@required_jlevel - JobLevel) +" job levels " : "") + "para continuar."; close; } mes "Mudar para "+jobname(.@newclass)+"?"; next; Job_Menu(.@newclass); close; } if (.@eac&EAJL_2) if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) { mes "Não existem mais expansões para sua classe."; close; } if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) { if (JobLevel < .jobchange_first) { mes "Um job level de "+.jobchange_first+" é necessário para mudar para 1st Classe."; } else if (Class == Job_Novice_High && .linear_jobchange && lastJob) { mes "Mudar de Classe agora?"; next; Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); } else if (Class == Job_Novice) { Job_Menu(Job_Swordman, Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief, Job_SuperNovice, Job_Taekwon, Job_Gunslinger, Job_Ninja, Job_Baby); } else if (Class == Job_Novice_High) { Job_Menu(Job_Swordman_High, Job_Mage_High, Job_Archer_High, Job_Acolyte_High, Job_Merchant_High, Job_Thief_High); } else if (Class == Job_Baby) { Job_Menu(Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer, Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief, Job_Super_Baby); } else { mes "Ocorreu um erro."; } close; } if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1) { mes "No more jobs are available."; } else if (!(.@eac&EAJL_2) && JobLevel < .jobchange_second) { mes "É necessário possuir nível de classe "+.jobchange_second+" para mudar para a Segunda Classe."; } else if (.linear_jobchange && lastJob && (.@eac&EAJL_UPPER)) { mes "Mudar de classe agora?"; next; Job_Menu(lastJob+Job_Novice_High); } else { Job_Menu(.@job1, .@job2); } close; function Job_Menu { while (true) { if (getargcount() > 1) { mes "Selecione uma classe."; .@menu$ = ""; for (.@i = 0; .@i < getargcount(); ++.@i) .@menu$ += " ~ "+jobname(getarg(.@i))+":"; .@menu$ += " ~ ^777777Cancelar^000000"; next; .@newjob = getarg(select(.@menu$)-1, 0); if (!.@newjob) close; if ((.@newjob == Job_SuperNovice || .@newjob == Job_Super_Baby) && BaseLevel < .supernovice_level) { mes "[^8A2BE2Mestre das Classes^000000]"; mes "É necessário possuir nível de classe "+.supernovice_level+" para tornar-se "+jobname(.@newjob)+"."; close; } mes "[^8A2BE2Mestre das Classes^000000]"; mes "Tem certeza?"; next; } else { .@newjob = getarg(0); } if (select(" ~ Mudar para classe ^0055FF"+jobname(.@newjob)+"^000000 : ~ ^777777"+(getargcount() > 1 ? "Voltar" : "Cancelar")+"^000000") == 1) { mes "[^8A2BE2Mestre das Classes^000000]"; mes "Agora você é "+A_An(jobname(.@newjob))+"!"; if (.@newjob == Job_Novice_High && .linear_jobchange) lastJob = Class; // Note: This is incompatible with the Valkyrie rebirth script. jobchange .@newjob; if (.@newjob == Job_Novice_High) resetlvl(1); if (.@newjob == Job_Baby) { resetlvl(4); SkillPoint = 0; } specialeffect2 EF_ANGEL2; specialeffect2 EF_ELECTRIC; if (.platinum) callsub Get_Platinum; close; } if (getargcount() == 1) return; mes "[^8A2BE2Mestre das Classes^000000]"; } end; } function A_An { setarray .@vowels$, "a", "e", "i", "o", "u"; .@firstletter$ = strtolower(charat(getarg(0), 0)); for (.@i = 0; .@i < getarraysize(.@vowels); ++.@i) { if (.@vowels$[.@i] == .@firstletter$) return "an "+getarg(0); } return "a "+getarg(0); } Get_Platinum: skill NV_FIRSTAID, 1, 0; if (BaseClass == Job_Novice) { if (Class != Job_SuperNovice) skill NV_TRICKDEAD, 1, 0; } else if (BaseClass == Job_Swordman) { skill SM_MOVINGRECOVERY, 1, 0; skill SM_FATALBLOW, 1, 0; skill SM_AUTOBERSERK, 1, 0; } else if (BaseClass == Job_Mage) { skill MG_ENERGYCOAT, 1, 0; } else if (BaseClass == Job_Archer) { skill AC_MAKINGARROW, 1, 0; skill AC_CHARGEARROW, 1, 0; } else if (BaseClass == Job_Acolyte) { skill AL_HOLYLIGHT, 1, 0; } else if (BaseClass == Job_Merchant) { skill MC_CARTREVOLUTION, 1, 0; skill MC_CHANGECART, 1, 0; skill MC_LOUD, 1, 0; } else if (BaseClass == Job_Thief) { skill TF_SPRINKLESAND, 1, 0; skill TF_BACKSLIDING, 1, 0; skill TF_PICKSTONE, 1, 0; skill TF_THROWSTONE, 1, 0; } if (BaseJob == Job_Knight) { skill KN_CHARGEATK, 1, 0; } else if (BaseJob == Job_Priest) { skill PR_REDEMPTIO, 1, 0; } else if (BaseJob == Job_Wizard) { skill WZ_SIGHTBLASTER, 1, 0; } else if (BaseJob == Job_Blacksmith) { skill BS_UNFAIRLYTRICK, 1, 0; skill BS_GREED, 1, 0; } else if (BaseJob == Job_Hunter) { skill HT_PHANTASMIC, 1, 0; } else if (BaseJob == Job_Assassin) { skill AS_SONICACCEL, 1, 0; skill AS_VENOMKNIFE, 1, 0; } else if (BaseJob == Job_Crusader) { skill CR_SHRINK, 1, 0; } else if (BaseJob == Job_Monk) { skill MO_KITRANSLATION, 1, 0; skill MO_BALKYOUNG, 1, 0; } else if (BaseJob == Job_Sage) { skill SA_CREATECON, 1, 0; skill SA_ELEMENTWATER, 1, 0; skill SA_ELEMENTGROUND, 1, 0; skill SA_ELEMENTFIRE, 1, 0; skill SA_ELEMENTWIND, 1, 0; } else if (BaseJob == Job_Rogue) { skill RG_CLOSECONFINE, 1, 0; } else if (BaseJob == Job_Alchemist) { skill AM_BIOETHICS, 1, 0; } else if (BaseJob == Job_Bard) { skill BA_PANGVOICE, 1, 0; } else if (BaseJob == Job_Dancer) { skill DC_WINKCHARM, 1, 0; } return; OnInit: .rebirth_blevel = 99; // Minimum base level to reborn OR change to third class .rebirth_jlevel = 50; // Minimum base job level to reborn OR change to third class .jobchange_first = 10; // Minimum job level to turn into 1st class .jobchange_second = 40; // Minimum job level to turn into 2nd class .third_classes = 0; // Enable third classes/Extended Classes? (1: yes / 0: no) .supernovice_level = 45; // Minimum base level to turn into Super Novice .linear_jobchange = 1; // Enforce linear class changes? (1: yes / 0: no) .skill_point_check = 1; // Force player to use up all skill points? (1: yes / 0: no) .platinum = 1; // Get platinum skills automatically? (1: yes / 0: no) end; }
  21. Hello, I created this buildin which invites char id 2 to char id 1's party (CID1 must be online). It sends char id 2 an invite as if char id 1 clicked their name and invited them. What I want to know - is it possible to force join a character to a party without giving them the option to accept or decline? Thanks. /* *party_invite(<char id 1>, <char id 2>) Invites Char ID 2 to the party owned by Char ID 1. Char ID 1 must be online. Returns true on succession, false on failure. */ BUILDIN(party_invite) { struct map_session_data *sd = script->charid2sd(st, script_getnum(st, 2)); struct map_session_data *t_sd = script->charid2sd(st, script_getnum(st, 3)); if (sd == NULL || t_sd == NULL) return false; if (!script_hasdata(st, 2) && !script_hasdata(st, 2)) { ShowError("Both Char IDs must be supplied."); return true; } if (party->invite(sd, t_sd)) script_pushint(st, 1); else script_pushint(st, 0); return true; }
  22. Version v1

    60 downloads

    This script provides functions to easily calculate date and time. More functions might be added in the future. now() a shorthand function to get the current time > returns the number of seconds elapsed since the Unix epoch now() // => 1497119219 (example, increments every second) time_from_ms(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> ms time_from_ms(0) // => 1497119219 (example, increments every second) time_from_ms(+1000) // => 1497119220 time_from_ms(-1000) // => 1497119218 time_from_seconds(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> seconds time_from_seconds(0) // => 1497119219 (example, increments every second) time_from_seconds(+1) // => 1497119220 time_from_seconds(-1) // => 1497119218 time_from_minutes(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> minutes time_from_minutes(0) // => 1497119219 (example, increments every second) time_from_minutes(+1) // => 1497119279 time_from_minutes(-1) // => 1497119159 time_from_hours(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> hours time_from_hours(0) // => 1497119219 (example, increments every second) time_from_hours(+1) // => 1497122819 time_from_hours(-1) // => 1497115619 time_from_days(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> days time_from_days(0) // => 1497119219 (example, increments every second) time_from_days(+1) // => 1497205619 time_from_days(-1) // => 1497032819 FuzzyTime(<unix timestamp>) converts a Unix timestamp to a human-readable format > returns human-friendly relative time FuzzyTime(0) // => 47 years, 172 days, 18 hours, 52 minutes, and 28 seconds ago FuzzyTime(time_from_hours(+28)) // => in 1 day and 4 hours -------------------------------------------------------------------------------------- This script was made by me, for The Mana World + Evol. License: public domain (CC0)
  23. View File Date and Time functions This script provides functions to easily calculate date and time. More functions might be added in the future. now() a shorthand function to get the current time > returns the number of seconds elapsed since the Unix epoch now() // => 1497119219 (example, increments every second) time_from_ms(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> ms time_from_ms(0) // => 1497119219 (example, increments every second) time_from_ms(+1000) // => 1497119220 time_from_ms(-1000) // => 1497119218 time_from_seconds(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> seconds time_from_seconds(0) // => 1497119219 (example, increments every second) time_from_seconds(+1) // => 1497119220 time_from_seconds(-1) // => 1497119218 time_from_minutes(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> minutes time_from_minutes(0) // => 1497119219 (example, increments every second) time_from_minutes(+1) // => 1497119279 time_from_minutes(-1) // => 1497119159 time_from_hours(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> hours time_from_hours(0) // => 1497119219 (example, increments every second) time_from_hours(+1) // => 1497122819 time_from_hours(-1) // => 1497115619 time_from_days(<delta>) calculates a Unix timestamp relative to the current time > returns the number of seconds elapsed since the Unix epoch, plus or minus <delta> days time_from_days(0) // => 1497119219 (example, increments every second) time_from_days(+1) // => 1497205619 time_from_days(-1) // => 1497032819 FuzzyTime(<unix timestamp>) converts a Unix timestamp to a human-readable format > returns human-friendly relative time FuzzyTime(0) // => 47 years, 172 days, 18 hours, 52 minutes, and 28 seconds ago FuzzyTime(time_from_hours(+28)) // => in 1 day and 4 hours -------------------------------------------------------------------------------------- This script was made by me, for The Mana World + Evol. License: public domain (CC0) Submitter meko Submitted 06/10/17 Category Quest, Shops, Functions & Algorithms  
  24. I have a script command which fetches a character's name from the .@atcmd_parameters$[] and displays them in a message. How do I get them to display in one line? Currently I can only get them to display if I print it one line at a time (using message()) - script Print Names FAKE_NPC,{ end; OnCommand: // If user inputs no parameters (i.e. character name) if (!.@atcmd_numparameters) { message(strcharinfo(PC_NAME), "Usage: @printname <name of player to print>"); message(strcharinfo(PC_NAME), "@printname failed."); end; } .@size = getarraysize(.@atcmd_parameters$); for (.@i = 0; .@i < .@size; ++.@i) { .@player$[.@i] = .@atcmd_parameters$[.@i]; message(strcharinfo(PC_NAME), "" + .@player$[.@i] + ""); } end; OnInit: bindatcmd("printname", "Print Names::OnCommand", 10 ,96 , true); end; } If I typed @printname John Smith, it would appear like this: However, I would like it to be on the same line. Thank you for any help.
  25. This source modification adds a new mapflag: bg_consume, and adds an NPC (Telma) that sells consumable items which can only be used on maps with the 'bg_consume' mapflag. download and apply this diff patch: battlegroud.diff create a char named "Battleground" First you should check if that name exists:- delete their char, then create a new one use a different name use the existing char (WARNING: if they rename the char named "Battleground", it will rename the "Battleground's items" too! If they delete the char named "Battleground", they will become "Unknown's item".) When you are ready to create the char named "Battleground", use this SQL query: SQL INSERT INTO `char` (`name`) VALUES ('Battleground'); make note of the char_id (of the char named "Battleground") SQL SELECT char_id FROM `char` WHERE `name`='Battleground'; Write this down somewhere or remember it for the next steps. edit source - open /src/map/battleground.h CODE #define BG_CHARID 165100 // char named "Battleground" #define BG_TRADE 91 // trade mask of BG consumables - set BG_CHARID to the char_id from step #3 - set BG_TRADE to the trade mask (trade restrictions) you want for Battleground's consumables (trade bits are the same as /db/item_trade.txt) CODE // Trading mask values: // 1: Item can't be dropped // 2: Item can't be traded (nor vended) // 4: Wedded partner can override restriction 2. // 8: Item can't be sold to npcs // 16: Item can't be placed in the cart // 32: Item can't be placed in the storage // 64: Item can't be placed in the guild storage If you want BG potions to be ranked (ranked Condensed White Potions, ranked Blue Potions, etc.), open /src/map/pc.c and uncomment this: CODE // else if(BG_CHARID == char_id) // return 5; edit NPC script (Telma) - open /npc/battleground/bg_supplier.txt CODE set .@BG_CHARID, 165100; // character named "Battleground" - (line 43) set .@BG_CHARID to the char_id from step #3 - (lines 25-39) edit the menu/prices to your liking - (line 88) add the 'bg_consume' mapflag to any other maps you want to allow "Battleground's consumables" to be used on Save and close all files. Recompile. Compatible Hercules/rAthena/eAthena credits: The original idea is from someone else, I'm just not sure who. It started in 2009 when a player showed us screenshots (from another server) of the Telma NPC and asked if we could implement something similar--Battleground's consumables that could only be used in BG. Based on the screenshots, I came up with this. Since then, several people have asked about it on eAthena but I was too lazy to update it so I just linked them to our old SVN/Trac. Finally I updated it, and here it is! Thanks again to whoever came up with the idea!
×
×
  • Create New...

Important Information

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