From 620e60eebce2c1f35c5c9a82f6ca365b316587f5 Mon Sep 17 00:00:00 2001 From: Valaris Date: Sun, 29 Jan 2006 16:10:48 +0000 Subject: AS OF SVN REV. 5901, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EVERYTHING ELSE GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5094 54d463be-8e91-2dee-dedb-b68131a5f0ec --- doc/script_commands.txt | 4893 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4893 insertions(+) create mode 100644 doc/script_commands.txt (limited to 'doc/script_commands.txt') diff --git a/doc/script_commands.txt b/doc/script_commands.txt new file mode 100644 index 000000000..cb3f95b22 --- /dev/null +++ b/doc/script_commands.txt @@ -0,0 +1,4893 @@ +//===== Athena Script ===================================== +//= eAthena Script Commands +//===== By ================================================ +//= Fredzilla +//===== Helped By ========================================= +//= Terminal Vertex & Z3R0 - Helped define getmapxy +//= HappyDenn - Gave everything to do with getpartymember +//= a great help +//= Maeki Rika - A section on general concepts and lots of +//= other updates and additions. +//===== Version =========================================== +//= 2.7 +//========================================================= +//= 1.0 - First release, filled will as much info as I could +//= remember or figure out, most likely there are errors, +//= and things I have missed out +//= 1.1 - Added better discription for "getmapxy" +//= 1.2b- Added a description for getpartymember +//= (+few spelling mistakes corrected) +//= 2.0 - +79kb extra stuff and numerous corrections by +//= Maeki Rika. +//= 2.1 - Small but important corrections, more proofreading. +//= Some important discoveries in item functions, the +//= secret of making VVS weapons with 'getitem2' and +//= other news. (Rika again) +10kb :) +//= 2.2 - added getItemInfo description [Lupus] +//= 2.3 - added plenty of info for recent (and not so) script commands I added +// [Skotlex] +//= 2.4 - Explained the upper parameter of jobchange. [Skotlex] +//= 2.5 - Added pow, sqrt and distance. [Lance] +//= 2.6 - Added setd and getd. [Lance] +//= 2.7 - petstat command. [Lance] +//= 2.7a - delitem2, countitems2 commands [Lupus] +//= 2.7b - clone command [Skotlex] +//===== Compatible With =================================== +//= LOL, can be used by anyone hopefully +//===== Description ======================================= +//= A reference manual for the eAthena scripting language +//========================================================= + +This document is a reference manual for all the scripting commands and functions +available in current eAthena SVN. It is not a simple tutorial. When people tell +you to "Read The F***ing Manual", they mean this. + +The information was mostly acquired through looking up how things actually work +in the source code of the server, which was written by many people over time, +and lots of them don't speak English and never left any notes - or are otherwise +not available for comments. As such, anything written in here might not be +correct, it is only correct to the best of our knowledge, which is limited. + +This document is poorly structured and rather messy in general. In fact, further +cleaning up and reordering this document is probably pointless, due to upcoming +switch to Lua scripting language, which will rid us of most of the problems +mentioned herein and make a new manual necessary. But while we have this one, we +should make the most of it, and it might be helpful in making sure the new Lua +engine can actually do everything useful that the old engine could. + +This is not a place to teach you basic programming. This document will not teach +you basic programming by itself. It's more of a reference for those who have at +least a vague idea of what they want to do and want to know what tools they have +available to do it. We've tried to keep it as simple as feasible, but if you +don't understand it, getting a clear book on programming in general will help +better than yelling around the forum for help. + +A little learning never caused anyone's head to explode. + +Structure +--------- + +The commands and functions are listed in no particular order: + +*Name of the command and how to call it. + +Descriptive text + + Small example if possible. Will usually be incomplete, it's there just to + give you an idea of how it works in practice. + +To find a specific command, use Ctrl+F, (or whatever keys call up a search +function in whatever you're reading this with) put an * followed by the command +name, and it should find the command description for you. + +If you find anything omitted, please respond. :) + +Syntax +------ + +Throughout this document, wherever a command wants an argument, it is given in +. This doesn't mean you should type the angle brackets. :) If an +argument of a command is optional, it is given in {curly brackets}. You've +doubtlessly seen this convention somewhere, if you didn't, get used to it, +that's how big boys do it. If a command can optionally take an unspecified +number of arguments, you'll see a list like this: + +command {,...} + +This still means they will want to be separated by commas. + +Where a command wants a string, it will be given in "quotes", if it's a number, +it will be given without them. Normally, you can put an expression, like a bunch +of functions or operators returning a value, in (round brackets) instead of most +numbers. Round brackets will not always be required, but they're often a good +idea. + +Wherever you refer to a map name, it's always 'mapname.gat' or 'mapname.afm' if +you are using AFM maps, (if you don't know what they are, you aren't using them) +and not just 'mapname'. While some commands do know that if you didn't give +'.gat', it should add it, it's pretty tricky to tell which ones they are. + +Script loading structure +------------------------ + +Scripts are loaded by the map server as referenced in the 'conf/map_athena.conf' +configuration file, but in the default configuration, it doesn't load any script +files itself. Instead, it loads the file 'npc/scripts_main.conf' which itself +contains references to other files. The actual scripts are loaded from txt +files, which are linked up like this: + +npc: + +Any line like this, invoked, ultimately, by 'map_athena.conf' will load up the +script contained in this file, which will make the script available. No file +will get loaded twice, to prevent possible errors. + +Another configuration file option of relevance is: + +delnpc: + +This will unload a specifiled script filename from memory, which, while +seemingly useless, may sometimes be required. + +Whenever '//' is encountered in a line upon reading, everything beyond this on +that line is considered to be a comment and is ignored. This works wherever you +place it. + +Upon loading all the files, the server will execute all the top-level commands +in them. No variables exist yet at this point, no commands can be called other +than those given in this section. These commands set up the basic server script +structure - create NPC objects, spawn monster objects, set map flags, etc. No +code is actually executed at this point except them. The top-level commands the +scripting are pretty confusing, since they aren't structured like you would +expect commands, command name first, but rather, normally start with a map name. + +What's more confusing about the top-level commands is that most of them use a +tab symbol to divide their arguments. + +To prevent problems and confusion, the tab symbols are written as '%TAB%' +throughout this document, even though this makes the text a bit less readable. +Using an invisible symbol to denote arguments is one of the bad things about +this language, but we're stuck with it for now. :) + +Here is a list of valid top-level commands: + +** Set a map flag: + +%TAB%mapflag%TAB% + +This will, upon loading, set a specified map flag on a map you like. These are +normally in files inside 'conf/mapflag' and are loaded first, so by the time the +server's up, all the maps have the flags they should have. Map flags determine +the behavior of the map regarding various common problems, for a better +explanation, see 'setmapflag'. + +** Create a permanent monster spawn: + +,,,,%TAB%monster%TAB%%TAB%,,,, + +Map name is the name of the map the monsters will spawn on. x1/y1-y1/y2 is a +square of map coordinates which will limit where they will initially spawn. +Putting zeros instead of these coordinates will spawn the monsters randomly. +It's not certain whether monsters will later be able to venture out of this +square when randomly moving or not. (Can anyone confirm?) + +Monster name is the name the monsters will have on screen, and has no relation +whatsoever to their names anywhere else. It's the mob id that counts, which +identifies monster record in 'mob_db.txt' database of monsters. If the mob name +is given as "--ja--", the 'japanese name' field from the monster database is +used, (which, in eAthena, actually contains an english name) if it's "--en--", +it's the 'english name' from the monster database (which contains an uppercase +name used to summon the monster with a GM command). + +If you add 4000 to the monster ID, the monster will be spawned in a 'big +version', (monster size class will increase) and if you add 2000, the 'tiny +version' of the monster will be created. This will not, however, make the +monster spawn with a bigger or smaller sprite, like with +@monstersmall/@monsterbig GM commands. Monster size class relates only to the +damage calculation. + +Amount is the amount of monsters that will be spawned when this command is +executed, it is affected by spawn rates in 'battle_athena.conf'. + +Delay1 and delay2 are the monster respawn delays - the first one counts the time +since a monster defined in this spawn was last respawned and the second one +counts the time since the monster of this spawn was last killed. Whichever turns +out to be higher will be used. If the resulting number is smaller than a random +value between 5 and 10 seconds, this value will be used instead. (Which is +normally the case if both delay values are zero.) If both delay values are -1, +the monster will never respawn upon death until the server restarts. The times +are given in 1/1000ths of a second. + +Level overrides the monster's level from the monster id database, if it is 0, +the level from the database is used. + +** Define a warp point + +,,,%TAB%warp%TAB%%TAB%,,,, + +This will define a warp NPC that will warp a player between maps, and while most +arguments of that are obvious, some deserve special mention. + +SpanX and SpanY will make the warp sensitive to a character who didn't step +directly on it, but walked into a zone which is centered on the warp from +coordinates and is SpanX in each direction across the X axis and SpanY in each +direction across the Y axis. + +Warp NPC objects also have a name, because you can use it to refer to them later +with 'enablenpc'/'disablenpc' + +Facing of a warp object is irrelevant, it is not used in the code and all +current scripts have a zero in there. + +** Define an NPC object. + +,,,%TAB%script%TAB%%TAB%,{} +,,,%TAB%script%TAB%%TAB%,,,{} + +This will place an NPC object on a specified map at the specified location, and +is a top-level command you will use the most in your custom scripting. The NPCs +are triggered by clicking on them, and/or by walking in their trigger area, if +defined, see that below. + +Facing is a direction the NPC sprite will face in. Not all NPC sprites have +different images depending on the direction you look from, so for some facing +will be meaningless. Facings are counted counterclockwise in increments of 45 +degrees, where 0 means facing towards the top of the map. (So to turn the sprite +towards the bottom of the map, you use facing 4, and to make it look southeast +it's facing 5.) + +Sprite id is the sprite number used to display this particular NPC. For a full +list of sprite id numbers see http://kalen.s79.xrea.com/npc/npce.shtml You may +also use a monster's ID number instead to display a monster sprite for this NPC. +It is possible to use a job sprite as well, but you must first define it as a +monster sprite in 'mob_avail.txt', a full description on how to do this is for +another manual. A '-1' sprite id will make the NPC invisible (and unclickable). +A '111' sprite id will make an NPC which does not have a sprite, but is still +clickable, which is useful if you want to make a clickable object of the 3D +terrain. + +TriggerX and triggerY, if given, will define an area, centered on NPC and +spanning triggerX cells in every direction across X and triggerY in every +direction across Y. Walking into that area will trigger the NPC. If no +'OnTouch:' special label is present in the NPC code, the execution will start +from the beginning of the script, otherwise, it will start from the 'OnTouch:' +label. + +NPC name is kinda special, because it's not only the name of NPC you will see on +screen. It's formatted this way: + +{#}{::