From The Mana World
(→‎Unsorted Commands: Create "Message Commands" category)
(→‎Unsorted Commands: Create a bunch of rough categories)
Line 228: Line 228:
Note: in many cases areaannounce is a better choice.
Note: in many cases areaannounce is a better choice.


== Unsorted Commands ==
== Character Commands ==
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.
These have to do with attributes of the player.
 
=== warp ===
<pre>
    warp "mapname", x, y;
</pre>
Warp the attached player to the given location. "mapname" may have the special values "Random", "SavePoint", and "Save" (case-sensitive), but x and y are still required.
 
=== isat ===
<pre>
    isat("mapname", x, y)
</pre>
Return 1 if the attached player is at the given location, 0 otherwise.
 
=== areawarp ===
<pre>
    areawarp "src_map", x0, y0, x1, y1, "dst_map", x, y;
</pre>
Warp all players in the given area to the given location.


=== setlook ===
=== setlook ===
Line 255: Line 237:
Set an aspect of a character's appearance. Used e.g. by the barber.
Set an aspect of a character's appearance. Used e.g. by the barber.


TODO provide constants for type (and maybe value). 1 is style, 6 is color.
There are constant provided for the LOOK type, and for hair color and hair style.
 
=== getitem ===
<pre>
    getitem "itemname", count[, unused_argument[, playerid]];
    getitem itemid, count[, unused_argument[, playerid]];
"ii**"
</pre>
Grant the attached player (or the given player) "count" copies of an item.
 
If itemname is unrecognized you get an iten (727) instead.
 
=== makeitem ===
<pre>
    makeitem "itemname", count, "mapname", x, y;
    makeitem itemid, count, "mapname", x, y;
</pre>
Drop items on the ground.
 
The special "mapname" value "this" means the map of the attached player.
 
=== delitem ===
<pre>
    delitem "itemname", count;
    delitem itemid, count;
</pre>
Remove items from the attached player's inventory.
 
This command is buggy if the player does not have enough of the item.


=== heal ===
=== heal ===
Line 304: Line 258:


This is probably the best way to instakill the player.
This is probably the best way to instakill the player.
=== rand ===
<pre>
    rand(range)
    rand(min, max)
</pre>
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.
=== pow ===
<pre>
    pow(a, b)
</pre>
return <math>(a \times .001) ^ b</math>
=== countitem ===
<pre>
    countitem("itemname")
    countitem(itemid)
</pre>
Return the number of the given item in the player's inventory.
=== checkweight ===
<pre>
    checkweight("itemname", count)
    checkweight(itemid, count)
</pre>
Return 0 if adding "count" of the item would put player above max weight, 1 if it would still be less than max weight.
Also returns 0 if item does not exist.


=== readparam ===
=== readparam ===
Line 377: Line 302:
num==2: guild name (deprecated)
num==2: guild name (deprecated)


=== getequipid ===
=== sc_start ===
<pre>
<pre>
     getequipid(equip_point)
     sc_start type, tick, val1[, beingid];
</pre>
</pre>
Return the ID of the item in the given equip slot.
Apply a status effect to a player (or monster?).


equip_point is one of the equip_* constants
type is one of the sc_* constants.


=== getequipname ===
=== sc_start2 ===
<pre>
<pre>
     getequipname(equip_point)
     sc_start2 type, tick, val1, chance[, beingid];
</pre>
</pre>
Return the name of the item in the given equip slot.
Chance of applying a status effect, out of 10000.


equip_point is one of the equip_* constants
=== sc_end ===
<pre>
    sc_end type;
</pre>
Immediately end status effect on current player.


=== getequipisequiped ===
=== sc_check ===
<pre>
<pre>
     getequipisequiped(num)
     sc_check(type)
</pre>
</pre>
Return 1 if the player currently has an item equipped in the slot.
Whether a status effect is currently active.


=== statusup ===
=== getscrate ===
<pre>
<pre>
     statusup bType;
     getscrate(type, rate[, being_id])
</pre>
</pre>
Permanently increase a stat by one point.
If the sc is poison, modify rate by (3 + vit + luk/3) percent.


=== statusup2 ===
=== resetlvl ===
<pre>
<pre>
     statusup2 bType, delta;
     resetlvl type;
</pre>
</pre>
Permanently increase or decrease a stat.


=== bonus ===
=== resetstatus ===
<pre>
<pre>
     bonus bType, delta
     resetstatus;
</pre>
</pre>
Temporarily increase a stat. For use in item scripts only.


=== skill ===
=== resetskill ===
<pre>
<pre>
     skill id, level[, flag = 1];
     resetskill;
</pre>
</pre>
Grant a skill.


flag==0: permanent skill
=== changesex ===
flag==1: temporary skill (item scripts only)
 
(Untested)
 
=== setskill ===
<pre>
<pre>
     setskill id, level;
     changesex;
</pre>
</pre>
Grant a skill permanently.
Ask the login server (via the char server) to toggle this account's sex, then kick the player.


=== getskilllv ===
=== attachrid ===
<pre>
<pre>
     getskilllv(skill)
     attachrid(id)
</pre>
</pre>
Return the player's level of the given skill.
Change the being associated with this script.
 
Return true if such a player is logged in.


=== getgmlevel ===
=== detachrid ===
<pre>
<pre>
     getgmlevel()
     detachrid;
</pre>
</pre>
Return the player's GM level.
Detach the player associated with this script.


=== getopt2 ===
=== isloggedin ===
<pre>
<pre>
     getopt2()
     isloggedin(id)
</pre>
</pre>
Return the player's opt2 flags.
Return true if the given ID is logged in.
 
Often you shouldn't use this, but attachrid(id) instead


=== setopt2 ===
=== marriage ===
<pre>
<pre>
     setopt2 flags;
     marriage("otherplayer")
</pre>
</pre>
Set the player's opt2 flags.
Marry the attached player to the other player.
 
Return 1 on success and 0 on failure.


=== checkoption ===
=== divorce ===
<pre>
<pre>
     checkoption(type)
     divorce()
