<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://gswiki.play.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RSAZAZEL</id>
	<title>GemStone IV Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://gswiki.play.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RSAZAZEL"/>
	<link rel="alternate" type="text/html" href="https://gswiki.play.net/Special:Contributions/RSAZAZEL"/>
	<updated>2026-05-15T16:17:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.12</generator>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221248</id>
		<title>Lich:Software/Scripting reference</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221248"/>
		<updated>2024-06-24T13:50:41Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: /* variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3rd-party}}&lt;br /&gt;
== variable ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
variable[1]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code Example:&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;contains all variables passed to a script in a single string&lt;br /&gt;
&lt;br /&gt;
script.vars[0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;a space separated list of the values passed to the script exist in index 1 through n where n is the number of space separated items&lt;br /&gt;
&lt;br /&gt;
script.vars[1..n]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array, possibly empty&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; Script.current.vars&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s an array containing the command line variables the user entered when starting the script (begins at variable[1], unlike standard arrays; as is the behavior of Wizard, variable[0] is the entire line the user entered).&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Hi there!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Displays &#039;[script_name: the string it was given]&#039; in the game window; if given multiple strings it echoes each string on its own line.  If it&#039;s given no arguments, it simply prints a blank line without the &#039;[script_name: ]&#039; business.&lt;br /&gt;
&lt;br /&gt;
== respond ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;I&#039;m a string to display&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;so on and so on&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Just like the &#039;echo&#039; command, but does not display the script name.  Since it&#039;s possible for Lich to be running two dozen scripts at the same time, it can get a little hard to know which script is saying what unless they use the &#039;echo&#039; command and not the &#039;respond&#039; command.  Still, &#039;echo&#039; can be a bit ugly for printing tables and whatnot, so use this instead if desired.  The return value is how many characters the last string displayed contained.&lt;br /&gt;
&lt;br /&gt;
== pause ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;2s&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;3m&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;1d&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses for one second.  If given an integer, pauses for that many seconds.  If given a string (as in the examples above), extracts the number to pause for from the string and pauses for that many seconds/hours/days (yeah, well, I was bored, so why not make it do days too).  Return value is the number of seconds it paused for.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
Sending output to the game as though typed by the player.&lt;br /&gt;
&lt;br /&gt;
=== put ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
put &amp;quot;look&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was sent&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard.&lt;br /&gt;
&lt;br /&gt;
=== fput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;, &amp;quot;are now in a defensive stance&amp;quot;, &amp;quot;can&#039;t do that while dead&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was accepted as meaning the action succeeded (see below)&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; forceput&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s named &#039;forceput&#039;  because originally it was intended to be used only infrequently, but as it&#039;s turned out there are very few times when &#039;put&#039; is preferable.  This command will continue to &#039;put&#039; whatever string you give it, until it receives a line from the game that it doesn&#039;t recognize as one of the common &amp;quot;command rejected&amp;quot; responses (for example, &amp;quot;You can&#039;t do that while entangled in a web&amp;quot;, &amp;quot;...wait x seconds&amp;quot; (RT), &amp;quot;Wait x seconds.&amp;quot; (cast RT), &amp;quot;Sorry, you may only type ahead x lines&amp;quot;, &amp;quot;You&#039;ll have to stand up first&amp;quot; (stands and reattempts), etc).  If stunned, it will wait until you&#039;re no longer stunned to reattempt; if in RT (hard or soft), will wait &#039;x&#039; seconds before reattempting.  If you need to stand, it will do so and retry immediately.  If it causes a type ahead error, it will pause for 1 second and then reattempt.  This has a very high rate of success, but it is definitely not infallible -- it only checks the next line received from the game, and there&#039;s no guarantee the next line from the game has anything at all to do with what the &#039;fput&#039; command just sent.  Because of this it can often fail to realize the command wasn&#039;t really successful, particularly if the user is doing a lot of things at once.  If given more than one string, the first string is taken as the command to send to the game, and all other strings are used as what to accept as meaning the action succeeded.  BE CAREFUL with this behavior!  It can very infrequently be extremely useful, but if not used cautiously, it can easily cause a script to mistakenly repeat an action many times in *very* rapid succession (which with CoL signs for instance can very easily kill you in less than a second flat).&lt;br /&gt;
&lt;br /&gt;
=== multifput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multifput &amp;quot;stance offensive&amp;quot;, &amp;quot;incant 910&amp;quot;, &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (return value of the last &#039;fput&#039; executed)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple strings and executes an &#039;fput&#039; command for every one sequentially.&lt;br /&gt;
&lt;br /&gt;
=== dothis ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothis &amp;quot;action here&amp;quot;, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to fput, but will continue to try the action until a success string is matched&lt;br /&gt;
&lt;br /&gt;
=== dothistimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothistimeout &amp;quot;action here&amp;quot;, time, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;dothis&#039;, but if a success isn&#039;t seen in the given amount of time, returns a value of &#039;nil&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
move &#039;northwest&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as the Wizard &#039;move&#039; command, but it will usually compensate for things like type ahead errors, RT, currently stunned, etc.; will also stand and re-attempt the movement if it&#039;s detected to be necessary.  Returns &#039;true&#039; if the move was executed properly, &#039;false&#039; if it wasn&#039;t able to be performed (which is very rare due to the move command&#039;s error compensation measures).&lt;br /&gt;
&lt;br /&gt;
=== multimove ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multimove &#039;nw&#039;, &#039;ne&#039;, &#039;go hole&#039;, &#039;climb stairs&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple directions to move in and executes the &#039;move&#039; command for each one.  Returns the value of the last &#039;move&#039; command executed (true or false).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
&lt;br /&gt;
This is core line-by-line handling of full lines of input sent by the game to the player. For more complex filtering and handling, see &amp;quot;match&amp;quot; and &amp;quot;wait&amp;quot; sections.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches the next un-checked line of game data (while a script is running, it is given every game line, and these lines are available for a script to check/use at its leisure).&lt;br /&gt;
&lt;br /&gt;
=== regetall ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
regetall &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns an array of all game lines (since login) that match as having contained the given string (absolutely every single line since you logged in, Lich remembers them all).  If a script is set as receiving the status data that doesn&#039;t show in the game window, those lines are also matched for; if the script is only being fed normal game data, that&#039;s the only history this command checks.  If no matching lines were found, returns &#039;nil&#039; (which is false in a logical comparison).  As well as returning the matches, it also adds them to the script&#039;s game data stack so that subsequent &#039;get&#039; commands will fetch them in order.  The string to match for is actually optional, and if omitted, all lines are considered &#039;matching&#039;.&lt;br /&gt;
&lt;br /&gt;
=== reget ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 5, &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to &#039;regetall&#039; in behavior, but it only checks the current RAM cache (every 2 minutes, Lich&#039;s &#039;memory&#039; of game data is emptied out of RAM and stored in a temporary file on the hard disk so that the program doesn&#039;t take up more resources than is necessary -- these files are deleted when the program closes); it also takes an optional integer, which represents how many game lines back to check (&#039;reget 5&#039; would scan the last 5 lines from the game that are still in RAM).  If the integer is omitted, will scan the entire existing RAM buffer (again, cleared every 2 minutes).&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (possible for the return array to be empty, but unlikely)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Empties ALL unchecked input to the script from ALL queues (normal game stack, unique script stack and upstream stack); the return value is whatever was in the game data stack before it was cleared (which could be nothing, in which case the return is an empty array).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wait ==&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard; waits until a line from the game is seen.  Returns the line (in actuality this command simply clears the game stack and executes a &#039;get&#039;).&lt;br /&gt;
&lt;br /&gt;
=== waitrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in roundtime for.  Return value is how many seconds paused.  Waits until you&#039;re in roundtime if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitrt&#039;, but does not wait until you&#039;re in roundtime and as such will not hang (but will not wait for any roundtime if the game hasn&#039;t sent that you&#039;re in roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in RT for.  Return value is how many seconds paused.  Waits until you&#039;re in RT if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitcastrt&#039;, but does not wait until you&#039;re in cast roundtime and as such will not hang (but will not wait for any cast roundtime if the game hasn&#039;t sent that you&#039;re in cast roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitcastrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitfor &amp;quot; just arrived.&amp;quot;, &amp;quot;More lines to waitfor if you desire&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Waits until a line from the game includes the string you gave it as an argument.  The return value is the complete string from the game (in the example used here, if Shaelun entered the room, the command would return &amp;quot;Shaelun just arrived.&amp;quot;).  &#039;waitfor&#039; is case insensitive (capital letters are considered matches even if the string it was given didn&#039;t have a capital letter there).&lt;br /&gt;
&lt;br /&gt;
=== wait_while ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while &amp;quot;You do not have full health: waiting until you do.&amp;quot; { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The script will wait while the given code block has a logical value of &#039;true&#039;, and will only continue on to the next line when/if the code block has a value of &#039;false&#039;.  If given the optional string to announce to the user, it will only display that string if it&#039;s going to be sitting there waiting for something -- if the command will not be waiting at all, it doesn&#039;t display the string to the user.  Note that there&#039;s no limit to how long/complicated the code block can be; it was designed for very short logical comparisons like the example above, but need not be used that way.&lt;br /&gt;
&lt;br /&gt;
=== wait_until ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_until { checkmana(50) }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical in all ways to &#039;wait_while&#039;, but does the opposite (waits UNTIL the given code block is true, not WHILE it&#039;s true).  Also takes the optional string if desired.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Match ==&lt;br /&gt;
&lt;br /&gt;
Wizard-style &amp;quot;match&amp;quot; commands&lt;br /&gt;
&lt;br /&gt;
=== matchtimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchtimeout 5, &amp;quot;string to watch for&amp;quot;, &amp;quot;another&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but if a match isn&#039;t seen in the given amount of time, returns a value of &#039;false&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== matchwait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If used without any arguments, 100% identical to Wizard &#039;matchwait&#039; commands.  You can optionally give it arguments, in which case it acts identically to &#039;waitfor&#039; in all ways except one: matches are case sensitive (for instance, matchwait &amp;quot;shaelun&amp;quot; will not match if the word &amp;quot;Shaelun&amp;quot; is seen from the game).&lt;br /&gt;
&lt;br /&gt;
=== match ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &#039;label&#039;, &#039;line to watch for&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &amp;quot;gameline&amp;quot;, &amp;quot;gameline&amp;quot;, &amp;quot;some other gameline&amp;quot;, &amp;quot;so on and so forth&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given exactly two arguments, identical to the Wizard &#039;match&#039; command.  If given *any* other number of arguments, it&#039;s a case sensitive version of &#039;waitfor&#039; but instead of returning the entire matching game line, it returns only the portion of the string you asked it to watch for.&lt;br /&gt;
&lt;br /&gt;
=== matchfind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfind &amp;quot;A ? attacks you!&amp;quot;, &amp;quot;A ? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
person, weapon = matchfind &amp;quot;? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string or an array&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but returns only the portion of the line where the question mark(s) are.  If given multiple question marks, returns an array containing the portions of the string (in order).  Note that if you assign multiple variables to equal a single array, the array&#039;s elements are used in order and assigned to each variable (if there are fewer elements in the array than there are variables being assigned, variables receive a value of &#039;nil&#039;, and if there are more elements in the array than there are variables being assigned, the last variable is assigned an array with the remaining values).  This is why the above usage example works (person, weapon =).&lt;br /&gt;
&lt;br /&gt;
=== matchfindword ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
weapon = matchfindword &amp;quot;Shaelun swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (single word)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;matchfind&#039;, but only looks for a single word where the question marks are.  Note that a line won&#039;t match if more than one word is where the question mark is (in the above example, if the weapon were a &amp;quot;broadsword&amp;quot; it would match, but if it were a &amp;quot;sonic hammer of kai&amp;quot; there would be no match).&lt;br /&gt;
&lt;br /&gt;
=== matchfindexact ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfindexact &amp;quot;? just arrived.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Version of matchfind meant for use in special cases; matchfind is very forgiving and will return and match anything (case insensitively) -- matchfindexact is very strict.  It is case sensitive and cares about things like spaces, word boundaries (partial pieces of a word will not match, only whole words), the case of the string it&#039;s looking for, etc..  Use it if you need to use matchfind and want to make sure only a very specific line matches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Room ==&lt;br /&gt;
&lt;br /&gt;
=== checkarea ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns the geographical area of your current room, or if given a string to check for, returns true or false based on whether your current area matches the string or not.&lt;br /&gt;
&lt;br /&gt;
=== checkroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom &amp;quot;table&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea, but uses the room title instead of the geographical area.&lt;br /&gt;
&lt;br /&gt;
=== checkpaths ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths &#039;nw&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the current &#039;Obvious exits:&#039; directions if given no argument, or true/false based on whether all arguments given are currently available as exits or not.&lt;br /&gt;
&lt;br /&gt;
=== checkoutside ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkoutside&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
outside?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; outside?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Really simple, just returns true if you&#039;re outside, false if you aren&#039;t.  Probably only of use to rangers writing their own spellup scripts or something, but either way: it&#039;s available if you have a use for it.&lt;br /&gt;
&lt;br /&gt;
=== checknpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs&lt;br /&gt;
	fput &amp;quot;attack&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs &amp;quot;big monster of doom&amp;quot;, &amp;quot;small monster of doom&amp;quot;&lt;br /&gt;
	put &amp;quot;Oh noes!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
	for npc in checknpcs&lt;br /&gt;
		put &amp;quot;greet #{npc}&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, a string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If checknpcs is used without giving it npcs to check for, it returns an array of strings coresponding to the noun of each npc in the room, or nil if there are no npcs (does not return an empty array, so you can use &amp;quot;if checknpcs&amp;quot;).  If chekcnpcs is given npcs to look for, it returns a string of the first matching npc it finds, or nil if none matched (any string evaluates to true, only nil and false evaluate to false in an if statement).&lt;br /&gt;
&lt;br /&gt;
=== checkpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;checknpcs&#039;, but with the players currently present.&lt;br /&gt;
&lt;br /&gt;
=== checkloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (or an empty array if no items)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the items currently in the room.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Familiars ==&lt;br /&gt;
&lt;br /&gt;
=== checkfamarea/checkfamroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea/checkroom, but check your familiar&#039;s current location instead of yours (only in Wizard and only if you have a familiar).&lt;br /&gt;
&lt;br /&gt;
=== checkfampcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkfamnpcs&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to the above two, but tracks for your familiar&#039;s room instead.  Not available in SF as of v3.06.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
&lt;br /&gt;
=== checkpoison ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpoison&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkdisease.&lt;br /&gt;
&lt;br /&gt;
=== checkdisease ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdisease&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkpoison.&lt;br /&gt;
&lt;br /&gt;
=== checkfried ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfried&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if you&#039;re fried, false if not.&lt;br /&gt;
&lt;br /&gt;
=== checkmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind(2)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding level of exp in your head, with 0 being &#039;clear as a bell&#039;, 1 being &#039;fresh and clear&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
=== check_mind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding percentage of exp in your head.&lt;br /&gt;
&lt;br /&gt;
=== percentmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind(80)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns an integer ranging from 0-100 representing the percentage of exp in your head. If given an integer, returns true or false if you have at least that percentage of experience.  Both saturated and fried show up as 100 percent - a user interested in distinguishing between the two can add a checksaturated or saturated? qualifier to their percentmind check.&lt;br /&gt;
&lt;br /&gt;
=== checkright/checkleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkright&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkleft &amp;quot;broadsword&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; righthand?/lefthand?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Give them a string and will return true/false if it matches what you&#039;re holding, or the last word in the item name if used by itself.  If your hands are currently empty, it will return &#039;nil&#039; (identical to &#039;false&#039; in a logical comparison) regardless of whether it was given an argument or not.  This behavior can be useful to make absolutely certain a &#039;take&#039; command succeeded, for instance.&lt;br /&gt;
&lt;br /&gt;
=== checkstance ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance &amp;quot;offensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; stance&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; With no arguments, returns the string representing your current stance. With a numerical or string argument, returns a boolean flag indicating if the current stance matches the given string. For string based comparisons, this will correctly test against the stance values possible if using [[Combat Mastery]] or [[[[Warrior_Tricks#Stance_Perfection|Stance Perfection]]]], while integer based arguments will perform a precise comparison.&lt;br /&gt;
&lt;br /&gt;
=== check(thing) ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstanding&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;spirit defense&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdead&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; mostly true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkstanding; checknotstanding; checksitting; checkprone; checkkneeling/kneeling?; checkprep/prepped?; checkmind; checkgrouped/checkjoined/joined?; checkwebbed/webbed?; checkstunned/stunned?; checkdead/dead?; checkhidden/checkhiding/hidden/hiding?; checkname/myname?; checkspell/checkactive/active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Most are true if you are (checkstunned for example), false if you aren&#039;t; they all follow the same basic behavior as the above-documented &#039;check&#039; commands.&lt;br /&gt;
&lt;br /&gt;
=== checkname ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; string or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; True/false if given a string and the names match, or just returns the character name if given no arguments.&lt;br /&gt;
&lt;br /&gt;
=== checkstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false or an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Only in StormFront (there is no auto-updated stamina tag in Wizard).  Given no arguments, returns your current stamina.  Given a number, returns true/false based on whether you have at least or more than that number.&lt;br /&gt;
&lt;br /&gt;
=== checkrt / checkcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; value of roundtime&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a value of how much roundtime left. Useful for IF statements.&lt;br /&gt;
&lt;br /&gt;
=== checkmana/checkhealth/checkspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmana 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; identical as above&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; health, health?, mana, mana?, spirit, spirit?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkstamina.&lt;br /&gt;
&lt;br /&gt;
=== maxhealth/maxstamina/maxmana/maxspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (checkhealth &amp;lt; maxhealth)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns your maximum health/spirit/stamina/mana as an integer (class Fixnum).  Takes no arguments.&lt;br /&gt;
&lt;br /&gt;
=== percenthealth/percentmana/percentspirit/percentstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (percenthealth &amp;lt; 90)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an integer (0-100) representing the percentage of your current health/mana/whatever in relation to your max.&lt;br /&gt;
&lt;br /&gt;
=== checkspell ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;elemental defense i&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if the spell you give it is active, false if it isn&#039;t (only available if you use the infomon script, since that&#039;s what keeps track of this).&lt;br /&gt;
&lt;br /&gt;
=== Wounds ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.torso&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.neck&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.lhand&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Variations:&#039;&#039;&#039; Wounds.head; Wounds.neck; Wounds.abs; Wounds.lhand; Wounds.rhand; Wounds.larm; Wounds.rarm; Wounds.chest; Wounds.back; Wounds.rleg; Wounds.lleg; Wounds.nerves&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the current wound rank (numerically).  If I had &#039;deep gashes and serious bleeding&#039; on my chest, Wounds.chest would return the integer 3.  If I had no wound there, it would return 0.&lt;br /&gt;
&lt;br /&gt;
=== Scars ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.abs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.nerves&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.rleg&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wounds above, but for scars instead of wounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lich toggles ==&lt;br /&gt;
&lt;br /&gt;
=== # QUIET ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;amp;#35; QUIET&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; n/a&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This is a special directive that must be a Ruby comment placed as above in the first line of the Lich script. Lich will ordinarily bookend the lifetime of a script with &amp;lt;code&amp;gt;--- Lich: (scriptname) active.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--- Lich: (scriptname) has exited.&amp;lt;/code&amp;gt; This option omits those lines, allowing a script to start and exit silently.&lt;br /&gt;
&lt;br /&gt;
=== hide_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
hide_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;hidden&#039; setting.  When this setting is on (defaults to off), a script will not be listed when the user types ;list. It will still show up under ;list all. There is no way to prevent a script from being being displayed in ;list all.&lt;br /&gt;
&lt;br /&gt;
=== i_stand_alone ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
i_stand_alone&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off.  Removes a script from ALL data feeds; a script using this will receive no game lines and no unique data whatsoever (unless they toggle it back off).  If Lich can more or less ignore that a script exists and not bother with keeping its data stacks up-to-the-second with game data and anything else it&#039;s requested, then a script has virtually no overhead whatsoever (meaning any resources it requires come only from what it does independantly).  Useful for some scripts who have no need to eat up resources being fed game data (such as dict.lic).&lt;br /&gt;
&lt;br /&gt;
=== no_kill_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_kill_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no kill all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;kill all.  A script with this set to on must be killed specifically (by typing ;kill [script], or just ;kill).  There is no way to prevent a script from being killed when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== no_pause_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_pause_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no pause all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;pause all.  A script with this set to on must be killed specifically (by typing ;pause [script], or just ;pause).  There is no way to prevent a script from being paused when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== silence_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
silence_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;silenced&#039; setting.  A script with this on will not have commands it sends to the game echoed to your game window.  A script run in SAFE mode cannot change this setting (attempting to do so will generate a warning and otherwise have no effect).&lt;br /&gt;
&lt;br /&gt;
===status_tags===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
status_tags&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039;Tells Lich to send this script XML tags rather than stripping them, or, if already doing so, tells Lich to go back to stripping the XML. If called with the argument &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;, switches to that setting and echoes that it has done so.&lt;br /&gt;
&lt;br /&gt;
=== toggle_echo ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;suppress echo&#039; setting.  A script with this on will not execute any &#039;echo&#039; commands, but will silently ignore them instead; it&#039;s designed more for people who don&#039;t want clutter in their game window but still want to make use of an existing script.  Commands sent to the game are still echoed to the game window.&lt;br /&gt;
&lt;br /&gt;
=== toggle_unique ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_unique&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; When a script is set as being &#039;unique&#039;, it does not receive normal game data; instead it only receives what the user sends to it by typing ;send to (script) (message).  This is of use if a script wants to only act on a user&#039;s input or has no use for game data (it provides a method for scripts to make sure game data doesn&#039;t accidentally get recognized as a user&#039;s input, and also serves to prevent scripts from slowly eating away at system resources because the script never checks or clears its data buffer -- see the &#039;clear&#039; command for more on that).&lt;br /&gt;
&lt;br /&gt;
=== toggle_upstream ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_upstream&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This must be enabled to allow the script to intercept what you send to the game. See the separate upstream section for more detail.&lt;br /&gt;
&lt;br /&gt;
== Lich::Util ==&lt;br /&gt;
=== issue_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.issue_command(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end: true, timeout: 5, silent: nil, usexml: true, quiet: false)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.issue_command(&#039;tattoo menu&#039;, /List of flash tattoos available \(Page \d+\):/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture the returning output from the begging start_pattern(regex) until the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. usexml determines whether the start/end pattern is matching against the xml feed or plain txt feed. quiet flag determines whether the output is squelched or shown to the front end. The only required values needed are command and start_pattern. Everything else has default values that can be used or changed.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command_xml() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command_xml(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command_xml(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture XML buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. end_pattern, include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command(command, start_pattern, end_pattern, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/, end_pattern = /Type TATTOO MENU again in the next minute to display the next group of flash tattoos\./)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== silver_count() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.silver_count(timeout = 3)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.silver_count&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer of how much silver you have&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; useful to know the amount of silver one has on themselves.&lt;br /&gt;
&lt;br /&gt;
== Lich::Messaging ==&lt;br /&gt;
&lt;br /&gt;
=== monsterbold ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.monsterbold(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.monsterbold(&amp;quot;This text I want to monsterbold&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with proper monsterbold tags depending on FrontEnd used&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will take the string given and return it with monsterbold before/after and xml_encode the msg.&lt;br /&gt;
&lt;br /&gt;
=== msg_format ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg_format(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg_format(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with start and end tags to change the color in the FrontEnd&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the string given with color coding based on the type chosen. Current options are as follows:&lt;br /&gt;
** error, yellow, bold, monster, creature&lt;br /&gt;
** warn, orange, gold, thought&lt;br /&gt;
** info, teal, whisper&lt;br /&gt;
** green, speech, debug, light green&lt;br /&gt;
&lt;br /&gt;
=== msg ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; sends the string given to the client encoded for the type given.&lt;br /&gt;
&lt;br /&gt;
=== stream_window ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.stream_window(msg, window)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.stream_window(&amp;quot;Let&#039;s send this to a different window!&amp;quot;, &amp;quot;familiar&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; send the string to the various stream window. Currently supports the familiar, speech, thoughts and loot window.&lt;br /&gt;
&lt;br /&gt;
=== xml_encode ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.xml_encode(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.xml(&amp;quot;Let&#039;s encode some text!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an xml encoded text&lt;br /&gt;
&lt;br /&gt;
=== mono ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.mono(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.mono(&amp;quot;Let&#039;s mono some code!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; force mono formatted string to be displayed properly using XML output class of mono&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
Settings are specific to the script itself. For example, a setting with the name &amp;quot;bank&amp;quot; in fetch_turnips.lic have no effect on the &amp;quot;bank&amp;quot; setting in buy_cheese.lic.&lt;br /&gt;
&lt;br /&gt;
=== Settings.load ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.load&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings[&amp;quot;SettingName&amp;quot;] ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings[&amp;quot;SettingName&amp;quot;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.save ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.save&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; either a hash representing your settings, or &#039;nil&#039; if no settings for the script exist&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Note that Settings.clear will erase all settings, but it will NOT save that on its own.  Issue a Settings.save command after the Settings.clear if you want that script&#039;s settings reset permanently.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upstream ==&lt;br /&gt;
&lt;br /&gt;
=== upstream_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same thing as &amp;quot;get&amp;quot; except it fetches the last line the user sent to the game.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_get? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to get the last line the user sent to the game, but does not wait for a line to be sent.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_waitfor &amp;quot;climb stairs&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &amp;quot;waitfor&amp;quot; but only checks the upstream commands (the commands sent to the game by the user).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interscript communication ==&lt;br /&gt;
&lt;br /&gt;
=== running? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
running? &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns true/false if the given script is active or not.&lt;br /&gt;
&lt;br /&gt;
=== send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The target script will be sent a string exactly as though it came from the game.  Returns true if successful, false if the script wasn&#039;t found to be active.&lt;br /&gt;
&lt;br /&gt;
=== send_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_scripts &amp;quot;To the running scripts, this line looks identical to one that came from the game&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but sends a line to all scripts instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== start_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;heal&amp;quot;, [ &amp;quot;shaelun&amp;quot;, &amp;quot;adhara&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;test  in the game entry box.  Returns &#039;true&#039; if the script was successfully started, &#039;false&#039; if for any reason it couldn&#039;t be found/started.  The optional second argument (which must be an array, as seen in the above example) can be used to simulate arguments to the script (the above example would simulate the user typing:  ;heal shaelun adhara).&lt;br /&gt;
&lt;br /&gt;
=== start_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Executes a &amp;quot;start_script&amp;quot; command for every argument given.  Note that you cannot give a script arguments when using this command.&lt;br /&gt;
&lt;br /&gt;
=== pause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses the script using the command.  If given a string, pauses the script who&#039;s name matches that string; if the script is not currently active, returns &#039;false&#039; (&#039;true&#039; if the script was paused successfully).&lt;br /&gt;
&lt;br /&gt;
=== unpause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unpause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses the script you give it.  Note that because of the way the &#039;script is paused&#039; state is handled, it&#039;s conceivable for a script that was paused to actually still be executing commands internally for a brief time -- a script isn&#039;t actually &amp;quot;stopped dead in its tracks&amp;quot; until it attempts to interact with the game in some way (by fetching game data, sending game data, or by attempting a command that requires the script to be identified).  Since most commands identify a script (including this one), this command cannot unpause the script itself: when it attempts to unpause itself, it will be identified as being paused and will be halted where it is until it&#039;s unpaused by another script or the user (or killed).  When it is, it will be allowed to continue, and will then try to unpause itself (pointlessly, since it was just unpaused...).&lt;br /&gt;
&lt;br /&gt;
=== kill_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
kill_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; kill_scripts, stop_script, stop_scripts&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;kill test  in the game entry box and hitting enter; takes multiple scripts to kill.  If the script is not running, returns false; if the script was found to be active and was killed, returns true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique ==&lt;br /&gt;
&lt;br /&gt;
See [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more about the &#039;unique&#039; stack.&lt;br /&gt;
&lt;br /&gt;
=== unique_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches a line from the unique stack, as opposed to the game data stack ().&lt;br /&gt;
&lt;br /&gt;
=== unique_send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but the script will receive the string sent in its &#039;unique&#039; stack instead of its &#039;game data&#039; stack (see [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more info).&lt;br /&gt;
&lt;br /&gt;
=== unique_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_waitfor &amp;quot;continue&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039; but acts on the &#039;unique&#039; queue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exit handling ==&lt;br /&gt;
&lt;br /&gt;
=== exit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Ends the script.&lt;br /&gt;
&lt;br /&gt;
=== die_with_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
die_with_me &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If the given scripts are active at the time the script using this command ends (&amp;quot;exit&amp;quot;, finishes, gets killed by the user, or dies in error) they&#039;ll all be killed automatically (produces no notification to avoid clutter, but the scripts are indeed stopped).  The given scripts need not be running (or technically even exist) at the time this command is used -- it only updates the setting, and that setting isn&#039;t actually acted upon until the script is killed.&lt;br /&gt;
&lt;br /&gt;
=== before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { echo &amp;quot;Oh God, why have you killed me dear user...?!&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { Settings.save }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs the given actions right before the script exits.  Note nothing is done at the time this command is used (it simply sets what should be done just before the script is killed).  The block given to this command is actually wrapped up into a proc object (an object of the &#039;Procedure&#039; class), and scheduled to be run when the script is killed/exits (if multiple procs exist, they are executed sequentially in the order they were declared).  Because of this, the same &#039;binding&#039; principles that apply to other proc objects apply here (in a nutshell, if a variable didn&#039;t exist when you declared the &#039;before_dying&#039; stuff, then you can&#039;t use it in the &#039;before_dying&#039; code; if it did exist at the time though, you *can* use it, even if it doesn&#039;t really exist in the script when it dies).  Also note that if the command(s) take more than 0.5 seconds to complete, they&#039;re forcibly aborted and the script is killed regardless (this is to prevent a possibly bad situation where a script makes a mistake in the &#039;before_dying&#039; command and is refusing to stop executing due to errors).  Note that if a script is set as executing in SAFE mode, all the restrictions that normally apply will also apply in the &#039;before_dying&#039; code block (this cannot circumvent that, nor can anything else for that matter).&lt;br /&gt;
&lt;br /&gt;
=== undo_before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
undo_before_dying&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Clears any &#039;before_dying&#039; commands that have been used for the script.&lt;br /&gt;
&lt;br /&gt;
=== abort! ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
abort!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Immediately kills the script, bypassing any &#039;before_dying&#039; blocks that have been registered.  Probably won&#039;t ever be of use, but it&#039;s a way to make the calling script go away as fast as possible (note that it isn&#039;t any faster than the &#039;exit&#039; command is, it just makes sure that nothing except stopping the script happens).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spell ==&lt;br /&gt;
&lt;br /&gt;
The Spell class combines spell information from spell-list.xml and character information from infomon to greatly simplify basic spell handling.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].cast&lt;br /&gt;
Spell[503].cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to cast spell given using info from spell-list.xml&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].affordable?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Useful for knowing if you have enough mana for spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].active?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false if spell is active&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will return true if the spell is currently active on yourself, false if it is not.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].timeleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].timeleft&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns amount of time left as value&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_cast&lt;br /&gt;
Spell[503].force_cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force cast spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_channel() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_channel&lt;br /&gt;
Spell[503].force_channel(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force channel spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_evoke() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_evoke&lt;br /&gt;
Spell[503].force_evoke(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force evoke spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_incant() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_incant&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force incant spell&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
&lt;br /&gt;
=== active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.active?(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.active?(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.active?(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.active?(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.active?(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the given effect is currently active. Spells can be referenced by number or name, unless the spell does not have a number, then must be referenced by name. Name can only be used when FLAG ShowSpellName is set to ON.&lt;br /&gt;
&lt;br /&gt;
=== time_left ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.time_left(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.time_left(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.time_left(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.time_left(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.time_left(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; time left in minutes as a floating number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to determine how much time is left on a given effect.&lt;br /&gt;
&lt;br /&gt;
== Weapon ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.known?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.known?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.affordable?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.available?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.available?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the weapon skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== CMan ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.known?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.known?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.affordable?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.available?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.available?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the cman skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== Shield  ==&lt;br /&gt;
&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.known?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.known?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.affordable?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.available?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.available?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the shield skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
=== use ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.use(name, target = &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, &amp;quot;Wyrom&amp;quot;)&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, 9000)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to use the shield skill given on target specified. Target can be a GameObj, integer, or string. If no target given, will issue command with no target, relying on game-engine targeting.&lt;br /&gt;
&lt;br /&gt;
== Armor ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Armor.known?(name)&lt;br /&gt;
&lt;br /&gt;
Armor.known?(&amp;quot;Armor Blessing&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the armor skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
== Feat ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.known?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.known?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.affordable?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.available?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.available?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the feat skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== GameObj ==&lt;br /&gt;
&lt;br /&gt;
The GameObj class tracks various objects in the same room as you, and makes their game id, name, noun, status, and contents available to you.&lt;br /&gt;
&lt;br /&gt;
=== GameObj arrays ===&lt;br /&gt;
&lt;br /&gt;
Several arrays are exposed by GameObj. They include:&lt;br /&gt;
&lt;br /&gt;
==== GameObj.inv ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the things you are wearing.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.pcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the other players in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.npcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the npcs in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.loot ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the loot in the room, or nil if there is none.  For the purposes of this function, loot is anything that Simu hasn&#039;t tagged with monster bold.  Any exits or anything that shows up in the &amp;quot;You also see&amp;quot; line will be included.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing any links found in the room description, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.dead ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the dead &#039;&#039;&#039;npcs&#039;&#039;&#039; in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.fam_pcs, GameObj.fam_npcs, GameObj.fam_loot, GameObj.fam_room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class.  Similar to the ones above, except for your familiar&#039;s room, and these don&#039;t stay up-to-date without having your familiar look at the room.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.targets ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the hostile npcs in the room, the mobs, the monsters, whatever you want to call them.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.target ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing the current target you have selected, if any.&lt;br /&gt;
&lt;br /&gt;
=== Finding game objects with GameObj ===&lt;br /&gt;
&lt;br /&gt;
Now that you&#039;ve got an object or array of objects, here&#039;s what to do with them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
target = GameObj.npcs.find { |npc| npc.status.nil? }&amp;lt;br&amp;gt;&lt;br /&gt;
if target&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;fput &amp;quot;attack ##{target.id}&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This example shows (in an over-simplified way) the most common use of the GameObj class.   First, &amp;quot;GameObj.npcs&amp;quot; gives an array of all the npcs in the room.  Then, &amp;quot;.find&amp;quot; searches each item in that array.  For each item in the array, the code inside the brackets following &amp;quot;GameObj.npcs.find&amp;quot; is run, and &amp;quot;npc&amp;quot; represents the item it&#039;s currently looking at.  The code inside the brackets acts like an if statement, and as soon as it is true, &amp;quot;target&amp;quot; is assigned the npc object.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;status&amp;quot; method applies to npcs and pcs (using it on others won&#039;t give an error, but it will always return nil).  The status is basically whatever shows up after &amp;quot;that appears&amp;quot;, &amp;quot;that is&amp;quot;, or &amp;quot;who is&amp;quot;.  So, if you also see a kobold that appears stunned, its status will be &amp;quot;stunned&amp;quot;.  In the example, we&#039;re looking for an npc with a nil status, because that represents an npc that&#039;s standing and not stunned, dead, prone, etc.  The game never shows &amp;quot;You also see a kobold that is standing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now suppose there&#039;s twenty kobolds in the room, and only the fifteenth one is standing.  How can you be sure you attack the standing one?  This is where the kobold&#039;s id comes in handy.  Simu assigns an id to almost everything in the game.  Stormfront uses these ids when you click on links.  For the most part, these ids can be used just like nouns.  &amp;quot;attack ##{target.id}&amp;quot; will attack the npc you found earlier, even if other npcs are walking in and out of the room.  The double pound sign is not a typo.&lt;br /&gt;
&lt;br /&gt;
=== Other GameObj methods ===&lt;br /&gt;
&lt;br /&gt;
==== GameObj.containers ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a Hash of ids (as Strings) mapping to arrays of objects of the GameObj class. Each id represents an accessible container &#039;&#039;&#039;that GameObj is aware of&#039;&#039;&#039; with the given id. The id maps to an array of objects of the GameObj class representing that container&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
For a container to be added to the Hash, GameObj must first be made aware of its contents by some sort of interaction with the container, looking in it, opening it, and more. (Someone who knows the specific cases, please add detail!)&lt;br /&gt;
&lt;br /&gt;
==== GameObj.right_hand, GameObj.left_hand ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing whatever is in your hand.  Currently, if there is nothing in your hand, it still returns a GameObj where the name is &amp;quot;Empty&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Useful and hopefully self-explanatory methods to use once you have the right GameObj object====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
.id&amp;lt;br&amp;gt;&lt;br /&gt;
.name&amp;lt;br&amp;gt;&lt;br /&gt;
.noun&amp;lt;br&amp;gt;&lt;br /&gt;
.status&amp;lt;br&amp;gt;&lt;br /&gt;
.contents&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
&lt;br /&gt;
The Script class deals with and runs scripts.&lt;br /&gt;
&lt;br /&gt;
=== Script.start ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.run ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script and waits while it runs. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.list, Script.running, Script.hidden ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; An array of Script objects for every running/visible/invisible script.&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; This is not the same as ;list. The Script class does not have a defined to_s method.&lt;br /&gt;
&lt;br /&gt;
=== Script.running? ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether a script is running (paused or not)&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
&lt;br /&gt;
=== Script.pause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was paused successfully, false otherwise (script not running or already paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.unpause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was unpaused successfully, false otherwise (script not running or was not paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.paused? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script is running and paused, false otherwise&lt;br /&gt;
&lt;br /&gt;
=== Script.exists? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script with the given name is in the user&#039;s script directory, false otherwise. extension is optional.&lt;br /&gt;
&lt;br /&gt;
=== Script.log ===&lt;br /&gt;
Appends to the script&#039;s .log file in the lich/log directory.&lt;br /&gt;
&lt;br /&gt;
=== Script.db ===&lt;br /&gt;
Gets you a sqlite3 database for your script, of type SQLite3::Database (http://www.rubydoc.info/github/luislavena/sqlite3-ruby/SQLite3/Database)&lt;br /&gt;
&lt;br /&gt;
=== Script.version ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; Ruby Gem version&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and returns the current version in header of script as a Ruby Gem version&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;, &amp;quot;1.18.0&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and minimum required version&lt;br /&gt;
&lt;br /&gt;
== Global variables ==&lt;br /&gt;
&lt;br /&gt;
=== $PROGRAM_NAME ===&lt;br /&gt;
Ruby&#039;s global variable capturing current script -- in this case, the path to Lich.&lt;br /&gt;
&lt;br /&gt;
=== $frontend ===&lt;br /&gt;
Frontend detected by Lich.&lt;br /&gt;
&lt;br /&gt;
=== $lich_dir ===&lt;br /&gt;
Path of the current Lich directory.&lt;br /&gt;
&lt;br /&gt;
=== $login_time ===&lt;br /&gt;
Local time the current Lich session started.&lt;br /&gt;
&lt;br /&gt;
=== $script_dir ===&lt;br /&gt;
Path to directory Lich is using to get scripts.&lt;br /&gt;
&lt;br /&gt;
=== $version ===&lt;br /&gt;
Lich version.&lt;br /&gt;
&lt;br /&gt;
== Builtin Lich shortcuts ==&lt;br /&gt;
&lt;br /&gt;
These automatically perform multiple checks or commands.&lt;br /&gt;
&lt;br /&gt;
=== take ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
take &amp;quot;box&amp;quot;, &amp;quot;coffer&amp;quot;, &amp;quot;ruby&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (the last line the &#039;fput&#039; command saw)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Picks up every item listed and puts each one in turn into your &#039;lootsack:&#039; setting by issuing the commands with fput.&lt;br /&gt;
&lt;br /&gt;
=== fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs a &#039;look&#039; and takes/puts away all items on the ground that aren&#039;t listed in your &#039;excludeloot:&#039; setting.  Return value is the last line from the game.&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; GS now natively includes the command LOOT ROOM with a similar effect.&lt;br /&gt;
&lt;br /&gt;
=== Lich.fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich.fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;fetchloot&#039; in all ways except only the items listed in your &#039;treasure:&#039; setting are fetched.&lt;br /&gt;
&lt;br /&gt;
=== walk ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
walk&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Moves in a random cardinal direction (what&#039;s seen in the &#039;Obvious exits:&#039; line), storing the direction moved, and returning &#039;true&#039; if there is a critter in the room or &#039;false&#039; if there aren&#039;t any NPCs in the room.  The stored direction will not be among the random directions chosen the next time the &#039;walk&#039; command is used (unless it hits a dead-end, then it will backtrack the way it came).&lt;br /&gt;
&lt;br /&gt;
=== run ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
run if not health(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will execute a &#039;walk&#039; command repeatedly until it enters a room with no critters, at which point it returns and the script will pick up execution on the next line (does not continue to run away).&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; wander.lic is a popular and sophisticated auto-moving creature-finding script.&lt;br /&gt;
&lt;br /&gt;
=== watchhealth ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50) { echo &amp;quot;Uh, your health is below 50...&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50, proc_object)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; nothing useful&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns immediately so that the calling script continues to run as normal, and while it does, monitors your health.  If it falls below the number you give it, executes the block you passed to it.  Only does this once -- if you want it to repeat as the script executes (be careful, chances are your health will still be below 50 after the block executes once) then pass watchhealth a proc object that includes a line registering itself over again (as in, a proc that includes a &#039;watchhealth(#, self)&#039; thingie).  If your health never falls below the number you give it, then nothing happens; once the script ends, it stops watching.&lt;br /&gt;
&lt;br /&gt;
== goto ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
goto &amp;quot;MainLabel&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; (has no return value, the current execution stack is discarded and the jump never returns)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to standard Wizard/SF scripts; the label to jump to has to be in quotes, and it is (kinda sorta) case insensitive.  The label declaration itself (the LABEL: line) MUST NOT be in quotes: only the name of the label when you use the goto command. If there are two labels with the same name but different capitalizations, the goto command will attempt to be case sensitive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[The Lich]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*The initial content of this article was copied from the scripting documentation posted by Tillmen which formerly resided at http://lichproject.com/&lt;br /&gt;
&lt;br /&gt;
[[category:Scripts]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221247</id>
		<title>Lich:Software/Scripting reference</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221247"/>
		<updated>2024-06-24T13:50:04Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: /* variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3rd-party}}&lt;br /&gt;
== variable ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
variable[1]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code Example:&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;contains all variables passed to a script in a single string&lt;br /&gt;
script.vars[0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;a space separated list of the values passed to the script exist in index 1 through n where n is the number of space separated items&lt;br /&gt;
script.vars[1..n]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array, possibly empty&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; Script.current.vars&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s an array containing the command line variables the user entered when starting the script (begins at variable[1], unlike standard arrays; as is the behavior of Wizard, variable[0] is the entire line the user entered).&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Hi there!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Displays &#039;[script_name: the string it was given]&#039; in the game window; if given multiple strings it echoes each string on its own line.  If it&#039;s given no arguments, it simply prints a blank line without the &#039;[script_name: ]&#039; business.&lt;br /&gt;
&lt;br /&gt;
== respond ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;I&#039;m a string to display&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;so on and so on&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Just like the &#039;echo&#039; command, but does not display the script name.  Since it&#039;s possible for Lich to be running two dozen scripts at the same time, it can get a little hard to know which script is saying what unless they use the &#039;echo&#039; command and not the &#039;respond&#039; command.  Still, &#039;echo&#039; can be a bit ugly for printing tables and whatnot, so use this instead if desired.  The return value is how many characters the last string displayed contained.&lt;br /&gt;
&lt;br /&gt;
== pause ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;2s&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;3m&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;1d&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses for one second.  If given an integer, pauses for that many seconds.  If given a string (as in the examples above), extracts the number to pause for from the string and pauses for that many seconds/hours/days (yeah, well, I was bored, so why not make it do days too).  Return value is the number of seconds it paused for.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
Sending output to the game as though typed by the player.&lt;br /&gt;
&lt;br /&gt;
=== put ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
put &amp;quot;look&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was sent&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard.&lt;br /&gt;
&lt;br /&gt;
=== fput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;, &amp;quot;are now in a defensive stance&amp;quot;, &amp;quot;can&#039;t do that while dead&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was accepted as meaning the action succeeded (see below)&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; forceput&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s named &#039;forceput&#039;  because originally it was intended to be used only infrequently, but as it&#039;s turned out there are very few times when &#039;put&#039; is preferable.  This command will continue to &#039;put&#039; whatever string you give it, until it receives a line from the game that it doesn&#039;t recognize as one of the common &amp;quot;command rejected&amp;quot; responses (for example, &amp;quot;You can&#039;t do that while entangled in a web&amp;quot;, &amp;quot;...wait x seconds&amp;quot; (RT), &amp;quot;Wait x seconds.&amp;quot; (cast RT), &amp;quot;Sorry, you may only type ahead x lines&amp;quot;, &amp;quot;You&#039;ll have to stand up first&amp;quot; (stands and reattempts), etc).  If stunned, it will wait until you&#039;re no longer stunned to reattempt; if in RT (hard or soft), will wait &#039;x&#039; seconds before reattempting.  If you need to stand, it will do so and retry immediately.  If it causes a type ahead error, it will pause for 1 second and then reattempt.  This has a very high rate of success, but it is definitely not infallible -- it only checks the next line received from the game, and there&#039;s no guarantee the next line from the game has anything at all to do with what the &#039;fput&#039; command just sent.  Because of this it can often fail to realize the command wasn&#039;t really successful, particularly if the user is doing a lot of things at once.  If given more than one string, the first string is taken as the command to send to the game, and all other strings are used as what to accept as meaning the action succeeded.  BE CAREFUL with this behavior!  It can very infrequently be extremely useful, but if not used cautiously, it can easily cause a script to mistakenly repeat an action many times in *very* rapid succession (which with CoL signs for instance can very easily kill you in less than a second flat).&lt;br /&gt;
&lt;br /&gt;
=== multifput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multifput &amp;quot;stance offensive&amp;quot;, &amp;quot;incant 910&amp;quot;, &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (return value of the last &#039;fput&#039; executed)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple strings and executes an &#039;fput&#039; command for every one sequentially.&lt;br /&gt;
&lt;br /&gt;
=== dothis ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothis &amp;quot;action here&amp;quot;, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to fput, but will continue to try the action until a success string is matched&lt;br /&gt;
&lt;br /&gt;
=== dothistimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothistimeout &amp;quot;action here&amp;quot;, time, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;dothis&#039;, but if a success isn&#039;t seen in the given amount of time, returns a value of &#039;nil&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
move &#039;northwest&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as the Wizard &#039;move&#039; command, but it will usually compensate for things like type ahead errors, RT, currently stunned, etc.; will also stand and re-attempt the movement if it&#039;s detected to be necessary.  Returns &#039;true&#039; if the move was executed properly, &#039;false&#039; if it wasn&#039;t able to be performed (which is very rare due to the move command&#039;s error compensation measures).&lt;br /&gt;
&lt;br /&gt;
=== multimove ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multimove &#039;nw&#039;, &#039;ne&#039;, &#039;go hole&#039;, &#039;climb stairs&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple directions to move in and executes the &#039;move&#039; command for each one.  Returns the value of the last &#039;move&#039; command executed (true or false).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
&lt;br /&gt;
This is core line-by-line handling of full lines of input sent by the game to the player. For more complex filtering and handling, see &amp;quot;match&amp;quot; and &amp;quot;wait&amp;quot; sections.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches the next un-checked line of game data (while a script is running, it is given every game line, and these lines are available for a script to check/use at its leisure).&lt;br /&gt;
&lt;br /&gt;
=== regetall ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
regetall &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns an array of all game lines (since login) that match as having contained the given string (absolutely every single line since you logged in, Lich remembers them all).  If a script is set as receiving the status data that doesn&#039;t show in the game window, those lines are also matched for; if the script is only being fed normal game data, that&#039;s the only history this command checks.  If no matching lines were found, returns &#039;nil&#039; (which is false in a logical comparison).  As well as returning the matches, it also adds them to the script&#039;s game data stack so that subsequent &#039;get&#039; commands will fetch them in order.  The string to match for is actually optional, and if omitted, all lines are considered &#039;matching&#039;.&lt;br /&gt;
&lt;br /&gt;
=== reget ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 5, &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to &#039;regetall&#039; in behavior, but it only checks the current RAM cache (every 2 minutes, Lich&#039;s &#039;memory&#039; of game data is emptied out of RAM and stored in a temporary file on the hard disk so that the program doesn&#039;t take up more resources than is necessary -- these files are deleted when the program closes); it also takes an optional integer, which represents how many game lines back to check (&#039;reget 5&#039; would scan the last 5 lines from the game that are still in RAM).  If the integer is omitted, will scan the entire existing RAM buffer (again, cleared every 2 minutes).&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (possible for the return array to be empty, but unlikely)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Empties ALL unchecked input to the script from ALL queues (normal game stack, unique script stack and upstream stack); the return value is whatever was in the game data stack before it was cleared (which could be nothing, in which case the return is an empty array).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wait ==&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard; waits until a line from the game is seen.  Returns the line (in actuality this command simply clears the game stack and executes a &#039;get&#039;).&lt;br /&gt;
&lt;br /&gt;
=== waitrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in roundtime for.  Return value is how many seconds paused.  Waits until you&#039;re in roundtime if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitrt&#039;, but does not wait until you&#039;re in roundtime and as such will not hang (but will not wait for any roundtime if the game hasn&#039;t sent that you&#039;re in roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in RT for.  Return value is how many seconds paused.  Waits until you&#039;re in RT if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitcastrt&#039;, but does not wait until you&#039;re in cast roundtime and as such will not hang (but will not wait for any cast roundtime if the game hasn&#039;t sent that you&#039;re in cast roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitcastrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitfor &amp;quot; just arrived.&amp;quot;, &amp;quot;More lines to waitfor if you desire&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Waits until a line from the game includes the string you gave it as an argument.  The return value is the complete string from the game (in the example used here, if Shaelun entered the room, the command would return &amp;quot;Shaelun just arrived.&amp;quot;).  &#039;waitfor&#039; is case insensitive (capital letters are considered matches even if the string it was given didn&#039;t have a capital letter there).&lt;br /&gt;
&lt;br /&gt;
=== wait_while ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while &amp;quot;You do not have full health: waiting until you do.&amp;quot; { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The script will wait while the given code block has a logical value of &#039;true&#039;, and will only continue on to the next line when/if the code block has a value of &#039;false&#039;.  If given the optional string to announce to the user, it will only display that string if it&#039;s going to be sitting there waiting for something -- if the command will not be waiting at all, it doesn&#039;t display the string to the user.  Note that there&#039;s no limit to how long/complicated the code block can be; it was designed for very short logical comparisons like the example above, but need not be used that way.&lt;br /&gt;
&lt;br /&gt;
=== wait_until ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_until { checkmana(50) }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical in all ways to &#039;wait_while&#039;, but does the opposite (waits UNTIL the given code block is true, not WHILE it&#039;s true).  Also takes the optional string if desired.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Match ==&lt;br /&gt;
&lt;br /&gt;
Wizard-style &amp;quot;match&amp;quot; commands&lt;br /&gt;
&lt;br /&gt;
=== matchtimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchtimeout 5, &amp;quot;string to watch for&amp;quot;, &amp;quot;another&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but if a match isn&#039;t seen in the given amount of time, returns a value of &#039;false&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== matchwait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If used without any arguments, 100% identical to Wizard &#039;matchwait&#039; commands.  You can optionally give it arguments, in which case it acts identically to &#039;waitfor&#039; in all ways except one: matches are case sensitive (for instance, matchwait &amp;quot;shaelun&amp;quot; will not match if the word &amp;quot;Shaelun&amp;quot; is seen from the game).&lt;br /&gt;
&lt;br /&gt;
=== match ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &#039;label&#039;, &#039;line to watch for&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &amp;quot;gameline&amp;quot;, &amp;quot;gameline&amp;quot;, &amp;quot;some other gameline&amp;quot;, &amp;quot;so on and so forth&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given exactly two arguments, identical to the Wizard &#039;match&#039; command.  If given *any* other number of arguments, it&#039;s a case sensitive version of &#039;waitfor&#039; but instead of returning the entire matching game line, it returns only the portion of the string you asked it to watch for.&lt;br /&gt;
&lt;br /&gt;
=== matchfind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfind &amp;quot;A ? attacks you!&amp;quot;, &amp;quot;A ? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
person, weapon = matchfind &amp;quot;? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string or an array&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but returns only the portion of the line where the question mark(s) are.  If given multiple question marks, returns an array containing the portions of the string (in order).  Note that if you assign multiple variables to equal a single array, the array&#039;s elements are used in order and assigned to each variable (if there are fewer elements in the array than there are variables being assigned, variables receive a value of &#039;nil&#039;, and if there are more elements in the array than there are variables being assigned, the last variable is assigned an array with the remaining values).  This is why the above usage example works (person, weapon =).&lt;br /&gt;
&lt;br /&gt;
=== matchfindword ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
weapon = matchfindword &amp;quot;Shaelun swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (single word)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;matchfind&#039;, but only looks for a single word where the question marks are.  Note that a line won&#039;t match if more than one word is where the question mark is (in the above example, if the weapon were a &amp;quot;broadsword&amp;quot; it would match, but if it were a &amp;quot;sonic hammer of kai&amp;quot; there would be no match).&lt;br /&gt;
&lt;br /&gt;
=== matchfindexact ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfindexact &amp;quot;? just arrived.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Version of matchfind meant for use in special cases; matchfind is very forgiving and will return and match anything (case insensitively) -- matchfindexact is very strict.  It is case sensitive and cares about things like spaces, word boundaries (partial pieces of a word will not match, only whole words), the case of the string it&#039;s looking for, etc..  Use it if you need to use matchfind and want to make sure only a very specific line matches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Room ==&lt;br /&gt;
&lt;br /&gt;
=== checkarea ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns the geographical area of your current room, or if given a string to check for, returns true or false based on whether your current area matches the string or not.&lt;br /&gt;
&lt;br /&gt;
=== checkroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom &amp;quot;table&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea, but uses the room title instead of the geographical area.&lt;br /&gt;
&lt;br /&gt;
=== checkpaths ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths &#039;nw&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the current &#039;Obvious exits:&#039; directions if given no argument, or true/false based on whether all arguments given are currently available as exits or not.&lt;br /&gt;
&lt;br /&gt;
=== checkoutside ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkoutside&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
outside?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; outside?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Really simple, just returns true if you&#039;re outside, false if you aren&#039;t.  Probably only of use to rangers writing their own spellup scripts or something, but either way: it&#039;s available if you have a use for it.&lt;br /&gt;
&lt;br /&gt;
=== checknpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs&lt;br /&gt;
	fput &amp;quot;attack&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs &amp;quot;big monster of doom&amp;quot;, &amp;quot;small monster of doom&amp;quot;&lt;br /&gt;
	put &amp;quot;Oh noes!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
	for npc in checknpcs&lt;br /&gt;
		put &amp;quot;greet #{npc}&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, a string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If checknpcs is used without giving it npcs to check for, it returns an array of strings coresponding to the noun of each npc in the room, or nil if there are no npcs (does not return an empty array, so you can use &amp;quot;if checknpcs&amp;quot;).  If chekcnpcs is given npcs to look for, it returns a string of the first matching npc it finds, or nil if none matched (any string evaluates to true, only nil and false evaluate to false in an if statement).&lt;br /&gt;
&lt;br /&gt;
=== checkpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;checknpcs&#039;, but with the players currently present.&lt;br /&gt;
&lt;br /&gt;
=== checkloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (or an empty array if no items)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the items currently in the room.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Familiars ==&lt;br /&gt;
&lt;br /&gt;
=== checkfamarea/checkfamroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea/checkroom, but check your familiar&#039;s current location instead of yours (only in Wizard and only if you have a familiar).&lt;br /&gt;
&lt;br /&gt;
=== checkfampcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkfamnpcs&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to the above two, but tracks for your familiar&#039;s room instead.  Not available in SF as of v3.06.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
&lt;br /&gt;
=== checkpoison ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpoison&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkdisease.&lt;br /&gt;
&lt;br /&gt;
=== checkdisease ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdisease&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkpoison.&lt;br /&gt;
&lt;br /&gt;
=== checkfried ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfried&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if you&#039;re fried, false if not.&lt;br /&gt;
&lt;br /&gt;
=== checkmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind(2)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding level of exp in your head, with 0 being &#039;clear as a bell&#039;, 1 being &#039;fresh and clear&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
=== check_mind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding percentage of exp in your head.&lt;br /&gt;
&lt;br /&gt;
=== percentmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind(80)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns an integer ranging from 0-100 representing the percentage of exp in your head. If given an integer, returns true or false if you have at least that percentage of experience.  Both saturated and fried show up as 100 percent - a user interested in distinguishing between the two can add a checksaturated or saturated? qualifier to their percentmind check.&lt;br /&gt;
&lt;br /&gt;
=== checkright/checkleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkright&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkleft &amp;quot;broadsword&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; righthand?/lefthand?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Give them a string and will return true/false if it matches what you&#039;re holding, or the last word in the item name if used by itself.  If your hands are currently empty, it will return &#039;nil&#039; (identical to &#039;false&#039; in a logical comparison) regardless of whether it was given an argument or not.  This behavior can be useful to make absolutely certain a &#039;take&#039; command succeeded, for instance.&lt;br /&gt;
&lt;br /&gt;
=== checkstance ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance &amp;quot;offensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; stance&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; With no arguments, returns the string representing your current stance. With a numerical or string argument, returns a boolean flag indicating if the current stance matches the given string. For string based comparisons, this will correctly test against the stance values possible if using [[Combat Mastery]] or [[[[Warrior_Tricks#Stance_Perfection|Stance Perfection]]]], while integer based arguments will perform a precise comparison.&lt;br /&gt;
&lt;br /&gt;
=== check(thing) ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstanding&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;spirit defense&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdead&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; mostly true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkstanding; checknotstanding; checksitting; checkprone; checkkneeling/kneeling?; checkprep/prepped?; checkmind; checkgrouped/checkjoined/joined?; checkwebbed/webbed?; checkstunned/stunned?; checkdead/dead?; checkhidden/checkhiding/hidden/hiding?; checkname/myname?; checkspell/checkactive/active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Most are true if you are (checkstunned for example), false if you aren&#039;t; they all follow the same basic behavior as the above-documented &#039;check&#039; commands.&lt;br /&gt;
&lt;br /&gt;
=== checkname ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; string or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; True/false if given a string and the names match, or just returns the character name if given no arguments.&lt;br /&gt;
&lt;br /&gt;
=== checkstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false or an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Only in StormFront (there is no auto-updated stamina tag in Wizard).  Given no arguments, returns your current stamina.  Given a number, returns true/false based on whether you have at least or more than that number.&lt;br /&gt;
&lt;br /&gt;
=== checkrt / checkcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; value of roundtime&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a value of how much roundtime left. Useful for IF statements.&lt;br /&gt;
&lt;br /&gt;
=== checkmana/checkhealth/checkspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmana 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; identical as above&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; health, health?, mana, mana?, spirit, spirit?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkstamina.&lt;br /&gt;
&lt;br /&gt;
=== maxhealth/maxstamina/maxmana/maxspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (checkhealth &amp;lt; maxhealth)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns your maximum health/spirit/stamina/mana as an integer (class Fixnum).  Takes no arguments.&lt;br /&gt;
&lt;br /&gt;
=== percenthealth/percentmana/percentspirit/percentstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (percenthealth &amp;lt; 90)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an integer (0-100) representing the percentage of your current health/mana/whatever in relation to your max.&lt;br /&gt;
&lt;br /&gt;
=== checkspell ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;elemental defense i&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if the spell you give it is active, false if it isn&#039;t (only available if you use the infomon script, since that&#039;s what keeps track of this).&lt;br /&gt;
&lt;br /&gt;
=== Wounds ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.torso&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.neck&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.lhand&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Variations:&#039;&#039;&#039; Wounds.head; Wounds.neck; Wounds.abs; Wounds.lhand; Wounds.rhand; Wounds.larm; Wounds.rarm; Wounds.chest; Wounds.back; Wounds.rleg; Wounds.lleg; Wounds.nerves&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the current wound rank (numerically).  If I had &#039;deep gashes and serious bleeding&#039; on my chest, Wounds.chest would return the integer 3.  If I had no wound there, it would return 0.&lt;br /&gt;
&lt;br /&gt;
=== Scars ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.abs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.nerves&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.rleg&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wounds above, but for scars instead of wounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lich toggles ==&lt;br /&gt;
&lt;br /&gt;
=== # QUIET ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;amp;#35; QUIET&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; n/a&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This is a special directive that must be a Ruby comment placed as above in the first line of the Lich script. Lich will ordinarily bookend the lifetime of a script with &amp;lt;code&amp;gt;--- Lich: (scriptname) active.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--- Lich: (scriptname) has exited.&amp;lt;/code&amp;gt; This option omits those lines, allowing a script to start and exit silently.&lt;br /&gt;
&lt;br /&gt;
=== hide_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
hide_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;hidden&#039; setting.  When this setting is on (defaults to off), a script will not be listed when the user types ;list. It will still show up under ;list all. There is no way to prevent a script from being being displayed in ;list all.&lt;br /&gt;
&lt;br /&gt;
=== i_stand_alone ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
i_stand_alone&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off.  Removes a script from ALL data feeds; a script using this will receive no game lines and no unique data whatsoever (unless they toggle it back off).  If Lich can more or less ignore that a script exists and not bother with keeping its data stacks up-to-the-second with game data and anything else it&#039;s requested, then a script has virtually no overhead whatsoever (meaning any resources it requires come only from what it does independantly).  Useful for some scripts who have no need to eat up resources being fed game data (such as dict.lic).&lt;br /&gt;
&lt;br /&gt;
=== no_kill_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_kill_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no kill all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;kill all.  A script with this set to on must be killed specifically (by typing ;kill [script], or just ;kill).  There is no way to prevent a script from being killed when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== no_pause_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_pause_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no pause all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;pause all.  A script with this set to on must be killed specifically (by typing ;pause [script], or just ;pause).  There is no way to prevent a script from being paused when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== silence_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
silence_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;silenced&#039; setting.  A script with this on will not have commands it sends to the game echoed to your game window.  A script run in SAFE mode cannot change this setting (attempting to do so will generate a warning and otherwise have no effect).&lt;br /&gt;
&lt;br /&gt;
===status_tags===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
status_tags&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039;Tells Lich to send this script XML tags rather than stripping them, or, if already doing so, tells Lich to go back to stripping the XML. If called with the argument &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;, switches to that setting and echoes that it has done so.&lt;br /&gt;
&lt;br /&gt;
=== toggle_echo ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;suppress echo&#039; setting.  A script with this on will not execute any &#039;echo&#039; commands, but will silently ignore them instead; it&#039;s designed more for people who don&#039;t want clutter in their game window but still want to make use of an existing script.  Commands sent to the game are still echoed to the game window.&lt;br /&gt;
&lt;br /&gt;
=== toggle_unique ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_unique&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; When a script is set as being &#039;unique&#039;, it does not receive normal game data; instead it only receives what the user sends to it by typing ;send to (script) (message).  This is of use if a script wants to only act on a user&#039;s input or has no use for game data (it provides a method for scripts to make sure game data doesn&#039;t accidentally get recognized as a user&#039;s input, and also serves to prevent scripts from slowly eating away at system resources because the script never checks or clears its data buffer -- see the &#039;clear&#039; command for more on that).&lt;br /&gt;
&lt;br /&gt;
=== toggle_upstream ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_upstream&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This must be enabled to allow the script to intercept what you send to the game. See the separate upstream section for more detail.&lt;br /&gt;
&lt;br /&gt;
== Lich::Util ==&lt;br /&gt;
=== issue_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.issue_command(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end: true, timeout: 5, silent: nil, usexml: true, quiet: false)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.issue_command(&#039;tattoo menu&#039;, /List of flash tattoos available \(Page \d+\):/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture the returning output from the begging start_pattern(regex) until the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. usexml determines whether the start/end pattern is matching against the xml feed or plain txt feed. quiet flag determines whether the output is squelched or shown to the front end. The only required values needed are command and start_pattern. Everything else has default values that can be used or changed.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command_xml() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command_xml(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command_xml(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture XML buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. end_pattern, include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command(command, start_pattern, end_pattern, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/, end_pattern = /Type TATTOO MENU again in the next minute to display the next group of flash tattoos\./)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== silver_count() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.silver_count(timeout = 3)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.silver_count&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer of how much silver you have&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; useful to know the amount of silver one has on themselves.&lt;br /&gt;
&lt;br /&gt;
== Lich::Messaging ==&lt;br /&gt;
&lt;br /&gt;
=== monsterbold ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.monsterbold(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.monsterbold(&amp;quot;This text I want to monsterbold&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with proper monsterbold tags depending on FrontEnd used&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will take the string given and return it with monsterbold before/after and xml_encode the msg.&lt;br /&gt;
&lt;br /&gt;
=== msg_format ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg_format(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg_format(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with start and end tags to change the color in the FrontEnd&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the string given with color coding based on the type chosen. Current options are as follows:&lt;br /&gt;
** error, yellow, bold, monster, creature&lt;br /&gt;
** warn, orange, gold, thought&lt;br /&gt;
** info, teal, whisper&lt;br /&gt;
** green, speech, debug, light green&lt;br /&gt;
&lt;br /&gt;
=== msg ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; sends the string given to the client encoded for the type given.&lt;br /&gt;
&lt;br /&gt;
=== stream_window ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.stream_window(msg, window)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.stream_window(&amp;quot;Let&#039;s send this to a different window!&amp;quot;, &amp;quot;familiar&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; send the string to the various stream window. Currently supports the familiar, speech, thoughts and loot window.&lt;br /&gt;
&lt;br /&gt;
=== xml_encode ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.xml_encode(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.xml(&amp;quot;Let&#039;s encode some text!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an xml encoded text&lt;br /&gt;
&lt;br /&gt;
=== mono ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.mono(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.mono(&amp;quot;Let&#039;s mono some code!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; force mono formatted string to be displayed properly using XML output class of mono&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
Settings are specific to the script itself. For example, a setting with the name &amp;quot;bank&amp;quot; in fetch_turnips.lic have no effect on the &amp;quot;bank&amp;quot; setting in buy_cheese.lic.&lt;br /&gt;
&lt;br /&gt;
=== Settings.load ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.load&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings[&amp;quot;SettingName&amp;quot;] ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings[&amp;quot;SettingName&amp;quot;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.save ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.save&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; either a hash representing your settings, or &#039;nil&#039; if no settings for the script exist&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Note that Settings.clear will erase all settings, but it will NOT save that on its own.  Issue a Settings.save command after the Settings.clear if you want that script&#039;s settings reset permanently.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upstream ==&lt;br /&gt;
&lt;br /&gt;
=== upstream_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same thing as &amp;quot;get&amp;quot; except it fetches the last line the user sent to the game.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_get? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to get the last line the user sent to the game, but does not wait for a line to be sent.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_waitfor &amp;quot;climb stairs&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &amp;quot;waitfor&amp;quot; but only checks the upstream commands (the commands sent to the game by the user).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interscript communication ==&lt;br /&gt;
&lt;br /&gt;
=== running? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
running? &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns true/false if the given script is active or not.&lt;br /&gt;
&lt;br /&gt;
=== send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The target script will be sent a string exactly as though it came from the game.  Returns true if successful, false if the script wasn&#039;t found to be active.&lt;br /&gt;
&lt;br /&gt;
=== send_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_scripts &amp;quot;To the running scripts, this line looks identical to one that came from the game&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but sends a line to all scripts instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== start_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;heal&amp;quot;, [ &amp;quot;shaelun&amp;quot;, &amp;quot;adhara&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;test  in the game entry box.  Returns &#039;true&#039; if the script was successfully started, &#039;false&#039; if for any reason it couldn&#039;t be found/started.  The optional second argument (which must be an array, as seen in the above example) can be used to simulate arguments to the script (the above example would simulate the user typing:  ;heal shaelun adhara).&lt;br /&gt;
&lt;br /&gt;
=== start_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Executes a &amp;quot;start_script&amp;quot; command for every argument given.  Note that you cannot give a script arguments when using this command.&lt;br /&gt;
&lt;br /&gt;
=== pause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses the script using the command.  If given a string, pauses the script who&#039;s name matches that string; if the script is not currently active, returns &#039;false&#039; (&#039;true&#039; if the script was paused successfully).&lt;br /&gt;
&lt;br /&gt;
=== unpause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unpause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses the script you give it.  Note that because of the way the &#039;script is paused&#039; state is handled, it&#039;s conceivable for a script that was paused to actually still be executing commands internally for a brief time -- a script isn&#039;t actually &amp;quot;stopped dead in its tracks&amp;quot; until it attempts to interact with the game in some way (by fetching game data, sending game data, or by attempting a command that requires the script to be identified).  Since most commands identify a script (including this one), this command cannot unpause the script itself: when it attempts to unpause itself, it will be identified as being paused and will be halted where it is until it&#039;s unpaused by another script or the user (or killed).  When it is, it will be allowed to continue, and will then try to unpause itself (pointlessly, since it was just unpaused...).&lt;br /&gt;
&lt;br /&gt;
=== kill_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
kill_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; kill_scripts, stop_script, stop_scripts&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;kill test  in the game entry box and hitting enter; takes multiple scripts to kill.  If the script is not running, returns false; if the script was found to be active and was killed, returns true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique ==&lt;br /&gt;
&lt;br /&gt;
See [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more about the &#039;unique&#039; stack.&lt;br /&gt;
&lt;br /&gt;
=== unique_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches a line from the unique stack, as opposed to the game data stack ().&lt;br /&gt;
&lt;br /&gt;
=== unique_send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but the script will receive the string sent in its &#039;unique&#039; stack instead of its &#039;game data&#039; stack (see [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more info).&lt;br /&gt;
&lt;br /&gt;
=== unique_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_waitfor &amp;quot;continue&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039; but acts on the &#039;unique&#039; queue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exit handling ==&lt;br /&gt;
&lt;br /&gt;
=== exit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Ends the script.&lt;br /&gt;
&lt;br /&gt;
=== die_with_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
die_with_me &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If the given scripts are active at the time the script using this command ends (&amp;quot;exit&amp;quot;, finishes, gets killed by the user, or dies in error) they&#039;ll all be killed automatically (produces no notification to avoid clutter, but the scripts are indeed stopped).  The given scripts need not be running (or technically even exist) at the time this command is used -- it only updates the setting, and that setting isn&#039;t actually acted upon until the script is killed.&lt;br /&gt;
&lt;br /&gt;
=== before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { echo &amp;quot;Oh God, why have you killed me dear user...?!&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { Settings.save }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs the given actions right before the script exits.  Note nothing is done at the time this command is used (it simply sets what should be done just before the script is killed).  The block given to this command is actually wrapped up into a proc object (an object of the &#039;Procedure&#039; class), and scheduled to be run when the script is killed/exits (if multiple procs exist, they are executed sequentially in the order they were declared).  Because of this, the same &#039;binding&#039; principles that apply to other proc objects apply here (in a nutshell, if a variable didn&#039;t exist when you declared the &#039;before_dying&#039; stuff, then you can&#039;t use it in the &#039;before_dying&#039; code; if it did exist at the time though, you *can* use it, even if it doesn&#039;t really exist in the script when it dies).  Also note that if the command(s) take more than 0.5 seconds to complete, they&#039;re forcibly aborted and the script is killed regardless (this is to prevent a possibly bad situation where a script makes a mistake in the &#039;before_dying&#039; command and is refusing to stop executing due to errors).  Note that if a script is set as executing in SAFE mode, all the restrictions that normally apply will also apply in the &#039;before_dying&#039; code block (this cannot circumvent that, nor can anything else for that matter).&lt;br /&gt;
&lt;br /&gt;
=== undo_before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
undo_before_dying&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Clears any &#039;before_dying&#039; commands that have been used for the script.&lt;br /&gt;
&lt;br /&gt;
=== abort! ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
abort!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Immediately kills the script, bypassing any &#039;before_dying&#039; blocks that have been registered.  Probably won&#039;t ever be of use, but it&#039;s a way to make the calling script go away as fast as possible (note that it isn&#039;t any faster than the &#039;exit&#039; command is, it just makes sure that nothing except stopping the script happens).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spell ==&lt;br /&gt;
&lt;br /&gt;
The Spell class combines spell information from spell-list.xml and character information from infomon to greatly simplify basic spell handling.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].cast&lt;br /&gt;
Spell[503].cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to cast spell given using info from spell-list.xml&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].affordable?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Useful for knowing if you have enough mana for spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].active?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false if spell is active&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will return true if the spell is currently active on yourself, false if it is not.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].timeleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].timeleft&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns amount of time left as value&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_cast&lt;br /&gt;
Spell[503].force_cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force cast spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_channel() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_channel&lt;br /&gt;
Spell[503].force_channel(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force channel spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_evoke() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_evoke&lt;br /&gt;
Spell[503].force_evoke(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force evoke spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_incant() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_incant&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force incant spell&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
&lt;br /&gt;
=== active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.active?(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.active?(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.active?(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.active?(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.active?(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the given effect is currently active. Spells can be referenced by number or name, unless the spell does not have a number, then must be referenced by name. Name can only be used when FLAG ShowSpellName is set to ON.&lt;br /&gt;
&lt;br /&gt;
=== time_left ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.time_left(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.time_left(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.time_left(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.time_left(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.time_left(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; time left in minutes as a floating number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to determine how much time is left on a given effect.&lt;br /&gt;
&lt;br /&gt;
== Weapon ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.known?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.known?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.affordable?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.available?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.available?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the weapon skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== CMan ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.known?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.known?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.affordable?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.available?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.available?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the cman skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== Shield  ==&lt;br /&gt;
&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.known?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.known?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.affordable?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.available?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.available?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the shield skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
=== use ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.use(name, target = &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, &amp;quot;Wyrom&amp;quot;)&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, 9000)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to use the shield skill given on target specified. Target can be a GameObj, integer, or string. If no target given, will issue command with no target, relying on game-engine targeting.&lt;br /&gt;
&lt;br /&gt;
== Armor ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Armor.known?(name)&lt;br /&gt;
&lt;br /&gt;
Armor.known?(&amp;quot;Armor Blessing&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the armor skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
== Feat ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.known?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.known?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.affordable?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.available?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.available?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the feat skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== GameObj ==&lt;br /&gt;
&lt;br /&gt;
The GameObj class tracks various objects in the same room as you, and makes their game id, name, noun, status, and contents available to you.&lt;br /&gt;
&lt;br /&gt;
=== GameObj arrays ===&lt;br /&gt;
&lt;br /&gt;
Several arrays are exposed by GameObj. They include:&lt;br /&gt;
&lt;br /&gt;
==== GameObj.inv ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the things you are wearing.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.pcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the other players in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.npcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the npcs in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.loot ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the loot in the room, or nil if there is none.  For the purposes of this function, loot is anything that Simu hasn&#039;t tagged with monster bold.  Any exits or anything that shows up in the &amp;quot;You also see&amp;quot; line will be included.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing any links found in the room description, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.dead ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the dead &#039;&#039;&#039;npcs&#039;&#039;&#039; in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.fam_pcs, GameObj.fam_npcs, GameObj.fam_loot, GameObj.fam_room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class.  Similar to the ones above, except for your familiar&#039;s room, and these don&#039;t stay up-to-date without having your familiar look at the room.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.targets ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the hostile npcs in the room, the mobs, the monsters, whatever you want to call them.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.target ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing the current target you have selected, if any.&lt;br /&gt;
&lt;br /&gt;
=== Finding game objects with GameObj ===&lt;br /&gt;
&lt;br /&gt;
Now that you&#039;ve got an object or array of objects, here&#039;s what to do with them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
target = GameObj.npcs.find { |npc| npc.status.nil? }&amp;lt;br&amp;gt;&lt;br /&gt;
if target&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;fput &amp;quot;attack ##{target.id}&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This example shows (in an over-simplified way) the most common use of the GameObj class.   First, &amp;quot;GameObj.npcs&amp;quot; gives an array of all the npcs in the room.  Then, &amp;quot;.find&amp;quot; searches each item in that array.  For each item in the array, the code inside the brackets following &amp;quot;GameObj.npcs.find&amp;quot; is run, and &amp;quot;npc&amp;quot; represents the item it&#039;s currently looking at.  The code inside the brackets acts like an if statement, and as soon as it is true, &amp;quot;target&amp;quot; is assigned the npc object.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;status&amp;quot; method applies to npcs and pcs (using it on others won&#039;t give an error, but it will always return nil).  The status is basically whatever shows up after &amp;quot;that appears&amp;quot;, &amp;quot;that is&amp;quot;, or &amp;quot;who is&amp;quot;.  So, if you also see a kobold that appears stunned, its status will be &amp;quot;stunned&amp;quot;.  In the example, we&#039;re looking for an npc with a nil status, because that represents an npc that&#039;s standing and not stunned, dead, prone, etc.  The game never shows &amp;quot;You also see a kobold that is standing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now suppose there&#039;s twenty kobolds in the room, and only the fifteenth one is standing.  How can you be sure you attack the standing one?  This is where the kobold&#039;s id comes in handy.  Simu assigns an id to almost everything in the game.  Stormfront uses these ids when you click on links.  For the most part, these ids can be used just like nouns.  &amp;quot;attack ##{target.id}&amp;quot; will attack the npc you found earlier, even if other npcs are walking in and out of the room.  The double pound sign is not a typo.&lt;br /&gt;
&lt;br /&gt;
=== Other GameObj methods ===&lt;br /&gt;
&lt;br /&gt;
==== GameObj.containers ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a Hash of ids (as Strings) mapping to arrays of objects of the GameObj class. Each id represents an accessible container &#039;&#039;&#039;that GameObj is aware of&#039;&#039;&#039; with the given id. The id maps to an array of objects of the GameObj class representing that container&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
For a container to be added to the Hash, GameObj must first be made aware of its contents by some sort of interaction with the container, looking in it, opening it, and more. (Someone who knows the specific cases, please add detail!)&lt;br /&gt;
&lt;br /&gt;
==== GameObj.right_hand, GameObj.left_hand ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing whatever is in your hand.  Currently, if there is nothing in your hand, it still returns a GameObj where the name is &amp;quot;Empty&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Useful and hopefully self-explanatory methods to use once you have the right GameObj object====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
.id&amp;lt;br&amp;gt;&lt;br /&gt;
.name&amp;lt;br&amp;gt;&lt;br /&gt;
.noun&amp;lt;br&amp;gt;&lt;br /&gt;
.status&amp;lt;br&amp;gt;&lt;br /&gt;
.contents&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
&lt;br /&gt;
The Script class deals with and runs scripts.&lt;br /&gt;
&lt;br /&gt;
=== Script.start ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.run ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script and waits while it runs. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.list, Script.running, Script.hidden ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; An array of Script objects for every running/visible/invisible script.&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; This is not the same as ;list. The Script class does not have a defined to_s method.&lt;br /&gt;
&lt;br /&gt;
=== Script.running? ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether a script is running (paused or not)&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
&lt;br /&gt;
=== Script.pause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was paused successfully, false otherwise (script not running or already paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.unpause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was unpaused successfully, false otherwise (script not running or was not paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.paused? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script is running and paused, false otherwise&lt;br /&gt;
&lt;br /&gt;
=== Script.exists? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script with the given name is in the user&#039;s script directory, false otherwise. extension is optional.&lt;br /&gt;
&lt;br /&gt;
=== Script.log ===&lt;br /&gt;
Appends to the script&#039;s .log file in the lich/log directory.&lt;br /&gt;
&lt;br /&gt;
=== Script.db ===&lt;br /&gt;
Gets you a sqlite3 database for your script, of type SQLite3::Database (http://www.rubydoc.info/github/luislavena/sqlite3-ruby/SQLite3/Database)&lt;br /&gt;
&lt;br /&gt;
=== Script.version ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; Ruby Gem version&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and returns the current version in header of script as a Ruby Gem version&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;, &amp;quot;1.18.0&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and minimum required version&lt;br /&gt;
&lt;br /&gt;
== Global variables ==&lt;br /&gt;
&lt;br /&gt;
=== $PROGRAM_NAME ===&lt;br /&gt;
Ruby&#039;s global variable capturing current script -- in this case, the path to Lich.&lt;br /&gt;
&lt;br /&gt;
=== $frontend ===&lt;br /&gt;
Frontend detected by Lich.&lt;br /&gt;
&lt;br /&gt;
=== $lich_dir ===&lt;br /&gt;
Path of the current Lich directory.&lt;br /&gt;
&lt;br /&gt;
=== $login_time ===&lt;br /&gt;
Local time the current Lich session started.&lt;br /&gt;
&lt;br /&gt;
=== $script_dir ===&lt;br /&gt;
Path to directory Lich is using to get scripts.&lt;br /&gt;
&lt;br /&gt;
=== $version ===&lt;br /&gt;
Lich version.&lt;br /&gt;
&lt;br /&gt;
== Builtin Lich shortcuts ==&lt;br /&gt;
&lt;br /&gt;
These automatically perform multiple checks or commands.&lt;br /&gt;
&lt;br /&gt;
=== take ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
take &amp;quot;box&amp;quot;, &amp;quot;coffer&amp;quot;, &amp;quot;ruby&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (the last line the &#039;fput&#039; command saw)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Picks up every item listed and puts each one in turn into your &#039;lootsack:&#039; setting by issuing the commands with fput.&lt;br /&gt;
&lt;br /&gt;
=== fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs a &#039;look&#039; and takes/puts away all items on the ground that aren&#039;t listed in your &#039;excludeloot:&#039; setting.  Return value is the last line from the game.&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; GS now natively includes the command LOOT ROOM with a similar effect.&lt;br /&gt;
&lt;br /&gt;
=== Lich.fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich.fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;fetchloot&#039; in all ways except only the items listed in your &#039;treasure:&#039; setting are fetched.&lt;br /&gt;
&lt;br /&gt;
=== walk ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
walk&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Moves in a random cardinal direction (what&#039;s seen in the &#039;Obvious exits:&#039; line), storing the direction moved, and returning &#039;true&#039; if there is a critter in the room or &#039;false&#039; if there aren&#039;t any NPCs in the room.  The stored direction will not be among the random directions chosen the next time the &#039;walk&#039; command is used (unless it hits a dead-end, then it will backtrack the way it came).&lt;br /&gt;
&lt;br /&gt;
=== run ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
run if not health(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will execute a &#039;walk&#039; command repeatedly until it enters a room with no critters, at which point it returns and the script will pick up execution on the next line (does not continue to run away).&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; wander.lic is a popular and sophisticated auto-moving creature-finding script.&lt;br /&gt;
&lt;br /&gt;
=== watchhealth ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50) { echo &amp;quot;Uh, your health is below 50...&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50, proc_object)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; nothing useful&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns immediately so that the calling script continues to run as normal, and while it does, monitors your health.  If it falls below the number you give it, executes the block you passed to it.  Only does this once -- if you want it to repeat as the script executes (be careful, chances are your health will still be below 50 after the block executes once) then pass watchhealth a proc object that includes a line registering itself over again (as in, a proc that includes a &#039;watchhealth(#, self)&#039; thingie).  If your health never falls below the number you give it, then nothing happens; once the script ends, it stops watching.&lt;br /&gt;
&lt;br /&gt;
== goto ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
goto &amp;quot;MainLabel&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; (has no return value, the current execution stack is discarded and the jump never returns)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to standard Wizard/SF scripts; the label to jump to has to be in quotes, and it is (kinda sorta) case insensitive.  The label declaration itself (the LABEL: line) MUST NOT be in quotes: only the name of the label when you use the goto command. If there are two labels with the same name but different capitalizations, the goto command will attempt to be case sensitive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[The Lich]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*The initial content of this article was copied from the scripting documentation posted by Tillmen which formerly resided at http://lichproject.com/&lt;br /&gt;
&lt;br /&gt;
[[category:Scripts]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221246</id>
		<title>Lich:Software/Scripting reference</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221246"/>
		<updated>2024-06-24T13:49:07Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: /* variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3rd-party}}&lt;br /&gt;
== variable ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
variable[1]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
#contains all variables passed to a script in a single string&lt;br /&gt;
script.vars[0]&lt;br /&gt;
&lt;br /&gt;
#a space separated list of the values passed to the script exist in index 1 through n where n is the number of space separated items&lt;br /&gt;
script.vars[1..n]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array, possibly empty&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; Script.current.vars&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s an array containing the command line variables the user entered when starting the script (begins at variable[1], unlike standard arrays; as is the behavior of Wizard, variable[0] is the entire line the user entered).&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Hi there!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Displays &#039;[script_name: the string it was given]&#039; in the game window; if given multiple strings it echoes each string on its own line.  If it&#039;s given no arguments, it simply prints a blank line without the &#039;[script_name: ]&#039; business.&lt;br /&gt;
&lt;br /&gt;
== respond ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;I&#039;m a string to display&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;so on and so on&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Just like the &#039;echo&#039; command, but does not display the script name.  Since it&#039;s possible for Lich to be running two dozen scripts at the same time, it can get a little hard to know which script is saying what unless they use the &#039;echo&#039; command and not the &#039;respond&#039; command.  Still, &#039;echo&#039; can be a bit ugly for printing tables and whatnot, so use this instead if desired.  The return value is how many characters the last string displayed contained.&lt;br /&gt;
&lt;br /&gt;
== pause ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;2s&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;3m&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;1d&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses for one second.  If given an integer, pauses for that many seconds.  If given a string (as in the examples above), extracts the number to pause for from the string and pauses for that many seconds/hours/days (yeah, well, I was bored, so why not make it do days too).  Return value is the number of seconds it paused for.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
Sending output to the game as though typed by the player.&lt;br /&gt;
&lt;br /&gt;
=== put ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
put &amp;quot;look&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was sent&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard.&lt;br /&gt;
&lt;br /&gt;
=== fput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;, &amp;quot;are now in a defensive stance&amp;quot;, &amp;quot;can&#039;t do that while dead&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was accepted as meaning the action succeeded (see below)&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; forceput&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s named &#039;forceput&#039;  because originally it was intended to be used only infrequently, but as it&#039;s turned out there are very few times when &#039;put&#039; is preferable.  This command will continue to &#039;put&#039; whatever string you give it, until it receives a line from the game that it doesn&#039;t recognize as one of the common &amp;quot;command rejected&amp;quot; responses (for example, &amp;quot;You can&#039;t do that while entangled in a web&amp;quot;, &amp;quot;...wait x seconds&amp;quot; (RT), &amp;quot;Wait x seconds.&amp;quot; (cast RT), &amp;quot;Sorry, you may only type ahead x lines&amp;quot;, &amp;quot;You&#039;ll have to stand up first&amp;quot; (stands and reattempts), etc).  If stunned, it will wait until you&#039;re no longer stunned to reattempt; if in RT (hard or soft), will wait &#039;x&#039; seconds before reattempting.  If you need to stand, it will do so and retry immediately.  If it causes a type ahead error, it will pause for 1 second and then reattempt.  This has a very high rate of success, but it is definitely not infallible -- it only checks the next line received from the game, and there&#039;s no guarantee the next line from the game has anything at all to do with what the &#039;fput&#039; command just sent.  Because of this it can often fail to realize the command wasn&#039;t really successful, particularly if the user is doing a lot of things at once.  If given more than one string, the first string is taken as the command to send to the game, and all other strings are used as what to accept as meaning the action succeeded.  BE CAREFUL with this behavior!  It can very infrequently be extremely useful, but if not used cautiously, it can easily cause a script to mistakenly repeat an action many times in *very* rapid succession (which with CoL signs for instance can very easily kill you in less than a second flat).&lt;br /&gt;
&lt;br /&gt;
=== multifput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multifput &amp;quot;stance offensive&amp;quot;, &amp;quot;incant 910&amp;quot;, &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (return value of the last &#039;fput&#039; executed)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple strings and executes an &#039;fput&#039; command for every one sequentially.&lt;br /&gt;
&lt;br /&gt;
=== dothis ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothis &amp;quot;action here&amp;quot;, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to fput, but will continue to try the action until a success string is matched&lt;br /&gt;
&lt;br /&gt;
=== dothistimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothistimeout &amp;quot;action here&amp;quot;, time, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;dothis&#039;, but if a success isn&#039;t seen in the given amount of time, returns a value of &#039;nil&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
move &#039;northwest&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as the Wizard &#039;move&#039; command, but it will usually compensate for things like type ahead errors, RT, currently stunned, etc.; will also stand and re-attempt the movement if it&#039;s detected to be necessary.  Returns &#039;true&#039; if the move was executed properly, &#039;false&#039; if it wasn&#039;t able to be performed (which is very rare due to the move command&#039;s error compensation measures).&lt;br /&gt;
&lt;br /&gt;
=== multimove ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multimove &#039;nw&#039;, &#039;ne&#039;, &#039;go hole&#039;, &#039;climb stairs&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple directions to move in and executes the &#039;move&#039; command for each one.  Returns the value of the last &#039;move&#039; command executed (true or false).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
&lt;br /&gt;
This is core line-by-line handling of full lines of input sent by the game to the player. For more complex filtering and handling, see &amp;quot;match&amp;quot; and &amp;quot;wait&amp;quot; sections.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches the next un-checked line of game data (while a script is running, it is given every game line, and these lines are available for a script to check/use at its leisure).&lt;br /&gt;
&lt;br /&gt;
=== regetall ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
regetall &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns an array of all game lines (since login) that match as having contained the given string (absolutely every single line since you logged in, Lich remembers them all).  If a script is set as receiving the status data that doesn&#039;t show in the game window, those lines are also matched for; if the script is only being fed normal game data, that&#039;s the only history this command checks.  If no matching lines were found, returns &#039;nil&#039; (which is false in a logical comparison).  As well as returning the matches, it also adds them to the script&#039;s game data stack so that subsequent &#039;get&#039; commands will fetch them in order.  The string to match for is actually optional, and if omitted, all lines are considered &#039;matching&#039;.&lt;br /&gt;
&lt;br /&gt;
=== reget ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 5, &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to &#039;regetall&#039; in behavior, but it only checks the current RAM cache (every 2 minutes, Lich&#039;s &#039;memory&#039; of game data is emptied out of RAM and stored in a temporary file on the hard disk so that the program doesn&#039;t take up more resources than is necessary -- these files are deleted when the program closes); it also takes an optional integer, which represents how many game lines back to check (&#039;reget 5&#039; would scan the last 5 lines from the game that are still in RAM).  If the integer is omitted, will scan the entire existing RAM buffer (again, cleared every 2 minutes).&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (possible for the return array to be empty, but unlikely)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Empties ALL unchecked input to the script from ALL queues (normal game stack, unique script stack and upstream stack); the return value is whatever was in the game data stack before it was cleared (which could be nothing, in which case the return is an empty array).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wait ==&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard; waits until a line from the game is seen.  Returns the line (in actuality this command simply clears the game stack and executes a &#039;get&#039;).&lt;br /&gt;
&lt;br /&gt;
=== waitrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in roundtime for.  Return value is how many seconds paused.  Waits until you&#039;re in roundtime if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitrt&#039;, but does not wait until you&#039;re in roundtime and as such will not hang (but will not wait for any roundtime if the game hasn&#039;t sent that you&#039;re in roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in RT for.  Return value is how many seconds paused.  Waits until you&#039;re in RT if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitcastrt&#039;, but does not wait until you&#039;re in cast roundtime and as such will not hang (but will not wait for any cast roundtime if the game hasn&#039;t sent that you&#039;re in cast roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitcastrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitfor &amp;quot; just arrived.&amp;quot;, &amp;quot;More lines to waitfor if you desire&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Waits until a line from the game includes the string you gave it as an argument.  The return value is the complete string from the game (in the example used here, if Shaelun entered the room, the command would return &amp;quot;Shaelun just arrived.&amp;quot;).  &#039;waitfor&#039; is case insensitive (capital letters are considered matches even if the string it was given didn&#039;t have a capital letter there).&lt;br /&gt;
&lt;br /&gt;
=== wait_while ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while &amp;quot;You do not have full health: waiting until you do.&amp;quot; { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The script will wait while the given code block has a logical value of &#039;true&#039;, and will only continue on to the next line when/if the code block has a value of &#039;false&#039;.  If given the optional string to announce to the user, it will only display that string if it&#039;s going to be sitting there waiting for something -- if the command will not be waiting at all, it doesn&#039;t display the string to the user.  Note that there&#039;s no limit to how long/complicated the code block can be; it was designed for very short logical comparisons like the example above, but need not be used that way.&lt;br /&gt;
&lt;br /&gt;
=== wait_until ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_until { checkmana(50) }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical in all ways to &#039;wait_while&#039;, but does the opposite (waits UNTIL the given code block is true, not WHILE it&#039;s true).  Also takes the optional string if desired.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Match ==&lt;br /&gt;
&lt;br /&gt;
Wizard-style &amp;quot;match&amp;quot; commands&lt;br /&gt;
&lt;br /&gt;
=== matchtimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchtimeout 5, &amp;quot;string to watch for&amp;quot;, &amp;quot;another&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but if a match isn&#039;t seen in the given amount of time, returns a value of &#039;false&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== matchwait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If used without any arguments, 100% identical to Wizard &#039;matchwait&#039; commands.  You can optionally give it arguments, in which case it acts identically to &#039;waitfor&#039; in all ways except one: matches are case sensitive (for instance, matchwait &amp;quot;shaelun&amp;quot; will not match if the word &amp;quot;Shaelun&amp;quot; is seen from the game).&lt;br /&gt;
&lt;br /&gt;
=== match ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &#039;label&#039;, &#039;line to watch for&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &amp;quot;gameline&amp;quot;, &amp;quot;gameline&amp;quot;, &amp;quot;some other gameline&amp;quot;, &amp;quot;so on and so forth&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given exactly two arguments, identical to the Wizard &#039;match&#039; command.  If given *any* other number of arguments, it&#039;s a case sensitive version of &#039;waitfor&#039; but instead of returning the entire matching game line, it returns only the portion of the string you asked it to watch for.&lt;br /&gt;
&lt;br /&gt;
=== matchfind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfind &amp;quot;A ? attacks you!&amp;quot;, &amp;quot;A ? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
person, weapon = matchfind &amp;quot;? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string or an array&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but returns only the portion of the line where the question mark(s) are.  If given multiple question marks, returns an array containing the portions of the string (in order).  Note that if you assign multiple variables to equal a single array, the array&#039;s elements are used in order and assigned to each variable (if there are fewer elements in the array than there are variables being assigned, variables receive a value of &#039;nil&#039;, and if there are more elements in the array than there are variables being assigned, the last variable is assigned an array with the remaining values).  This is why the above usage example works (person, weapon =).&lt;br /&gt;
&lt;br /&gt;
=== matchfindword ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
weapon = matchfindword &amp;quot;Shaelun swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (single word)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;matchfind&#039;, but only looks for a single word where the question marks are.  Note that a line won&#039;t match if more than one word is where the question mark is (in the above example, if the weapon were a &amp;quot;broadsword&amp;quot; it would match, but if it were a &amp;quot;sonic hammer of kai&amp;quot; there would be no match).&lt;br /&gt;
&lt;br /&gt;
=== matchfindexact ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfindexact &amp;quot;? just arrived.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Version of matchfind meant for use in special cases; matchfind is very forgiving and will return and match anything (case insensitively) -- matchfindexact is very strict.  It is case sensitive and cares about things like spaces, word boundaries (partial pieces of a word will not match, only whole words), the case of the string it&#039;s looking for, etc..  Use it if you need to use matchfind and want to make sure only a very specific line matches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Room ==&lt;br /&gt;
&lt;br /&gt;
=== checkarea ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns the geographical area of your current room, or if given a string to check for, returns true or false based on whether your current area matches the string or not.&lt;br /&gt;
&lt;br /&gt;
=== checkroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom &amp;quot;table&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea, but uses the room title instead of the geographical area.&lt;br /&gt;
&lt;br /&gt;
=== checkpaths ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths &#039;nw&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the current &#039;Obvious exits:&#039; directions if given no argument, or true/false based on whether all arguments given are currently available as exits or not.&lt;br /&gt;
&lt;br /&gt;
=== checkoutside ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkoutside&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
outside?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; outside?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Really simple, just returns true if you&#039;re outside, false if you aren&#039;t.  Probably only of use to rangers writing their own spellup scripts or something, but either way: it&#039;s available if you have a use for it.&lt;br /&gt;
&lt;br /&gt;
=== checknpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs&lt;br /&gt;
	fput &amp;quot;attack&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs &amp;quot;big monster of doom&amp;quot;, &amp;quot;small monster of doom&amp;quot;&lt;br /&gt;
	put &amp;quot;Oh noes!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
	for npc in checknpcs&lt;br /&gt;
		put &amp;quot;greet #{npc}&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, a string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If checknpcs is used without giving it npcs to check for, it returns an array of strings coresponding to the noun of each npc in the room, or nil if there are no npcs (does not return an empty array, so you can use &amp;quot;if checknpcs&amp;quot;).  If chekcnpcs is given npcs to look for, it returns a string of the first matching npc it finds, or nil if none matched (any string evaluates to true, only nil and false evaluate to false in an if statement).&lt;br /&gt;
&lt;br /&gt;
=== checkpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;checknpcs&#039;, but with the players currently present.&lt;br /&gt;
&lt;br /&gt;
=== checkloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (or an empty array if no items)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the items currently in the room.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Familiars ==&lt;br /&gt;
&lt;br /&gt;
=== checkfamarea/checkfamroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea/checkroom, but check your familiar&#039;s current location instead of yours (only in Wizard and only if you have a familiar).&lt;br /&gt;
&lt;br /&gt;
=== checkfampcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkfamnpcs&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to the above two, but tracks for your familiar&#039;s room instead.  Not available in SF as of v3.06.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
&lt;br /&gt;
=== checkpoison ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpoison&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkdisease.&lt;br /&gt;
&lt;br /&gt;
=== checkdisease ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdisease&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkpoison.&lt;br /&gt;
&lt;br /&gt;
=== checkfried ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfried&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if you&#039;re fried, false if not.&lt;br /&gt;
&lt;br /&gt;
=== checkmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind(2)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding level of exp in your head, with 0 being &#039;clear as a bell&#039;, 1 being &#039;fresh and clear&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
=== check_mind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding percentage of exp in your head.&lt;br /&gt;
&lt;br /&gt;
=== percentmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind(80)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns an integer ranging from 0-100 representing the percentage of exp in your head. If given an integer, returns true or false if you have at least that percentage of experience.  Both saturated and fried show up as 100 percent - a user interested in distinguishing between the two can add a checksaturated or saturated? qualifier to their percentmind check.&lt;br /&gt;
&lt;br /&gt;
=== checkright/checkleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkright&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkleft &amp;quot;broadsword&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; righthand?/lefthand?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Give them a string and will return true/false if it matches what you&#039;re holding, or the last word in the item name if used by itself.  If your hands are currently empty, it will return &#039;nil&#039; (identical to &#039;false&#039; in a logical comparison) regardless of whether it was given an argument or not.  This behavior can be useful to make absolutely certain a &#039;take&#039; command succeeded, for instance.&lt;br /&gt;
&lt;br /&gt;
=== checkstance ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance &amp;quot;offensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; stance&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; With no arguments, returns the string representing your current stance. With a numerical or string argument, returns a boolean flag indicating if the current stance matches the given string. For string based comparisons, this will correctly test against the stance values possible if using [[Combat Mastery]] or [[[[Warrior_Tricks#Stance_Perfection|Stance Perfection]]]], while integer based arguments will perform a precise comparison.&lt;br /&gt;
&lt;br /&gt;
=== check(thing) ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstanding&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;spirit defense&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdead&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; mostly true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkstanding; checknotstanding; checksitting; checkprone; checkkneeling/kneeling?; checkprep/prepped?; checkmind; checkgrouped/checkjoined/joined?; checkwebbed/webbed?; checkstunned/stunned?; checkdead/dead?; checkhidden/checkhiding/hidden/hiding?; checkname/myname?; checkspell/checkactive/active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Most are true if you are (checkstunned for example), false if you aren&#039;t; they all follow the same basic behavior as the above-documented &#039;check&#039; commands.&lt;br /&gt;
&lt;br /&gt;
=== checkname ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; string or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; True/false if given a string and the names match, or just returns the character name if given no arguments.&lt;br /&gt;
&lt;br /&gt;
=== checkstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false or an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Only in StormFront (there is no auto-updated stamina tag in Wizard).  Given no arguments, returns your current stamina.  Given a number, returns true/false based on whether you have at least or more than that number.&lt;br /&gt;
&lt;br /&gt;
=== checkrt / checkcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; value of roundtime&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a value of how much roundtime left. Useful for IF statements.&lt;br /&gt;
&lt;br /&gt;
=== checkmana/checkhealth/checkspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmana 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; identical as above&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; health, health?, mana, mana?, spirit, spirit?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkstamina.&lt;br /&gt;
&lt;br /&gt;
=== maxhealth/maxstamina/maxmana/maxspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (checkhealth &amp;lt; maxhealth)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns your maximum health/spirit/stamina/mana as an integer (class Fixnum).  Takes no arguments.&lt;br /&gt;
&lt;br /&gt;
=== percenthealth/percentmana/percentspirit/percentstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (percenthealth &amp;lt; 90)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an integer (0-100) representing the percentage of your current health/mana/whatever in relation to your max.&lt;br /&gt;
&lt;br /&gt;
=== checkspell ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;elemental defense i&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if the spell you give it is active, false if it isn&#039;t (only available if you use the infomon script, since that&#039;s what keeps track of this).&lt;br /&gt;
&lt;br /&gt;
=== Wounds ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.torso&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.neck&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.lhand&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Variations:&#039;&#039;&#039; Wounds.head; Wounds.neck; Wounds.abs; Wounds.lhand; Wounds.rhand; Wounds.larm; Wounds.rarm; Wounds.chest; Wounds.back; Wounds.rleg; Wounds.lleg; Wounds.nerves&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the current wound rank (numerically).  If I had &#039;deep gashes and serious bleeding&#039; on my chest, Wounds.chest would return the integer 3.  If I had no wound there, it would return 0.&lt;br /&gt;
&lt;br /&gt;
=== Scars ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.abs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.nerves&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.rleg&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wounds above, but for scars instead of wounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lich toggles ==&lt;br /&gt;
&lt;br /&gt;
=== # QUIET ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;amp;#35; QUIET&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; n/a&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This is a special directive that must be a Ruby comment placed as above in the first line of the Lich script. Lich will ordinarily bookend the lifetime of a script with &amp;lt;code&amp;gt;--- Lich: (scriptname) active.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--- Lich: (scriptname) has exited.&amp;lt;/code&amp;gt; This option omits those lines, allowing a script to start and exit silently.&lt;br /&gt;
&lt;br /&gt;
=== hide_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
hide_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;hidden&#039; setting.  When this setting is on (defaults to off), a script will not be listed when the user types ;list. It will still show up under ;list all. There is no way to prevent a script from being being displayed in ;list all.&lt;br /&gt;
&lt;br /&gt;
=== i_stand_alone ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
i_stand_alone&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off.  Removes a script from ALL data feeds; a script using this will receive no game lines and no unique data whatsoever (unless they toggle it back off).  If Lich can more or less ignore that a script exists and not bother with keeping its data stacks up-to-the-second with game data and anything else it&#039;s requested, then a script has virtually no overhead whatsoever (meaning any resources it requires come only from what it does independantly).  Useful for some scripts who have no need to eat up resources being fed game data (such as dict.lic).&lt;br /&gt;
&lt;br /&gt;
=== no_kill_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_kill_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no kill all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;kill all.  A script with this set to on must be killed specifically (by typing ;kill [script], or just ;kill).  There is no way to prevent a script from being killed when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== no_pause_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_pause_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no pause all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;pause all.  A script with this set to on must be killed specifically (by typing ;pause [script], or just ;pause).  There is no way to prevent a script from being paused when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== silence_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
silence_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;silenced&#039; setting.  A script with this on will not have commands it sends to the game echoed to your game window.  A script run in SAFE mode cannot change this setting (attempting to do so will generate a warning and otherwise have no effect).&lt;br /&gt;
&lt;br /&gt;
===status_tags===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
status_tags&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039;Tells Lich to send this script XML tags rather than stripping them, or, if already doing so, tells Lich to go back to stripping the XML. If called with the argument &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;, switches to that setting and echoes that it has done so.&lt;br /&gt;
&lt;br /&gt;
=== toggle_echo ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;suppress echo&#039; setting.  A script with this on will not execute any &#039;echo&#039; commands, but will silently ignore them instead; it&#039;s designed more for people who don&#039;t want clutter in their game window but still want to make use of an existing script.  Commands sent to the game are still echoed to the game window.&lt;br /&gt;
&lt;br /&gt;
=== toggle_unique ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_unique&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; When a script is set as being &#039;unique&#039;, it does not receive normal game data; instead it only receives what the user sends to it by typing ;send to (script) (message).  This is of use if a script wants to only act on a user&#039;s input or has no use for game data (it provides a method for scripts to make sure game data doesn&#039;t accidentally get recognized as a user&#039;s input, and also serves to prevent scripts from slowly eating away at system resources because the script never checks or clears its data buffer -- see the &#039;clear&#039; command for more on that).&lt;br /&gt;
&lt;br /&gt;
=== toggle_upstream ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_upstream&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This must be enabled to allow the script to intercept what you send to the game. See the separate upstream section for more detail.&lt;br /&gt;
&lt;br /&gt;
== Lich::Util ==&lt;br /&gt;
=== issue_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.issue_command(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end: true, timeout: 5, silent: nil, usexml: true, quiet: false)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.issue_command(&#039;tattoo menu&#039;, /List of flash tattoos available \(Page \d+\):/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture the returning output from the begging start_pattern(regex) until the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. usexml determines whether the start/end pattern is matching against the xml feed or plain txt feed. quiet flag determines whether the output is squelched or shown to the front end. The only required values needed are command and start_pattern. Everything else has default values that can be used or changed.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command_xml() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command_xml(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command_xml(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture XML buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. end_pattern, include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command(command, start_pattern, end_pattern, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/, end_pattern = /Type TATTOO MENU again in the next minute to display the next group of flash tattoos\./)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== silver_count() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.silver_count(timeout = 3)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.silver_count&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer of how much silver you have&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; useful to know the amount of silver one has on themselves.&lt;br /&gt;
&lt;br /&gt;
== Lich::Messaging ==&lt;br /&gt;
&lt;br /&gt;
=== monsterbold ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.monsterbold(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.monsterbold(&amp;quot;This text I want to monsterbold&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with proper monsterbold tags depending on FrontEnd used&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will take the string given and return it with monsterbold before/after and xml_encode the msg.&lt;br /&gt;
&lt;br /&gt;
=== msg_format ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg_format(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg_format(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with start and end tags to change the color in the FrontEnd&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the string given with color coding based on the type chosen. Current options are as follows:&lt;br /&gt;
** error, yellow, bold, monster, creature&lt;br /&gt;
** warn, orange, gold, thought&lt;br /&gt;
** info, teal, whisper&lt;br /&gt;
** green, speech, debug, light green&lt;br /&gt;
&lt;br /&gt;
=== msg ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; sends the string given to the client encoded for the type given.&lt;br /&gt;
&lt;br /&gt;
=== stream_window ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.stream_window(msg, window)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.stream_window(&amp;quot;Let&#039;s send this to a different window!&amp;quot;, &amp;quot;familiar&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; send the string to the various stream window. Currently supports the familiar, speech, thoughts and loot window.&lt;br /&gt;
&lt;br /&gt;
=== xml_encode ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.xml_encode(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.xml(&amp;quot;Let&#039;s encode some text!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an xml encoded text&lt;br /&gt;
&lt;br /&gt;
=== mono ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.mono(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.mono(&amp;quot;Let&#039;s mono some code!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; force mono formatted string to be displayed properly using XML output class of mono&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
Settings are specific to the script itself. For example, a setting with the name &amp;quot;bank&amp;quot; in fetch_turnips.lic have no effect on the &amp;quot;bank&amp;quot; setting in buy_cheese.lic.&lt;br /&gt;
&lt;br /&gt;
=== Settings.load ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.load&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings[&amp;quot;SettingName&amp;quot;] ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings[&amp;quot;SettingName&amp;quot;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.save ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.save&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; either a hash representing your settings, or &#039;nil&#039; if no settings for the script exist&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Note that Settings.clear will erase all settings, but it will NOT save that on its own.  Issue a Settings.save command after the Settings.clear if you want that script&#039;s settings reset permanently.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upstream ==&lt;br /&gt;
&lt;br /&gt;
=== upstream_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same thing as &amp;quot;get&amp;quot; except it fetches the last line the user sent to the game.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_get? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to get the last line the user sent to the game, but does not wait for a line to be sent.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_waitfor &amp;quot;climb stairs&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &amp;quot;waitfor&amp;quot; but only checks the upstream commands (the commands sent to the game by the user).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interscript communication ==&lt;br /&gt;
&lt;br /&gt;
=== running? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
running? &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns true/false if the given script is active or not.&lt;br /&gt;
&lt;br /&gt;
=== send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The target script will be sent a string exactly as though it came from the game.  Returns true if successful, false if the script wasn&#039;t found to be active.&lt;br /&gt;
&lt;br /&gt;
=== send_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_scripts &amp;quot;To the running scripts, this line looks identical to one that came from the game&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but sends a line to all scripts instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== start_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;heal&amp;quot;, [ &amp;quot;shaelun&amp;quot;, &amp;quot;adhara&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;test  in the game entry box.  Returns &#039;true&#039; if the script was successfully started, &#039;false&#039; if for any reason it couldn&#039;t be found/started.  The optional second argument (which must be an array, as seen in the above example) can be used to simulate arguments to the script (the above example would simulate the user typing:  ;heal shaelun adhara).&lt;br /&gt;
&lt;br /&gt;
=== start_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Executes a &amp;quot;start_script&amp;quot; command for every argument given.  Note that you cannot give a script arguments when using this command.&lt;br /&gt;
&lt;br /&gt;
=== pause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses the script using the command.  If given a string, pauses the script who&#039;s name matches that string; if the script is not currently active, returns &#039;false&#039; (&#039;true&#039; if the script was paused successfully).&lt;br /&gt;
&lt;br /&gt;
=== unpause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unpause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses the script you give it.  Note that because of the way the &#039;script is paused&#039; state is handled, it&#039;s conceivable for a script that was paused to actually still be executing commands internally for a brief time -- a script isn&#039;t actually &amp;quot;stopped dead in its tracks&amp;quot; until it attempts to interact with the game in some way (by fetching game data, sending game data, or by attempting a command that requires the script to be identified).  Since most commands identify a script (including this one), this command cannot unpause the script itself: when it attempts to unpause itself, it will be identified as being paused and will be halted where it is until it&#039;s unpaused by another script or the user (or killed).  When it is, it will be allowed to continue, and will then try to unpause itself (pointlessly, since it was just unpaused...).&lt;br /&gt;
&lt;br /&gt;
=== kill_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
kill_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; kill_scripts, stop_script, stop_scripts&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;kill test  in the game entry box and hitting enter; takes multiple scripts to kill.  If the script is not running, returns false; if the script was found to be active and was killed, returns true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique ==&lt;br /&gt;
&lt;br /&gt;
See [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more about the &#039;unique&#039; stack.&lt;br /&gt;
&lt;br /&gt;
=== unique_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches a line from the unique stack, as opposed to the game data stack ().&lt;br /&gt;
&lt;br /&gt;
=== unique_send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but the script will receive the string sent in its &#039;unique&#039; stack instead of its &#039;game data&#039; stack (see [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more info).&lt;br /&gt;
&lt;br /&gt;
=== unique_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_waitfor &amp;quot;continue&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039; but acts on the &#039;unique&#039; queue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exit handling ==&lt;br /&gt;
&lt;br /&gt;
=== exit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Ends the script.&lt;br /&gt;
&lt;br /&gt;
=== die_with_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
die_with_me &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If the given scripts are active at the time the script using this command ends (&amp;quot;exit&amp;quot;, finishes, gets killed by the user, or dies in error) they&#039;ll all be killed automatically (produces no notification to avoid clutter, but the scripts are indeed stopped).  The given scripts need not be running (or technically even exist) at the time this command is used -- it only updates the setting, and that setting isn&#039;t actually acted upon until the script is killed.&lt;br /&gt;
&lt;br /&gt;
=== before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { echo &amp;quot;Oh God, why have you killed me dear user...?!&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { Settings.save }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs the given actions right before the script exits.  Note nothing is done at the time this command is used (it simply sets what should be done just before the script is killed).  The block given to this command is actually wrapped up into a proc object (an object of the &#039;Procedure&#039; class), and scheduled to be run when the script is killed/exits (if multiple procs exist, they are executed sequentially in the order they were declared).  Because of this, the same &#039;binding&#039; principles that apply to other proc objects apply here (in a nutshell, if a variable didn&#039;t exist when you declared the &#039;before_dying&#039; stuff, then you can&#039;t use it in the &#039;before_dying&#039; code; if it did exist at the time though, you *can* use it, even if it doesn&#039;t really exist in the script when it dies).  Also note that if the command(s) take more than 0.5 seconds to complete, they&#039;re forcibly aborted and the script is killed regardless (this is to prevent a possibly bad situation where a script makes a mistake in the &#039;before_dying&#039; command and is refusing to stop executing due to errors).  Note that if a script is set as executing in SAFE mode, all the restrictions that normally apply will also apply in the &#039;before_dying&#039; code block (this cannot circumvent that, nor can anything else for that matter).&lt;br /&gt;
&lt;br /&gt;
=== undo_before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
undo_before_dying&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Clears any &#039;before_dying&#039; commands that have been used for the script.&lt;br /&gt;
&lt;br /&gt;
=== abort! ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
abort!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Immediately kills the script, bypassing any &#039;before_dying&#039; blocks that have been registered.  Probably won&#039;t ever be of use, but it&#039;s a way to make the calling script go away as fast as possible (note that it isn&#039;t any faster than the &#039;exit&#039; command is, it just makes sure that nothing except stopping the script happens).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spell ==&lt;br /&gt;
&lt;br /&gt;
The Spell class combines spell information from spell-list.xml and character information from infomon to greatly simplify basic spell handling.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].cast&lt;br /&gt;
Spell[503].cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to cast spell given using info from spell-list.xml&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].affordable?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Useful for knowing if you have enough mana for spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].active?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false if spell is active&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will return true if the spell is currently active on yourself, false if it is not.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].timeleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].timeleft&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns amount of time left as value&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_cast&lt;br /&gt;
Spell[503].force_cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force cast spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_channel() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_channel&lt;br /&gt;
Spell[503].force_channel(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force channel spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_evoke() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_evoke&lt;br /&gt;
Spell[503].force_evoke(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force evoke spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_incant() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_incant&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force incant spell&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
&lt;br /&gt;
=== active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.active?(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.active?(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.active?(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.active?(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.active?(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the given effect is currently active. Spells can be referenced by number or name, unless the spell does not have a number, then must be referenced by name. Name can only be used when FLAG ShowSpellName is set to ON.&lt;br /&gt;
&lt;br /&gt;
=== time_left ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.time_left(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.time_left(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.time_left(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.time_left(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.time_left(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; time left in minutes as a floating number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to determine how much time is left on a given effect.&lt;br /&gt;
&lt;br /&gt;
== Weapon ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.known?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.known?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.affordable?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.available?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.available?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the weapon skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== CMan ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.known?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.known?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.affordable?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.available?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.available?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the cman skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== Shield  ==&lt;br /&gt;
&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.known?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.known?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.affordable?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.available?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.available?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the shield skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
=== use ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.use(name, target = &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, &amp;quot;Wyrom&amp;quot;)&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, 9000)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to use the shield skill given on target specified. Target can be a GameObj, integer, or string. If no target given, will issue command with no target, relying on game-engine targeting.&lt;br /&gt;
&lt;br /&gt;
== Armor ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Armor.known?(name)&lt;br /&gt;
&lt;br /&gt;
Armor.known?(&amp;quot;Armor Blessing&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the armor skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
== Feat ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.known?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.known?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.affordable?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.available?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.available?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the feat skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== GameObj ==&lt;br /&gt;
&lt;br /&gt;
The GameObj class tracks various objects in the same room as you, and makes their game id, name, noun, status, and contents available to you.&lt;br /&gt;
&lt;br /&gt;
=== GameObj arrays ===&lt;br /&gt;
&lt;br /&gt;
Several arrays are exposed by GameObj. They include:&lt;br /&gt;
&lt;br /&gt;
==== GameObj.inv ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the things you are wearing.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.pcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the other players in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.npcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the npcs in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.loot ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the loot in the room, or nil if there is none.  For the purposes of this function, loot is anything that Simu hasn&#039;t tagged with monster bold.  Any exits or anything that shows up in the &amp;quot;You also see&amp;quot; line will be included.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing any links found in the room description, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.dead ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the dead &#039;&#039;&#039;npcs&#039;&#039;&#039; in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.fam_pcs, GameObj.fam_npcs, GameObj.fam_loot, GameObj.fam_room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class.  Similar to the ones above, except for your familiar&#039;s room, and these don&#039;t stay up-to-date without having your familiar look at the room.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.targets ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the hostile npcs in the room, the mobs, the monsters, whatever you want to call them.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.target ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing the current target you have selected, if any.&lt;br /&gt;
&lt;br /&gt;
=== Finding game objects with GameObj ===&lt;br /&gt;
&lt;br /&gt;
Now that you&#039;ve got an object or array of objects, here&#039;s what to do with them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
target = GameObj.npcs.find { |npc| npc.status.nil? }&amp;lt;br&amp;gt;&lt;br /&gt;
if target&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;fput &amp;quot;attack ##{target.id}&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This example shows (in an over-simplified way) the most common use of the GameObj class.   First, &amp;quot;GameObj.npcs&amp;quot; gives an array of all the npcs in the room.  Then, &amp;quot;.find&amp;quot; searches each item in that array.  For each item in the array, the code inside the brackets following &amp;quot;GameObj.npcs.find&amp;quot; is run, and &amp;quot;npc&amp;quot; represents the item it&#039;s currently looking at.  The code inside the brackets acts like an if statement, and as soon as it is true, &amp;quot;target&amp;quot; is assigned the npc object.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;status&amp;quot; method applies to npcs and pcs (using it on others won&#039;t give an error, but it will always return nil).  The status is basically whatever shows up after &amp;quot;that appears&amp;quot;, &amp;quot;that is&amp;quot;, or &amp;quot;who is&amp;quot;.  So, if you also see a kobold that appears stunned, its status will be &amp;quot;stunned&amp;quot;.  In the example, we&#039;re looking for an npc with a nil status, because that represents an npc that&#039;s standing and not stunned, dead, prone, etc.  The game never shows &amp;quot;You also see a kobold that is standing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now suppose there&#039;s twenty kobolds in the room, and only the fifteenth one is standing.  How can you be sure you attack the standing one?  This is where the kobold&#039;s id comes in handy.  Simu assigns an id to almost everything in the game.  Stormfront uses these ids when you click on links.  For the most part, these ids can be used just like nouns.  &amp;quot;attack ##{target.id}&amp;quot; will attack the npc you found earlier, even if other npcs are walking in and out of the room.  The double pound sign is not a typo.&lt;br /&gt;
&lt;br /&gt;
=== Other GameObj methods ===&lt;br /&gt;
&lt;br /&gt;
==== GameObj.containers ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a Hash of ids (as Strings) mapping to arrays of objects of the GameObj class. Each id represents an accessible container &#039;&#039;&#039;that GameObj is aware of&#039;&#039;&#039; with the given id. The id maps to an array of objects of the GameObj class representing that container&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
For a container to be added to the Hash, GameObj must first be made aware of its contents by some sort of interaction with the container, looking in it, opening it, and more. (Someone who knows the specific cases, please add detail!)&lt;br /&gt;
&lt;br /&gt;
==== GameObj.right_hand, GameObj.left_hand ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing whatever is in your hand.  Currently, if there is nothing in your hand, it still returns a GameObj where the name is &amp;quot;Empty&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Useful and hopefully self-explanatory methods to use once you have the right GameObj object====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
.id&amp;lt;br&amp;gt;&lt;br /&gt;
.name&amp;lt;br&amp;gt;&lt;br /&gt;
.noun&amp;lt;br&amp;gt;&lt;br /&gt;
.status&amp;lt;br&amp;gt;&lt;br /&gt;
.contents&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
&lt;br /&gt;
The Script class deals with and runs scripts.&lt;br /&gt;
&lt;br /&gt;
=== Script.start ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.run ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script and waits while it runs. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.list, Script.running, Script.hidden ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; An array of Script objects for every running/visible/invisible script.&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; This is not the same as ;list. The Script class does not have a defined to_s method.&lt;br /&gt;
&lt;br /&gt;
=== Script.running? ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether a script is running (paused or not)&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
&lt;br /&gt;
=== Script.pause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was paused successfully, false otherwise (script not running or already paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.unpause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was unpaused successfully, false otherwise (script not running or was not paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.paused? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script is running and paused, false otherwise&lt;br /&gt;
&lt;br /&gt;
=== Script.exists? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script with the given name is in the user&#039;s script directory, false otherwise. extension is optional.&lt;br /&gt;
&lt;br /&gt;
=== Script.log ===&lt;br /&gt;
Appends to the script&#039;s .log file in the lich/log directory.&lt;br /&gt;
&lt;br /&gt;
=== Script.db ===&lt;br /&gt;
Gets you a sqlite3 database for your script, of type SQLite3::Database (http://www.rubydoc.info/github/luislavena/sqlite3-ruby/SQLite3/Database)&lt;br /&gt;
&lt;br /&gt;
=== Script.version ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; Ruby Gem version&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and returns the current version in header of script as a Ruby Gem version&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;, &amp;quot;1.18.0&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and minimum required version&lt;br /&gt;
&lt;br /&gt;
== Global variables ==&lt;br /&gt;
&lt;br /&gt;
=== $PROGRAM_NAME ===&lt;br /&gt;
Ruby&#039;s global variable capturing current script -- in this case, the path to Lich.&lt;br /&gt;
&lt;br /&gt;
=== $frontend ===&lt;br /&gt;
Frontend detected by Lich.&lt;br /&gt;
&lt;br /&gt;
=== $lich_dir ===&lt;br /&gt;
Path of the current Lich directory.&lt;br /&gt;
&lt;br /&gt;
=== $login_time ===&lt;br /&gt;
Local time the current Lich session started.&lt;br /&gt;
&lt;br /&gt;
=== $script_dir ===&lt;br /&gt;
Path to directory Lich is using to get scripts.&lt;br /&gt;
&lt;br /&gt;
=== $version ===&lt;br /&gt;
Lich version.&lt;br /&gt;
&lt;br /&gt;
== Builtin Lich shortcuts ==&lt;br /&gt;
&lt;br /&gt;
These automatically perform multiple checks or commands.&lt;br /&gt;
&lt;br /&gt;
=== take ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
take &amp;quot;box&amp;quot;, &amp;quot;coffer&amp;quot;, &amp;quot;ruby&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (the last line the &#039;fput&#039; command saw)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Picks up every item listed and puts each one in turn into your &#039;lootsack:&#039; setting by issuing the commands with fput.&lt;br /&gt;
&lt;br /&gt;
=== fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs a &#039;look&#039; and takes/puts away all items on the ground that aren&#039;t listed in your &#039;excludeloot:&#039; setting.  Return value is the last line from the game.&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; GS now natively includes the command LOOT ROOM with a similar effect.&lt;br /&gt;
&lt;br /&gt;
=== Lich.fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich.fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;fetchloot&#039; in all ways except only the items listed in your &#039;treasure:&#039; setting are fetched.&lt;br /&gt;
&lt;br /&gt;
=== walk ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
walk&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Moves in a random cardinal direction (what&#039;s seen in the &#039;Obvious exits:&#039; line), storing the direction moved, and returning &#039;true&#039; if there is a critter in the room or &#039;false&#039; if there aren&#039;t any NPCs in the room.  The stored direction will not be among the random directions chosen the next time the &#039;walk&#039; command is used (unless it hits a dead-end, then it will backtrack the way it came).&lt;br /&gt;
&lt;br /&gt;
=== run ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
run if not health(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will execute a &#039;walk&#039; command repeatedly until it enters a room with no critters, at which point it returns and the script will pick up execution on the next line (does not continue to run away).&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; wander.lic is a popular and sophisticated auto-moving creature-finding script.&lt;br /&gt;
&lt;br /&gt;
=== watchhealth ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50) { echo &amp;quot;Uh, your health is below 50...&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50, proc_object)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; nothing useful&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns immediately so that the calling script continues to run as normal, and while it does, monitors your health.  If it falls below the number you give it, executes the block you passed to it.  Only does this once -- if you want it to repeat as the script executes (be careful, chances are your health will still be below 50 after the block executes once) then pass watchhealth a proc object that includes a line registering itself over again (as in, a proc that includes a &#039;watchhealth(#, self)&#039; thingie).  If your health never falls below the number you give it, then nothing happens; once the script ends, it stops watching.&lt;br /&gt;
&lt;br /&gt;
== goto ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
goto &amp;quot;MainLabel&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; (has no return value, the current execution stack is discarded and the jump never returns)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to standard Wizard/SF scripts; the label to jump to has to be in quotes, and it is (kinda sorta) case insensitive.  The label declaration itself (the LABEL: line) MUST NOT be in quotes: only the name of the label when you use the goto command. If there are two labels with the same name but different capitalizations, the goto command will attempt to be case sensitive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[The Lich]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*The initial content of this article was copied from the scripting documentation posted by Tillmen which formerly resided at http://lichproject.com/&lt;br /&gt;
&lt;br /&gt;
[[category:Scripts]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221245</id>
		<title>Lich:Software/Scripting reference</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221245"/>
		<updated>2024-06-24T13:48:39Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: /* variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3rd-party}}&lt;br /&gt;
== variable ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
variable[1]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
#contains all variables passed to a script in a single string&lt;br /&gt;
script.vars[0]&lt;br /&gt;
&lt;br /&gt;
#a space separated list of the values passed to the script exist in index 1 through n where n is the number of space separated items&lt;br /&gt;
script.vars[1..n]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array, possibly empty&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; Script.current.vars&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s an array containing the command line variables the user entered when starting the script (begins at variable[1], unlike standard arrays; as is the behavior of Wizard, variable[0] is the entire line the user entered).&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Hi there!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Displays &#039;[script_name: the string it was given]&#039; in the game window; if given multiple strings it echoes each string on its own line.  If it&#039;s given no arguments, it simply prints a blank line without the &#039;[script_name: ]&#039; business.&lt;br /&gt;
&lt;br /&gt;
== respond ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;I&#039;m a string to display&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;so on and so on&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Just like the &#039;echo&#039; command, but does not display the script name.  Since it&#039;s possible for Lich to be running two dozen scripts at the same time, it can get a little hard to know which script is saying what unless they use the &#039;echo&#039; command and not the &#039;respond&#039; command.  Still, &#039;echo&#039; can be a bit ugly for printing tables and whatnot, so use this instead if desired.  The return value is how many characters the last string displayed contained.&lt;br /&gt;
&lt;br /&gt;
== pause ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;2s&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;3m&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;1d&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses for one second.  If given an integer, pauses for that many seconds.  If given a string (as in the examples above), extracts the number to pause for from the string and pauses for that many seconds/hours/days (yeah, well, I was bored, so why not make it do days too).  Return value is the number of seconds it paused for.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
Sending output to the game as though typed by the player.&lt;br /&gt;
&lt;br /&gt;
=== put ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
put &amp;quot;look&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was sent&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard.&lt;br /&gt;
&lt;br /&gt;
=== fput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;, &amp;quot;are now in a defensive stance&amp;quot;, &amp;quot;can&#039;t do that while dead&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was accepted as meaning the action succeeded (see below)&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; forceput&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s named &#039;forceput&#039;  because originally it was intended to be used only infrequently, but as it&#039;s turned out there are very few times when &#039;put&#039; is preferable.  This command will continue to &#039;put&#039; whatever string you give it, until it receives a line from the game that it doesn&#039;t recognize as one of the common &amp;quot;command rejected&amp;quot; responses (for example, &amp;quot;You can&#039;t do that while entangled in a web&amp;quot;, &amp;quot;...wait x seconds&amp;quot; (RT), &amp;quot;Wait x seconds.&amp;quot; (cast RT), &amp;quot;Sorry, you may only type ahead x lines&amp;quot;, &amp;quot;You&#039;ll have to stand up first&amp;quot; (stands and reattempts), etc).  If stunned, it will wait until you&#039;re no longer stunned to reattempt; if in RT (hard or soft), will wait &#039;x&#039; seconds before reattempting.  If you need to stand, it will do so and retry immediately.  If it causes a type ahead error, it will pause for 1 second and then reattempt.  This has a very high rate of success, but it is definitely not infallible -- it only checks the next line received from the game, and there&#039;s no guarantee the next line from the game has anything at all to do with what the &#039;fput&#039; command just sent.  Because of this it can often fail to realize the command wasn&#039;t really successful, particularly if the user is doing a lot of things at once.  If given more than one string, the first string is taken as the command to send to the game, and all other strings are used as what to accept as meaning the action succeeded.  BE CAREFUL with this behavior!  It can very infrequently be extremely useful, but if not used cautiously, it can easily cause a script to mistakenly repeat an action many times in *very* rapid succession (which with CoL signs for instance can very easily kill you in less than a second flat).&lt;br /&gt;
&lt;br /&gt;
=== multifput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multifput &amp;quot;stance offensive&amp;quot;, &amp;quot;incant 910&amp;quot;, &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (return value of the last &#039;fput&#039; executed)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple strings and executes an &#039;fput&#039; command for every one sequentially.&lt;br /&gt;
&lt;br /&gt;
=== dothis ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothis &amp;quot;action here&amp;quot;, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to fput, but will continue to try the action until a success string is matched&lt;br /&gt;
&lt;br /&gt;
=== dothistimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothistimeout &amp;quot;action here&amp;quot;, time, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;dothis&#039;, but if a success isn&#039;t seen in the given amount of time, returns a value of &#039;nil&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
move &#039;northwest&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as the Wizard &#039;move&#039; command, but it will usually compensate for things like type ahead errors, RT, currently stunned, etc.; will also stand and re-attempt the movement if it&#039;s detected to be necessary.  Returns &#039;true&#039; if the move was executed properly, &#039;false&#039; if it wasn&#039;t able to be performed (which is very rare due to the move command&#039;s error compensation measures).&lt;br /&gt;
&lt;br /&gt;
=== multimove ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multimove &#039;nw&#039;, &#039;ne&#039;, &#039;go hole&#039;, &#039;climb stairs&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple directions to move in and executes the &#039;move&#039; command for each one.  Returns the value of the last &#039;move&#039; command executed (true or false).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
&lt;br /&gt;
This is core line-by-line handling of full lines of input sent by the game to the player. For more complex filtering and handling, see &amp;quot;match&amp;quot; and &amp;quot;wait&amp;quot; sections.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches the next un-checked line of game data (while a script is running, it is given every game line, and these lines are available for a script to check/use at its leisure).&lt;br /&gt;
&lt;br /&gt;
=== regetall ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
regetall &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns an array of all game lines (since login) that match as having contained the given string (absolutely every single line since you logged in, Lich remembers them all).  If a script is set as receiving the status data that doesn&#039;t show in the game window, those lines are also matched for; if the script is only being fed normal game data, that&#039;s the only history this command checks.  If no matching lines were found, returns &#039;nil&#039; (which is false in a logical comparison).  As well as returning the matches, it also adds them to the script&#039;s game data stack so that subsequent &#039;get&#039; commands will fetch them in order.  The string to match for is actually optional, and if omitted, all lines are considered &#039;matching&#039;.&lt;br /&gt;
&lt;br /&gt;
=== reget ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 5, &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to &#039;regetall&#039; in behavior, but it only checks the current RAM cache (every 2 minutes, Lich&#039;s &#039;memory&#039; of game data is emptied out of RAM and stored in a temporary file on the hard disk so that the program doesn&#039;t take up more resources than is necessary -- these files are deleted when the program closes); it also takes an optional integer, which represents how many game lines back to check (&#039;reget 5&#039; would scan the last 5 lines from the game that are still in RAM).  If the integer is omitted, will scan the entire existing RAM buffer (again, cleared every 2 minutes).&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (possible for the return array to be empty, but unlikely)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Empties ALL unchecked input to the script from ALL queues (normal game stack, unique script stack and upstream stack); the return value is whatever was in the game data stack before it was cleared (which could be nothing, in which case the return is an empty array).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wait ==&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard; waits until a line from the game is seen.  Returns the line (in actuality this command simply clears the game stack and executes a &#039;get&#039;).&lt;br /&gt;
&lt;br /&gt;
=== waitrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in roundtime for.  Return value is how many seconds paused.  Waits until you&#039;re in roundtime if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitrt&#039;, but does not wait until you&#039;re in roundtime and as such will not hang (but will not wait for any roundtime if the game hasn&#039;t sent that you&#039;re in roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in RT for.  Return value is how many seconds paused.  Waits until you&#039;re in RT if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitcastrt&#039;, but does not wait until you&#039;re in cast roundtime and as such will not hang (but will not wait for any cast roundtime if the game hasn&#039;t sent that you&#039;re in cast roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitcastrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitfor &amp;quot; just arrived.&amp;quot;, &amp;quot;More lines to waitfor if you desire&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Waits until a line from the game includes the string you gave it as an argument.  The return value is the complete string from the game (in the example used here, if Shaelun entered the room, the command would return &amp;quot;Shaelun just arrived.&amp;quot;).  &#039;waitfor&#039; is case insensitive (capital letters are considered matches even if the string it was given didn&#039;t have a capital letter there).&lt;br /&gt;
&lt;br /&gt;
=== wait_while ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while &amp;quot;You do not have full health: waiting until you do.&amp;quot; { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The script will wait while the given code block has a logical value of &#039;true&#039;, and will only continue on to the next line when/if the code block has a value of &#039;false&#039;.  If given the optional string to announce to the user, it will only display that string if it&#039;s going to be sitting there waiting for something -- if the command will not be waiting at all, it doesn&#039;t display the string to the user.  Note that there&#039;s no limit to how long/complicated the code block can be; it was designed for very short logical comparisons like the example above, but need not be used that way.&lt;br /&gt;
&lt;br /&gt;
=== wait_until ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_until { checkmana(50) }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical in all ways to &#039;wait_while&#039;, but does the opposite (waits UNTIL the given code block is true, not WHILE it&#039;s true).  Also takes the optional string if desired.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Match ==&lt;br /&gt;
&lt;br /&gt;
Wizard-style &amp;quot;match&amp;quot; commands&lt;br /&gt;
&lt;br /&gt;
=== matchtimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchtimeout 5, &amp;quot;string to watch for&amp;quot;, &amp;quot;another&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but if a match isn&#039;t seen in the given amount of time, returns a value of &#039;false&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== matchwait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If used without any arguments, 100% identical to Wizard &#039;matchwait&#039; commands.  You can optionally give it arguments, in which case it acts identically to &#039;waitfor&#039; in all ways except one: matches are case sensitive (for instance, matchwait &amp;quot;shaelun&amp;quot; will not match if the word &amp;quot;Shaelun&amp;quot; is seen from the game).&lt;br /&gt;
&lt;br /&gt;
=== match ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &#039;label&#039;, &#039;line to watch for&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &amp;quot;gameline&amp;quot;, &amp;quot;gameline&amp;quot;, &amp;quot;some other gameline&amp;quot;, &amp;quot;so on and so forth&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given exactly two arguments, identical to the Wizard &#039;match&#039; command.  If given *any* other number of arguments, it&#039;s a case sensitive version of &#039;waitfor&#039; but instead of returning the entire matching game line, it returns only the portion of the string you asked it to watch for.&lt;br /&gt;
&lt;br /&gt;
=== matchfind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfind &amp;quot;A ? attacks you!&amp;quot;, &amp;quot;A ? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
person, weapon = matchfind &amp;quot;? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string or an array&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but returns only the portion of the line where the question mark(s) are.  If given multiple question marks, returns an array containing the portions of the string (in order).  Note that if you assign multiple variables to equal a single array, the array&#039;s elements are used in order and assigned to each variable (if there are fewer elements in the array than there are variables being assigned, variables receive a value of &#039;nil&#039;, and if there are more elements in the array than there are variables being assigned, the last variable is assigned an array with the remaining values).  This is why the above usage example works (person, weapon =).&lt;br /&gt;
&lt;br /&gt;
=== matchfindword ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
weapon = matchfindword &amp;quot;Shaelun swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (single word)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;matchfind&#039;, but only looks for a single word where the question marks are.  Note that a line won&#039;t match if more than one word is where the question mark is (in the above example, if the weapon were a &amp;quot;broadsword&amp;quot; it would match, but if it were a &amp;quot;sonic hammer of kai&amp;quot; there would be no match).&lt;br /&gt;
&lt;br /&gt;
=== matchfindexact ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfindexact &amp;quot;? just arrived.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Version of matchfind meant for use in special cases; matchfind is very forgiving and will return and match anything (case insensitively) -- matchfindexact is very strict.  It is case sensitive and cares about things like spaces, word boundaries (partial pieces of a word will not match, only whole words), the case of the string it&#039;s looking for, etc..  Use it if you need to use matchfind and want to make sure only a very specific line matches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Room ==&lt;br /&gt;
&lt;br /&gt;
=== checkarea ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns the geographical area of your current room, or if given a string to check for, returns true or false based on whether your current area matches the string or not.&lt;br /&gt;
&lt;br /&gt;
=== checkroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom &amp;quot;table&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea, but uses the room title instead of the geographical area.&lt;br /&gt;
&lt;br /&gt;
=== checkpaths ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths &#039;nw&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the current &#039;Obvious exits:&#039; directions if given no argument, or true/false based on whether all arguments given are currently available as exits or not.&lt;br /&gt;
&lt;br /&gt;
=== checkoutside ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkoutside&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
outside?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; outside?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Really simple, just returns true if you&#039;re outside, false if you aren&#039;t.  Probably only of use to rangers writing their own spellup scripts or something, but either way: it&#039;s available if you have a use for it.&lt;br /&gt;
&lt;br /&gt;
=== checknpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs&lt;br /&gt;
	fput &amp;quot;attack&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs &amp;quot;big monster of doom&amp;quot;, &amp;quot;small monster of doom&amp;quot;&lt;br /&gt;
	put &amp;quot;Oh noes!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
	for npc in checknpcs&lt;br /&gt;
		put &amp;quot;greet #{npc}&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, a string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If checknpcs is used without giving it npcs to check for, it returns an array of strings coresponding to the noun of each npc in the room, or nil if there are no npcs (does not return an empty array, so you can use &amp;quot;if checknpcs&amp;quot;).  If chekcnpcs is given npcs to look for, it returns a string of the first matching npc it finds, or nil if none matched (any string evaluates to true, only nil and false evaluate to false in an if statement).&lt;br /&gt;
&lt;br /&gt;
=== checkpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;checknpcs&#039;, but with the players currently present.&lt;br /&gt;
&lt;br /&gt;
=== checkloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (or an empty array if no items)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the items currently in the room.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Familiars ==&lt;br /&gt;
&lt;br /&gt;
=== checkfamarea/checkfamroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea/checkroom, but check your familiar&#039;s current location instead of yours (only in Wizard and only if you have a familiar).&lt;br /&gt;
&lt;br /&gt;
=== checkfampcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkfamnpcs&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to the above two, but tracks for your familiar&#039;s room instead.  Not available in SF as of v3.06.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
&lt;br /&gt;
=== checkpoison ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpoison&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkdisease.&lt;br /&gt;
&lt;br /&gt;
=== checkdisease ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdisease&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkpoison.&lt;br /&gt;
&lt;br /&gt;
=== checkfried ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfried&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if you&#039;re fried, false if not.&lt;br /&gt;
&lt;br /&gt;
=== checkmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind(2)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding level of exp in your head, with 0 being &#039;clear as a bell&#039;, 1 being &#039;fresh and clear&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
=== check_mind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding percentage of exp in your head.&lt;br /&gt;
&lt;br /&gt;
=== percentmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind(80)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns an integer ranging from 0-100 representing the percentage of exp in your head. If given an integer, returns true or false if you have at least that percentage of experience.  Both saturated and fried show up as 100 percent - a user interested in distinguishing between the two can add a checksaturated or saturated? qualifier to their percentmind check.&lt;br /&gt;
&lt;br /&gt;
=== checkright/checkleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkright&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkleft &amp;quot;broadsword&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; righthand?/lefthand?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Give them a string and will return true/false if it matches what you&#039;re holding, or the last word in the item name if used by itself.  If your hands are currently empty, it will return &#039;nil&#039; (identical to &#039;false&#039; in a logical comparison) regardless of whether it was given an argument or not.  This behavior can be useful to make absolutely certain a &#039;take&#039; command succeeded, for instance.&lt;br /&gt;
&lt;br /&gt;
=== checkstance ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance &amp;quot;offensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; stance&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; With no arguments, returns the string representing your current stance. With a numerical or string argument, returns a boolean flag indicating if the current stance matches the given string. For string based comparisons, this will correctly test against the stance values possible if using [[Combat Mastery]] or [[[[Warrior_Tricks#Stance_Perfection|Stance Perfection]]]], while integer based arguments will perform a precise comparison.&lt;br /&gt;
&lt;br /&gt;
=== check(thing) ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstanding&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;spirit defense&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdead&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; mostly true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkstanding; checknotstanding; checksitting; checkprone; checkkneeling/kneeling?; checkprep/prepped?; checkmind; checkgrouped/checkjoined/joined?; checkwebbed/webbed?; checkstunned/stunned?; checkdead/dead?; checkhidden/checkhiding/hidden/hiding?; checkname/myname?; checkspell/checkactive/active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Most are true if you are (checkstunned for example), false if you aren&#039;t; they all follow the same basic behavior as the above-documented &#039;check&#039; commands.&lt;br /&gt;
&lt;br /&gt;
=== checkname ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; string or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; True/false if given a string and the names match, or just returns the character name if given no arguments.&lt;br /&gt;
&lt;br /&gt;
=== checkstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false or an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Only in StormFront (there is no auto-updated stamina tag in Wizard).  Given no arguments, returns your current stamina.  Given a number, returns true/false based on whether you have at least or more than that number.&lt;br /&gt;
&lt;br /&gt;
=== checkrt / checkcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; value of roundtime&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a value of how much roundtime left. Useful for IF statements.&lt;br /&gt;
&lt;br /&gt;
=== checkmana/checkhealth/checkspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmana 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; identical as above&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; health, health?, mana, mana?, spirit, spirit?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkstamina.&lt;br /&gt;
&lt;br /&gt;
=== maxhealth/maxstamina/maxmana/maxspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (checkhealth &amp;lt; maxhealth)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns your maximum health/spirit/stamina/mana as an integer (class Fixnum).  Takes no arguments.&lt;br /&gt;
&lt;br /&gt;
=== percenthealth/percentmana/percentspirit/percentstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (percenthealth &amp;lt; 90)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an integer (0-100) representing the percentage of your current health/mana/whatever in relation to your max.&lt;br /&gt;
&lt;br /&gt;
=== checkspell ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;elemental defense i&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if the spell you give it is active, false if it isn&#039;t (only available if you use the infomon script, since that&#039;s what keeps track of this).&lt;br /&gt;
&lt;br /&gt;
=== Wounds ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.torso&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.neck&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.lhand&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Variations:&#039;&#039;&#039; Wounds.head; Wounds.neck; Wounds.abs; Wounds.lhand; Wounds.rhand; Wounds.larm; Wounds.rarm; Wounds.chest; Wounds.back; Wounds.rleg; Wounds.lleg; Wounds.nerves&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the current wound rank (numerically).  If I had &#039;deep gashes and serious bleeding&#039; on my chest, Wounds.chest would return the integer 3.  If I had no wound there, it would return 0.&lt;br /&gt;
&lt;br /&gt;
=== Scars ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.abs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.nerves&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.rleg&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wounds above, but for scars instead of wounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lich toggles ==&lt;br /&gt;
&lt;br /&gt;
=== # QUIET ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;amp;#35; QUIET&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; n/a&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This is a special directive that must be a Ruby comment placed as above in the first line of the Lich script. Lich will ordinarily bookend the lifetime of a script with &amp;lt;code&amp;gt;--- Lich: (scriptname) active.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--- Lich: (scriptname) has exited.&amp;lt;/code&amp;gt; This option omits those lines, allowing a script to start and exit silently.&lt;br /&gt;
&lt;br /&gt;
=== hide_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
hide_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;hidden&#039; setting.  When this setting is on (defaults to off), a script will not be listed when the user types ;list. It will still show up under ;list all. There is no way to prevent a script from being being displayed in ;list all.&lt;br /&gt;
&lt;br /&gt;
=== i_stand_alone ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
i_stand_alone&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off.  Removes a script from ALL data feeds; a script using this will receive no game lines and no unique data whatsoever (unless they toggle it back off).  If Lich can more or less ignore that a script exists and not bother with keeping its data stacks up-to-the-second with game data and anything else it&#039;s requested, then a script has virtually no overhead whatsoever (meaning any resources it requires come only from what it does independantly).  Useful for some scripts who have no need to eat up resources being fed game data (such as dict.lic).&lt;br /&gt;
&lt;br /&gt;
=== no_kill_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_kill_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no kill all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;kill all.  A script with this set to on must be killed specifically (by typing ;kill [script], or just ;kill).  There is no way to prevent a script from being killed when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== no_pause_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_pause_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no pause all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;pause all.  A script with this set to on must be killed specifically (by typing ;pause [script], or just ;pause).  There is no way to prevent a script from being paused when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== silence_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
silence_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;silenced&#039; setting.  A script with this on will not have commands it sends to the game echoed to your game window.  A script run in SAFE mode cannot change this setting (attempting to do so will generate a warning and otherwise have no effect).&lt;br /&gt;
&lt;br /&gt;
===status_tags===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
status_tags&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039;Tells Lich to send this script XML tags rather than stripping them, or, if already doing so, tells Lich to go back to stripping the XML. If called with the argument &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;, switches to that setting and echoes that it has done so.&lt;br /&gt;
&lt;br /&gt;
=== toggle_echo ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;suppress echo&#039; setting.  A script with this on will not execute any &#039;echo&#039; commands, but will silently ignore them instead; it&#039;s designed more for people who don&#039;t want clutter in their game window but still want to make use of an existing script.  Commands sent to the game are still echoed to the game window.&lt;br /&gt;
&lt;br /&gt;
=== toggle_unique ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_unique&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; When a script is set as being &#039;unique&#039;, it does not receive normal game data; instead it only receives what the user sends to it by typing ;send to (script) (message).  This is of use if a script wants to only act on a user&#039;s input or has no use for game data (it provides a method for scripts to make sure game data doesn&#039;t accidentally get recognized as a user&#039;s input, and also serves to prevent scripts from slowly eating away at system resources because the script never checks or clears its data buffer -- see the &#039;clear&#039; command for more on that).&lt;br /&gt;
&lt;br /&gt;
=== toggle_upstream ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_upstream&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This must be enabled to allow the script to intercept what you send to the game. See the separate upstream section for more detail.&lt;br /&gt;
&lt;br /&gt;
== Lich::Util ==&lt;br /&gt;
=== issue_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.issue_command(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end: true, timeout: 5, silent: nil, usexml: true, quiet: false)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.issue_command(&#039;tattoo menu&#039;, /List of flash tattoos available \(Page \d+\):/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture the returning output from the begging start_pattern(regex) until the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. usexml determines whether the start/end pattern is matching against the xml feed or plain txt feed. quiet flag determines whether the output is squelched or shown to the front end. The only required values needed are command and start_pattern. Everything else has default values that can be used or changed.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command_xml() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command_xml(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command_xml(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture XML buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. end_pattern, include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command(command, start_pattern, end_pattern, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/, end_pattern = /Type TATTOO MENU again in the next minute to display the next group of flash tattoos\./)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== silver_count() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.silver_count(timeout = 3)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.silver_count&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer of how much silver you have&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; useful to know the amount of silver one has on themselves.&lt;br /&gt;
&lt;br /&gt;
== Lich::Messaging ==&lt;br /&gt;
&lt;br /&gt;
=== monsterbold ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.monsterbold(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.monsterbold(&amp;quot;This text I want to monsterbold&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with proper monsterbold tags depending on FrontEnd used&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will take the string given and return it with monsterbold before/after and xml_encode the msg.&lt;br /&gt;
&lt;br /&gt;
=== msg_format ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg_format(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg_format(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with start and end tags to change the color in the FrontEnd&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the string given with color coding based on the type chosen. Current options are as follows:&lt;br /&gt;
** error, yellow, bold, monster, creature&lt;br /&gt;
** warn, orange, gold, thought&lt;br /&gt;
** info, teal, whisper&lt;br /&gt;
** green, speech, debug, light green&lt;br /&gt;
&lt;br /&gt;
=== msg ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; sends the string given to the client encoded for the type given.&lt;br /&gt;
&lt;br /&gt;
=== stream_window ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.stream_window(msg, window)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.stream_window(&amp;quot;Let&#039;s send this to a different window!&amp;quot;, &amp;quot;familiar&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; send the string to the various stream window. Currently supports the familiar, speech, thoughts and loot window.&lt;br /&gt;
&lt;br /&gt;
=== xml_encode ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.xml_encode(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.xml(&amp;quot;Let&#039;s encode some text!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an xml encoded text&lt;br /&gt;
&lt;br /&gt;
=== mono ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.mono(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.mono(&amp;quot;Let&#039;s mono some code!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; force mono formatted string to be displayed properly using XML output class of mono&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
Settings are specific to the script itself. For example, a setting with the name &amp;quot;bank&amp;quot; in fetch_turnips.lic have no effect on the &amp;quot;bank&amp;quot; setting in buy_cheese.lic.&lt;br /&gt;
&lt;br /&gt;
=== Settings.load ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.load&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings[&amp;quot;SettingName&amp;quot;] ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings[&amp;quot;SettingName&amp;quot;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.save ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.save&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; either a hash representing your settings, or &#039;nil&#039; if no settings for the script exist&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Note that Settings.clear will erase all settings, but it will NOT save that on its own.  Issue a Settings.save command after the Settings.clear if you want that script&#039;s settings reset permanently.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upstream ==&lt;br /&gt;
&lt;br /&gt;
=== upstream_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same thing as &amp;quot;get&amp;quot; except it fetches the last line the user sent to the game.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_get? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to get the last line the user sent to the game, but does not wait for a line to be sent.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_waitfor &amp;quot;climb stairs&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &amp;quot;waitfor&amp;quot; but only checks the upstream commands (the commands sent to the game by the user).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interscript communication ==&lt;br /&gt;
&lt;br /&gt;
=== running? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
running? &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns true/false if the given script is active or not.&lt;br /&gt;
&lt;br /&gt;
=== send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The target script will be sent a string exactly as though it came from the game.  Returns true if successful, false if the script wasn&#039;t found to be active.&lt;br /&gt;
&lt;br /&gt;
=== send_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_scripts &amp;quot;To the running scripts, this line looks identical to one that came from the game&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but sends a line to all scripts instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== start_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;heal&amp;quot;, [ &amp;quot;shaelun&amp;quot;, &amp;quot;adhara&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;test  in the game entry box.  Returns &#039;true&#039; if the script was successfully started, &#039;false&#039; if for any reason it couldn&#039;t be found/started.  The optional second argument (which must be an array, as seen in the above example) can be used to simulate arguments to the script (the above example would simulate the user typing:  ;heal shaelun adhara).&lt;br /&gt;
&lt;br /&gt;
=== start_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Executes a &amp;quot;start_script&amp;quot; command for every argument given.  Note that you cannot give a script arguments when using this command.&lt;br /&gt;
&lt;br /&gt;
=== pause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses the script using the command.  If given a string, pauses the script who&#039;s name matches that string; if the script is not currently active, returns &#039;false&#039; (&#039;true&#039; if the script was paused successfully).&lt;br /&gt;
&lt;br /&gt;
=== unpause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unpause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses the script you give it.  Note that because of the way the &#039;script is paused&#039; state is handled, it&#039;s conceivable for a script that was paused to actually still be executing commands internally for a brief time -- a script isn&#039;t actually &amp;quot;stopped dead in its tracks&amp;quot; until it attempts to interact with the game in some way (by fetching game data, sending game data, or by attempting a command that requires the script to be identified).  Since most commands identify a script (including this one), this command cannot unpause the script itself: when it attempts to unpause itself, it will be identified as being paused and will be halted where it is until it&#039;s unpaused by another script or the user (or killed).  When it is, it will be allowed to continue, and will then try to unpause itself (pointlessly, since it was just unpaused...).&lt;br /&gt;
&lt;br /&gt;
=== kill_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
kill_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; kill_scripts, stop_script, stop_scripts&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;kill test  in the game entry box and hitting enter; takes multiple scripts to kill.  If the script is not running, returns false; if the script was found to be active and was killed, returns true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique ==&lt;br /&gt;
&lt;br /&gt;
See [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more about the &#039;unique&#039; stack.&lt;br /&gt;
&lt;br /&gt;
=== unique_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches a line from the unique stack, as opposed to the game data stack ().&lt;br /&gt;
&lt;br /&gt;
=== unique_send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but the script will receive the string sent in its &#039;unique&#039; stack instead of its &#039;game data&#039; stack (see [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more info).&lt;br /&gt;
&lt;br /&gt;
=== unique_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_waitfor &amp;quot;continue&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039; but acts on the &#039;unique&#039; queue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exit handling ==&lt;br /&gt;
&lt;br /&gt;
=== exit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Ends the script.&lt;br /&gt;
&lt;br /&gt;
=== die_with_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
die_with_me &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If the given scripts are active at the time the script using this command ends (&amp;quot;exit&amp;quot;, finishes, gets killed by the user, or dies in error) they&#039;ll all be killed automatically (produces no notification to avoid clutter, but the scripts are indeed stopped).  The given scripts need not be running (or technically even exist) at the time this command is used -- it only updates the setting, and that setting isn&#039;t actually acted upon until the script is killed.&lt;br /&gt;
&lt;br /&gt;
=== before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { echo &amp;quot;Oh God, why have you killed me dear user...?!&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { Settings.save }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs the given actions right before the script exits.  Note nothing is done at the time this command is used (it simply sets what should be done just before the script is killed).  The block given to this command is actually wrapped up into a proc object (an object of the &#039;Procedure&#039; class), and scheduled to be run when the script is killed/exits (if multiple procs exist, they are executed sequentially in the order they were declared).  Because of this, the same &#039;binding&#039; principles that apply to other proc objects apply here (in a nutshell, if a variable didn&#039;t exist when you declared the &#039;before_dying&#039; stuff, then you can&#039;t use it in the &#039;before_dying&#039; code; if it did exist at the time though, you *can* use it, even if it doesn&#039;t really exist in the script when it dies).  Also note that if the command(s) take more than 0.5 seconds to complete, they&#039;re forcibly aborted and the script is killed regardless (this is to prevent a possibly bad situation where a script makes a mistake in the &#039;before_dying&#039; command and is refusing to stop executing due to errors).  Note that if a script is set as executing in SAFE mode, all the restrictions that normally apply will also apply in the &#039;before_dying&#039; code block (this cannot circumvent that, nor can anything else for that matter).&lt;br /&gt;
&lt;br /&gt;
=== undo_before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
undo_before_dying&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Clears any &#039;before_dying&#039; commands that have been used for the script.&lt;br /&gt;
&lt;br /&gt;
=== abort! ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
abort!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Immediately kills the script, bypassing any &#039;before_dying&#039; blocks that have been registered.  Probably won&#039;t ever be of use, but it&#039;s a way to make the calling script go away as fast as possible (note that it isn&#039;t any faster than the &#039;exit&#039; command is, it just makes sure that nothing except stopping the script happens).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spell ==&lt;br /&gt;
&lt;br /&gt;
The Spell class combines spell information from spell-list.xml and character information from infomon to greatly simplify basic spell handling.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].cast&lt;br /&gt;
Spell[503].cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to cast spell given using info from spell-list.xml&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].affordable?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Useful for knowing if you have enough mana for spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].active?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false if spell is active&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will return true if the spell is currently active on yourself, false if it is not.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].timeleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].timeleft&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns amount of time left as value&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_cast&lt;br /&gt;
Spell[503].force_cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force cast spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_channel() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_channel&lt;br /&gt;
Spell[503].force_channel(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force channel spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_evoke() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_evoke&lt;br /&gt;
Spell[503].force_evoke(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force evoke spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_incant() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_incant&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force incant spell&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
&lt;br /&gt;
=== active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.active?(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.active?(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.active?(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.active?(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.active?(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the given effect is currently active. Spells can be referenced by number or name, unless the spell does not have a number, then must be referenced by name. Name can only be used when FLAG ShowSpellName is set to ON.&lt;br /&gt;
&lt;br /&gt;
=== time_left ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.time_left(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.time_left(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.time_left(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.time_left(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.time_left(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; time left in minutes as a floating number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to determine how much time is left on a given effect.&lt;br /&gt;
&lt;br /&gt;
== Weapon ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.known?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.known?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.affordable?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.available?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.available?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the weapon skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== CMan ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.known?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.known?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.affordable?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.available?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.available?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the cman skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== Shield  ==&lt;br /&gt;
&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.known?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.known?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.affordable?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.available?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.available?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the shield skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
=== use ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.use(name, target = &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, &amp;quot;Wyrom&amp;quot;)&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, 9000)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to use the shield skill given on target specified. Target can be a GameObj, integer, or string. If no target given, will issue command with no target, relying on game-engine targeting.&lt;br /&gt;
&lt;br /&gt;
== Armor ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Armor.known?(name)&lt;br /&gt;
&lt;br /&gt;
Armor.known?(&amp;quot;Armor Blessing&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the armor skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
== Feat ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.known?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.known?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.affordable?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.available?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.available?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the feat skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== GameObj ==&lt;br /&gt;
&lt;br /&gt;
The GameObj class tracks various objects in the same room as you, and makes their game id, name, noun, status, and contents available to you.&lt;br /&gt;
&lt;br /&gt;
=== GameObj arrays ===&lt;br /&gt;
&lt;br /&gt;
Several arrays are exposed by GameObj. They include:&lt;br /&gt;
&lt;br /&gt;
==== GameObj.inv ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the things you are wearing.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.pcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the other players in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.npcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the npcs in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.loot ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the loot in the room, or nil if there is none.  For the purposes of this function, loot is anything that Simu hasn&#039;t tagged with monster bold.  Any exits or anything that shows up in the &amp;quot;You also see&amp;quot; line will be included.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing any links found in the room description, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.dead ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the dead &#039;&#039;&#039;npcs&#039;&#039;&#039; in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.fam_pcs, GameObj.fam_npcs, GameObj.fam_loot, GameObj.fam_room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class.  Similar to the ones above, except for your familiar&#039;s room, and these don&#039;t stay up-to-date without having your familiar look at the room.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.targets ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the hostile npcs in the room, the mobs, the monsters, whatever you want to call them.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.target ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing the current target you have selected, if any.&lt;br /&gt;
&lt;br /&gt;
=== Finding game objects with GameObj ===&lt;br /&gt;
&lt;br /&gt;
Now that you&#039;ve got an object or array of objects, here&#039;s what to do with them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
target = GameObj.npcs.find { |npc| npc.status.nil? }&amp;lt;br&amp;gt;&lt;br /&gt;
if target&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;fput &amp;quot;attack ##{target.id}&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This example shows (in an over-simplified way) the most common use of the GameObj class.   First, &amp;quot;GameObj.npcs&amp;quot; gives an array of all the npcs in the room.  Then, &amp;quot;.find&amp;quot; searches each item in that array.  For each item in the array, the code inside the brackets following &amp;quot;GameObj.npcs.find&amp;quot; is run, and &amp;quot;npc&amp;quot; represents the item it&#039;s currently looking at.  The code inside the brackets acts like an if statement, and as soon as it is true, &amp;quot;target&amp;quot; is assigned the npc object.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;status&amp;quot; method applies to npcs and pcs (using it on others won&#039;t give an error, but it will always return nil).  The status is basically whatever shows up after &amp;quot;that appears&amp;quot;, &amp;quot;that is&amp;quot;, or &amp;quot;who is&amp;quot;.  So, if you also see a kobold that appears stunned, its status will be &amp;quot;stunned&amp;quot;.  In the example, we&#039;re looking for an npc with a nil status, because that represents an npc that&#039;s standing and not stunned, dead, prone, etc.  The game never shows &amp;quot;You also see a kobold that is standing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now suppose there&#039;s twenty kobolds in the room, and only the fifteenth one is standing.  How can you be sure you attack the standing one?  This is where the kobold&#039;s id comes in handy.  Simu assigns an id to almost everything in the game.  Stormfront uses these ids when you click on links.  For the most part, these ids can be used just like nouns.  &amp;quot;attack ##{target.id}&amp;quot; will attack the npc you found earlier, even if other npcs are walking in and out of the room.  The double pound sign is not a typo.&lt;br /&gt;
&lt;br /&gt;
=== Other GameObj methods ===&lt;br /&gt;
&lt;br /&gt;
==== GameObj.containers ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a Hash of ids (as Strings) mapping to arrays of objects of the GameObj class. Each id represents an accessible container &#039;&#039;&#039;that GameObj is aware of&#039;&#039;&#039; with the given id. The id maps to an array of objects of the GameObj class representing that container&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
For a container to be added to the Hash, GameObj must first be made aware of its contents by some sort of interaction with the container, looking in it, opening it, and more. (Someone who knows the specific cases, please add detail!)&lt;br /&gt;
&lt;br /&gt;
==== GameObj.right_hand, GameObj.left_hand ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing whatever is in your hand.  Currently, if there is nothing in your hand, it still returns a GameObj where the name is &amp;quot;Empty&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Useful and hopefully self-explanatory methods to use once you have the right GameObj object====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
.id&amp;lt;br&amp;gt;&lt;br /&gt;
.name&amp;lt;br&amp;gt;&lt;br /&gt;
.noun&amp;lt;br&amp;gt;&lt;br /&gt;
.status&amp;lt;br&amp;gt;&lt;br /&gt;
.contents&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
&lt;br /&gt;
The Script class deals with and runs scripts.&lt;br /&gt;
&lt;br /&gt;
=== Script.start ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.run ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script and waits while it runs. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.list, Script.running, Script.hidden ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; An array of Script objects for every running/visible/invisible script.&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; This is not the same as ;list. The Script class does not have a defined to_s method.&lt;br /&gt;
&lt;br /&gt;
=== Script.running? ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether a script is running (paused or not)&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
&lt;br /&gt;
=== Script.pause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was paused successfully, false otherwise (script not running or already paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.unpause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was unpaused successfully, false otherwise (script not running or was not paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.paused? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script is running and paused, false otherwise&lt;br /&gt;
&lt;br /&gt;
=== Script.exists? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script with the given name is in the user&#039;s script directory, false otherwise. extension is optional.&lt;br /&gt;
&lt;br /&gt;
=== Script.log ===&lt;br /&gt;
Appends to the script&#039;s .log file in the lich/log directory.&lt;br /&gt;
&lt;br /&gt;
=== Script.db ===&lt;br /&gt;
Gets you a sqlite3 database for your script, of type SQLite3::Database (http://www.rubydoc.info/github/luislavena/sqlite3-ruby/SQLite3/Database)&lt;br /&gt;
&lt;br /&gt;
=== Script.version ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; Ruby Gem version&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and returns the current version in header of script as a Ruby Gem version&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;, &amp;quot;1.18.0&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and minimum required version&lt;br /&gt;
&lt;br /&gt;
== Global variables ==&lt;br /&gt;
&lt;br /&gt;
=== $PROGRAM_NAME ===&lt;br /&gt;
Ruby&#039;s global variable capturing current script -- in this case, the path to Lich.&lt;br /&gt;
&lt;br /&gt;
=== $frontend ===&lt;br /&gt;
Frontend detected by Lich.&lt;br /&gt;
&lt;br /&gt;
=== $lich_dir ===&lt;br /&gt;
Path of the current Lich directory.&lt;br /&gt;
&lt;br /&gt;
=== $login_time ===&lt;br /&gt;
Local time the current Lich session started.&lt;br /&gt;
&lt;br /&gt;
=== $script_dir ===&lt;br /&gt;
Path to directory Lich is using to get scripts.&lt;br /&gt;
&lt;br /&gt;
=== $version ===&lt;br /&gt;
Lich version.&lt;br /&gt;
&lt;br /&gt;
== Builtin Lich shortcuts ==&lt;br /&gt;
&lt;br /&gt;
These automatically perform multiple checks or commands.&lt;br /&gt;
&lt;br /&gt;
=== take ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
take &amp;quot;box&amp;quot;, &amp;quot;coffer&amp;quot;, &amp;quot;ruby&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (the last line the &#039;fput&#039; command saw)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Picks up every item listed and puts each one in turn into your &#039;lootsack:&#039; setting by issuing the commands with fput.&lt;br /&gt;
&lt;br /&gt;
=== fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs a &#039;look&#039; and takes/puts away all items on the ground that aren&#039;t listed in your &#039;excludeloot:&#039; setting.  Return value is the last line from the game.&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; GS now natively includes the command LOOT ROOM with a similar effect.&lt;br /&gt;
&lt;br /&gt;
=== Lich.fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich.fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;fetchloot&#039; in all ways except only the items listed in your &#039;treasure:&#039; setting are fetched.&lt;br /&gt;
&lt;br /&gt;
=== walk ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
walk&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Moves in a random cardinal direction (what&#039;s seen in the &#039;Obvious exits:&#039; line), storing the direction moved, and returning &#039;true&#039; if there is a critter in the room or &#039;false&#039; if there aren&#039;t any NPCs in the room.  The stored direction will not be among the random directions chosen the next time the &#039;walk&#039; command is used (unless it hits a dead-end, then it will backtrack the way it came).&lt;br /&gt;
&lt;br /&gt;
=== run ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
run if not health(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will execute a &#039;walk&#039; command repeatedly until it enters a room with no critters, at which point it returns and the script will pick up execution on the next line (does not continue to run away).&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; wander.lic is a popular and sophisticated auto-moving creature-finding script.&lt;br /&gt;
&lt;br /&gt;
=== watchhealth ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50) { echo &amp;quot;Uh, your health is below 50...&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50, proc_object)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; nothing useful&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns immediately so that the calling script continues to run as normal, and while it does, monitors your health.  If it falls below the number you give it, executes the block you passed to it.  Only does this once -- if you want it to repeat as the script executes (be careful, chances are your health will still be below 50 after the block executes once) then pass watchhealth a proc object that includes a line registering itself over again (as in, a proc that includes a &#039;watchhealth(#, self)&#039; thingie).  If your health never falls below the number you give it, then nothing happens; once the script ends, it stops watching.&lt;br /&gt;
&lt;br /&gt;
== goto ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
goto &amp;quot;MainLabel&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; (has no return value, the current execution stack is discarded and the jump never returns)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to standard Wizard/SF scripts; the label to jump to has to be in quotes, and it is (kinda sorta) case insensitive.  The label declaration itself (the LABEL: line) MUST NOT be in quotes: only the name of the label when you use the goto command. If there are two labels with the same name but different capitalizations, the goto command will attempt to be case sensitive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[The Lich]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*The initial content of this article was copied from the scripting documentation posted by Tillmen which formerly resided at http://lichproject.com/&lt;br /&gt;
&lt;br /&gt;
[[category:Scripts]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221244</id>
		<title>Lich:Software/Scripting reference</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Lich:Software/Scripting_reference&amp;diff=221244"/>
		<updated>2024-06-24T13:39:59Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: /* variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3rd-party}}&lt;br /&gt;
== variable ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
variable[1]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
#contains all variables passed to a script in a single string&lt;br /&gt;
script.vars[0]&lt;br /&gt;
&lt;br /&gt;
#a space separated list of the values passed to the script exist in index 1 through n where n is the number of space separated items&lt;br /&gt;
script.vars[1..n]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array, possibly empty&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; Script.current.vars&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s an array containing the command line variables the user entered when starting the script (begins at variable[1], unlike standard arrays; as is the behavior of Wizard, variable[0] is the entire line the user entered).&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Hi there!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
echo &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Displays &#039;[script_name: the string it was given]&#039; in the game window; if given multiple strings it echoes each string on its own line.  If it&#039;s given no arguments, it simply prints a blank line without the &#039;[script_name: ]&#039; business.&lt;br /&gt;
&lt;br /&gt;
== respond ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;I&#039;m a string to display&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
respond &amp;quot;Line one&amp;quot;, &amp;quot;Line two&amp;quot;, &amp;quot;so on and so on&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Just like the &#039;echo&#039; command, but does not display the script name.  Since it&#039;s possible for Lich to be running two dozen scripts at the same time, it can get a little hard to know which script is saying what unless they use the &#039;echo&#039; command and not the &#039;respond&#039; command.  Still, &#039;echo&#039; can be a bit ugly for printing tables and whatnot, so use this instead if desired.  The return value is how many characters the last string displayed contained.&lt;br /&gt;
&lt;br /&gt;
== pause ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;2s&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;3m&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause &#039;1d&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses for one second.  If given an integer, pauses for that many seconds.  If given a string (as in the examples above), extracts the number to pause for from the string and pauses for that many seconds/hours/days (yeah, well, I was bored, so why not make it do days too).  Return value is the number of seconds it paused for.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
Sending output to the game as though typed by the player.&lt;br /&gt;
&lt;br /&gt;
=== put ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
put &amp;quot;look&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was sent&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard.&lt;br /&gt;
&lt;br /&gt;
=== fput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;stance defensive&amp;quot;, &amp;quot;are now in a defensive stance&amp;quot;, &amp;quot;can&#039;t do that while dead&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; the string that was accepted as meaning the action succeeded (see below)&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; forceput&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; It&#039;s named &#039;forceput&#039;  because originally it was intended to be used only infrequently, but as it&#039;s turned out there are very few times when &#039;put&#039; is preferable.  This command will continue to &#039;put&#039; whatever string you give it, until it receives a line from the game that it doesn&#039;t recognize as one of the common &amp;quot;command rejected&amp;quot; responses (for example, &amp;quot;You can&#039;t do that while entangled in a web&amp;quot;, &amp;quot;...wait x seconds&amp;quot; (RT), &amp;quot;Wait x seconds.&amp;quot; (cast RT), &amp;quot;Sorry, you may only type ahead x lines&amp;quot;, &amp;quot;You&#039;ll have to stand up first&amp;quot; (stands and reattempts), etc).  If stunned, it will wait until you&#039;re no longer stunned to reattempt; if in RT (hard or soft), will wait &#039;x&#039; seconds before reattempting.  If you need to stand, it will do so and retry immediately.  If it causes a type ahead error, it will pause for 1 second and then reattempt.  This has a very high rate of success, but it is definitely not infallible -- it only checks the next line received from the game, and there&#039;s no guarantee the next line from the game has anything at all to do with what the &#039;fput&#039; command just sent.  Because of this it can often fail to realize the command wasn&#039;t really successful, particularly if the user is doing a lot of things at once.  If given more than one string, the first string is taken as the command to send to the game, and all other strings are used as what to accept as meaning the action succeeded.  BE CAREFUL with this behavior!  It can very infrequently be extremely useful, but if not used cautiously, it can easily cause a script to mistakenly repeat an action many times in *very* rapid succession (which with CoL signs for instance can very easily kill you in less than a second flat).&lt;br /&gt;
&lt;br /&gt;
=== multifput ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multifput &amp;quot;stance offensive&amp;quot;, &amp;quot;incant 910&amp;quot;, &amp;quot;stance defensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (return value of the last &#039;fput&#039; executed)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple strings and executes an &#039;fput&#039; command for every one sequentially.&lt;br /&gt;
&lt;br /&gt;
=== dothis ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothis &amp;quot;action here&amp;quot;, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to fput, but will continue to try the action until a success string is matched&lt;br /&gt;
&lt;br /&gt;
=== dothistimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
dothistimeout &amp;quot;action here&amp;quot;, time, /regex to match for success/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a success string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;dothis&#039;, but if a success isn&#039;t seen in the given amount of time, returns a value of &#039;nil&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
move &#039;northwest&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as the Wizard &#039;move&#039; command, but it will usually compensate for things like type ahead errors, RT, currently stunned, etc.; will also stand and re-attempt the movement if it&#039;s detected to be necessary.  Returns &#039;true&#039; if the move was executed properly, &#039;false&#039; if it wasn&#039;t able to be performed (which is very rare due to the move command&#039;s error compensation measures).&lt;br /&gt;
&lt;br /&gt;
=== multimove ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
multimove &#039;nw&#039;, &#039;ne&#039;, &#039;go hole&#039;, &#039;climb stairs&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes multiple directions to move in and executes the &#039;move&#039; command for each one.  Returns the value of the last &#039;move&#039; command executed (true or false).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
&lt;br /&gt;
This is core line-by-line handling of full lines of input sent by the game to the player. For more complex filtering and handling, see &amp;quot;match&amp;quot; and &amp;quot;wait&amp;quot; sections.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches the next un-checked line of game data (while a script is running, it is given every game line, and these lines are available for a script to check/use at its leisure).&lt;br /&gt;
&lt;br /&gt;
=== regetall ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
regetall &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns an array of all game lines (since login) that match as having contained the given string (absolutely every single line since you logged in, Lich remembers them all).  If a script is set as receiving the status data that doesn&#039;t show in the game window, those lines are also matched for; if the script is only being fed normal game data, that&#039;s the only history this command checks.  If no matching lines were found, returns &#039;nil&#039; (which is false in a logical comparison).  As well as returning the matches, it also adds them to the script&#039;s game data stack so that subsequent &#039;get&#039; commands will fetch them in order.  The string to match for is actually optional, and if omitted, all lines are considered &#039;matching&#039;.&lt;br /&gt;
&lt;br /&gt;
=== reget ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 3&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
reget 5, &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Similar to &#039;regetall&#039; in behavior, but it only checks the current RAM cache (every 2 minutes, Lich&#039;s &#039;memory&#039; of game data is emptied out of RAM and stored in a temporary file on the hard disk so that the program doesn&#039;t take up more resources than is necessary -- these files are deleted when the program closes); it also takes an optional integer, which represents how many game lines back to check (&#039;reget 5&#039; would scan the last 5 lines from the game that are still in RAM).  If the integer is omitted, will scan the entire existing RAM buffer (again, cleared every 2 minutes).&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (possible for the return array to be empty, but unlikely)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Empties ALL unchecked input to the script from ALL queues (normal game stack, unique script stack and upstream stack); the return value is whatever was in the game data stack before it was cleared (which could be nothing, in which case the return is an empty array).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wait ==&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wizard; waits until a line from the game is seen.  Returns the line (in actuality this command simply clears the game stack and executes a &#039;get&#039;).&lt;br /&gt;
&lt;br /&gt;
=== waitrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in roundtime for.  Return value is how many seconds paused.  Waits until you&#039;re in roundtime if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitrt&#039;, but does not wait until you&#039;re in roundtime and as such will not hang (but will not wait for any roundtime if the game hasn&#039;t sent that you&#039;re in roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses for however many seconds you&#039;re currently in RT for.  Return value is how many seconds paused.  Waits until you&#039;re in RT if you aren&#039;t at the time this command is used, and therefore can hang endlessly.&lt;br /&gt;
&lt;br /&gt;
=== waitcastrt? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitcastrt?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer (Fixnum class)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;waitcastrt&#039;, but does not wait until you&#039;re in cast roundtime and as such will not hang (but will not wait for any cast roundtime if the game hasn&#039;t sent that you&#039;re in cast roundtime yet).&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; Zero is a value, and ALL values in Ruby are evaluated to true, EXCEPT for FALSE and NIL. This means that !waitcastrt? will not do do a proper true/false check like it might in other languages.&lt;br /&gt;
&lt;br /&gt;
=== waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
waitfor &amp;quot; just arrived.&amp;quot;, &amp;quot;More lines to waitfor if you desire&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Waits until a line from the game includes the string you gave it as an argument.  The return value is the complete string from the game (in the example used here, if Shaelun entered the room, the command would return &amp;quot;Shaelun just arrived.&amp;quot;).  &#039;waitfor&#039; is case insensitive (capital letters are considered matches even if the string it was given didn&#039;t have a capital letter there).&lt;br /&gt;
&lt;br /&gt;
=== wait_while ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_while &amp;quot;You do not have full health: waiting until you do.&amp;quot; { percenthealth != 100 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The script will wait while the given code block has a logical value of &#039;true&#039;, and will only continue on to the next line when/if the code block has a value of &#039;false&#039;.  If given the optional string to announce to the user, it will only display that string if it&#039;s going to be sitting there waiting for something -- if the command will not be waiting at all, it doesn&#039;t display the string to the user.  Note that there&#039;s no limit to how long/complicated the code block can be; it was designed for very short logical comparisons like the example above, but need not be used that way.&lt;br /&gt;
&lt;br /&gt;
=== wait_until ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
wait_until { checkmana(50) }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical in all ways to &#039;wait_while&#039;, but does the opposite (waits UNTIL the given code block is true, not WHILE it&#039;s true).  Also takes the optional string if desired.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Match ==&lt;br /&gt;
&lt;br /&gt;
Wizard-style &amp;quot;match&amp;quot; commands&lt;br /&gt;
&lt;br /&gt;
=== matchtimeout ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchtimeout 5, &amp;quot;string to watch for&amp;quot;, &amp;quot;another&amp;quot;, &amp;quot;endlessly&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but if a match isn&#039;t seen in the given amount of time, returns a value of &#039;false&#039; and the script will move on.&lt;br /&gt;
&lt;br /&gt;
=== matchwait ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If used without any arguments, 100% identical to Wizard &#039;matchwait&#039; commands.  You can optionally give it arguments, in which case it acts identically to &#039;waitfor&#039; in all ways except one: matches are case sensitive (for instance, matchwait &amp;quot;shaelun&amp;quot; will not match if the word &amp;quot;Shaelun&amp;quot; is seen from the game).&lt;br /&gt;
&lt;br /&gt;
=== match ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &#039;label&#039;, &#039;line to watch for&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
match &amp;quot;gameline&amp;quot;, &amp;quot;gameline&amp;quot;, &amp;quot;some other gameline&amp;quot;, &amp;quot;so on and so forth&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given exactly two arguments, identical to the Wizard &#039;match&#039; command.  If given *any* other number of arguments, it&#039;s a case sensitive version of &#039;waitfor&#039; but instead of returning the entire matching game line, it returns only the portion of the string you asked it to watch for.&lt;br /&gt;
&lt;br /&gt;
=== matchfind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfind &amp;quot;A ? attacks you!&amp;quot;, &amp;quot;A ? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
person, weapon = matchfind &amp;quot;? swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string or an array&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039;, but returns only the portion of the line where the question mark(s) are.  If given multiple question marks, returns an array containing the portions of the string (in order).  Note that if you assign multiple variables to equal a single array, the array&#039;s elements are used in order and assigned to each variable (if there are fewer elements in the array than there are variables being assigned, variables receive a value of &#039;nil&#039;, and if there are more elements in the array than there are variables being assigned, the last variable is assigned an array with the remaining values).  This is why the above usage example works (person, weapon =).&lt;br /&gt;
&lt;br /&gt;
=== matchfindword ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
weapon = matchfindword &amp;quot;Shaelun swings a ? at you!&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (single word)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;matchfind&#039;, but only looks for a single word where the question marks are.  Note that a line won&#039;t match if more than one word is where the question mark is (in the above example, if the weapon were a &amp;quot;broadsword&amp;quot; it would match, but if it were a &amp;quot;sonic hammer of kai&amp;quot; there would be no match).&lt;br /&gt;
&lt;br /&gt;
=== matchfindexact ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
matchfindexact &amp;quot;? just arrived.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Version of matchfind meant for use in special cases; matchfind is very forgiving and will return and match anything (case insensitively) -- matchfindexact is very strict.  It is case sensitive and cares about things like spaces, word boundaries (partial pieces of a word will not match, only whole words), the case of the string it&#039;s looking for, etc..  Use it if you need to use matchfind and want to make sure only a very specific line matches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Room ==&lt;br /&gt;
&lt;br /&gt;
=== checkarea ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns the geographical area of your current room, or if given a string to check for, returns true or false based on whether your current area matches the string or not.&lt;br /&gt;
&lt;br /&gt;
=== checkroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkroom &amp;quot;table&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea, but uses the room title instead of the geographical area.&lt;br /&gt;
&lt;br /&gt;
=== checkpaths ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpaths &#039;nw&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the current &#039;Obvious exits:&#039; directions if given no argument, or true/false based on whether all arguments given are currently available as exits or not.&lt;br /&gt;
&lt;br /&gt;
=== checkoutside ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkoutside&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
outside?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; outside?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Really simple, just returns true if you&#039;re outside, false if you aren&#039;t.  Probably only of use to rangers writing their own spellup scripts or something, but either way: it&#039;s available if you have a use for it.&lt;br /&gt;
&lt;br /&gt;
=== checknpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs&lt;br /&gt;
	fput &amp;quot;attack&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
if checknpcs &amp;quot;big monster of doom&amp;quot;, &amp;quot;small monster of doom&amp;quot;&lt;br /&gt;
	put &amp;quot;Oh noes!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
	for npc in checknpcs&lt;br /&gt;
		put &amp;quot;greet #{npc}&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings, a string, or nil&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If checknpcs is used without giving it npcs to check for, it returns an array of strings coresponding to the noun of each npc in the room, or nil if there are no npcs (does not return an empty array, so you can use &amp;quot;if checknpcs&amp;quot;).  If chekcnpcs is given npcs to look for, it returns a string of the first matching npc it finds, or nil if none matched (any string evaluates to true, only nil and false evaluate to false in an if statement).&lt;br /&gt;
&lt;br /&gt;
=== checkpcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;checknpcs&#039;, but with the players currently present.&lt;br /&gt;
&lt;br /&gt;
=== checkloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of strings (or an empty array if no items)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an array consisting of the items currently in the room.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Familiars ==&lt;br /&gt;
&lt;br /&gt;
=== checkfamarea/checkfamroom ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfamarea &amp;quot;illistim&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkarea/checkroom, but check your familiar&#039;s current location instead of yours (only in Wizard and only if you have a familiar).&lt;br /&gt;
&lt;br /&gt;
=== checkfampcs ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs &amp;quot;shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfampcs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; array of strings, or true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkfamnpcs&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to the above two, but tracks for your familiar&#039;s room instead.  Not available in SF as of v3.06.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
&lt;br /&gt;
=== checkpoison ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkpoison&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkdisease.&lt;br /&gt;
&lt;br /&gt;
=== checkdisease ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdisease&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; See checkpoison.&lt;br /&gt;
&lt;br /&gt;
=== checkfried ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkfried&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if you&#039;re fried, false if not.&lt;br /&gt;
&lt;br /&gt;
=== checkmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmind(2)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding level of exp in your head, with 0 being &#039;clear as a bell&#039;, 1 being &#039;fresh and clear&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
=== check_mind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
check_mind(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns a string representing the level of exp in your head (&#039;clear as a bell&#039;, &#039;fried&#039;, &#039;muddled&#039;, etc).  If given an integer, returns true or false if you have the corresponding percentage of exp in your head.&lt;br /&gt;
&lt;br /&gt;
=== percentmind ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
percentmind(80)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer, or true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; By itself returns an integer ranging from 0-100 representing the percentage of exp in your head. If given an integer, returns true or false if you have at least that percentage of experience.  Both saturated and fried show up as 100 percent - a user interested in distinguishing between the two can add a checksaturated or saturated? qualifier to their percentmind check.&lt;br /&gt;
&lt;br /&gt;
=== checkright/checkleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkright&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkleft &amp;quot;broadsword&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; righthand?/lefthand?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Give them a string and will return true/false if it matches what you&#039;re holding, or the last word in the item name if used by itself.  If your hands are currently empty, it will return &#039;nil&#039; (identical to &#039;false&#039; in a logical comparison) regardless of whether it was given an argument or not.  This behavior can be useful to make absolutely certain a &#039;take&#039; command succeeded, for instance.&lt;br /&gt;
&lt;br /&gt;
=== checkstance ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance &amp;quot;offensive&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstance 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false, or a string&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; stance&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; With no arguments, returns the string representing your current stance. With a numerical or string argument, returns a boolean flag indicating if the current stance matches the given string. For string based comparisons, this will correctly test against the stance values possible if using [[Combat Mastery]] or [[[[Warrior_Tricks#Stance_Perfection|Stance Perfection]]]], while integer based arguments will perform a precise comparison.&lt;br /&gt;
&lt;br /&gt;
=== check(thing) ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstanding&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;spirit defense&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkdead&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; mostly true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; checkstanding; checknotstanding; checksitting; checkprone; checkkneeling/kneeling?; checkprep/prepped?; checkmind; checkgrouped/checkjoined/joined?; checkwebbed/webbed?; checkstunned/stunned?; checkdead/dead?; checkhidden/checkhiding/hidden/hiding?; checkname/myname?; checkspell/checkactive/active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Most are true if you are (checkstunned for example), false if you aren&#039;t; they all follow the same basic behavior as the above-documented &#039;check&#039; commands.&lt;br /&gt;
&lt;br /&gt;
=== checkname ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkname &amp;quot;Shaelun&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; string or true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; True/false if given a string and the names match, or just returns the character name if given no arguments.&lt;br /&gt;
&lt;br /&gt;
=== checkstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkstamina&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false or an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Only in StormFront (there is no auto-updated stamina tag in Wizard).  Given no arguments, returns your current stamina.  Given a number, returns true/false based on whether you have at least or more than that number.&lt;br /&gt;
&lt;br /&gt;
=== checkrt / checkcastrt ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkcastrt&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; value of roundtime&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a value of how much roundtime left. Useful for IF statements.&lt;br /&gt;
&lt;br /&gt;
=== checkmana/checkhealth/checkspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkmana 50&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; identical as above&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; health, health?, mana, mana?, spirit, spirit?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to checkstamina.&lt;br /&gt;
&lt;br /&gt;
=== maxhealth/maxstamina/maxmana/maxspirit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (checkhealth &amp;lt; maxhealth)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns your maximum health/spirit/stamina/mana as an integer (class Fixnum).  Takes no arguments.&lt;br /&gt;
&lt;br /&gt;
=== percenthealth/percentmana/percentspirit/percentstamina ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fput &amp;quot;eat my acantha leaf&amp;quot; while (percenthealth &amp;lt; 90)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns an integer (0-100) representing the percentage of your current health/mana/whatever in relation to your max.&lt;br /&gt;
&lt;br /&gt;
=== checkspell ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
checkspell &amp;quot;elemental defense i&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; active?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns true if the spell you give it is active, false if it isn&#039;t (only available if you use the infomon script, since that&#039;s what keeps track of this).&lt;br /&gt;
&lt;br /&gt;
=== Wounds ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.torso&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.neck&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Wounds.lhand&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Variations:&#039;&#039;&#039; Wounds.head; Wounds.neck; Wounds.abs; Wounds.lhand; Wounds.rhand; Wounds.larm; Wounds.rarm; Wounds.chest; Wounds.back; Wounds.rleg; Wounds.lleg; Wounds.nerves&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the current wound rank (numerically).  If I had &#039;deep gashes and serious bleeding&#039; on my chest, Wounds.chest would return the integer 3.  If I had no wound there, it would return 0.&lt;br /&gt;
&lt;br /&gt;
=== Scars ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.abs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.nerves&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Scars.rleg&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to Wounds above, but for scars instead of wounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lich toggles ==&lt;br /&gt;
&lt;br /&gt;
=== # QUIET ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
&amp;amp;#35; QUIET&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; n/a&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This is a special directive that must be a Ruby comment placed as above in the first line of the Lich script. Lich will ordinarily bookend the lifetime of a script with &amp;lt;code&amp;gt;--- Lich: (scriptname) active.&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--- Lich: (scriptname) has exited.&amp;lt;/code&amp;gt; This option omits those lines, allowing a script to start and exit silently.&lt;br /&gt;
&lt;br /&gt;
=== hide_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
hide_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;hidden&#039; setting.  When this setting is on (defaults to off), a script will not be listed when the user types ;list. It will still show up under ;list all. There is no way to prevent a script from being being displayed in ;list all.&lt;br /&gt;
&lt;br /&gt;
=== i_stand_alone ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
i_stand_alone&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off.  Removes a script from ALL data feeds; a script using this will receive no game lines and no unique data whatsoever (unless they toggle it back off).  If Lich can more or less ignore that a script exists and not bother with keeping its data stacks up-to-the-second with game data and anything else it&#039;s requested, then a script has virtually no overhead whatsoever (meaning any resources it requires come only from what it does independantly).  Useful for some scripts who have no need to eat up resources being fed game data (such as dict.lic).&lt;br /&gt;
&lt;br /&gt;
=== no_kill_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_kill_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no kill all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;kill all.  A script with this set to on must be killed specifically (by typing ;kill [script], or just ;kill).  There is no way to prevent a script from being killed when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== no_pause_all ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
no_pause_all&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;no pause all&#039; setting: when this setting is on (defaults to off), a script will not be affected by the user typing ;pause all.  A script with this set to on must be killed specifically (by typing ;pause [script], or just ;pause).  There is no way to prevent a script from being paused when targeted by the user.&lt;br /&gt;
&lt;br /&gt;
=== silence_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
silence_me&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;silenced&#039; setting.  A script with this on will not have commands it sends to the game echoed to your game window.  A script run in SAFE mode cannot change this setting (attempting to do so will generate a warning and otherwise have no effect).&lt;br /&gt;
&lt;br /&gt;
===status_tags===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
status_tags&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; ?&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039;Tells Lich to send this script XML tags rather than stripping them, or, if already doing so, tells Lich to go back to stripping the XML. If called with the argument &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;, switches to that setting and echoes that it has done so.&lt;br /&gt;
&lt;br /&gt;
=== toggle_echo ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_echo&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Toggles on/off the &#039;suppress echo&#039; setting.  A script with this on will not execute any &#039;echo&#039; commands, but will silently ignore them instead; it&#039;s designed more for people who don&#039;t want clutter in their game window but still want to make use of an existing script.  Commands sent to the game are still echoed to the game window.&lt;br /&gt;
&lt;br /&gt;
=== toggle_unique ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_unique&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; When a script is set as being &#039;unique&#039;, it does not receive normal game data; instead it only receives what the user sends to it by typing ;send to (script) (message).  This is of use if a script wants to only act on a user&#039;s input or has no use for game data (it provides a method for scripts to make sure game data doesn&#039;t accidentally get recognized as a user&#039;s input, and also serves to prevent scripts from slowly eating away at system resources because the script never checks or clears its data buffer -- see the &#039;clear&#039; command for more on that).&lt;br /&gt;
&lt;br /&gt;
=== toggle_upstream ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
toggle_upstream&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; updated value of the setting (true/false)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This must be enabled to allow the script to intercept what you send to the game. See the separate upstream section for more detail.&lt;br /&gt;
&lt;br /&gt;
== Lich::Util ==&lt;br /&gt;
=== issue_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.issue_command(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end: true, timeout: 5, silent: nil, usexml: true, quiet: false)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.issue_command(&#039;tattoo menu&#039;, /List of flash tattoos available \(Page \d+\):/&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture the returning output from the begging start_pattern(regex) until the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. usexml determines whether the start/end pattern is matching against the xml feed or plain txt feed. quiet flag determines whether the output is squelched or shown to the front end. The only required values needed are command and start_pattern. Everything else has default values that can be used or changed.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command_xml() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command_xml(command, start_pattern, end_pattern = /&amp;lt;prompt/, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command_xml(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture XML buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. end_pattern, include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== quiet_command() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.quiet_command(command, start_pattern, end_pattern, include_end = true, timeout = 5, silent = true)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.quiet_command(&amp;quot;tattoo menu&amp;quot;, /List of flash tattoos available \(Page \d+\):/, end_pattern = /Type TATTOO MENU again in the next minute to display the next group of flash tattoos\./)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as an array of strings.&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will attempt to issue the command(string) given and capture buffer lines once the start_pattern(regex) is seen till the end_pattern(regex) is seen or the timeout(int) is reached. include_end(booleen) will indicate whether the last line of the end_pattern is included in the array. silent(boolean) will determine if the command is sent silently or echo&#039;d to the frontend. include_end, timeout, and silent do not need to be included unless changing the default values.&lt;br /&gt;
&lt;br /&gt;
=== silver_count() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Util.silver_count(timeout = 3)&lt;br /&gt;
&lt;br /&gt;
Lich::Util.silver_count&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an integer of how much silver you have&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; useful to know the amount of silver one has on themselves.&lt;br /&gt;
&lt;br /&gt;
== Lich::Messaging ==&lt;br /&gt;
&lt;br /&gt;
=== monsterbold ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.monsterbold(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.monsterbold(&amp;quot;This text I want to monsterbold&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with proper monsterbold tags depending on FrontEnd used&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will take the string given and return it with monsterbold before/after and xml_encode the msg.&lt;br /&gt;
&lt;br /&gt;
=== msg_format ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg_format(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg_format(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an encoded string with start and end tags to change the color in the FrontEnd&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns the string given with color coding based on the type chosen. Current options are as follows:&lt;br /&gt;
** error, yellow, bold, monster, creature&lt;br /&gt;
** warn, orange, gold, thought&lt;br /&gt;
** info, teal, whisper&lt;br /&gt;
** green, speech, debug, light green&lt;br /&gt;
&lt;br /&gt;
=== msg ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.msg(type, msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.msg(&amp;quot;info&amp;quot;, &amp;quot;Let&#039;s make this text pretty!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; sends the string given to the client encoded for the type given.&lt;br /&gt;
&lt;br /&gt;
=== stream_window ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.stream_window(msg, window)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.stream_window(&amp;quot;Let&#039;s send this to a different window!&amp;quot;, &amp;quot;familiar&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; send the string to the various stream window. Currently supports the familiar, speech, thoughts and loot window.&lt;br /&gt;
&lt;br /&gt;
=== xml_encode ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.xml_encode(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.xml(&amp;quot;Let&#039;s encode some text!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an xml encoded text&lt;br /&gt;
&lt;br /&gt;
=== mono ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich::Messaging.mono(msg)&lt;br /&gt;
&lt;br /&gt;
Lich::Messaging.mono(&amp;quot;Let&#039;s mono some code!&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; force mono formatted string to be displayed properly using XML output class of mono&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
Settings are specific to the script itself. For example, a setting with the name &amp;quot;bank&amp;quot; in fetch_turnips.lic have no effect on the &amp;quot;bank&amp;quot; setting in buy_cheese.lic.&lt;br /&gt;
&lt;br /&gt;
=== Settings.load ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.load&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings[&amp;quot;SettingName&amp;quot;] ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings[&amp;quot;SettingName&amp;quot;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.save ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.save&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings.clear ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Settings.clear&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; either a hash representing your settings, or &#039;nil&#039; if no settings for the script exist&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Note that Settings.clear will erase all settings, but it will NOT save that on its own.  Issue a Settings.save command after the Settings.clear if you want that script&#039;s settings reset permanently.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upstream ==&lt;br /&gt;
&lt;br /&gt;
=== upstream_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same thing as &amp;quot;get&amp;quot; except it fetches the last line the user sent to the game.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_get? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_get?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to get the last line the user sent to the game, but does not wait for a line to be sent.  A script has to ask Lich to give it this information by first using the &amp;quot;toggle_upstream&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
=== upstream_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
upstream_waitfor &amp;quot;climb stairs&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &amp;quot;waitfor&amp;quot; but only checks the upstream commands (the commands sent to the game by the user).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interscript communication ==&lt;br /&gt;
&lt;br /&gt;
=== running? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
running? &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string and returns true/false if the given script is active or not.&lt;br /&gt;
&lt;br /&gt;
=== send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; The target script will be sent a string exactly as though it came from the game.  Returns true if successful, false if the script wasn&#039;t found to be active.&lt;br /&gt;
&lt;br /&gt;
=== send_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
send_scripts &amp;quot;To the running scripts, this line looks identical to one that came from the game&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but sends a line to all scripts instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== start_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_script &amp;quot;heal&amp;quot;, [ &amp;quot;shaelun&amp;quot;, &amp;quot;adhara&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;test  in the game entry box.  Returns &#039;true&#039; if the script was successfully started, &#039;false&#039; if for any reason it couldn&#039;t be found/started.  The optional second argument (which must be an array, as seen in the above example) can be used to simulate arguments to the script (the above example would simulate the user typing:  ;heal shaelun adhara).&lt;br /&gt;
&lt;br /&gt;
=== start_scripts ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
start_scripts &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Executes a &amp;quot;start_script&amp;quot; command for every argument given.  Note that you cannot give a script arguments when using this command.&lt;br /&gt;
&lt;br /&gt;
=== pause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
pause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If given no arguments, pauses the script using the command.  If given a string, pauses the script who&#039;s name matches that string; if the script is not currently active, returns &#039;false&#039; (&#039;true&#039; if the script was paused successfully).&lt;br /&gt;
&lt;br /&gt;
=== unpause_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unpause_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses the script you give it.  Note that because of the way the &#039;script is paused&#039; state is handled, it&#039;s conceivable for a script that was paused to actually still be executing commands internally for a brief time -- a script isn&#039;t actually &amp;quot;stopped dead in its tracks&amp;quot; until it attempts to interact with the game in some way (by fetching game data, sending game data, or by attempting a command that requires the script to be identified).  Since most commands identify a script (including this one), this command cannot unpause the script itself: when it attempts to unpause itself, it will be identified as being paused and will be halted where it is until it&#039;s unpaused by another script or the user (or killed).  When it is, it will be allowed to continue, and will then try to unpause itself (pointlessly, since it was just unpaused...).&lt;br /&gt;
&lt;br /&gt;
=== kill_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
kill_script &amp;quot;test&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Synonyms:&#039;&#039;&#039; kill_scripts, stop_script, stop_scripts&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Simulates the user having entered  ;kill test  in the game entry box and hitting enter; takes multiple scripts to kill.  If the script is not running, returns false; if the script was found to be active and was killed, returns true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique ==&lt;br /&gt;
&lt;br /&gt;
See [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more about the &#039;unique&#039; stack.&lt;br /&gt;
&lt;br /&gt;
=== unique_get ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_get&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Fetches a line from the unique stack, as opposed to the game data stack ().&lt;br /&gt;
&lt;br /&gt;
=== unique_send_to_script ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_send_to_script &#039;scriptname&#039;, &#039;message to send&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;send_to_script&#039;, but the script will receive the string sent in its &#039;unique&#039; stack instead of its &#039;game data&#039; stack (see [[Lich_scripting_reference#toggle_unique|toggle_unique]] for more info).&lt;br /&gt;
&lt;br /&gt;
=== unique_waitfor ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
unique_waitfor &amp;quot;continue&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Same as &#039;waitfor&#039; but acts on the &#039;unique&#039; queue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exit handling ==&lt;br /&gt;
&lt;br /&gt;
=== exit ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Ends the script.&lt;br /&gt;
&lt;br /&gt;
=== die_with_me ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
die_with_me &amp;quot;test&amp;quot;, &amp;quot;calcredux&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; If the given scripts are active at the time the script using this command ends (&amp;quot;exit&amp;quot;, finishes, gets killed by the user, or dies in error) they&#039;ll all be killed automatically (produces no notification to avoid clutter, but the scripts are indeed stopped).  The given scripts need not be running (or technically even exist) at the time this command is used -- it only updates the setting, and that setting isn&#039;t actually acted upon until the script is killed.&lt;br /&gt;
&lt;br /&gt;
=== before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { echo &amp;quot;Oh God, why have you killed me dear user...?!&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
before_dying { Settings.save }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs the given actions right before the script exits.  Note nothing is done at the time this command is used (it simply sets what should be done just before the script is killed).  The block given to this command is actually wrapped up into a proc object (an object of the &#039;Procedure&#039; class), and scheduled to be run when the script is killed/exits (if multiple procs exist, they are executed sequentially in the order they were declared).  Because of this, the same &#039;binding&#039; principles that apply to other proc objects apply here (in a nutshell, if a variable didn&#039;t exist when you declared the &#039;before_dying&#039; stuff, then you can&#039;t use it in the &#039;before_dying&#039; code; if it did exist at the time though, you *can* use it, even if it doesn&#039;t really exist in the script when it dies).  Also note that if the command(s) take more than 0.5 seconds to complete, they&#039;re forcibly aborted and the script is killed regardless (this is to prevent a possibly bad situation where a script makes a mistake in the &#039;before_dying&#039; command and is refusing to stop executing due to errors).  Note that if a script is set as executing in SAFE mode, all the restrictions that normally apply will also apply in the &#039;before_dying&#039; code block (this cannot circumvent that, nor can anything else for that matter).&lt;br /&gt;
&lt;br /&gt;
=== undo_before_dying ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
undo_before_dying&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Clears any &#039;before_dying&#039; commands that have been used for the script.&lt;br /&gt;
&lt;br /&gt;
=== abort! ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
abort!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; does not return&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Immediately kills the script, bypassing any &#039;before_dying&#039; blocks that have been registered.  Probably won&#039;t ever be of use, but it&#039;s a way to make the calling script go away as fast as possible (note that it isn&#039;t any faster than the &#039;exit&#039; command is, it just makes sure that nothing except stopping the script happens).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spell ==&lt;br /&gt;
&lt;br /&gt;
The Spell class combines spell information from spell-list.xml and character information from infomon to greatly simplify basic spell handling.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].cast&lt;br /&gt;
Spell[503].cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to cast spell given using info from spell-list.xml&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].affordable?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Useful for knowing if you have enough mana for spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].active?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns true or false if spell is active&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will return true if the spell is currently active on yourself, false if it is not.&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].timeleft ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].timeleft&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns amount of time left as value&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_cast() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_cast&lt;br /&gt;
Spell[503].force_cast(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force cast spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_channel() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_channel&lt;br /&gt;
Spell[503].force_channel(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force channel spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_evoke() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_evoke&lt;br /&gt;
Spell[503].force_evoke(&#039;Tilmen&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force evoke spell&lt;br /&gt;
&lt;br /&gt;
=== Spell[number].force_incant() ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Spell[503].force_incant&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; returns result as string ( ie cast roundtime, hinderance, etc. )&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempt to force incant spell&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
&lt;br /&gt;
=== active? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.active?(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.active?(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.active?(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.active?(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.active?(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the given effect is currently active. Spells can be referenced by number or name, unless the spell does not have a number, then must be referenced by name. Name can only be used when FLAG ShowSpellName is set to ON.&lt;br /&gt;
&lt;br /&gt;
=== time_left ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Effects::Spells.time_left(&amp;quot;Call Familiar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Spells.time_left(920)&lt;br /&gt;
&lt;br /&gt;
Effects::Cooldowns.time_left(&amp;quot;Mana Leech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Buffs.time_left(&amp;quot;Rapid Fire&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Effects::Debuffs.time_left(&amp;quot;Silenced&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; time left in minutes as a floating number&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to determine how much time is left on a given effect.&lt;br /&gt;
&lt;br /&gt;
== Weapon ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.known?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.known?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.affordable?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the weapon skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Weapon.available?(name)&lt;br /&gt;
&lt;br /&gt;
Weapon.available?(&amp;quot;Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the weapon skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== CMan ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.known?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.known?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.affordable?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the cman skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
CMan.available?(name)&lt;br /&gt;
&lt;br /&gt;
CMan.available?(&amp;quot;Garrote&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the cman skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== Shield  ==&lt;br /&gt;
&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.known?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.known?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.affordable?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the shield skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.available?(name)&lt;br /&gt;
&lt;br /&gt;
Shield.available?(&amp;quot;Shield Charge&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the shield skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
=== use ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Shield.use(name, target = &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, &amp;quot;Wyrom&amp;quot;)&lt;br /&gt;
Shield.use(&amp;quot;Shield Charge&amp;quot;, 9000)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Attempts to use the shield skill given on target specified. Target can be a GameObj, integer, or string. If no target given, will issue command with no target, relying on game-engine targeting.&lt;br /&gt;
&lt;br /&gt;
== Armor ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Armor.known?(name)&lt;br /&gt;
&lt;br /&gt;
Armor.known?(&amp;quot;Armor Blessing&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the armor skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
== Feat ==&lt;br /&gt;
=== known? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.known?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.known?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is known to the character.&lt;br /&gt;
&lt;br /&gt;
=== affordable? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.affordable?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.affordable?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Used to detect whether the feat skill given is affordable for the character.&lt;br /&gt;
&lt;br /&gt;
=== available? ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Feat.available?(name)&lt;br /&gt;
&lt;br /&gt;
Feat.available?(&amp;quot;Absorb Magic&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether the feat skill is known, currently affordable, and that no known current cooldown or Overexerted debuff would block it&#039;s use.&lt;br /&gt;
&lt;br /&gt;
== GameObj ==&lt;br /&gt;
&lt;br /&gt;
The GameObj class tracks various objects in the same room as you, and makes their game id, name, noun, status, and contents available to you.&lt;br /&gt;
&lt;br /&gt;
=== GameObj arrays ===&lt;br /&gt;
&lt;br /&gt;
Several arrays are exposed by GameObj. They include:&lt;br /&gt;
&lt;br /&gt;
==== GameObj.inv ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the things you are wearing.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.pcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the other players in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.npcs ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the npcs in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.loot ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the loot in the room, or nil if there is none.  For the purposes of this function, loot is anything that Simu hasn&#039;t tagged with monster bold.  Any exits or anything that shows up in the &amp;quot;You also see&amp;quot; line will be included.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing any links found in the room description, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.dead ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the dead &#039;&#039;&#039;npcs&#039;&#039;&#039; in the room, or nil if there are none.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.fam_pcs, GameObj.fam_npcs, GameObj.fam_loot, GameObj.fam_room_desc ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class.  Similar to the ones above, except for your familiar&#039;s room, and these don&#039;t stay up-to-date without having your familiar look at the room.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.targets ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an array of objects of the GameObj class representing the hostile npcs in the room, the mobs, the monsters, whatever you want to call them.&lt;br /&gt;
&lt;br /&gt;
==== GameObj.target ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing the current target you have selected, if any.&lt;br /&gt;
&lt;br /&gt;
=== Finding game objects with GameObj ===&lt;br /&gt;
&lt;br /&gt;
Now that you&#039;ve got an object or array of objects, here&#039;s what to do with them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
target = GameObj.npcs.find { |npc| npc.status.nil? }&amp;lt;br&amp;gt;&lt;br /&gt;
if target&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;fput &amp;quot;attack ##{target.id}&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; This example shows (in an over-simplified way) the most common use of the GameObj class.   First, &amp;quot;GameObj.npcs&amp;quot; gives an array of all the npcs in the room.  Then, &amp;quot;.find&amp;quot; searches each item in that array.  For each item in the array, the code inside the brackets following &amp;quot;GameObj.npcs.find&amp;quot; is run, and &amp;quot;npc&amp;quot; represents the item it&#039;s currently looking at.  The code inside the brackets acts like an if statement, and as soon as it is true, &amp;quot;target&amp;quot; is assigned the npc object.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;status&amp;quot; method applies to npcs and pcs (using it on others won&#039;t give an error, but it will always return nil).  The status is basically whatever shows up after &amp;quot;that appears&amp;quot;, &amp;quot;that is&amp;quot;, or &amp;quot;who is&amp;quot;.  So, if you also see a kobold that appears stunned, its status will be &amp;quot;stunned&amp;quot;.  In the example, we&#039;re looking for an npc with a nil status, because that represents an npc that&#039;s standing and not stunned, dead, prone, etc.  The game never shows &amp;quot;You also see a kobold that is standing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now suppose there&#039;s twenty kobolds in the room, and only the fifteenth one is standing.  How can you be sure you attack the standing one?  This is where the kobold&#039;s id comes in handy.  Simu assigns an id to almost everything in the game.  Stormfront uses these ids when you click on links.  For the most part, these ids can be used just like nouns.  &amp;quot;attack ##{target.id}&amp;quot; will attack the npc you found earlier, even if other npcs are walking in and out of the room.  The double pound sign is not a typo.&lt;br /&gt;
&lt;br /&gt;
=== Other GameObj methods ===&lt;br /&gt;
&lt;br /&gt;
==== GameObj.containers ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a Hash of ids (as Strings) mapping to arrays of objects of the GameObj class. Each id represents an accessible container &#039;&#039;&#039;that GameObj is aware of&#039;&#039;&#039; with the given id. The id maps to an array of objects of the GameObj class representing that container&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
For a container to be added to the Hash, GameObj must first be made aware of its contents by some sort of interaction with the container, looking in it, opening it, and more. (Someone who knows the specific cases, please add detail!)&lt;br /&gt;
&lt;br /&gt;
==== GameObj.right_hand, GameObj.left_hand ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; an object of the GameObj class representing whatever is in your hand.  Currently, if there is nothing in your hand, it still returns a GameObj where the name is &amp;quot;Empty&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Useful and hopefully self-explanatory methods to use once you have the right GameObj object====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
.id&amp;lt;br&amp;gt;&lt;br /&gt;
.name&amp;lt;br&amp;gt;&lt;br /&gt;
.noun&amp;lt;br&amp;gt;&lt;br /&gt;
.status&amp;lt;br&amp;gt;&lt;br /&gt;
.contents&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script ==&lt;br /&gt;
&lt;br /&gt;
The Script class deals with and runs scripts.&lt;br /&gt;
&lt;br /&gt;
=== Script.start ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.run ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the specified script and waits while it runs. Arguments for that script should be passed as a single string. A hash can also be passed with other script options (:quiet, :force, and you can also use :name and :args instead of passing one/two strings).&lt;br /&gt;
&lt;br /&gt;
=== Script.list, Script.running, Script.hidden ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; An array of Script objects for every running/visible/invisible script.&lt;br /&gt;
*&#039;&#039;&#039;Note:&#039;&#039;&#039; This is not the same as ;list. The Script class does not have a defined to_s method.&lt;br /&gt;
&lt;br /&gt;
=== Script.running? ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Checks whether a script is running (paused or not)&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
&lt;br /&gt;
=== Script.pause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Pauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was paused successfully, false otherwise (script not running or already paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.unpause ===&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Unpauses a script&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if the script was unpaused successfully, false otherwise (script not running or was not paused)&lt;br /&gt;
&lt;br /&gt;
=== Script.paused? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script is running and paused, false otherwise&lt;br /&gt;
&lt;br /&gt;
=== Script.exists? ===&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true if a script with the given name is in the user&#039;s script directory, false otherwise. extension is optional.&lt;br /&gt;
&lt;br /&gt;
=== Script.log ===&lt;br /&gt;
Appends to the script&#039;s .log file in the lich/log directory.&lt;br /&gt;
&lt;br /&gt;
=== Script.db ===&lt;br /&gt;
Gets you a sqlite3 database for your script, of type SQLite3::Database (http://www.rubydoc.info/github/luislavena/sqlite3-ruby/SQLite3/Database)&lt;br /&gt;
&lt;br /&gt;
=== Script.version ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; Ruby Gem version&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and returns the current version in header of script as a Ruby Gem version&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Script.version(&amp;quot;infomon&amp;quot;, &amp;quot;1.18.0&amp;quot;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true/false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes a string(script) and minimum required version&lt;br /&gt;
&lt;br /&gt;
== Global variables ==&lt;br /&gt;
&lt;br /&gt;
=== $PROGRAM_NAME ===&lt;br /&gt;
Ruby&#039;s global variable capturing current script -- in this case, the path to Lich.&lt;br /&gt;
&lt;br /&gt;
=== $frontend ===&lt;br /&gt;
Frontend detected by Lich.&lt;br /&gt;
&lt;br /&gt;
=== $lich_dir ===&lt;br /&gt;
Path of the current Lich directory.&lt;br /&gt;
&lt;br /&gt;
=== $login_time ===&lt;br /&gt;
Local time the current Lich session started.&lt;br /&gt;
&lt;br /&gt;
=== $script_dir ===&lt;br /&gt;
Path to directory Lich is using to get scripts.&lt;br /&gt;
&lt;br /&gt;
=== $version ===&lt;br /&gt;
Lich version.&lt;br /&gt;
&lt;br /&gt;
== Builtin Lich shortcuts ==&lt;br /&gt;
&lt;br /&gt;
These automatically perform multiple checks or commands.&lt;br /&gt;
&lt;br /&gt;
=== take ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
take &amp;quot;box&amp;quot;, &amp;quot;coffer&amp;quot;, &amp;quot;ruby&amp;quot;, &amp;quot;etc&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string (the last line the &#039;fput&#039; command saw)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Picks up every item listed and puts each one in turn into your &#039;lootsack:&#039; setting by issuing the commands with fput.&lt;br /&gt;
&lt;br /&gt;
=== fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Performs a &#039;look&#039; and takes/puts away all items on the ground that aren&#039;t listed in your &#039;excludeloot:&#039; setting.  Return value is the last line from the game.&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; GS now natively includes the command LOOT ROOM with a similar effect.&lt;br /&gt;
&lt;br /&gt;
=== Lich.fetchloot ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
Lich.fetchloot&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; a string&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to &#039;fetchloot&#039; in all ways except only the items listed in your &#039;treasure:&#039; setting are fetched.&lt;br /&gt;
&lt;br /&gt;
=== walk ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
walk&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Moves in a random cardinal direction (what&#039;s seen in the &#039;Obvious exits:&#039; line), storing the direction moved, and returning &#039;true&#039; if there is a critter in the room or &#039;false&#039; if there aren&#039;t any NPCs in the room.  The stored direction will not be among the random directions chosen the next time the &#039;walk&#039; command is used (unless it hits a dead-end, then it will backtrack the way it came).&lt;br /&gt;
&lt;br /&gt;
=== run ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
run if not health(50)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; true or false&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Will execute a &#039;walk&#039; command repeatedly until it enters a room with no critters, at which point it returns and the script will pick up execution on the next line (does not continue to run away).&lt;br /&gt;
*&#039;&#039;&#039;See also:&#039;&#039;&#039; wander.lic is a popular and sophisticated auto-moving creature-finding script.&lt;br /&gt;
&lt;br /&gt;
=== watchhealth ===&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50) { echo &amp;quot;Uh, your health is below 50...&amp;quot; }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
watchhealth(50, proc_object)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; nothing useful&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns immediately so that the calling script continues to run as normal, and while it does, monitors your health.  If it falls below the number you give it, executes the block you passed to it.  Only does this once -- if you want it to repeat as the script executes (be careful, chances are your health will still be below 50 after the block executes once) then pass watchhealth a proc object that includes a line registering itself over again (as in, a proc that includes a &#039;watchhealth(#, self)&#039; thingie).  If your health never falls below the number you give it, then nothing happens; once the script ends, it stops watching.&lt;br /&gt;
&lt;br /&gt;
== goto ==&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&lt;br /&gt;
goto &amp;quot;MainLabel&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Returns:&#039;&#039;&#039; (has no return value, the current execution stack is discarded and the jump never returns)&lt;br /&gt;
*&#039;&#039;&#039;Description:&#039;&#039;&#039; Identical to standard Wizard/SF scripts; the label to jump to has to be in quotes, and it is (kinda sorta) case insensitive.  The label declaration itself (the LABEL: line) MUST NOT be in quotes: only the name of the label when you use the goto command. If there are two labels with the same name but different capitalizations, the goto command will attempt to be case sensitive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[The Lich]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*The initial content of this article was copied from the scripting documentation posted by Tillmen which formerly resided at http://lichproject.com/&lt;br /&gt;
&lt;br /&gt;
[[category:Scripts]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Symbol_of_Preservation&amp;diff=220736</id>
		<title>Symbol of Preservation</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Symbol_of_Preservation&amp;diff=220736"/>
		<updated>2024-06-11T16:41:27Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: Additional information about a possible error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Order of Voln navigation}}&lt;br /&gt;
&#039;&#039;&#039;Step 23&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Symbol of Preservation&#039;&#039;&#039;, governed by Lady [[Lorminstra]], is obtained upon completion of the 23rd step of the [[Order of Voln]]. This symbol acts to strengthen the bonds of spirit to body in a target (or oneself), similar to the [[Cleric Base]] spell [[Preservation (305)]], or the contents of a [[white flask]]. Preservation, regardless of the source, is also commonly referred to as &#039;life keep&#039;.&lt;br /&gt;
&lt;br /&gt;
== Using the Symbol of Preservation ==&lt;br /&gt;
&lt;br /&gt;
;Syntax: &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;symbol of preservation (target)&amp;lt;/span&amp;gt;&lt;br /&gt;
*The target is optional - use of the symbol without a target will default to oneself.&lt;br /&gt;
*This symbol can even be used when [[Death&#039;s Sting|dead]], to preserve the souls of the Volner and any group members.&lt;br /&gt;
*This symbol preserves the corpse for 30 seconds per member&#039;s rank with a thirteen-minute maximum at mastery.&lt;br /&gt;
&lt;br /&gt;
==[[Favor]] Cost==&lt;br /&gt;
{{Spoiler}}&lt;br /&gt;
&lt;br /&gt;
Favor cost is based on the member&#039;s level. See [[Favor#Symbol Use Favor Cost|Table]] for specific examples. Each use has a relative favor cost of 6x [[Symbol of Protection]].&lt;br /&gt;
&lt;br /&gt;
===[[Favor]] Required to Obtain Symbol of Preservation ===&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Formula: &amp;lt;tt&amp;gt;2200 + (( level&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;amp;times; 40) &amp;amp;divide; 3 )&amp;lt;/tt&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Ex. level 15 member: &amp;lt;tt&amp;gt;2200 + ((15 &amp;amp;times; 15 &amp;amp;times; 40) &amp;amp;divide; 3) = 5200 favor&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ex. level 20 member: &amp;lt;tt&amp;gt;2200 + ((20 &amp;amp;times; 20 &amp;amp;times; 40) &amp;amp;divide; 3) = 7533 favor&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monk&#039;s Teaching and Instruction Highlights===&lt;br /&gt;
&lt;br /&gt;
*Explains the importance of having studied all previous lessons.&lt;br /&gt;
*Lorminstra has shown us how to preserve our own spirits, even when dead in order to delay decaying.&lt;br /&gt;
&lt;br /&gt;
=== [[Wehnimer&#039;s Landing]] Task ===&lt;br /&gt;
To gain Lorminstra&#039;s blessing, one must help one that has not found the favor of the Gods to do so.&lt;br /&gt;
*First, find a player with no deeds.  Usually, this is easiest to accomplish by seeking out the Clerk&#039;s office or low-level hunting grounds.&lt;br /&gt;
*Take the above-mentioned character to the altar in Lorminstra&#039;s Temple: (Lich ID 7523)&lt;br /&gt;
**From TSC: E, E, E, S, S, E, Go temple, Go altar&lt;br /&gt;
*At the altar, type &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;say Lorminstra, give (other character) my deed.&amp;lt;/span&amp;gt;&lt;br /&gt;
*If you receive the message &amp;quot;As you begin to utter the words, your mouth closes up and you cannot speak them.&amp;quot; this means you have 0 deeds to give away.&lt;br /&gt;
*One deed will be removed from you and transferred to the other player, and your task will be completed.&lt;br /&gt;
*Return to monk to receive symbol (Lich ID: 18190)&lt;br /&gt;
&lt;br /&gt;
=== [[Ta&#039;Vaalor]] Task ===&lt;br /&gt;
Likewise, we must help out the less-blessed.&lt;br /&gt;
*First, find a player with no deeds.  Usually, this is easiest to accomplish by seeking out low-level hunting grounds.&lt;br /&gt;
*Take this character to the Temple:&lt;br /&gt;
*From Victory Court: E, E, E, N, E, E, E, N, N, Go structure, W to the altar (Lich ID: 10370)&lt;br /&gt;
*At the altar, type &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;say Lorminstra, give (other character) my deed.&amp;lt;/span&amp;gt;&lt;br /&gt;
*If you receive the message &amp;quot;As you begin to utter the words, your mouth closes up and you cannot speak them.&amp;quot; this means you have 0 deeds to give away.&lt;br /&gt;
*One deed will be removed from you and transferred to the other player, and your task will be completed.&lt;br /&gt;
*Return to monk to receive symbol (Lich ID: 25949)&lt;br /&gt;
&lt;br /&gt;
===Deed Transfer Messaging===&lt;br /&gt;
&lt;br /&gt;
Recipients View&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&amp;lt;Voln Member&amp;gt; mutters something.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You are suddenly covered by a blue light that is emanating from the altar and which also covers &amp;lt;Voln Member&amp;gt;.  Then it is gone and you realize that something has happened to you and him.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{top}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Symbols]]&lt;br /&gt;
[[Category:Order of Voln]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Symbol_of_Preservation&amp;diff=220735</id>
		<title>Symbol of Preservation</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Symbol_of_Preservation&amp;diff=220735"/>
		<updated>2024-06-11T16:38:42Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: Additional information about a possible error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Order of Voln navigation}}&lt;br /&gt;
&#039;&#039;&#039;Step 23&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Symbol of Preservation&#039;&#039;&#039;, governed by Lady [[Lorminstra]], is obtained upon completion of the 23rd step of the [[Order of Voln]]. This symbol acts to strengthen the bonds of spirit to body in a target (or oneself), similar to the [[Cleric Base]] spell [[Preservation (305)]], or the contents of a [[white flask]]. Preservation, regardless of the source, is also commonly referred to as &#039;life keep&#039;.&lt;br /&gt;
&lt;br /&gt;
== Using the Symbol of Preservation ==&lt;br /&gt;
&lt;br /&gt;
;Syntax: &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;symbol of preservation (target)&amp;lt;/span&amp;gt;&lt;br /&gt;
*The target is optional - use of the symbol without a target will default to oneself.&lt;br /&gt;
*This symbol can even be used when [[Death&#039;s Sting|dead]], to preserve the souls of the Volner and any group members.&lt;br /&gt;
*This symbol preserves the corpse for 30 seconds per member&#039;s rank with a thirteen-minute maximum at mastery.&lt;br /&gt;
&lt;br /&gt;
==[[Favor]] Cost==&lt;br /&gt;
{{Spoiler}}&lt;br /&gt;
&lt;br /&gt;
Favor cost is based on the member&#039;s level. See [[Favor#Symbol Use Favor Cost|Table]] for specific examples. Each use has a relative favor cost of 6x [[Symbol of Protection]].&lt;br /&gt;
&lt;br /&gt;
===[[Favor]] Required to Obtain Symbol of Preservation ===&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Formula: &amp;lt;tt&amp;gt;2200 + (( level&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;amp;times; 40) &amp;amp;divide; 3 )&amp;lt;/tt&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Ex. level 15 member: &amp;lt;tt&amp;gt;2200 + ((15 &amp;amp;times; 15 &amp;amp;times; 40) &amp;amp;divide; 3) = 5200 favor&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ex. level 20 member: &amp;lt;tt&amp;gt;2200 + ((20 &amp;amp;times; 20 &amp;amp;times; 40) &amp;amp;divide; 3) = 7533 favor&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monk&#039;s Teaching and Instruction Highlights===&lt;br /&gt;
&lt;br /&gt;
*Explains the importance of having studied all previous lessons.&lt;br /&gt;
*Lorminstra has shown us how to preserve our own spirits, even when dead in order to delay decaying.&lt;br /&gt;
&lt;br /&gt;
=== [[Wehnimer&#039;s Landing]] Task ===&lt;br /&gt;
To gain Lorminstra&#039;s blessing, one must help one that has not found the favor of the Gods to do so.&lt;br /&gt;
*First, find a player with no deeds.  Usually, this is easiest to accomplish by seeking out the Clerk&#039;s office or low-level hunting grounds.&lt;br /&gt;
*Take the above-mentioned character to the altar in Lorminstra&#039;s Temple: (Lich ID 7523)&lt;br /&gt;
**From TSC: E, E, E, S, S, E, Go temple, Go altar&lt;br /&gt;
*At the altar, type &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;say Lorminstra, give (other character) my deed.&amp;lt;/span&amp;gt;&lt;br /&gt;
*One deed will be removed from you and transferred to the other player, and your task will be completed.&lt;br /&gt;
*Return to monk to receive symbol (Lich ID: 18190)&lt;br /&gt;
&lt;br /&gt;
=== [[Ta&#039;Vaalor]] Task ===&lt;br /&gt;
Likewise, we must help out the less-blessed.&lt;br /&gt;
*First, find a player with no deeds.  Usually, this is easiest to accomplish by seeking out low-level hunting grounds.&lt;br /&gt;
*Take this character to the Temple:&lt;br /&gt;
*From Victory Court: E, E, E, N, E, E, E, N, N, Go structure, W to the altar (Lich ID: 10370)&lt;br /&gt;
*At the altar, type &amp;lt;span style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;say Lorminstra, give (other character) my deed.&amp;lt;/span&amp;gt;&lt;br /&gt;
*If you receive the message &amp;quot;As you begin to utter the words, your mouth closes up and you cannot speak them.&amp;quot; this means you have 0 deeds to give away.&lt;br /&gt;
*One deed will be removed from you and transferred to the other player, and your task will be completed.&lt;br /&gt;
*Return to monk to receive symbol (Lich ID: 25949)&lt;br /&gt;
&lt;br /&gt;
===Deed Transfer Messaging===&lt;br /&gt;
&lt;br /&gt;
Recipients View&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div {{log}}&amp;gt;&amp;lt;Voln Member&amp;gt; mutters something.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You are suddenly covered by a blue light that is emanating from the altar and which also covers &amp;lt;Voln Member&amp;gt;.  Then it is gone and you realize that something has happened to you and him.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{top}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Symbols]]&lt;br /&gt;
[[Category:Order of Voln]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Locks_Picked_%26_Lockpicks&amp;diff=219567</id>
		<title>Locks Picked &amp; Lockpicks</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Locks_Picked_%26_Lockpicks&amp;diff=219567"/>
		<updated>2024-05-17T13:58:34Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NPC Shops&lt;br /&gt;
|itemtype = locksmith&lt;br /&gt;
|town = Kharam Dzu&lt;br /&gt;
|1 = It is located through a nondescript doorway in a dark alley at the west end of Garnet Street on the west side of town due west from the bridges to Ghorsa Isle.&lt;br /&gt;
|roomname = Locks Picked &amp;amp; Lockpicks (Lich Room #1881)&lt;br /&gt;
|desc = Darkness seems to be the theme for this room as it has no lighting save for what washes in from the entrance.  Before you is a short wooden counter with an odd-looking tree of keys resting on it, beneath which is a small note.  A dusty wooden crate sits in a shadowed corner.  Behind the counter, a slit-eyed halfling watches you with a practice-wary gaze.  You also see the infamous Kniknak Sneakyfeet and a small wooden sign.&lt;br /&gt;
|inventory = &lt;br /&gt;
|2=&lt;br /&gt;
|3=&lt;br /&gt;
}}&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Item !!Price !!&lt;br /&gt;
|-&lt;br /&gt;
|a burnished copper lockpick||100||&lt;br /&gt;
|-&lt;br /&gt;
|a gleaming steel lockpick ||500||&lt;br /&gt;
|-&lt;br /&gt;
|a twisted gold lockpick ||2000||&lt;br /&gt;
|-&lt;br /&gt;
| an angular ora lockpick ||5000||&lt;br /&gt;
|-&lt;br /&gt;
| a blackened mithril lockpick||6000||&lt;br /&gt;
|-&lt;br /&gt;
|a sparkling rainbow glaes lockpick||9500||&lt;br /&gt;
|-&lt;br /&gt;
|an intricate silvery alum lockpick||23000||&lt;br /&gt;
|-&lt;br /&gt;
| a jagged blue vultite lockpick||30000||&lt;br /&gt;
|-&lt;br /&gt;
| an etched dark grey invar lockpick||75000||&lt;br /&gt;
|-&lt;br /&gt;
| a fine-toothed white vaalin lockpick||125000||&lt;br /&gt;
|-&lt;br /&gt;
|a dusty brown locksmith&#039;s toolkit || 200 || belt worn&lt;br /&gt;
|-&lt;br /&gt;
| a set of professional calipers || 7000 || [[Lock Mastery]] calipers&lt;br /&gt;
|-&lt;br /&gt;
| a set of fine glaes-tipped calipers || 7000 || [[Lock Mastery]] calipers&lt;br /&gt;
|-&lt;br /&gt;
| a lockpick case&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;glaes&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;custom colors&amp;lt;/i&amp;gt; || 4000&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;varies&amp;lt;/i&amp;gt; || belt worn&lt;br /&gt;
|-&lt;br /&gt;
| a red tsark skin harness || 2500 || front worn&lt;br /&gt;
|-&lt;br /&gt;
| a black pyrothag hide harness || 2500 || front worn&lt;br /&gt;
|-&lt;br /&gt;
| a siren lizard skin harness || 2500 || front worn&lt;br /&gt;
|-&lt;br /&gt;
| a leather harness&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;custom colors&amp;lt;/i&amp;gt; || 2500&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;varies&amp;lt;/i&amp;gt; || front worn&lt;br /&gt;
|-&lt;br /&gt;
| a knife&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;iron, bronze, obsidian, alexandrite, ruby, mithril, ora, imflass, glaes, vultite&amp;lt;/i&amp;gt; || 6&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;varies&amp;lt;/i&amp;gt; || [[dagger]]&lt;br /&gt;
|-&lt;br /&gt;
!bgcolor=#DDDDDD|Backroom&lt;br /&gt;
!bgcolor=#DDDDDD|&lt;br /&gt;
!bgcolor=#DDDDDD|&lt;br /&gt;
|-&lt;br /&gt;
| a pyramidic clasp&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Required: iron, steel, bronze, obsidian, ruby, mithril, ora, imflass, glaes, vultite&amp;lt;/i&amp;gt; || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|-&lt;br /&gt;
| a rainbow glaes teardrop || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|-&lt;br /&gt;
| a crooked yellow tooth || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|-&lt;br /&gt;
| a hooked dark talon || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|-&lt;br /&gt;
| a shard of jagged obsidian || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|-&lt;br /&gt;
| a sliver of dragonfire quartz || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|- &lt;br /&gt;
| a sliver of dragonsbreath sapphire || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|-&lt;br /&gt;
| a sliver of blackened firestone || 1200 || [[Lock Mastery]] clasp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Historical==&lt;br /&gt;
Shop inventory used to be as follows.&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Item !!Price&lt;br /&gt;
|-&lt;br /&gt;
|a burnished copper lockpick||100&lt;br /&gt;
|-&lt;br /&gt;
|a shiny steel glaesine-tipped lockpick ||500&lt;br /&gt;
|-&lt;br /&gt;
|a twisted gold lockpick ||2000&lt;br /&gt;
|-&lt;br /&gt;
| a simple ora lockpick   ||5000&lt;br /&gt;
|-&lt;br /&gt;
| a blackened mithril lockpick ||6000&lt;br /&gt;
|-&lt;br /&gt;
|a fine-toothed sparkling glaes lockpick||9500&lt;br /&gt;
|-&lt;br /&gt;
|a delicate silvery alum lockpick||23000&lt;br /&gt;
|-&lt;br /&gt;
| a platinum and dark rolaren lockpick||36000&lt;br /&gt;
|-&lt;br /&gt;
|a gold-chased kelyn lockpick||62000&lt;br /&gt;
|-&lt;br /&gt;
|an etched invar lockpick||75000&lt;br /&gt;
|-&lt;br /&gt;
|a dusty brown locksmith&#039;s toolkit||200&lt;br /&gt;
|-&lt;br /&gt;
| a set of professional calipers||7000&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Wizard_Guild_(Wehnimer%27s_Landing)&amp;diff=210403</id>
		<title>Wizard Guild (Wehnimer&#039;s Landing)</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Wizard_Guild_(Wehnimer%27s_Landing)&amp;diff=210403"/>
		<updated>2023-11-19T21:49:00Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: /* Alchemy Shop */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;[[Wehnimer&#039;s Landing]] [[Wizard Guild]]&#039;&#039;&#039; is south of the town, down a broad path in the shadow of [[Melgorehn&#039;s Reach]].  It is an imposing grey tower shrouded in mist. The Courtyard for the [[Wehnimer&#039;s Landing]] [[Wizard Guild]] is located in Lich Room 6328.&lt;br /&gt;
&lt;br /&gt;
==Workshop==&lt;br /&gt;
The workshop is in the northeast tower of the guild.  It is a useful place for enchanting, charging items, and Magic Item Creation (420).&lt;br /&gt;
&lt;br /&gt;
==Atrium==&lt;br /&gt;
The atrium in the southwest tower is a fantastic spot to relax, enjoy a view of the night sky through the crystal roof and the scents of tropical flowers.  This, however, is not a node.&lt;br /&gt;
&lt;br /&gt;
==Observatory==&lt;br /&gt;
Another spectacular place to view the night sky, complete with a telescope.&lt;br /&gt;
&lt;br /&gt;
==NPCs==&lt;br /&gt;
;Guild Master&lt;br /&gt;
Guild Master Keplar appears to be a knowledgeable man.&lt;br /&gt;
&lt;br /&gt;
;Training Administrator&lt;br /&gt;
Training Administrator Leigh is a rather short half-elf, with long dark auburn hair she wears tucked behind her small pointed ears.  Sleeveless robes of cream-colored linen drape her curvaceous form, bound at the waist by a wide blue sash.  A pair of round bronze-framed spectacles perches precariously upon her freckled nose, and her absent gesture to reseat them as they slip has the air of long habit.&lt;br /&gt;
&lt;br /&gt;
;Master Elementalists&lt;br /&gt;
Master Elementalist Haehle is a tall, willowy human with shoulder-length fiery red hair that is neatly tied back in a short ponytail.  Crisp robes of white cotton drape in folds from his slightly squared shoulders, his hands clasped casually within his sleeves.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Amato is a short, squat human clad in a simple brown linen robe.  Her long, reddish-brown hair falls in loose, tousled waves around her, sweeping across her glittering grey eyes.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Scangarella is one of the Wizard Guild&#039;s skilled masters.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Tendle stands average for a half-elf, his tailored trousers and black vest bearing simple, functional designs.  Sky blue eyes peer out from behind a pair of thin silver-framed spectacles perched on his nose, which reaches back into his short, slightly tousled dark blonde hair.  A blue cloak drapes limply from his shoulders, barely concealing a thin silver chain leading into one of his vest pockets.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Ark is a tall, strapping human clad in grey silk robes trimmed with simple patterns of rich bluish embroidery.  His shoulder-length wavy brown hair and neatly trimmed goatee frame inquisitive blue-green eyes and a quiet smile that betrays his imposing look.  An intricately carved lor staff rests easily in his left hand, a number of charms hanging limply from its crown.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Tyler is a short, rather soft-looking human with shining brown eyes and a smile to match.  Her gold-streaked dark brown hair falls just to her shoulders where it curls slightly upward, brushing the collar of her elaborate silver-detailed lilac silk robes.  A slender fireleaf staff rests easily in the crook of her right arm as she quietly peers through her silver-framed spectacles at an ancient tome in her left hand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Tyler glances discretely at Ark, a small smirk tugging at the corner of her mouth.  She arches her eyebrow slightly and twiddles her fingers in Ark&#039;s direction.&lt;br /&gt;
&lt;br /&gt;
Suddenly, the tome in Ark&#039;s hand bursts into flames causing him to drop it to the ground!  As soon as the tome hits the ground, the flames vanish, the tome unscathed.  He casts a scowl in Tyler&#039;s direction as he picks up his fallen tome and she bursts into soft giggles.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ark makes a discrete gesture in Tyler&#039;s direction, a few quiet syllables escaping his lips.&lt;br /&gt;
&lt;br /&gt;
A moment later, Tyler&#039;s hair swirls up around her ears and she casts a dark look Ark&#039;s way as a grin begins to creep across his face.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Refreshments==&lt;br /&gt;
In the day room is an array of refreshments:&lt;br /&gt;
&lt;br /&gt;
On the polished fel counter you see some golden ale, a juicy turkey leg, a mug of thick black coffee, some blanched almonds and a cup of mint tea.&lt;br /&gt;
{{shop table simple}}{{shop item food |item=some golden ale|taste1=The flavor is a bit tart and cider-like, with a dry, metallic finish.|taste2=The crisp flavor and dry finish leave you feeling almost as thirsty as before.|price=Free}}&lt;br /&gt;
{{shop item food |item=a juicy turkey leg |taste1=The delicious, meaty texture is enhanced by a dash of seasonings. |taste2=The meat is fresh and juicy on your tongue. |price=Free}}&lt;br /&gt;
{{shop item food |item=a mug of thick black coffee |taste1=If it were any more powerful, it would probably be catalogued by the Faendryl as a new kind of demon.  Your mouth feels like it wants to turn inside-out from the bitterness. |taste2= Bitter enough to need a quart of sugar and strong enough to keep you from sleeping for a week! |price=Free}}&lt;br /&gt;
{{shop item food |item= some blanched almonds |taste1=Hints of sweetness mingle with salt to produce a fine, flavorful taste. |taste2=The fine roasted flavor is accented with just a hint of salt. |price=Free}}&lt;br /&gt;
{{shop item food |item=a cup of mint tea |taste1= Laced with dollops of honey that overpower the mint, this tea is almost too sweet to drink. |taste2=Cool mint washes across the palate accompanied by thick, sweet honey. |price=Free}}{{shop table end}}&lt;br /&gt;
&lt;br /&gt;
==Guild Shop==&lt;br /&gt;
&amp;lt;i&amp;gt;Note: Prices taken by an elf.  Prices may vary due to race, citizenship, influence, or trading skill.&amp;lt;/i&amp;gt;&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
!bgcolor=#DDDDDD|Item	 &lt;br /&gt;
!bgcolor=#DDDDDD|Price &lt;br /&gt;
!bgcolor=#DDDDDD|Information &lt;br /&gt;
!bgcolor=#DDDDDD|Item&lt;br /&gt;
!bgcolor=#DDDDDD|Price 	&lt;br /&gt;
!bgcolor=#DDDDDD|Information&lt;br /&gt;
|-&lt;br /&gt;
|   a [[rohnuru potion]]&lt;br /&gt;
|   3255 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a field mouse pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[duqnuru potion]]&lt;br /&gt;
|   5115&lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a horned frog pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[dirtokh potion]]&lt;br /&gt;
|   9300 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a black raven pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[mirtokh potion]]&lt;br /&gt;
|   32550 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a hawk pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[sisfu potion]]&lt;br /&gt;
|   4650 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   white owl pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[sarmoc potion]]&lt;br /&gt;
|   4650 &lt;br /&gt;
|   temper removing potion&lt;br /&gt;
|   a wooden talisman&lt;br /&gt;
|   465&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   an enruned ivory wand&lt;br /&gt;
|   13950 &lt;br /&gt;
|   &lt;br /&gt;
|   a rustic brown leather cloak&lt;br /&gt;
|   37200&lt;br /&gt;
|   shoulderworn, VLA&lt;br /&gt;
|-&lt;br /&gt;
|   a silver-etched modwir wand&lt;br /&gt;
|   4650 &lt;br /&gt;
|   &lt;br /&gt;
|   a tan and gold twisted silk belt&lt;br /&gt;
|   5580&lt;br /&gt;
|   waistworn, VSA&lt;br /&gt;
|-&lt;br /&gt;
|   a grey wolf pendant&lt;br /&gt;
|   4650 &lt;br /&gt;
|   neckworn&lt;br /&gt;
|   some brown leather gloves&lt;br /&gt;
|   4650&lt;br /&gt;
|   pinworn&lt;br /&gt;
|-&lt;br /&gt;
|   a white cat pendant&lt;br /&gt;
|   4650 &lt;br /&gt;
|   &lt;br /&gt;
|   a pointed brown wizard&#039;s hat&lt;br /&gt;
|   4650&lt;br /&gt;
|   headworn, VSA&lt;br /&gt;
|-&lt;br /&gt;
|   a black cat pendant&lt;br /&gt;
|   4650 &lt;br /&gt;
|   neckworn&lt;br /&gt;
|   a gold-edged brown hood&lt;br /&gt;
|   4650&lt;br /&gt;
|   headworn&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Alchemy Shop==&lt;br /&gt;
The Annex, Reagent Room is Lich Room 6345&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
!bgcolor=#DDDDDD|Item	 &lt;br /&gt;
!bgcolor=#DDDDDD|Price &lt;br /&gt;
!bgcolor=#DDDDDD|Item	 &lt;br /&gt;
!bgcolor=#DDDDDD|Price 	 &lt;br /&gt;
|-&lt;br /&gt;
|   a black iron cauldron&lt;br /&gt;
|   10000 &lt;br /&gt;
|   some coarse glittering earth&lt;br /&gt;
|   500&lt;br /&gt;
|-&lt;br /&gt;
|   a mortar&lt;br /&gt;
|   4000&lt;br /&gt;
|   a pinch of mithril dust&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   a pestle&lt;br /&gt;
|   1000&lt;br /&gt;
|   a dark glimmering crystal&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   a leather tome&lt;br /&gt;
|   10000&lt;br /&gt;
|   a vial of concentrated firethorn essence&lt;br /&gt;
|   3000&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of clear water&lt;br /&gt;
|   100&lt;br /&gt;
|   a dark shadow-shrouded crystal&lt;br /&gt;
|   400&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of blessed water&lt;br /&gt;
|   100&lt;br /&gt;
|   a shining silver crystal fragment&lt;br /&gt;
|   400&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of pure oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered clear topaz&lt;br /&gt;
|   20&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of blessed oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered almandine garnet&lt;br /&gt;
|   130&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of viscous liquid&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered black jasper&lt;br /&gt;
|   100&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of sand-like liquid&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered rose quartz&lt;br /&gt;
|   160&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of pearlescent oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered citrine quartz&lt;br /&gt;
|   160&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of amber-hued oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered golden topaz&lt;br /&gt;
|   1200&lt;br /&gt;
|-&lt;br /&gt;
|   a diamond lens&lt;br /&gt;
|   35000&lt;br /&gt;
|   some powdered pink topaz&lt;br /&gt;
|   800&lt;br /&gt;
|-&lt;br /&gt;
|   a sapphire lens&lt;br /&gt;
|   22500&lt;br /&gt;
|   some powdered smoky topaz&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   an emerald lens&lt;br /&gt;
|   30000&lt;br /&gt;
|   some powdered blue lapis lazuli&lt;br /&gt;
|   1200&lt;br /&gt;
|-&lt;br /&gt;
|   a ruby lens&lt;br /&gt;
|   30000&lt;br /&gt;
|   some powdered green malachite stone&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   an amethyst lens&lt;br /&gt;
|   12000&lt;br /&gt;
|   some powdered green garnet&lt;br /&gt;
|   1400&lt;br /&gt;
|-&lt;br /&gt;
|   a shadowglass lens&lt;br /&gt;
|   25000&lt;br /&gt;
|   some powdered pink rhodochrosite stone&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   some dark glittering powder&lt;br /&gt;
|   1500&lt;br /&gt;
|   some powdered white opal&lt;br /&gt;
|   1600&lt;br /&gt;
|-&lt;br /&gt;
|   a blue mist-shrouded crystal&lt;br /&gt;
|   800&lt;br /&gt;
|   some powdered star ruby&lt;br /&gt;
|   2400&lt;br /&gt;
|-&lt;br /&gt;
|   a pinch of iron dust&lt;br /&gt;
|   300&lt;br /&gt;
|   some powdered yellow sapphire&lt;br /&gt;
|   1800&lt;br /&gt;
|-&lt;br /&gt;
|   a jagged translucent crystal&lt;br /&gt;
|   400&lt;br /&gt;
|   some powdered violet sapphire&lt;br /&gt;
|   2000&lt;br /&gt;
|-&lt;br /&gt;
|   a pale runed crystal shard&lt;br /&gt;
|   250&lt;br /&gt;
|   some powdered star sapphire&lt;br /&gt;
|   2400&lt;br /&gt;
|-&lt;br /&gt;
|   a shard of cloudy crystal&lt;br /&gt;
|   400&lt;br /&gt;
|   some powdered green sapphire&lt;br /&gt;
|   1800&lt;br /&gt;
|-&lt;br /&gt;
|   a shimmering prismatic shard&lt;br /&gt;
|   250&lt;br /&gt;
|   some powdered blue sapphire&lt;br /&gt;
|   6000&lt;br /&gt;
|-&lt;br /&gt;
|   a pinch of gold dust&lt;br /&gt;
|   1500&lt;br /&gt;
|   some powdered blue coral&lt;br /&gt;
|   60&lt;br /&gt;
|-&lt;br /&gt;
|   a runed azure crystal&lt;br /&gt;
|   250&lt;br /&gt;
|   some powdered turquoise&lt;br /&gt;
|   800&lt;br /&gt;
|-&lt;br /&gt;
|   a runed crimson crystal&lt;br /&gt;
|   350&lt;br /&gt;
|   some powdered white pearl&lt;br /&gt;
|   5000&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
[[Image:WLWizardGuild.jpg|675px|center|Wehnimer&#039;s Landing Wizard Guild Map]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Wizard Guild Locations]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
	<entry>
		<id>https://gswiki.play.net/index.php?title=Wizard_Guild_(Wehnimer%27s_Landing)&amp;diff=210402</id>
		<title>Wizard Guild (Wehnimer&#039;s Landing)</title>
		<link rel="alternate" type="text/html" href="https://gswiki.play.net/index.php?title=Wizard_Guild_(Wehnimer%27s_Landing)&amp;diff=210402"/>
		<updated>2023-11-19T21:47:05Z</updated>

		<summary type="html">&lt;p&gt;RSAZAZEL: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;[[Wehnimer&#039;s Landing]] [[Wizard Guild]]&#039;&#039;&#039; is south of the town, down a broad path in the shadow of [[Melgorehn&#039;s Reach]].  It is an imposing grey tower shrouded in mist. The Courtyard for the [[Wehnimer&#039;s Landing]] [[Wizard Guild]] is located in Lich Room 6328.&lt;br /&gt;
&lt;br /&gt;
==Workshop==&lt;br /&gt;
The workshop is in the northeast tower of the guild.  It is a useful place for enchanting, charging items, and Magic Item Creation (420).&lt;br /&gt;
&lt;br /&gt;
==Atrium==&lt;br /&gt;
The atrium in the southwest tower is a fantastic spot to relax, enjoy a view of the night sky through the crystal roof and the scents of tropical flowers.  This, however, is not a node.&lt;br /&gt;
&lt;br /&gt;
==Observatory==&lt;br /&gt;
Another spectacular place to view the night sky, complete with a telescope.&lt;br /&gt;
&lt;br /&gt;
==NPCs==&lt;br /&gt;
;Guild Master&lt;br /&gt;
Guild Master Keplar appears to be a knowledgeable man.&lt;br /&gt;
&lt;br /&gt;
;Training Administrator&lt;br /&gt;
Training Administrator Leigh is a rather short half-elf, with long dark auburn hair she wears tucked behind her small pointed ears.  Sleeveless robes of cream-colored linen drape her curvaceous form, bound at the waist by a wide blue sash.  A pair of round bronze-framed spectacles perches precariously upon her freckled nose, and her absent gesture to reseat them as they slip has the air of long habit.&lt;br /&gt;
&lt;br /&gt;
;Master Elementalists&lt;br /&gt;
Master Elementalist Haehle is a tall, willowy human with shoulder-length fiery red hair that is neatly tied back in a short ponytail.  Crisp robes of white cotton drape in folds from his slightly squared shoulders, his hands clasped casually within his sleeves.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Amato is a short, squat human clad in a simple brown linen robe.  Her long, reddish-brown hair falls in loose, tousled waves around her, sweeping across her glittering grey eyes.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Scangarella is one of the Wizard Guild&#039;s skilled masters.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Tendle stands average for a half-elf, his tailored trousers and black vest bearing simple, functional designs.  Sky blue eyes peer out from behind a pair of thin silver-framed spectacles perched on his nose, which reaches back into his short, slightly tousled dark blonde hair.  A blue cloak drapes limply from his shoulders, barely concealing a thin silver chain leading into one of his vest pockets.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Ark is a tall, strapping human clad in grey silk robes trimmed with simple patterns of rich bluish embroidery.  His shoulder-length wavy brown hair and neatly trimmed goatee frame inquisitive blue-green eyes and a quiet smile that betrays his imposing look.  An intricately carved lor staff rests easily in his left hand, a number of charms hanging limply from its crown.&lt;br /&gt;
&lt;br /&gt;
Master Elementalist Tyler is a short, rather soft-looking human with shining brown eyes and a smile to match.  Her gold-streaked dark brown hair falls just to her shoulders where it curls slightly upward, brushing the collar of her elaborate silver-detailed lilac silk robes.  A slender fireleaf staff rests easily in the crook of her right arm as she quietly peers through her silver-framed spectacles at an ancient tome in her left hand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Tyler glances discretely at Ark, a small smirk tugging at the corner of her mouth.  She arches her eyebrow slightly and twiddles her fingers in Ark&#039;s direction.&lt;br /&gt;
&lt;br /&gt;
Suddenly, the tome in Ark&#039;s hand bursts into flames causing him to drop it to the ground!  As soon as the tome hits the ground, the flames vanish, the tome unscathed.  He casts a scowl in Tyler&#039;s direction as he picks up his fallen tome and she bursts into soft giggles.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ark makes a discrete gesture in Tyler&#039;s direction, a few quiet syllables escaping his lips.&lt;br /&gt;
&lt;br /&gt;
A moment later, Tyler&#039;s hair swirls up around her ears and she casts a dark look Ark&#039;s way as a grin begins to creep across his face.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Refreshments==&lt;br /&gt;
In the day room is an array of refreshments:&lt;br /&gt;
&lt;br /&gt;
On the polished fel counter you see some golden ale, a juicy turkey leg, a mug of thick black coffee, some blanched almonds and a cup of mint tea.&lt;br /&gt;
{{shop table simple}}{{shop item food |item=some golden ale|taste1=The flavor is a bit tart and cider-like, with a dry, metallic finish.|taste2=The crisp flavor and dry finish leave you feeling almost as thirsty as before.|price=Free}}&lt;br /&gt;
{{shop item food |item=a juicy turkey leg |taste1=The delicious, meaty texture is enhanced by a dash of seasonings. |taste2=The meat is fresh and juicy on your tongue. |price=Free}}&lt;br /&gt;
{{shop item food |item=a mug of thick black coffee |taste1=If it were any more powerful, it would probably be catalogued by the Faendryl as a new kind of demon.  Your mouth feels like it wants to turn inside-out from the bitterness. |taste2= Bitter enough to need a quart of sugar and strong enough to keep you from sleeping for a week! |price=Free}}&lt;br /&gt;
{{shop item food |item= some blanched almonds |taste1=Hints of sweetness mingle with salt to produce a fine, flavorful taste. |taste2=The fine roasted flavor is accented with just a hint of salt. |price=Free}}&lt;br /&gt;
{{shop item food |item=a cup of mint tea |taste1= Laced with dollops of honey that overpower the mint, this tea is almost too sweet to drink. |taste2=Cool mint washes across the palate accompanied by thick, sweet honey. |price=Free}}{{shop table end}}&lt;br /&gt;
&lt;br /&gt;
==Guild Shop==&lt;br /&gt;
&amp;lt;i&amp;gt;Note: Prices taken by an elf.  Prices may vary due to race, citizenship, influence, or trading skill.&amp;lt;/i&amp;gt;&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
!bgcolor=#DDDDDD|Item	 &lt;br /&gt;
!bgcolor=#DDDDDD|Price &lt;br /&gt;
!bgcolor=#DDDDDD|Information &lt;br /&gt;
!bgcolor=#DDDDDD|Item&lt;br /&gt;
!bgcolor=#DDDDDD|Price 	&lt;br /&gt;
!bgcolor=#DDDDDD|Information&lt;br /&gt;
|-&lt;br /&gt;
|   a [[rohnuru potion]]&lt;br /&gt;
|   3255 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a field mouse pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[duqnuru potion]]&lt;br /&gt;
|   5115&lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a horned frog pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[dirtokh potion]]&lt;br /&gt;
|   9300 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a black raven pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[mirtokh potion]]&lt;br /&gt;
|   32550 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   a hawk pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[sisfu potion]]&lt;br /&gt;
|   4650 &lt;br /&gt;
|   enchanting potion&lt;br /&gt;
|   white owl pendant&lt;br /&gt;
|   4650&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   a [[sarmoc potion]]&lt;br /&gt;
|   4650 &lt;br /&gt;
|   temper removing potion&lt;br /&gt;
|   a wooden talisman&lt;br /&gt;
|   465&lt;br /&gt;
|   neckworn&lt;br /&gt;
|-&lt;br /&gt;
|   an enruned ivory wand&lt;br /&gt;
|   13950 &lt;br /&gt;
|   &lt;br /&gt;
|   a rustic brown leather cloak&lt;br /&gt;
|   37200&lt;br /&gt;
|   shoulderworn, VLA&lt;br /&gt;
|-&lt;br /&gt;
|   a silver-etched modwir wand&lt;br /&gt;
|   4650 &lt;br /&gt;
|   &lt;br /&gt;
|   a tan and gold twisted silk belt&lt;br /&gt;
|   5580&lt;br /&gt;
|   waistworn, VSA&lt;br /&gt;
|-&lt;br /&gt;
|   a grey wolf pendant&lt;br /&gt;
|   4650 &lt;br /&gt;
|   neckworn&lt;br /&gt;
|   some brown leather gloves&lt;br /&gt;
|   4650&lt;br /&gt;
|   pinworn&lt;br /&gt;
|-&lt;br /&gt;
|   a white cat pendant&lt;br /&gt;
|   4650 &lt;br /&gt;
|   &lt;br /&gt;
|   a pointed brown wizard&#039;s hat&lt;br /&gt;
|   4650&lt;br /&gt;
|   headworn, VSA&lt;br /&gt;
|-&lt;br /&gt;
|   a black cat pendant&lt;br /&gt;
|   4650 &lt;br /&gt;
|   neckworn&lt;br /&gt;
|   a gold-edged brown hood&lt;br /&gt;
|   4650&lt;br /&gt;
|   headworn&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Alchemy Shop==&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
!bgcolor=#DDDDDD|Item	 &lt;br /&gt;
!bgcolor=#DDDDDD|Price &lt;br /&gt;
!bgcolor=#DDDDDD|Item	 &lt;br /&gt;
!bgcolor=#DDDDDD|Price 	 &lt;br /&gt;
|-&lt;br /&gt;
|   a black iron cauldron&lt;br /&gt;
|   10000 &lt;br /&gt;
|   some coarse glittering earth&lt;br /&gt;
|   500&lt;br /&gt;
|-&lt;br /&gt;
|   a mortar&lt;br /&gt;
|   4000&lt;br /&gt;
|   a pinch of mithril dust&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   a pestle&lt;br /&gt;
|   1000&lt;br /&gt;
|   a dark glimmering crystal&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   a leather tome&lt;br /&gt;
|   10000&lt;br /&gt;
|   a vial of concentrated firethorn essence&lt;br /&gt;
|   3000&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of clear water&lt;br /&gt;
|   100&lt;br /&gt;
|   a dark shadow-shrouded crystal&lt;br /&gt;
|   400&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of blessed water&lt;br /&gt;
|   100&lt;br /&gt;
|   a shining silver crystal fragment&lt;br /&gt;
|   400&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of pure oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered clear topaz&lt;br /&gt;
|   20&lt;br /&gt;
|-&lt;br /&gt;
|   a flask of blessed oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered almandine garnet&lt;br /&gt;
|   130&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of viscous liquid&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered black jasper&lt;br /&gt;
|   100&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of sand-like liquid&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered rose quartz&lt;br /&gt;
|   160&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of pearlescent oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered citrine quartz&lt;br /&gt;
|   160&lt;br /&gt;
|-&lt;br /&gt;
|   a vial of amber-hued oil&lt;br /&gt;
|   100&lt;br /&gt;
|   some powdered golden topaz&lt;br /&gt;
|   1200&lt;br /&gt;
|-&lt;br /&gt;
|   a diamond lens&lt;br /&gt;
|   35000&lt;br /&gt;
|   some powdered pink topaz&lt;br /&gt;
|   800&lt;br /&gt;
|-&lt;br /&gt;
|   a sapphire lens&lt;br /&gt;
|   22500&lt;br /&gt;
|   some powdered smoky topaz&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   an emerald lens&lt;br /&gt;
|   30000&lt;br /&gt;
|   some powdered blue lapis lazuli&lt;br /&gt;
|   1200&lt;br /&gt;
|-&lt;br /&gt;
|   a ruby lens&lt;br /&gt;
|   30000&lt;br /&gt;
|   some powdered green malachite stone&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   an amethyst lens&lt;br /&gt;
|   12000&lt;br /&gt;
|   some powdered green garnet&lt;br /&gt;
|   1400&lt;br /&gt;
|-&lt;br /&gt;
|   a shadowglass lens&lt;br /&gt;
|   25000&lt;br /&gt;
|   some powdered pink rhodochrosite stone&lt;br /&gt;
|   1000&lt;br /&gt;
|-&lt;br /&gt;
|   some dark glittering powder&lt;br /&gt;
|   1500&lt;br /&gt;
|   some powdered white opal&lt;br /&gt;
|   1600&lt;br /&gt;
|-&lt;br /&gt;
|   a blue mist-shrouded crystal&lt;br /&gt;
|   800&lt;br /&gt;
|   some powdered star ruby&lt;br /&gt;
|   2400&lt;br /&gt;
|-&lt;br /&gt;
|   a pinch of iron dust&lt;br /&gt;
|   300&lt;br /&gt;
|   some powdered yellow sapphire&lt;br /&gt;
|   1800&lt;br /&gt;
|-&lt;br /&gt;
|   a jagged translucent crystal&lt;br /&gt;
|   400&lt;br /&gt;
|   some powdered violet sapphire&lt;br /&gt;
|   2000&lt;br /&gt;
|-&lt;br /&gt;
|   a pale runed crystal shard&lt;br /&gt;
|   250&lt;br /&gt;
|   some powdered star sapphire&lt;br /&gt;
|   2400&lt;br /&gt;
|-&lt;br /&gt;
|   a shard of cloudy crystal&lt;br /&gt;
|   400&lt;br /&gt;
|   some powdered green sapphire&lt;br /&gt;
|   1800&lt;br /&gt;
|-&lt;br /&gt;
|   a shimmering prismatic shard&lt;br /&gt;
|   250&lt;br /&gt;
|   some powdered blue sapphire&lt;br /&gt;
|   6000&lt;br /&gt;
|-&lt;br /&gt;
|   a pinch of gold dust&lt;br /&gt;
|   1500&lt;br /&gt;
|   some powdered blue coral&lt;br /&gt;
|   60&lt;br /&gt;
|-&lt;br /&gt;
|   a runed azure crystal&lt;br /&gt;
|   250&lt;br /&gt;
|   some powdered turquoise&lt;br /&gt;
|   800&lt;br /&gt;
|-&lt;br /&gt;
|   a runed crimson crystal&lt;br /&gt;
|   350&lt;br /&gt;
|   some powdered white pearl&lt;br /&gt;
|   5000&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
[[Image:WLWizardGuild.jpg|675px|center|Wehnimer&#039;s Landing Wizard Guild Map]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Wizard Guild Locations]]&lt;/div&gt;</summary>
		<author><name>RSAZAZEL</name></author>
	</entry>
</feed>