</pre>
</pre>
Return 1 if the player has any of the given (XOR'ed) option bits. Usually only one is given.
Divorce the attached player from their partner
 
Return 1 on success and 0 on failure.


=== setoption ===
=== getpartnerid2 ===
<pre>
<pre>
     setoption type
     getpartnerid2()
</pre>
</pre>
Set the player's option flags exactly (not OR'ing).
Return the ID of the attached player's partner (0 is none).


=== savepoint ===
=== getexp ===
<pre>
<pre>
     savepoint "mapname", x, y;
     getexp base, job;
</pre>
</pre>
Set the player's save point. Used e.g. by Soul Menhirs, and during the time travel quest.<!-- Don't remove this just because you can't figure out how to start it from this end. -->
Increase the types of experience.


=== gettimetick ===
=== getinventorylist ===
<pre>
<pre>
     gettimetick(type)
     getinventorylist;
</pre>
</pre>
Return one of the ticks
Fill in some arrays of useful information: "@inventorylist_id", "@inventorylist_amount", "@inventorylist_equip".


type==0 (or other): milliseconds since some point in time, wraps every 50 days.
The arrays are not cleared between calls, use "@inventory_count".
type==1: time since midnight, UTC.
type==2: seconds since the epoch.


You should almost always use type 2.
=== getskilllist ===
 
=== gettime ===
<pre>
<pre>
     gettime(type)
     getskilllist;
</pre>
</pre>
Get a component of the time (UTC).
Fill in some arrays of useful information: "@skilllist_id", "@skilllist_lv", "@skilllist_flag".


1: second (0-59)
The arrays are not cleared between calls, use "@skill_count".
2: minute (0-59)
3: hour (0-23)
4: day of week (0-6)
5: day of month (1-31)
6: month (1-12)
7: year (1902-2038)


=== gettimestr ===
=== getpoolskilllist ===
<pre>
<pre>
     gettimestr("format", length)
     getpoolskilllist;
</pre>
</pre>
Frontend for strftime(3).
Same, but only poolable skills.


This function may be removed for technical reasons, please construct the string manually using gettime().
=== getactivatedpoolskilllist ===
<pre>
    getactivatedpoolskilllist;
</pre>
Same, but only activated pool skills.


There is a script function that does this: callfunct "time_stamp";
=== getunactivatedpoolskilllist ===
<pre>
    getunactivatedpoolskilllist;
</pre>
Same, but only unactivated pool skills.


=== openstorage ===
=== poolskill ===
<pre>
<pre>
     openstorage;
     poolskill skill_id;
</pre>
</pre>
Open the player's storage.
Activate a poolable skill.
=== monster ===
 
=== unpoolskill ===
<pre>
<pre>
     monster "mapname", x, y, "string", class, count[, "event"];
     unpoolskill skill_id;
</pre>
</pre>
Spawn monsters at a point.
Deactivate a poolable skill.


=== areamonster ===
=== checkpoolskill ===
<pre>
<pre>
     areamonster "mapname", x0, y0, x1, y1, "string", class, count[, "event"];
     checkpoolskill(skill_id)
</pre>
</pre>
Spawn monsters in an area.
Check if a pool skill is activated


=== killmonster ===
=== misceffect ===
<pre>
<pre>
     killmonster "mapname", "event";
     misceffect type, "player_name";
    misceffect type, being_id;
    misceffect type;
</pre>
</pre>
Kill monsters on a map.
Display a miscellaneous effect on a being.


Unless it is "All", "event" must match the one used at spawn time.
In the third form, it will use the OID if possible, and fallback to the RID.


If "All" is given, this function properly preserves permanently respawning monsters.
=== getlook ===
 
=== killmonsterall ===
<pre>
<pre>
     killmonsterall "mapname";
     getlook(type)
</pre>
</pre>
Kill all monsters unconditionally.
Return part of the player's appearance:
val==1: hair
val==2: weapon
val==3: bottom
val==4: middle
val==5: top
val==6: hair color
val==8: shield
val==9: shoes


This command might prevent monsters from respawning. Instead use "killmonster" with "event" == "All".
On failure, return -1.


=== doevent ===
=== getsavepoint ===
<pre>
<pre>
     doevent "event";
     getsavepoint(type)
</pre>
</pre>
Manually invoke an NPC event.
type==0: Return savepoint map
type==1: Return savepoint x
type==2: Return savepoint y


=== donpcevent ===
This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.
<pre>
    donpcevent "event";
</pre>
Manually invoke an NPC event.


=== addtimer ===
=== shop ===
<pre>
<pre>
     addtimer tick, "event";
     shop "npcname";
</pre>
</pre>
This command is untested and might freeze the server.
Close the script and open the given NPC's shop.


=== deltimer ===
=== isdead ===
<pre>
<pre>
     deltimer "event";
     isdead()
</pre>
</pre>
This command is untested and might freeze the server.
Return 1 if the attached player is dead, else 0.


=== initnpctimer ===
=== fakenpcname ===
<pre>
<pre>
     initnpctimer;
     fakenpcname "name", "newname", new_sprite_id;
</pre>
</pre>
Set the NPC's attached timer to tick 0 and start it.
Change the appearance of an NPC.


=== stopnpctimer ===
== Location Commands ==
<pre>
These are commands that have to do with the location of players
    stopnpctimer;
</pre>
Stop the NPC's attached timer.


=== startnpctimer ===
=== warp ===
<pre>
<pre>
     startnpctimer;
     warp "mapname", x, y;
</pre>
</pre>
Start the NPC's attached timer, without setting the tick.
Warp the attached player to the given location. "mapname" may have the special values "Random", "SavePoint", and "Save" (case-sensitive), but x and y are still required.


=== setnpctimer ===
=== isat ===
<pre>
<pre>
     setnpctimer tick;
     isat("mapname", x, y)
</pre>
</pre>
Set the NPC's timer to a specific tick.
Return 1 if the attached player is at the given location, 0 otherwise.


=== getnpctimer ===
=== areawarp ===
<pre>
<pre>
     getnpctimer(type)
     areawarp "src_map", x0, y0, x1, y1, "dst_map", x, y;
</pre>
</pre>
Get the current tick of an NPC's timer.
Warp all players in the given area to the given location.
 
type==0: timer event tick (like setnpctimer)
type==1: bool if it has a next timer.
type==2: timer amount


=== getusers ===
=== getusers ===
Line 627: Line 554:
Count users in an area.
Count users in an area.


=== getareadropitem ===
=== mapwarp ===
<pre>
<pre>
     getareadropitem("mapname", x0, y0, x1, y1, "itemname"[, delitems = 0]);
     mapwarp "src_map", "dst_map", x, y;
    getareadropitem("mapname", x0, y0, x1, y1, itemid[, delitems = 0]);
</pre>
</pre>
Count items on the floor in an area. If delitems, the items will be deleted as well.
Warp all players from source map to destination location.


=== enablenpc ===
=== npcwarp ===
<pre>
<pre>
     enablenpc "name";
     npcwarp x, y, "npcname";
</pre>
</pre>
Enable an NPC.
Move an NPC to a different location on the same map.


=== disablenpc ===
=== isin ===
<pre>
<pre>
     disablenpc "name";
     isin("mapname", x0, y0, x1, y1)
</pre>
</pre>
Disable an NPC.
Check if the player is in the area.


=== hideoffnpc ===
=== getx ===
<pre>
<pre>
     hideoffnpc "name";
     getx()
</pre>
</pre>
What does this do?
Return attached player's x coordinate.


=== hideonnpc ===
=== gety ===
<pre>
<pre>
     hideonnpc "name";
     gety()
</pre>
</pre>
What does this do?
Return attached player's y coordinate.
 
== Item Commands ==
These have to do with items or inventory.


=== sc_start ===
=== getitem ===
<pre>
<pre>
     sc_start type, tick, val1[, beingid];
     getitem "itemname", count[, unused_argument[, playerid]];
    getitem itemid, count[, unused_argument[, playerid]];
"ii**"
</pre>
</pre>
Apply a status effect to a player (or monster?).
Grant the attached player (or the given player) "count" copies of an item.


type is one of the sc_* constants.
If itemname is unrecognized you get an iten (727) instead.


=== sc_start2 ===
=== makeitem ===
<pre>
<pre>
     sc_start2 type, tick, val1, chance[, beingid];
     makeitem "itemname", count, "mapname", x, y;
    makeitem itemid, count, "mapname", x, y;
</pre>
</pre>
Chance of applying a status effect, out of 10000.
Drop items on the ground.
 
The special "mapname" value "this" means the map of the attached player.


=== sc_end ===
=== delitem ===
<pre>
<pre>
     sc_end type;
     delitem "itemname", count;
    delitem itemid, count;
</pre>
</pre>
Immediately end status effect on current player.
Remove items from the attached player's inventory.
 
This command is buggy if the player does not have enough of the item.


=== sc_check ===
=== countitem ===
<pre>
<pre>
     sc_check(type)
     countitem("itemname")
    countitem(itemid)
</pre>
</pre>
Whether a status effect is currently active.
Return the number of the given item in the player's inventory.


=== getscrate ===
=== checkweight ===
<pre>
<pre>
     getscrate(type, rate[, being_id])
     checkweight("itemname", count)
    checkweight(itemid, count)
</pre>
</pre>
If the sc is poison, modify rate by (3 + vit + luk/3) percent.
Return 0 if adding "count" of the item would put player above max weight, 1 if it would still be less than max weight.
Also returns 0 if item does not exist.


=== resetlvl ===
=== getequipid ===
<pre>
<pre>
     resetlvl type;
     getequipid(equip_point)
</pre>
</pre>
Return the ID of the item in the given equip slot.


=== resetstatus ===
equip_point is one of the equip_* constants
 
=== getequipname ===
<pre>
<pre>
     resetstatus;
     getequipname(equip_point)
</pre>
</pre>
Return the name of the item in the given equip slot.
equip_point is one of the equip_* constants


=== resetskill ===
=== getequipisequiped ===
<pre>
<pre>
     resetskill;
     getequipisequiped(num)
</pre>
</pre>
Return 1 if the player currently has an item equipped in the slot.


=== changesex ===
=== statusup ===
<pre>
<pre>
     changesex;
     statusup bType;
</pre>
</pre>
Ask the login server (via the char server) to toggle this account's sex, then kick the player.
Permanently increase a stat by one point.


=== attachrid ===
=== statusup2 ===
<pre>
<pre>
     attachrid(id)
     statusup2 bType, delta;
</pre>
</pre>
Change the being associated with this script.
Permanently increase or decrease a stat.


Return true if such a player is logged in.
=== bonus ===
<pre>
    bonus bType, delta
</pre>
Temporarily increase a stat. For use in item scripts only.


=== detachrid ===
=== skill ===
<pre>
<pre>
     detachrid;
     skill id, level[, flag = 1];
</pre>
</pre>
Detach the player associated with this script.
Grant a skill.
 
flag==0: permanent skill
flag==1: temporary skill (item scripts only)
 
(Untested)


=== isloggedin ===
=== setskill ===
<pre>
<pre>
     isloggedin(id)
     setskill id, level;
</pre>
</pre>
Return true if the given ID is logged in.
Grant a skill permanently.


=== setmapflagnosave ===
=== getskilllv ===
<pre>
<pre>
     setmapflagnosave "mapname", "savemap", x, y;
     getskilllv(skill)
</pre>
</pre>
Set the nosave flag and respawn location.
Return the player's level of the given skill.


=== setmapflag ===
=== getgmlevel ===
<pre>
<pre>
     setmapflag "mapname", flag;
     getgmlevel()
</pre>
</pre>
Set an arbitrary mapflag.
Return the player's GM level.


This function may be problematic in the stable version.
=== getopt2 ===
 
=== removemapflag ===
<pre>
<pre>
     removemapflag "mapname", flag;
     getopt2()
</pre>
</pre>
Unset an arbitrary mapflag.
Return the player's opt2 flags.


This function may be problematic in the stable version.
=== setopt2 ===
 
=== pvpon ===
<pre>
<pre>
     pvpon "mapname";
     setopt2 flags;
</pre>
</pre>
Allow PvP on a map.
Set the player's opt2 flags.


=== pvpoff ===
=== checkoption ===
<pre>
<pre>
     pvpoff "mapname";
     checkoption(type)
</pre>
</pre>
Deny PvP on a map.
Return 1 if the player has any of the given (XOR'ed) option bits. Usually only one is given.


=== emotion ===
=== setoption ===
<pre>
<pre>
     emotion emote_index;
     setoption type
</pre>
</pre>
Show a smiley above the OID.
Set the player's option flags exactly (not OR'ing).


=== marriage ===
=== savepoint ===
<pre>
<pre>
     marriage("otherplayer")
     savepoint "mapname", x, y;
</pre>
</pre>
Marry the attached player to the other player.
Set the player's save point. Used e.g. by Soul Menhirs, and during the time travel quest.<!-- Don't remove this just because you can't figure out how to start it from this end. -->


Return 1 on success and 0 on failure.
=== openstorage ===
 
=== divorce ===
<pre>
<pre>
     divorce()
     openstorage;
</pre>
</pre>
Divorce the attached player from their partner
Open the player's storage.
 
Return 1 on success and 0 on failure.


=== getitemname ===
=== getitemname ===
Line 794: Line 742:
Return the name of the item, or "Unknown Item".
Return the name of the item, or "Unknown Item".


=== getspellinvocation ===
=== clearitem ===
<pre>
<pre>
     getspellinvocation("spell-identifier")
     clearitem;
</pre>
</pre>
Return the #invocation used for a spell, or "...".
Remove all items from a player's inventory.


=== getanchorinvocation ===
=== nude ===
<pre>
<pre>
     getanchorinvocation "anchor-identifier"
     nude;
</pre>
</pre>
Return the invocation used for a teleport anchor (?)
Unequip all items.


=== getpartnerid2 ===
=== hasitems ===
<pre>
<pre>
     getpartnerid2()
     hasitems()
</pre>
</pre>
Return the ID of the attached player's partner (0 is none).
Return 1 if the player has any inventory, 0 otherwise.


=== getexp ===
=== unequipbyid ===
<pre>
<pre>
     getexp base, job;
     unequipbyid slot_id;
</pre>
</pre>
Increase the types of experience.
Unequip whatever is in the slot


=== getinventorylist ===
=== getareadropitem ===
<pre>
<pre>
     getinventorylist;
     getareadropitem("mapname", x0, y0, x1, y1, "itemname"[, delitems = 0]);
    getareadropitem("mapname", x0, y0, x1, y1, itemid[, delitems = 0]);
</pre>
</pre>
Fill in some arrays of useful information: "@inventorylist_id", "@inventorylist_amount", "@inventorylist_equip".
Count items on the floor in an area. If delitems, the items will be deleted as well.


The arrays are not cleared between calls, use "@inventory_count".
== Common Functions ==
These are not mostly not related to the RPG or the scripting language.


=== getskilllist ===
=== rand ===
<pre>
<pre>
     getskilllist;
     rand(range)
    rand(min, max)
</pre>
</pre>
Fill in some arrays of useful information: "@skilllist_id", "@skilllist_lv", "@skilllist_flag".
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.


The arrays are not cleared between calls, use "@skill_count".
=== pow ===
 
=== getpoolskilllist ===
<pre>
<pre>
     getpoolskilllist;
     pow(a, b)
</pre>
</pre>
Same, but only poolable skills.
return <math>(a \times .001) ^ b</math>


=== getactivatedpoolskilllist ===
=== gettimetick ===
<pre>
<pre>
     getactivatedpoolskilllist;
     gettimetick(type)
</pre>
</pre>
Same, but only activated pool skills.
Return one of the ticks
 
type==0 (or other): milliseconds since some point in time, wraps every 50 days.
type==1: time since midnight, UTC.
type==2: seconds since the epoch.
 
You should almost always use type 2.


=== getunactivatedpoolskilllist ===
=== gettime ===
<pre>
<pre>
     getunactivatedpoolskilllist;
     gettime(type)
</pre>
</pre>
Same, but only unactivated pool skills.
Get a component of the time (UTC).
 
1: second (0-59)
2: minute (0-59)
3: hour (0-23)
4: day of week (0-6)
5: day of month (1-31)
6: month (1-12)
7: year (1902-2038)


=== poolskill ===
=== gettimestr ===
<pre>
<pre>
     poolskill skill_id;
     gettimestr("format", length)
</pre>
</pre>
Activate a poolable skill.
Frontend for strftime(3).
 
This function may be removed for technical reasons, please construct the string manually using gettime().
 
There is a script function that does this: callfunct "time_stamp";
 
== Timers and Events ==
These have to do with transfering control in ways that are not immediately obvious.


=== unpoolskill ===
=== doevent ===
<pre>
<pre>
     unpoolskill skill_id;
     doevent "event";
</pre>
</pre>
Deactivate a poolable skill.
Manually invoke an NPC event.


=== checkpoolskill ===
=== donpcevent ===
<pre>
<pre>
     checkpoolskill(skill_id)
     donpcevent "event";
</pre>
</pre>
Check if a pool skill is activated
Manually invoke an NPC event.


=== clearitem ===
=== addtimer ===
<pre>
<pre>
     clearitem;
     addtimer tick, "event";
</pre>
</pre>
Remove all items from a player's inventory.
This command is untested and might freeze the server.


=== misceffect ===
=== deltimer ===
<pre>
<pre>
     misceffect type, "player_name";
     deltimer "event";
    misceffect type, being_id;
    misceffect type;
</pre>
</pre>
Display a miscellaneous effect on a being.
This command is untested and might freeze the server.


In the third form, it will use the OID if possible, and fallback to the RID.
=== initnpctimer ===
 
=== strmobinfo ===
<pre>
<pre>
     strmobinfo(num, class)
     initnpctimer;
</pre>
</pre>
Info about a type of mob:
Set the NPC's attached timer to tick 0 and start it.
num==1: name
num==2: jname
num==3: lv
num==4: maxhp
num==5: maxsp
num==6: base_exp
num==7: job_exp


=== specialeffect ===
=== stopnpctimer ===
<pre>
<pre>
     specialeffect type;
     stopnpctimer;
</pre>
</pre>
Display a special effect on the OID.
Stop the NPC's attached timer.


Same as "misceffect", but does not fallback when there is no OID.
=== startnpctimer ===
 
=== specialeffect2 ===
<pre>
<pre>
     specialeffect2 type;
     startnpctimer;
</pre>
</pre>
Same as "misceffect", but works when there is an OID.
Start the NPC's attached timer, without setting the tick.


=== nude ===
=== setnpctimer ===
<pre>
<pre>
     nude;
     setnpctimer tick;
</pre>
</pre>
Unequip all items.
Set the NPC's timer to a specific tick.


=== mapwarp ===
=== getnpctimer ===
<pre>
<pre>
     mapwarp "src_map", "dst_map", x, y;
     getnpctimer(type)
</pre>
</pre>
Warp all players from source map to destination location.
Get the current tick of an NPC's timer.
 
type==0: timer event tick (like setnpctimer)
type==1: bool if it has a next timer.
type==2: timer amount


=== inittimer ===
=== inittimer ===
Line 943: Line 905:
Invoke ::OnCommandFoo
Invoke ::OnCommandFoo


=== gmcommand ===
=== mobcount ===
<pre>
    mobcount("mapname", "event")
</pre>
Count the remaining mobs from the spawn with the given event.
 
=== areatimer ===
<pre>
    areatimer "mapname", x0, y0, x1, y1, tick, "event";
</pre>
Add a PC event timer to all players in the area.
 
After "tick" milliseconds, the given NPC event will fire with each player as the RID.
 
== Unsorted Commands ==
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.
 
=== monster ===
<pre>
    monster "mapname", x, y, "string", class, count[, "event"];
</pre>
Spawn monsters at a point.
 
=== areamonster ===
<pre>
    areamonster "mapname", x0, y0, x1, y1, "string", class, count[, "event"];
</pre>
Spawn monsters in an area.
 
=== killmonster ===
<pre>
    killmonster "mapname", "event";
</pre>
Kill monsters on a map.
 
Unless it is "All", "event" must match the one used at spawn time.
 
If "All" is given, this function properly preserves permanently respawning monsters.
 
=== killmonsterall ===
<pre>
    killmonsterall "mapname";
</pre>
Kill all monsters unconditionally.
 
This command might prevent monsters from respawning. Instead use "killmonster" with "event" == "All".
 
=== enablenpc ===
<pre>
    enablenpc "name";
</pre>
Enable an NPC.
 
=== disablenpc ===
<pre>
<pre>
     gmcommand "@command maybe with arguments";
     disablenpc "name";
</pre>
</pre>
Run a GM command, at level 99.
Disable an NPC.


=== npcwarp ===
=== hideoffnpc ===
<pre>
<pre>
     npcwarp x, y, "npcname";
     hideoffnpc "name";
</pre>
</pre>
Move an NPC to a different location on the same map.
What does this do?


=== hasitems ===
=== hideonnpc ===
<pre>
<pre>
     hasitems()
     hideonnpc "name";
</pre>
</pre>
Return 1 if the player has any inventory, 0 otherwise.
What does this do?


=== mobcount ===
=== setmapflagnosave ===
<pre>
<pre>
     mobcount("mapname", "event")
     setmapflagnosave "mapname", "savemap", x, y;
</pre>
</pre>
Count the remaining mobs from the spawn with the given event.
Set the nosave flag and respawn location.


=== getlook ===
=== setmapflag ===
<pre>
<pre>
     getlook(type)
     setmapflag "mapname", flag;
</pre>
</pre>
Return part of the player's appearance:
Set an arbitrary mapflag.
val==1: hair
val==2: weapon
val==3: bottom
val==4: middle
val==5: top
val==6: hair color
val==8: shield
val==9: shoes


On failure, return -1.
This function may be problematic in the stable version.


=== getsavepoint ===
=== removemapflag ===
<pre>
<pre>
     getsavepoint(type)
     removemapflag "mapname", flag;
</pre>
</pre>
type==0: Return savepoint map
Unset an arbitrary mapflag.
type==1: Return savepoint x
type==2: Return savepoint y


This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.
This function may be problematic in the stable version.


=== areatimer ===
=== pvpon ===
<pre>
<pre>
     areatimer "mapname", x0, y0, x1, y1, tick, "event";
     pvpon "mapname";
</pre>
</pre>
Add a PC event timer to all players in the area.
Allow PvP on a map.


After "tick" milliseconds, the given NPC event will fire with each player as the RID.
=== pvpoff ===
<pre>
    pvpoff "mapname";
</pre>
Deny PvP on a map.


=== isin ===
=== emotion ===
<pre>
<pre>
     isin("mapname", x0, y0, x1, y1)
     emotion emote_index;
</pre>
</pre>
Check if the player is in the area.
Show a smiley above the OID.


=== shop ===
=== getspellinvocation ===
<pre>
<pre>
     shop "npcname";
     getspellinvocation("spell-identifier")
</pre>
</pre>
Close the script and open the given NPC's shop.
Return the #invocation used for a spell, or "...".


=== isdead ===
=== getanchorinvocation ===
<pre>
<pre>
     isdead()
     getanchorinvocation "anchor-identifier"
</pre>
</pre>
Return 1 if the attached player is dead, else 0.
Return the invocation used for a teleport anchor (?)


=== fakenpcname ===
=== strmobinfo ===
<pre>
<pre>
     fakenpcname "name", "newname", new_sprite_id;
     strmobinfo(num, class)
</pre>
</pre>
Change the appearance of an NPC.
Info about a type of mob:
num==1: name
num==2: jname
num==3: lv
num==4: maxhp
num==5: maxsp
num==6: base_exp
num==7: job_exp


=== unequipbyid ===
=== specialeffect ===
<pre>
<pre>
     unequipbyid slot_id
     specialeffect type;
</pre>
</pre>
Unequip whatever is in the slot
Display a special effect on the OID.
 
Same as "misceffect", but does not fallback when there is no OID.


=== getx ===
=== specialeffect2 ===
<pre>
<pre>
     getx()
     specialeffect2 type;
</pre>
</pre>
Return attached player's x coordinate.
Same as "misceffect", but works when there is an OID.


=== gety ===
=== gmcommand ===
<pre>
<pre>
     gety()
     gmcommand "@command maybe with arguments";
</pre>
</pre>
Return attached player's y coordinate.
Run a GM command, at level 99.

Revision as of 06:19, 3 September 2011

This page is a reference for commands believed to work in the eAthena scripting language still used by tmwAthena.

A number of problematic commands have been removed from this list, but not all commands have been tested.

Language Commands

These are command that are closely tied to the language itself.

goto

    goto L_1;

Unconditionally jump to a label. Often used in an "if" body.

callsub

    callsub S_labelname, arguments...;

Jump to the given label. When the "return" statement is executed, continue on the next line.

It is not known whether "arguments..." works, we use temporary variables instead.

It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.

callfunc

    callfunc "function_name", arguments. "s*"

Jump to the given function script. When the "return" statement is executed, continue on the next line of this script.

It is not known whether "arguments..." works, we use temporary variables instead.

It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.

return

    return;
    return expr;

Return from this script or sublabel to the calling function.

It is unknown what happens if this is used from the top-level script, use "close" or "end" instead.

We use temporary variables instead of the form that returns an expression.

getarg

    getarg(index)

Return (by reference?) an argument of "callsub" or "callfunc". Aborts the script if used at toplevel of if out of range.

We use temporary variables instead.

set

    set variable, expression;

Very common command, to set variables.

setarray

    setarray arrayvariable, val1, val2, ...;

Set elements of an array. Previous elements are not cleared. At most 128 elements can be assigned.

It is currently possible, but deprecated, to specify a (zero-based) array index to start at the given part of an array. It's pretty amazing that that code works anyway.

Remember that there are no permanent arrays, only temporary.

cleararray

    cleararray variable, value, count;

Fill an array with "count" copies of "value".

copyarray

    copyarray dest_var, src_var, count;

Copy elements of an array.

This function looks broken to me.

getarraysize

    getarraysize variable;

Get the size of an array.

The size of an array is simply one more than the index of the last nonzero integer or nonempty string.

WARNING: most functions that set an array do not bother to clear out high indices. You should almost always use an explicitly-provided size instead.

deletearray

    deletearray variable[, count = 1];

Remove count elements from an array.

If there are elements beyond count, they will be shifted into lower indices.

After that, all remaining elements will be set to 0 or "".

This function is currently broken, instead use cleararray variable, 0, count;

getelementofarray

    getelementofarray(arrayname, index_expr)

This function is invoked internally by the arrayname[index_expr] syntax.

if

    if (condition) condition_command [conditional_command_args, ...];

If condition is zero, do nothing. Else, evaluate the conditional command.

The only thing special about the if command is the lack of commas during parsing (from my reading this is only a warning?). During execution it is perfectly normal.

end

    end;

Stop executing the script.

Don't use this if you have opened a dialog to the player, use "close" instead. Or, use "close2" and *then* "end".

debugmes

    debugmes "string"

Print a message to stdout.



Message Commands

These are commands for dialog or one-way chat with players.

mes

    mes "string";

Display a line of text to the player. If a dialog box is not already open for the attached NPC, one will be created.

It is unknown if the client properly supports dialog with multiple NPCs simultaneously. Note that the server only allows each account one paused script at a time, so it probably wouldn't work anyway.

next

    next;

Stop the script until the user presses "Next" in the dialog.

close

    close;

Stop executing the script and give the user a "Close" button in the dialog.

close2

    close2;

Stop the script until the user presses the "Close" button in the dialog, then keep executing the script (or does it resume immediately?)

menu

    menu
        "option 1", L_1,
        "option 2", L_2,
        "default", -;

Display a list of choices to the player, then branch to the specified label. The special label "-" means don't branch, just continue with the next statement.

Additionally, the temporary variable "@menu" is set to the 1-based index of the choice.

The options must not contain the character ":", as the protocol uses it as a separator.

input

    input variable_name;

Input an integer or string to the given variable, depending on whether has the '$' string postfix.

The implementation allows variable_name to be omitted if input is an integer, in case l14 is used. Don't use this.

announce

    announce "message", flag;

Do a GM message.

If flag & 0xF == 0 forward it to all map servers. If flag & 0x8, message is from the OID (NPC? usually?) rather than the RID (player).

If (flag & 0x7) == 1, send to all on map. If (flag & 0x7) == 2, send to all in line of sight. If (flag & 0x7) == 3, send to self only. If (flag & 0x7) == anything else, send to all clients.

mapannounce

    mapannounce "mapname", "message", flag;

Send an announcement to all players in map.

Only flag & 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.

areaannounce

    areaannounce "mapname", x0, y0, x1, y1, "message", flag;

Send an announcement to all players in area.

Only flag & 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.

message

    message "player", "message";

Display (in chat) a message from the server to a single user.

npctalk

    npctalk "message";

Make an NPC say something publicly.

Note: in many cases areaannounce is a better choice.

Character Commands

These have to do with attributes of the player.

setlook

    setlook type, value;

Set an aspect of a character's appearance. Used e.g. by the barber.

There are constant provided for the LOOK type, and for hair color and hair style.

heal

    heal hp, sp

Increase or decrease the player's hp and sp.

itemheal

    itemheal "ii"

Increase or decrease the player's hp and sp, for use in item scripts.

percentheal

    percentheal "ii"

Increase or decrease the player's hp and sp, by percentage of max HP.

This is probably the best way to instakill the player.

readparam

    readparam(type[, "playername"])

Return one of the core parameters of a player.

type is one of the bCamelCase constants, see db/const.txt

getcharid

    getcharid(type[ "playername"])

Get an id of the attached (or given) player.

Type is: 0: char id 1: party id 2: guild id (deprecated) 3: account id

You usually want 3.

getpartyname

    getpartyname(partyid)

Return the name of the party with the given id, or "null".

getpartymember

    getpartymember partyid

Fills in the array $@partymembername$

strcharinfo

    strcharinfo(num)

Return string information about an account: num==0: name num==1: party name num==2: guild name (deprecated)

sc_start

    sc_start type, tick, val1[, beingid];

Apply a status effect to a player (or monster?).

type is one of the sc_* constants.

sc_start2

    sc_start2 type, tick, val1, chance[, beingid];

Chance of applying a status effect, out of 10000.

sc_end

    sc_end type;

Immediately end status effect on current player.

sc_check

    sc_check(type)

Whether a status effect is currently active.

getscrate

    getscrate(type, rate[, being_id])

If the sc is poison, modify rate by (3 + vit + luk/3) percent.

resetlvl

    resetlvl type;

resetstatus

    resetstatus;

resetskill

    resetskill;

changesex

    changesex;

Ask the login server (via the char server) to toggle this account's sex, then kick the player.

attachrid

    attachrid(id)

Change the being associated with this script.

Return true if such a player is logged in.

detachrid

    detachrid;

Detach the player associated with this script.

isloggedin

    isloggedin(id)

Return true if the given ID is logged in.

Often you shouldn't use this, but attachrid(id) instead

marriage

    marriage("otherplayer")

Marry the attached player to the other player.

Return 1 on success and 0 on failure.

divorce

    divorce()

Divorce the attached player from their partner

Return 1 on success and 0 on failure.

getpartnerid2

    getpartnerid2()

Return the ID of the attached player's partner (0 is none).

getexp

    getexp base, job;

Increase the types of experience.

getinventorylist

    getinventorylist;

Fill in some arrays of useful information: "@inventorylist_id", "@inventorylist_amount", "@inventorylist_equip".

The arrays are not cleared between calls, use "@inventory_count".

getskilllist

    getskilllist;

Fill in some arrays of useful information: "@skilllist_id", "@skilllist_lv", "@skilllist_flag".

The arrays are not cleared between calls, use "@skill_count".

getpoolskilllist

    getpoolskilllist;

Same, but only poolable skills.

getactivatedpoolskilllist

    getactivatedpoolskilllist;

Same, but only activated pool skills.

getunactivatedpoolskilllist

    getunactivatedpoolskilllist;

Same, but only unactivated pool skills.

poolskill

    poolskill skill_id;

Activate a poolable skill.

unpoolskill

    unpoolskill skill_id;

Deactivate a poolable skill.

checkpoolskill

    checkpoolskill(skill_id)

Check if a pool skill is activated

misceffect

    misceffect type, "player_name";
    misceffect type, being_id;
    misceffect type;

Display a miscellaneous effect on a being.

In the third form, it will use the OID if possible, and fallback to the RID.

getlook

    getlook(type)

Return part of the player's appearance: val==1: hair val==2: weapon val==3: bottom val==4: middle val==5: top val==6: hair color val==8: shield val==9: shoes

On failure, return -1.

getsavepoint

    getsavepoint(type)

type==0: Return savepoint map type==1: Return savepoint x type==2: Return savepoint y

This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.

shop

    shop "npcname";

Close the script and open the given NPC's shop.

isdead

    isdead()

Return 1 if the attached player is dead, else 0.

fakenpcname

    fakenpcname "name", "newname", new_sprite_id;

Change the appearance of an NPC.

Location Commands

These are commands that have to do with the location of players

warp

    warp "mapname", x, y;

Warp the attached player to the given location. "mapname" may have the special values "Random", "SavePoint", and "Save" (case-sensitive), but x and y are still required.

isat

    isat("mapname", x, y)

Return 1 if the attached player is at the given location, 0 otherwise.

areawarp

    areawarp "src_map", x0, y0, x1, y1, "dst_map", x, y;

Warp all players in the given area to the given location.

getusers

    getusers(type)

Count users.

If flag & 0x8, base on OID instead of RID. If (flag & 0x7) == 0, return users on the map. If (flag & 0x7) == 1, return users on the server.

getmapusers

    getmapusers("mapname")

Count users on a given map.

getareausers

    getareausers("mapname", x0, y0, x1, y1)

Count users in an area.

mapwarp

    mapwarp "src_map", "dst_map", x, y;

Warp all players from source map to destination location.

npcwarp

    npcwarp x, y, "npcname";

Move an NPC to a different location on the same map.

isin

    isin("mapname", x0, y0, x1, y1)

Check if the player is in the area.

getx

    getx()

Return attached player's x coordinate.

gety

    gety()

Return attached player's y coordinate.

Item Commands

These have to do with items or inventory.

getitem

    getitem "itemname", count[, unused_argument[, playerid]];
    getitem itemid, count[, unused_argument[, playerid]];
"ii**"

Grant the attached player (or the given player) "count" copies of an item.

If itemname is unrecognized you get an iten (727) instead.

makeitem

    makeitem "itemname", count, "mapname", x, y;
    makeitem itemid, count, "mapname", x, y;

Drop items on the ground.

The special "mapname" value "this" means the map of the attached player.

delitem

    delitem "itemname", count;
    delitem itemid, count;

Remove items from the attached player's inventory.

This command is buggy if the player does not have enough of the item.

countitem

    countitem("itemname")
    countitem(itemid)

Return the number of the given item in the player's inventory.

checkweight

    checkweight("itemname", count)
    checkweight(itemid, count)

Return 0 if adding "count" of the item would put player above max weight, 1 if it would still be less than max weight. Also returns 0 if item does not exist.

getequipid

    getequipid(equip_point)

Return the ID of the item in the given equip slot.

equip_point is one of the equip_* constants

getequipname

    getequipname(equip_point)

Return the name of the item in the given equip slot.

equip_point is one of the equip_* constants

getequipisequiped

    getequipisequiped(num)

Return 1 if the player currently has an item equipped in the slot.

statusup

    statusup bType;

Permanently increase a stat by one point.

statusup2

    statusup2 bType, delta;

Permanently increase or decrease a stat.

bonus

    bonus bType, delta

Temporarily increase a stat. For use in item scripts only.

skill

    skill id, level[, flag = 1];

Grant a skill.

flag==0: permanent skill flag==1: temporary skill (item scripts only)

(Untested)

setskill

    setskill id, level;

Grant a skill permanently.

getskilllv

    getskilllv(skill)

Return the player's level of the given skill.

getgmlevel

    getgmlevel()

Return the player's GM level.

getopt2

    getopt2()

Return the player's opt2 flags.

setopt2

    setopt2 flags;

Set the player's opt2 flags.

checkoption

    checkoption(type)

Return 1 if the player has any of the given (XOR'ed) option bits. Usually only one is given.

setoption

    setoption type

Set the player's option flags exactly (not OR'ing).

savepoint

    savepoint "mapname", x, y;

Set the player's save point. Used e.g. by Soul Menhirs, and during the time travel quest.

openstorage

    openstorage;

Open the player's storage.

getitemname

    getitemname("itemname")
    getitemname(itemid)

Return the name of the item, or "Unknown Item".

clearitem

    clearitem;

Remove all items from a player's inventory.

nude

    nude;

Unequip all items.

hasitems

    hasitems()

Return 1 if the player has any inventory, 0 otherwise.

unequipbyid

    unequipbyid slot_id;

Unequip whatever is in the slot

getareadropitem

    getareadropitem("mapname", x0, y0, x1, y1, "itemname"[, delitems = 0]);
    getareadropitem("mapname", x0, y0, x1, y1, itemid[, delitems = 0]);

Count items on the floor in an area. If delitems, the items will be deleted as well.

Common Functions

These are not mostly not related to the RPG or the scripting language.

rand

    rand(range)
    rand(min, max)

In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive. In the second form, return a random number between min and max, inclusive. Min and max may be swapped.

pow

    pow(a, b)

return <math>(a \times .001) ^ b</math>

gettimetick

    gettimetick(type)

Return one of the ticks

type==0 (or other): milliseconds since some point in time, wraps every 50 days. type==1: time since midnight, UTC. type==2: seconds since the epoch.

You should almost always use type 2.

gettime

    gettime(type)

Get a component of the time (UTC).

1: second (0-59) 2: minute (0-59) 3: hour (0-23) 4: day of week (0-6) 5: day of month (1-31) 6: month (1-12) 7: year (1902-2038)

gettimestr

    gettimestr("format", length)

Frontend for strftime(3).

This function may be removed for technical reasons, please construct the string manually using gettime().

There is a script function that does this: callfunct "time_stamp";

Timers and Events

These have to do with transfering control in ways that are not immediately obvious.

doevent

    doevent "event";

Manually invoke an NPC event.

donpcevent

    donpcevent "event";

Manually invoke an NPC event.

addtimer

    addtimer tick, "event";

This command is untested and might freeze the server.

deltimer

    deltimer "event";

This command is untested and might freeze the server.

initnpctimer

    initnpctimer;

Set the NPC's attached timer to tick 0 and start it.

stopnpctimer

    stopnpctimer;

Stop the NPC's attached timer.

startnpctimer

    startnpctimer;

Start the NPC's attached timer, without setting the tick.

setnpctimer

    setnpctimer tick;

Set the NPC's timer to a specific tick.

getnpctimer

    getnpctimer(type)

Get the current tick of an NPC's timer.

type==0: timer event tick (like setnpctimer) type==1: bool if it has a next timer. type==2: timer amount

inittimer

    inittimer;

Setup an NPC's event timers.

stoptimer

    stoptimer;

Unload an NPC's event timers.

cmdothernpc

    cmdothernpc "npc", "Foo";

Invoke ::OnCommandFoo

mobcount

    mobcount("mapname", "event")

Count the remaining mobs from the spawn with the given event.

areatimer

    areatimer "mapname", x0, y0, x1, y1, tick, "event";

Add a PC event timer to all players in the area.

After "tick" milliseconds, the given NPC event will fire with each player as the RID.

Unsorted Commands

These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.

monster

    monster "mapname", x, y, "string", class, count[, "event"];

Spawn monsters at a point.

areamonster

    areamonster "mapname", x0, y0, x1, y1, "string", class, count[, "event"];

Spawn monsters in an area.

killmonster

    killmonster "mapname", "event";

Kill monsters on a map.

Unless it is "All", "event" must match the one used at spawn time.

If "All" is given, this function properly preserves permanently respawning monsters.

killmonsterall

    killmonsterall "mapname";

Kill all monsters unconditionally.

This command might prevent monsters from respawning. Instead use "killmonster" with "event" == "All".

enablenpc

    enablenpc "name";

Enable an NPC.

disablenpc

    disablenpc "name";

Disable an NPC.

hideoffnpc

    hideoffnpc "name";

What does this do?

hideonnpc

    hideonnpc "name";

What does this do?

setmapflagnosave

    setmapflagnosave "mapname", "savemap", x, y;

Set the nosave flag and respawn location.

setmapflag

    setmapflag "mapname", flag;

Set an arbitrary mapflag.

This function may be problematic in the stable version.

removemapflag

    removemapflag "mapname", flag;

Unset an arbitrary mapflag.

This function may be problematic in the stable version.

pvpon

    pvpon "mapname";

Allow PvP on a map.

pvpoff

    pvpoff "mapname";

Deny PvP on a map.

emotion

    emotion emote_index;

Show a smiley above the OID.

getspellinvocation

    getspellinvocation("spell-identifier")

Return the #invocation used for a spell, or "...".

getanchorinvocation

    getanchorinvocation "anchor-identifier"

Return the invocation used for a teleport anchor (?)

strmobinfo

    strmobinfo(num, class)

Info about a type of mob: num==1: name num==2: jname num==3: lv num==4: maxhp num==5: maxsp num==6: base_exp num==7: job_exp

specialeffect

    specialeffect type;

Display a special effect on the OID.

Same as "misceffect", but does not fallback when there is no OID.

specialeffect2

    specialeffect2 type;

Same as "misceffect", but works when there is an OID.

gmcommand

    gmcommand "@command maybe with arguments";

Run a GM command, at level 99.