<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://graalonline.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ibonic</id>
	<title>Graal Bible - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://graalonline.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ibonic"/>
	<link rel="alternate" type="text/html" href="https://graalonline.net/Special:Contributions/Ibonic"/>
	<updated>2026-04-09T18:47:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://graalonline.net/index.php?title=Projects/Global/GlobalConnect&amp;diff=8112</id>
		<title>Projects/Global/GlobalConnect</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Projects/Global/GlobalConnect&amp;diff=8112"/>
		<updated>2007-02-05T00:21:24Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: /* Members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General Information==&lt;br /&gt;
GlobalConnect is a group on the [http://forums.graalonline.com/ Graal Communication Center] that has access to a special forum.  This forum is a place for members to establish a connection between the playerworld population and the global population.  This forum also is a great place for playerworlds to discuss general ideas including projects by [[Projects/Global/The Graal Reform|The Graal Reform]].&lt;br /&gt;
&lt;br /&gt;
==How to Join==&lt;br /&gt;
Currently the only way to gain access to this group is to be on the list of five selected people for any specific playerworld or to join [[Projects/Global/The Graal Reform|The Graal Reform]].  There are sometimes a few exceptions given to special individuals.&lt;br /&gt;
&lt;br /&gt;
==Members==&lt;br /&gt;
All members currently have subgroup associated with them which shall be displayed.  Here are all the members don't associated with a playerworld per-say (names in ''italics'' are awaiting approval and names in '''bold''' are awaiting removal).&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Group'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Ibonic|Ibonic]]&lt;br /&gt;
| Global Admin&lt;br /&gt;
|-&lt;br /&gt;
| [[User:HoudiniMan|HoudiniMan]]&lt;br /&gt;
| Playerworld Administration Team&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Skyld|Skyld]]&lt;br /&gt;
| Global Scripting Team Member&lt;br /&gt;
|-&lt;br /&gt;
| [[User:zokemon|zokemon]]&lt;br /&gt;
| [[Projects/Global/The Graal Reform|The Graal Reform]] Head&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here is the list of all members associated with a playerworld (names in ''italics'' are awaiting approval and names in '''bold''' are awaiting removal).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Playerworld'''&lt;br /&gt;
| '''Member 1'''&lt;br /&gt;
| '''Member 2'''&lt;br /&gt;
| '''Member 3'''&lt;br /&gt;
| '''Member 4'''&lt;br /&gt;
| '''Member 5'''&lt;br /&gt;
| '''Awaiting Removal'''&lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Atlantis|Atlantis]]&lt;br /&gt;
| [[User:zwr|zwr]]&lt;br /&gt;
| [[User:Enton|Enton]]&lt;br /&gt;
| [[User:khnwffm|khnwffm]]&lt;br /&gt;
| [[User:SmallLars|SmallLars]]&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Graal Bomy Lands|Bomy Island]]&lt;br /&gt;
| [[User:konidias|konidias]]&lt;br /&gt;
| [[User:contiga|contiga]]&lt;br /&gt;
| [[User:cling|cling]]&lt;br /&gt;
| [[User:DARKVILLIN|DARKVILLIN]]&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Classic|Classic]]&lt;br /&gt;
| [[User:Polo|Polo]]&lt;br /&gt;
| [[User:Nightmareangel|Nightmareangel]]&lt;br /&gt;
| [[User:StrykerTFFD|StrykerTFFD]]&lt;br /&gt;
| [[User:Kristi|Kristi]]&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Delteria|Delteria]]&lt;br /&gt;
| [[User:MisconceptioN|MisconceptioN]]&lt;br /&gt;
| [[User:Riot|Riot]]&lt;br /&gt;
| [[User:Bitterchaos|Bitterchaos]]&lt;br /&gt;
| [[User:TiamatIsBack|''TiamatIsBack'']]&lt;br /&gt;
| [[User:Alex-Stravier|Alex-Stravier]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Era|Era]]&lt;br /&gt;
| [[User:Smutastic|Smutastic]]&lt;br /&gt;
| [[User:Chris|Chris]]&lt;br /&gt;
| [[User:RogueShatterblade|RogueShatterblade]]&lt;br /&gt;
| [[User:kinetaro|kinetaro]]&lt;br /&gt;
| [[User:Cassy|Cassy]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Maloria|Maloria]]&lt;br /&gt;
| [[User:Maniaman|Maniaman]]&lt;br /&gt;
| [[User:smirt362|smirt362]]&lt;br /&gt;
| [[User:coreys|coreys]]&lt;br /&gt;
| [[User:goalieboy_01|goalieboy_01]]&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/N-Pulse|'''N-Pulse''']]&lt;br /&gt;
| [[User:Andy182|Andy182]]&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Shaded Legend|'''Shaded Legend''']]&lt;br /&gt;
| [[User:James205|James205]]&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Unholy Nation|'''Unholy Nation''']]&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Valikorlia|'''Valikorlia''']]&lt;br /&gt;
| [[User:Clash|Clash]]&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Worlds/Zodiac|'''Zodiac''']]&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{template:stub}}&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=User:Lyndzey&amp;diff=7480</id>
		<title>User:Lyndzey</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=User:Lyndzey&amp;diff=7480"/>
		<updated>2006-10-19T20:26:29Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: /* Contacts */ Removed because her password(s) were stolen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{player}}&lt;br /&gt;
Lyndzey is a long-time [[Graal]] [[Player]] and [[Graal administration|staff]] member.&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
Lyndzey is known quite well throughout Graal. Her overwhelming staff experience may have some affect on that, though she's considered beneficial to the community and appreciated by many of us regardless.&lt;br /&gt;
&lt;br /&gt;
Since her home server [[PW:Classic | (Classic)]] was been wiped at the beginning of 2005, she's seen more often on various [[Playerworld | playerworlds]] such as [[PW:Era | Era]] and [[Graal2001]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development Areas ==&lt;br /&gt;
Lyndzey's most notable development talent is speculated to be in level design. Though how active she actually is with development is not known at this time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Staff Positions ==&lt;br /&gt;
Lyndzey is currently a member of the Graalonline Account Support team. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
She also has quite a bit of previous experience, including but not limited to the following:&lt;br /&gt;
&lt;br /&gt;
FAQ chief, Police Chief, Events Admin, and Art Asst Admin on [[Graal2001]] &lt;br /&gt;
&lt;br /&gt;
FAQ, LAT, and GP Chief on [[PW:Classic | Classic]]&lt;br /&gt;
&lt;br /&gt;
Manager of Providence&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Graal Accounts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Email address'''&lt;br /&gt;
| '''Admin level'''&lt;br /&gt;
| '''Free upgrades'''&lt;br /&gt;
| '''Banned?'''&lt;br /&gt;
| '''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
| Lyndzey&lt;br /&gt;
| Lyndzey80@sbcglobal.net&lt;br /&gt;
| 4/all&lt;br /&gt;
| Unsure&lt;br /&gt;
| No&lt;br /&gt;
| Main account, administrative work&lt;br /&gt;
|-&lt;br /&gt;
| Lyndzey8000&lt;br /&gt;
| Private&lt;br /&gt;
| No&lt;br /&gt;
| None&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lyndzey is also believed to have at least one secret account.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Lyndzey prefers to be reached through the [[support center]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Server_options&amp;diff=7182</id>
		<title>Server options</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Server_options&amp;diff=7182"/>
		<updated>2006-07-28T23:46:14Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: /* Warping Activation */  - removed &amp;quot;History fact&amp;quot; (about myself) because it seems insignificant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''server options''' are a collection of key=value configuration options that allow you to customize the non-[[GScript|script]]able behaviour of an individual [[Playerworld]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Options are usually set only by high [[Playerworld staff]], preferably only the [[Playerworld owner]], as they are very powerful and can be abused easily.&lt;br /&gt;
&lt;br /&gt;
When you omit an option, its value will not be changed if the option has been used before. Therefore, it is more secure to change only the value and not whole option, should you need to change something.&lt;br /&gt;
&lt;br /&gt;
Lines beginning with # are not parsed, and can be used for comments.&lt;br /&gt;
&lt;br /&gt;
== Known Server Options ==&lt;br /&gt;
&lt;br /&gt;
Please add new options if you discover them.&lt;br /&gt;
&lt;br /&gt;
=== Start location ===&lt;br /&gt;
  startlevel=level name&lt;br /&gt;
  startx=number&lt;br /&gt;
  starty=number&lt;br /&gt;
&lt;br /&gt;
This sets the originating location for all [[Player]]s which do not have location statistics of their own saved [[Local|locally]].&lt;br /&gt;
&lt;br /&gt;
=== Unstick me location ===&lt;br /&gt;
  unstickmelevel=level name&lt;br /&gt;
  unstickmex=number&lt;br /&gt;
  unstickmey=number&lt;br /&gt;
&lt;br /&gt;
These define the position that a [[Player]] is warped to after using the [[Unstick me]] command.&lt;br /&gt;
&lt;br /&gt;
=== Protected Weapons ===&lt;br /&gt;
  protectedweapons=list of comma seperated weapon names&lt;br /&gt;
&lt;br /&gt;
[[NPC weapon]]s that cannot be deleted by the [[Player]]. This differs from weapons with asterisk prefixed name which cannot be deleted with the Del key, but still can be deleted on the [[Clientside]] using the [[Old GScript:destroy|destroy]] command. `Protected' weapons can (unless *ified) be deleted with Del, but the NPC server will not remove them from the player's weapon list and thus the [[Serverside]] part will remain and the player obtains them again on the next connect.&lt;br /&gt;
&lt;br /&gt;
=== Jail Levels ===&lt;br /&gt;
  jaillevels=level names comma separated&lt;br /&gt;
&lt;br /&gt;
Non-[[Playerworld staff|staff]] players in these levels will not be able to leave them. A [[Serverside]] [[Old GScript:setlevel2|setlevel2]] or warping with [[RC]] is neccessary. Also, they can send [[PM]]s only to RC clients and not regular [[Client]]s.&lt;br /&gt;
, ,&lt;br /&gt;
&lt;br /&gt;
=== Explosion Restriction ===&lt;br /&gt;
  noexplosions=true/false&lt;br /&gt;
&lt;br /&gt;
Disables the result of [[Old GScript:putexplosion|putexplosion]], and `explosive' [[NPC weapons]].&lt;br /&gt;
&lt;br /&gt;
=== Statistic Restriction ===&lt;br /&gt;
  setbodyallowed=true/false&lt;br /&gt;
  setheadallowed=true/false&lt;br /&gt;
  setbomyallowed=true/false&lt;br /&gt;
  setswordallowed=true/false&lt;br /&gt;
  setshieldallowed=true/false&lt;br /&gt;
&lt;br /&gt;
Whether the chat commands to change the player's [[Appearance commands|appearance]] are enabled. Defaults to true.&lt;br /&gt;
&lt;br /&gt;
=== Gralat Loss Options ===&lt;br /&gt;
  mindeathgralats=number&lt;br /&gt;
  maxdeathgralats=number&lt;br /&gt;
&lt;br /&gt;
Defines the amount of [[Gralat]]s that the player drops on death.&lt;br /&gt;
&lt;br /&gt;
=== Staff Gralat Restriction ===&lt;br /&gt;
  normaladminscanchangegralats=true/false&lt;br /&gt;
&lt;br /&gt;
Whether normal [[RC]]s can change the gralat count of a player. `Normal' used to be defined as `below [[Adminlevel]] 4', but nowadays is probably regulated by certain high-level [[Admin right]]s.&lt;br /&gt;
&lt;br /&gt;
=== Local 'Staff Guilds' ===&lt;br /&gt;
  staffguilds=comma seperated list of guild names&lt;br /&gt;
&lt;br /&gt;
Matches to these [[Guild]] names appear in the `Staff' section of the playerlist ([[Delphi client]] only for now)&lt;br /&gt;
&lt;br /&gt;
=== `Bush' Items ===&lt;br /&gt;
  bushitems=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether [[Bush]]es contain [[Item]]s. May not work on a [[GMap]].&lt;br /&gt;
&lt;br /&gt;
=== `Baddy' Items ===&lt;br /&gt;
  baddyitems=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether [[Baddy|baddies]] drop [[Item]]s once killed.&lt;br /&gt;
&lt;br /&gt;
=== `Healing' Swords ===&lt;br /&gt;
  healswords=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether is possible to have a negative [[Sword]] power and thus add [[Heart]]s to those hit by the sword.&lt;br /&gt;
&lt;br /&gt;
=== Non-script timeouts ===&lt;br /&gt;
  respawntime=number&lt;br /&gt;
  horselifetime=number&lt;br /&gt;
  baddyrespawntime=number&lt;br /&gt;
&lt;br /&gt;
Timeout in seconds for respawn times for [[Bush]]es, [[Horse]]s and [[Baddy|Baddies]]&lt;br /&gt;
&lt;br /&gt;
=== Server Scripting Flags ===&lt;br /&gt;
  dontaddserverflags=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether [[GScript|scripts]] can add new [[Server flag]]s or only modify existing ones.&lt;br /&gt;
&lt;br /&gt;
=== Server Maps ===&lt;br /&gt;
  bigmap=maptext,mapimage,defaultx,defaulty&lt;br /&gt;
  minimap=maptext,mapimage,defaultx,defaulty&lt;br /&gt;
&lt;br /&gt;
Default serverwide [[Map]]s. Syntax resembles [[Old GScript:setmap|setmap]] and [[Old GScript:setminimap|setminimap]] [[GScript]] commands.&lt;br /&gt;
&lt;br /&gt;
=== Warping (All Players) ===&lt;br /&gt;
  warptoforall=true/false&lt;br /&gt;
  warptoforlowadmins=true/false&lt;br /&gt;
&lt;br /&gt;
Whether all [[Player]]s can use the [[Warpto]] command, and whether [[Global]] [[Admin level]] 1 allows warpto.&lt;br /&gt;
&lt;br /&gt;
=== Warping Activation ===&lt;br /&gt;
  warpto=false/true&lt;br /&gt;
  ignorewarpto=true/false&lt;br /&gt;
&lt;br /&gt;
Allows or disallows the default [[Warpto]] command for all [[staff]], including [[Global]]s. This is normally enabled.&lt;br /&gt;
&lt;br /&gt;
Note that warpto=false will show a &amp;quot;(warping is disabled)&amp;quot; error message to [[Player]], whereas ignorewarpto=true will treat [[Warpto]] commands as just normal chat text and display no error message. &lt;br /&gt;
&lt;br /&gt;
The latter is good for replacing the default [[Warpto]] command with a scripted version.&lt;br /&gt;
&lt;br /&gt;
=== Ghost Mode ===&lt;br /&gt;
  ghostmodeenabled=true/false&lt;br /&gt;
  ghostmodefornotstaff=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether all [[Player]]s appear as [[Ghost]], or only non-[[Playerworld staff|staff]] players, or nobody.&lt;br /&gt;
&lt;br /&gt;
=== Playerlist Icons ===&lt;br /&gt;
  playerlisticons=comma seperated list of statusses&lt;br /&gt;
&lt;br /&gt;
Possible status list, [[Player]]s can select one of them in the [[Players list]]. There must be a [[Downloadable]] file plisticonNAME.png available in a folder specified as `file' in [[Folder configuration]].&lt;br /&gt;
&lt;br /&gt;
=== Profile Variables ===&lt;br /&gt;
  profilevars=comma seperated list of profile variables&lt;br /&gt;
&lt;br /&gt;
Selects what is to be displayed in a [[Player]]'s profile. The default variables are: playerkills, playerdeaths, playerfullhearts, playerrating, playerap, playerrupees, playerswordpower, canspin, largely modelled after [[Old GScript]]. Custom string variables can be added in the format `name=stringname'. If name is not specified, stringname is used.&lt;br /&gt;
&lt;br /&gt;
=== Trial Account Limits ===&lt;br /&gt;
  limitfreeplayers2=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether to disable adding of [[Bomb]]s, [[Arrow]]s, and [[Explosion]]s for [[Trial account]]s.&lt;br /&gt;
&lt;br /&gt;
=== AP System Activation ===&lt;br /&gt;
  apsystem=true/false&lt;br /&gt;
&lt;br /&gt;
Whether the [[AP]] system is enabled. If yes, there are some restrictions for [[Player]]s with low AP regarding hearts.&lt;br /&gt;
&lt;br /&gt;
=== Starting AP ===&lt;br /&gt;
  startap=number&lt;br /&gt;
&lt;br /&gt;
How much [[AP]] [[Player]]s are given upon first login to this [[Playerworld]].&lt;br /&gt;
&lt;br /&gt;
=== Global Guilds Activation ===&lt;br /&gt;
  globalguilds=true/false&lt;br /&gt;
&lt;br /&gt;
Allows or disallows [[Guild]] from the [[Global]] database. This is normally enabled.&lt;br /&gt;
&lt;br /&gt;
  allowedglobalguilds=guild,guild,guild&lt;br /&gt;
&lt;br /&gt;
This option limits what guilds can be used from the [[Global Guilds]] database. (Note: globalguilds= needs to be set to false so other guilds besides the allowed can not be used.&lt;br /&gt;
&lt;br /&gt;
=== AP Timeouts ===&lt;br /&gt;
  aptime0=number&lt;br /&gt;
  aptime1=number&lt;br /&gt;
  aptime2=number&lt;br /&gt;
  aptime3=number&lt;br /&gt;
  aptime4=number&lt;br /&gt;
&lt;br /&gt;
Time (in seconds) it takes to recharge one point of [[AP]] when the AP is currently below 20, 40, 60, 80 and 100 respectively. The defaults are 30, 90, 300, 600 and 1200.&lt;br /&gt;
&lt;br /&gt;
=== Heart/Sword Limits ===&lt;br /&gt;
  heartlimit=number&lt;br /&gt;
  swordlimit=number&lt;br /&gt;
&lt;br /&gt;
The maximum amount of fullhearts and swordpower that is allowed.&lt;br /&gt;
&lt;br /&gt;
=== 'putnpc' Scripting Command ===&lt;br /&gt;
  putnpcenabled=true/false&lt;br /&gt;
&lt;br /&gt;
Whether the [[Old GScript:putnpc|putnpc]] command is enabled. (Mostly [[Deprecated]])&lt;br /&gt;
&lt;br /&gt;
=== Translation ===&lt;br /&gt;
  enabletranslations=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether the [[Translation system]] is enabled.&lt;br /&gt;
(TODO: Move this to the aforelinked article, or gscript articles:) If yes, signs and text in [[GScript|scripts]] in #U(text goes here) form will be saved in a text file where they can be translated into different languages. The files are to be found in the translations/ folder on [[RC]].&lt;br /&gt;
&lt;br /&gt;
=== Language Selection ===&lt;br /&gt;
  translatedlanguages=comma seperated list of languages, like Deutsch,...&lt;br /&gt;
&lt;br /&gt;
The languages of which a [[Translation system|translation]] file shall be loaded by the server. (TODO: See above:) If a file exists, signs and #U() text will be replaced with values from this file.&lt;br /&gt;
&lt;br /&gt;
=== Server Language ===&lt;br /&gt;
  serverlanguage=language name&lt;br /&gt;
&lt;br /&gt;
The default [[Translation system|language]] of the [[Playerworld]]. Defaults to English.&lt;br /&gt;
&lt;br /&gt;
=== NPC-Server 'Sleep' ===&lt;br /&gt;
  sleepwhennoplayers=true/false&lt;br /&gt;
&lt;br /&gt;
Whether the [[NPC Server]] must execute [[GScript|scripts]] even when no [[Player]] is around.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
  newtilesets=true/false&lt;br /&gt;
  newtilesetlevels=comma seperated list of levels&lt;br /&gt;
&lt;br /&gt;
Whether all [[Level]]s will use the new [[Tileset]] layout, or a match list of levels that shall.&lt;br /&gt;
&lt;br /&gt;
=== Staff ===&lt;br /&gt;
  staff=comma seperated list of account names&lt;br /&gt;
&lt;br /&gt;
The [[Account]]s in this list will count as [[Playerworld staff]] as if their admin level was &amp;gt; 0. Their [[PM|mass messages]] override the option to ignore mass messages, their [[Admin rights]] will be applied, and if their [[IP address range]] matches their actual IP address, they may log in to [[RC]].&lt;br /&gt;
&lt;br /&gt;
=== GMAP List ===&lt;br /&gt;
  gmaps=comma seperated list of gmap files, without .gmap extension&lt;br /&gt;
&lt;br /&gt;
The  server will attempt to load these as [[GMap]]s. As this line might get rather crowded, it is possible to have multiple gmaps= lines.&lt;br /&gt;
&lt;br /&gt;
=== Weapon Order ===&lt;br /&gt;
  weaponorder=comma seperated list of weapon names&lt;br /&gt;
&lt;br /&gt;
Specifies the order in which the [[NPC weapon]] [[GScript|scripts]] will be sent to the [[Clientside|client]] upon connection. This can be used to ensure that the inventory script that disables the [[Q menu]] will be sent first, for example. First, all weapons in this list will be sent in order, then all unlisted weapons.&lt;br /&gt;
&lt;br /&gt;
=== NPC-Control Rights ===&lt;br /&gt;
  npcrights=true/false&lt;br /&gt;
&lt;br /&gt;
Whether [[NC rights]] are active. For security reasons, it is strongly recommended to set this to true.&lt;br /&gt;
&lt;br /&gt;
=== Kill Count ===&lt;br /&gt;
  dontchangekills=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether the variables 'playerkills' and 'playerdeaths' can be changed [[serverside]] via [[GScript]].&lt;br /&gt;
&lt;br /&gt;
=== NPC-Server Nickname ===&lt;br /&gt;
  nickname=string&lt;br /&gt;
&lt;br /&gt;
The [[NPC Server]] will use this as its [[Nick name]], with (Server) appended. Ignores all [[Guild]] tags.&lt;br /&gt;
&lt;br /&gt;
=== Speedhack Tolerance ===&lt;br /&gt;
  speedhacktolerance=number&lt;br /&gt;
&lt;br /&gt;
This gives the percentage of data packages that [[Clientside|clients]] may send above the expected over without being logged as [[Trainer users]]. On [[Graal Kingdoms]], the rather conservative setting of 90 is used. If you set this too low, your server will crash.&lt;br /&gt;
&lt;br /&gt;
=== Idle Disconnect ===&lt;br /&gt;
  disconnectifnotmoved=true/false&lt;br /&gt;
&lt;br /&gt;
Selects whether [[Idle]] [[Player]]s are automatically disconnected. (Possibly deprecated).&lt;br /&gt;
&lt;br /&gt;
=== Save Levels ===&lt;br /&gt;
  savelevels=true/false&lt;br /&gt;
&lt;br /&gt;
Setting this to true allows changes to the [[Tile]]s of [[Level]]s to be saved to the actual level files from [[GScript|scripting]] commands, so it is possible to persistently change the levels.&lt;br /&gt;
&lt;br /&gt;
  savelevelsmessage=true/false&lt;br /&gt;
&lt;br /&gt;
Specifies if saving of levels should be reported on the RC chat (by default enabled).&lt;br /&gt;
&lt;br /&gt;
=== Staff Only ===&lt;br /&gt;
  onlystaff=true/false&lt;br /&gt;
&lt;br /&gt;
Setting this to true allows only staff of the server to log on.&lt;br /&gt;
&lt;br /&gt;
=== Log script function calls ===&lt;br /&gt;
  scriptlogfunctions=write player.nick,write player.guild,call sendtonc,call sendtorc&lt;br /&gt;
&lt;br /&gt;
This lets the npcserver log script activity into logs/scriptfunctionslog.txt. You&lt;br /&gt;
can get a list of available functons / actions by typing ''/listscriptlogfunctions''&lt;br /&gt;
on RC chat. Currently only important or exploitable things can be logged. Keep care&lt;br /&gt;
to delete the logs from time to time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Level Auto-Save ===&lt;br /&gt;
  levelsaveauto=true/false&lt;br /&gt;
Whether or not updateboard2 changes are saved to the level file automatically. (Not yet uploaded to all machines)&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=User:Ibonic&amp;diff=7181</id>
		<title>User:Ibonic</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=User:Ibonic&amp;diff=7181"/>
		<updated>2006-07-28T23:41:46Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: /* Graal Accounts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{player}}&lt;br /&gt;
Ibonic is a member of the Graalonline Account Support team, as well as an accomplished scripter.&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
Ibonic spends most of his time idling on Classic, but also occasionally plays on random private servers to see if they interest him. Although he reads the Graalonline forums quite often, he rarely posts. He tries to keep a low profile and does not &amp;quot;throw himself out there&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development Areas ==&lt;br /&gt;
Ibonic is one of the greatest scripters on Graal, but not many people know him as one because he does not participate on the scripting forums or in #gscript.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Staff Positions ==&lt;br /&gt;
Ibonic is currently the assistant Game Master. He has been the Accounts Admin and held various management positions on servers such as Classic and Graal2001 in the past.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Graal Accounts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Email address'''&lt;br /&gt;
| '''Admin level'''&lt;br /&gt;
| '''Free upgrades'''&lt;br /&gt;
| '''Banned?'''&lt;br /&gt;
| '''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
| Ibonic&lt;br /&gt;
| ibonic@graalonline.com&lt;br /&gt;
| 4/all&lt;br /&gt;
| [[Gold account|Gold]], [[VIP account|VIP]], [[3D account|3D]]&lt;br /&gt;
| No&lt;br /&gt;
| Main account, administrative work&lt;br /&gt;
|-&lt;br /&gt;
| Ibo&lt;br /&gt;
| ibonic@graalonline.com&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Secret&lt;br /&gt;
| None set&lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| No&lt;br /&gt;
| Used to temporarily escape routine PM floods. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
Email: ibonic@graalonline.com&lt;br /&gt;
&lt;br /&gt;
* He doesn't seem to reply to e-mails sent there. Forum PMs are more reliable.&lt;br /&gt;
&lt;br /&gt;
AIM: N/A&lt;br /&gt;
&lt;br /&gt;
ICQ: Private&lt;br /&gt;
&lt;br /&gt;
Ibonic prefers to be reached through the [[support center]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Global_Staff&amp;diff=7180</id>
		<title>Global Staff</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Global_Staff&amp;diff=7180"/>
		<updated>2006-07-28T23:39:43Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The global staff are the higher admins of GraalOnline. They handle the larger issues that playerworld managers can't. If you are in need of a global staff member you can contact them via the [http://support.graalonline.com support center] or other means of commmunication that are listed on the [http://forums.graalonline.com graal forums]. Please remember to contact the correct admin for the problem you need resolved. Also note that Directors and Game Masters should only be contacted when the other admins can't help with your problem.&lt;br /&gt;
&lt;br /&gt;
=== Directors ===&lt;br /&gt;
* Unixmad (Managing)&lt;br /&gt;
* Stefan (Technical)&lt;br /&gt;
&lt;br /&gt;
=== Game Master ===&lt;br /&gt;
* Ibonic&lt;br /&gt;
&lt;br /&gt;
=== Account Support ===&lt;br /&gt;
* Lyndzey&lt;br /&gt;
&lt;br /&gt;
=== Global Scripting Team ===&lt;br /&gt;
* Skyld&lt;br /&gt;
* Jagen&lt;br /&gt;
* CheeToS&lt;br /&gt;
&lt;br /&gt;
=== Playerworld Administration ===&lt;br /&gt;
* HoudiniMan&lt;br /&gt;
* Björn&lt;br /&gt;
* Vulcan&lt;br /&gt;
&lt;br /&gt;
=== Global Guilds Support ===&lt;br /&gt;
* Vulcan&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Graal_Communication_Center/Admin&amp;diff=7179</id>
		<title>Graal Communication Center/Admin</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Graal_Communication_Center/Admin&amp;diff=7179"/>
		<updated>2006-07-28T23:39:12Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:unixmad|unixmad]], [[User:Stefan|Stefan]], [[User:Galen|Galen]], [[User:Darlene159|Darlene]], and [[User:Ibonic|Ibonic]] are the current Administrators of the GCC.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Management/Contacts&amp;diff=7178</id>
		<title>Creation/Management/Contacts</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Management/Contacts&amp;diff=7178"/>
		<updated>2006-07-28T23:37:27Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Spark &amp;quot;left&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generally directors will not reply as they are busy with duties, which is why you should contact admins or the separate divisions related to your problem (e.g: GST for NPC-Server issues)&lt;br /&gt;
&lt;br /&gt;
''All staff listed, except the Kingdoms staff, Zone staff and Super Moderators are Graalonline Global Admins, with a Global RC.''&lt;br /&gt;
&lt;br /&gt;
=Managing Director=&lt;br /&gt;
* [[User:Unixmad|Stéphane Portha]]&lt;br /&gt;
** ''Deals with payment issues only (e.g: Double charges/CC Fraud Bans).''&lt;br /&gt;
** E-Mail: unixmad@graalonline.com&lt;br /&gt;
&lt;br /&gt;
=Technical Director=&lt;br /&gt;
* [[User:Stefan|Stefan]]&lt;br /&gt;
** ''Deals with extreme playerworld issues/in-game bugs/game development.''&lt;br /&gt;
** Forum PM: Stefan&lt;br /&gt;
&lt;br /&gt;
=Account Support=&lt;br /&gt;
* [[User:Ibonic|Ibonic]]&lt;br /&gt;
* [[User:Lyndzey|Lyndzey]]&lt;br /&gt;
&lt;br /&gt;
[http://support.graalonline.com Use the Support Center for help].&lt;br /&gt;
&lt;br /&gt;
=Global Guild Administrator=&lt;br /&gt;
* [[User:Vulcan|Vulcan]]&lt;br /&gt;
** Forum PM: Vulcan&lt;br /&gt;
** AIM: GraalVulcan&lt;br /&gt;
** E-mail: vulcan@graal.net&lt;br /&gt;
[http://support.graalonline.com Use the Support Center for help].&lt;br /&gt;
&lt;br /&gt;
=Playerworld Administration=&lt;br /&gt;
* [[User:HoudiniMan|HoudiniMan]]&lt;br /&gt;
** Forum PM: HoudiniMan&lt;br /&gt;
** AIM: HoudiniGraal&lt;br /&gt;
** E-mail: houdiniman@graalonline.com&lt;br /&gt;
* [[User:dNeonb|Björn]]&lt;br /&gt;
** Forum PM: dNeonb&lt;br /&gt;
** AIM: GraalNeoN&lt;br /&gt;
** E-mail: dNeonb@graalonline.com&lt;br /&gt;
* [[User:Vulcan|Vulcan]]&lt;br /&gt;
** Forum PM: Vulcan&lt;br /&gt;
** AIM: GraalVulcan&lt;br /&gt;
** E-mail: vulcan@graal.net&lt;br /&gt;
&lt;br /&gt;
[http://support.graalonline.com You can also use the Support Center for help].&lt;br /&gt;
&lt;br /&gt;
=Global Scripting Team=&lt;br /&gt;
* [[User:Skyld|Skyld]]&lt;br /&gt;
** ''Deals with scripting issues, scripting inspections, scripting advice, and general issues.''&lt;br /&gt;
** Forum PM: Skyld&lt;br /&gt;
* [[User:CheeToS2|CheeToS]]&lt;br /&gt;
** ''Deals with scripting issues, scripting advice, and general issues.''&lt;br /&gt;
** AIM: Cheetah643&lt;br /&gt;
** Forum PM: CheeToS2&lt;br /&gt;
* [[User:Python523|Jagen]]&lt;br /&gt;
** ''Deals with scripting issues and scripting advice.''&lt;br /&gt;
** Forum PM: Python523&lt;br /&gt;
&lt;br /&gt;
=Graal Kingdoms Administration=&lt;br /&gt;
* [[User:Sam|Sam]]&lt;br /&gt;
** Forum PM: Sam&lt;br /&gt;
&lt;br /&gt;
* [[User:Cruchot|Yann]] (Police)&lt;br /&gt;
** Forum PM: Cruchot&lt;br /&gt;
&lt;br /&gt;
=Zone Staff Team=&lt;br /&gt;
* [[User:Vulcan|Vulcan]] (account Vulcan)&lt;br /&gt;
** Forum PM: Vulcan&lt;br /&gt;
[http://support.graalonline.com Use the Support Center for help].&lt;br /&gt;
&lt;br /&gt;
* [[User:Huwajux|Huwajux (Events)]]&lt;br /&gt;
** Forum PM: Huwajux&lt;br /&gt;
** AIM: Dark Xanadu&lt;br /&gt;
&lt;br /&gt;
* [[User:Gerami|Crono (Events)]]&lt;br /&gt;
** Forum PM: Gerami&lt;br /&gt;
** AIM: CronoPker&lt;br /&gt;
&lt;br /&gt;
* [[User:MisterMastermind|Typhoon (Events)]]&lt;br /&gt;
** Forum PM: MisterMastermind&lt;br /&gt;
** AIM: GraalTyphoon&lt;br /&gt;
&lt;br /&gt;
* [[User:jkool666|Jesse (Events)]]&lt;br /&gt;
** Forum PM: jkool666&lt;br /&gt;
** AIM: jkool316&lt;br /&gt;
&lt;br /&gt;
=Forum Super Moderators=&lt;br /&gt;
* [[User:Darlene159|Moonie]]&lt;br /&gt;
** Forum PM: Darlene159&lt;br /&gt;
** AIM/ICQ: 20828121&lt;br /&gt;
** E-mail: moonie@graalonline.com&lt;br /&gt;
* [[User:ZanderX|Kamuii]]&lt;br /&gt;
** Forum PM: ZanderX&lt;br /&gt;
** AIM: iharuzim&lt;br /&gt;
** ICQ: 307557649&lt;br /&gt;
** Yahoo: misery@pacbell.net&lt;br /&gt;
** MSN: sol@guiltygear.org&lt;br /&gt;
** Jabber: kamuii@jabber.org&lt;br /&gt;
** E-mail: kamuii@toroimerai.net&lt;br /&gt;
* [[User:Sam|Sam]]&lt;br /&gt;
** Forum PM: Sam&lt;br /&gt;
** E-mail: mail4u@vitare.de&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Talk:News&amp;diff=6628</id>
		<title>Talk:News</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Talk:News&amp;diff=6628"/>
		<updated>2006-03-17T23:01:56Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''''Hi!'''''&lt;br /&gt;
&lt;br /&gt;
If you're reading this (or even if you're not!), you should contribute lots of news ASAP. Thanks!&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Graal_Bible:Copyrights&amp;diff=6044</id>
		<title>Graal Bible:Copyrights</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Graal_Bible:Copyrights&amp;diff=6044"/>
		<updated>2006-02-01T17:13:27Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Misleading info removed, needs to be updated?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Graal_Kingdoms&amp;diff=6031</id>
		<title>Worlds/Graal Kingdoms</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Graal_Kingdoms&amp;diff=6031"/>
		<updated>2006-01-31T00:27:57Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: /* Lance */ typo: Contactalbe-&amp;gt;Contactable; even though Contactable isn't a word either&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Login_server_kingdoms.png|left]][[Worlds/Graal Kingdoms|Graal Kingdoms]] is an adventurous massively multi [[player]] online [[roleplaying]] experience. Explore 3-D terrain in a 2-D environment, while battling monsters, forging friendships, and collecting treasures.&lt;br /&gt;
&lt;br /&gt;
Interact with in-game characters and creatures, role play and chat with other players from around the world. [[Worlds/Graal Kingdoms|Graal Kingdoms]] allows players to become a part of the story. Players can build houses, protect kingdoms, battle in tournaments, compete in events, and much more!&lt;br /&gt;
&lt;br /&gt;
[[Worlds/Graal Kingdoms|Graal Kingdoms]] goes beyond the norm, with a growing community and new and exciting features being added all the time. Players can do odd jobs, tame and own pets, battle monsters, form groups with other players, and make their own items and weapons. An important part of [[Worlds/Graal Kingdoms|Graal Kingdoms]], is the great amount of communication that is possible in the game. Through live chatting onscreen, to sending private messages, and even mailing other players letters to their online homes! Battling is action-packed, with a wide variety of weapons and an even wider variety of magic spells. The large assortment of items can be organized from the easy to use drag and drop inventory system. Players can choose from a selection of classes such as Warrior, Sorcerer, Thieves, Barbarians, and even Priests!&lt;br /&gt;
&lt;br /&gt;
[[Worlds/Graal Kingdoms|Graal Kingdoms]] is a graal [[Gold server]] that requires a [[Gold Account]] or a [[VIP Account]] to play.&lt;br /&gt;
&lt;br /&gt;
=History=&lt;br /&gt;
Graal Kingdoms was formerly known as Graal2002.&lt;br /&gt;
&lt;br /&gt;
=Technology=&lt;br /&gt;
The graphics in [[Worlds/Graal Kingdoms|Graal Kingdoms]] are a fine blend of 2-D artwork and 3-D artwork, meshed together to form a unique experience unlike any other. Graphics are highly detailed, colourful, and creative. From boats and houses, to trees and monsters, [[Worlds/Graal Kingdoms|Graal Kingdoms]] provides a visual treat for the player.&lt;br /&gt;
&lt;br /&gt;
[[Worlds/Graal Kingdoms|Graal Kingdoms]] is one of the most advanced [[Graal]] servers online, and differs from other servers in many ways, primarily in its integration with the [[mudlib]] from the [http://crossfire.real-time.com/ Crossfire] game.&lt;br /&gt;
&lt;br /&gt;
=Storyline=&lt;br /&gt;
===Peaceful Life===&lt;br /&gt;
Life in the [[Graalian]] world was peaceful. People built towns, and mined the land of its riches. Farmers planted happily, making sure to water their plants for the upcoming Sylvester.&lt;br /&gt;
&lt;br /&gt;
Merchants sold goods in the streets, as men on horseback patrolled the area for thieves. The people enjoyed the warmth of the day, as the Bomy Moons approached. The world seemed to be in perfect balance.&lt;br /&gt;
&lt;br /&gt;
===Preparing for Danger===&lt;br /&gt;
The world was unprepared for what was about to happen. Sightings of a large meteor were taking place all over the land. Scholars revealed that it wasn't a meteor, but a moon. For many years, the Suns of the Bomy planet had passed near the land. Sometimes, the Suns would pass right over one another. Causing a Sylvester, that heated the [[Graalian]] world with bright red intensity.&lt;br /&gt;
&lt;br /&gt;
However, something had went wrong. The Bomy Moon became disaligned from the planet, and was hurdling towards the peaceful world of Graal.&lt;br /&gt;
&lt;br /&gt;
All the [[Graalians]] could do was prepare for the worst. The Moon crashed heavily into the sea, causing massive tidal waves to wash over the land. It appeared that the damage had been done... but it was just beginning...&lt;br /&gt;
&lt;br /&gt;
===Worldly Changes===&lt;br /&gt;
The impact of the Moon caused devastating underground destruction. Underwater volcanoes became active from the intense earthquake, causing islands to emerge from the sea. Lava became hard as stone quickly after being engulfed in water. Clouds of ash arose from the water and into the sky.&lt;br /&gt;
&lt;br /&gt;
The tidal waves began to subside, and the half-submerged Moon could be seen in the middle of the land.&lt;br /&gt;
&lt;br /&gt;
===Unwelcome Visitors===&lt;br /&gt;
Approaching the Moon, [[Graalians]] witnessed what appeared to be movement on it's surface.&lt;br /&gt;
&lt;br /&gt;
Bomies began to emerge from the craters. When the alien bomies looked around the land, they became enraged. They discovered that their own Bomy race, were being treated like [[Graalian]] pets. This caused anger in the alien bomies, and they immediately began to attack the [[Graalians]]. The people fought valiantly to save their home. After a long battle, it appeared that the alien bomies had been defeated.&lt;br /&gt;
&lt;br /&gt;
===Turn for the Worst===&lt;br /&gt;
Knowing that they were outnumbered and beaten, the alien bomies enslaved the minds of the small creatures and plants on the land. Seemingly harmless plants and animals began attacking the [[Graalians]]. The people had no choice but to retreat. There was little hope left for them, as they quickly fled the island on ships from every shore. They left, knowing that they would return later, to retaliate this assualt. They sailed for what seemed like forever, until they finally found land...&lt;br /&gt;
&lt;br /&gt;
===Final Hope===&lt;br /&gt;
Five islands were discovered by the [[Graalian]] people as they approached the shores. The people decided to rebuild their lives on these new islands. They built towns and ports, houses and shops. Soon, they had decided to reclaim the land they had lost. Kingdoms were formed on each island, in an effort to prepare for the approaching battle. These Kingdoms became known as Dustari, Forest, Pirate, Samurai, and Zormite. Each kingdom built armies and castles in preparation for war. It appeared that hope was once again restored in the people of the new lands...&lt;br /&gt;
&lt;br /&gt;
===Destiny Awaits===&lt;br /&gt;
Time is running out... The alien bomies are also building up their civilization. The crashing of the moon has awakened evil deep within the world. It won't be long before the evil spreads to take your land for its own. You must help reclaim the island that was once called home.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
==Jobs==&lt;br /&gt;
[[Image:GraakKingdoms_jobs_mining.jpg|thumb|left]] [[Image:GraakKingdoms_jobs_baking.jpg|thumb|right]] Players can work many different jobs in order to advance further into the game. Mining for gems and other supplies to craft into your own goods. Become a farmer and farm crops to bake into culinary delights. You can even become a lumberjack and plant trees to chop down and turn into wood that can be crafted into many useable items. Craft a fishing rod and build a ship to become a fisherman. You can also try your luck as tradesman. Travel around the world to collect and buy items from all islands to sell or trade them away to people from other islands. Whatever you want to become, you have the possibilities to realize it!&lt;br /&gt;
&lt;br /&gt;
==Houses and Fortifications==&lt;br /&gt;
[[Image:GraakKingdoms_housebuilding.jpg|thumb|left]][[Image:GraalKingdoms_houseshop.jpg|thumb|right]]If you plan on settling down, why not build yourself a home? Mine stones and build walls, chop trees to get wood for the roof, until your new house is complete! Then once your home is built, gather up some furniture and decorate your indoor area in any way you'd like. Your house can even include a mailbox, in which you can receive letters and even items from players! You can also open your own shop to sell goods you produced to earn some money. Or just make some big party together with your friends. To keep out all unwanted visitors, you can construct fortification pillars around your land. But be careful, as pillars can be destroyed! Create your own garden around your house where you will be able to plant flowers, trees and other nice things to give everything a nice look.&lt;br /&gt;
&lt;br /&gt;
==Role Player System==&lt;br /&gt;
[[Image:GraakKingdoms_event_worker.jpg|thumb|left]][[Image:GraalKingdoms_clothsshop.jpg|thumb|right]][[Worlds/Graal Kingdoms|Graal Kingdoms]] has a massive role playing engine to allow an exciting experiences. Hundreds of items, loads of weapons, and a large array of magical spells and prayers allow for an unique role playing environment. Different items allow for different statistical effects to your base stats, enabling every player to strengthen their character with bigger and better items and weapons. A large assortment of items can be mixed together to create other items by using alchemy. Pick clothes from a big assortment or submit your ones to customize your outfit. Take part in role playing events and have lots of fun. Join one of five Kingdoms and undergo a great role playing experience in a nation together with friends. Making for fun experimentation and surprising results!&lt;br /&gt;
&lt;br /&gt;
==Interaction between Players==&lt;br /&gt;
[[Image:GraakKingdoms_zorbiburst.jpg|thumb|left]][[Image:GraakKingdoms_event_snowball.jpg|thumb|right]]Players can interact with each other in many ways. Through weekly tournaments and events like shipwars, mazes, role playing events, trivia events, quiz events and much more. Even in mini-games, such as kart racing, zorbi burst, metris, ice hockey and soccer players can interact with each other. Also every kingdom organises partys and big events which are used to give special kingdomitems to the winner. Players can group with others to form parties in order to take on large quests or battle monsters in dungeons, mazes and haunted houses. Screenshots submission and news announce winners of events and competitions so every [[player]] can have a chance to be recognized.&lt;br /&gt;
&lt;br /&gt;
==Dungeons and Monster fighting==&lt;br /&gt;
Players can travel through dark and eerie dungeons that have many twists, turns, and dead ends. Monsters of all shapes and sizes lurk through the corridors awaiting any challenger that crosses their path. By defeating monsters, players gain fighting experience which is used to gain levels to grow stronger. Battling monsters also allows for players to earn treasure from their victories. Monsters have different patterns of attack and come in many shapes and sizes, so beware!&lt;br /&gt;
&lt;br /&gt;
==Animals and Pets==&lt;br /&gt;
[[Image:GraalKingdoms_pets.jpg|thumb|left]]There is a variety of animals that roam the lands in [[Worlds/Graal Kingdoms|Graal Kingdoms]]. Some of these animals can be fed and tamed to follow you and much more. If you have a horse, you can feed it and ride it for faster travel over the land. You can even add armor to your horse to protect it during battles. Pets can also help to lighten the load by carrying some of your heavy goods.&lt;br /&gt;
&lt;br /&gt;
==Ships==&lt;br /&gt;
[[Image:GraakKingdoms_ships.jpg|thumb|right]]Dream of travelling the seas? In [[Worlds/Graal Kingdoms|Graal Kingdoms]], it's possible! With enough effort and wood, you can build a grand ship and sail around the world! Gather a crew together and explore the vast sea, or search for passing ships to destroy with your cannons! Ships can be damaged to the point of sinking, but they can also be repaired. You'll need to find a good crew to take on the rough waters!&lt;br /&gt;
&lt;br /&gt;
==Interface==&lt;br /&gt;
[[Image:GraalKingdoms_interface.jpg|thumb|left]]Players can buy, sell, trade, and equip their items and weapons with the help of an easy to use inventory system. The inventory features drag and drop capabilities that allow the player to drop items on the ground or into bags or other containers they are carrying. The inventory displays currently worn items such as armour, rings, and amulets, cloaks, along with the character's stats and items. It also gives informations about your characters stats, experience and resistance.&lt;br /&gt;
&lt;br /&gt;
==Kingdoms==&lt;br /&gt;
[[Image:Login_server_kingdoms2.png|thumb|right]]&lt;br /&gt;
Players can choose to join one of five Kingdoms. Each Kingdom is unique with it's own island, background information, and design. Players can take part in Kingdom events, wars, tournaments, and much more. Every Kingdom has a style of it's own, which allows the [[player]] to choose what style best suits them. Players can take on the role of a Kingdom member and even climb the ranks for a high position in the Kingdom. Become a defender for your Kingdom and wage war with other Kingdoms for honour and glory!&lt;br /&gt;
&lt;br /&gt;
There are five different kingdoms on [[Worlds/Graal Kingdoms|Graal Kingdoms]].&lt;br /&gt;
&lt;br /&gt;
===Zormite===&lt;br /&gt;
[[Image:Kicon_zormite.png|left]]Zormite is a kingdom that was recently taken over by drows but has recently be restored to proper leadership. The current king is [[User:Zero Hour|Zero Hour]].&lt;br /&gt;
&lt;br /&gt;
===Dustari===&lt;br /&gt;
[[Image:Kicon_dustari.png|left]]Dustari is a monarchy based off of medieval times. The current leader is [[User:Fr0chin|Fr0chin]].&lt;br /&gt;
&lt;br /&gt;
===Forest===&lt;br /&gt;
[[Image:Kicon_forest.png|left]]Forest is a nature-based kingdom.  Its houses are formed out of trees. The current king is [[User:DraxxTeazok|DraxxTeazok]].&lt;br /&gt;
&lt;br /&gt;
===Pirates===&lt;br /&gt;
[[Image:Kicon_pirates.png|left]]Pirates is a kingdom that has a large navy and a rather small land army. The current king is [[User:MadScience7|MadScience7]].&lt;br /&gt;
&lt;br /&gt;
===Samurai===&lt;br /&gt;
[[Image:Kicon_samurai.png|left]]Samurai is a kingdom based on feudal Japan and it's traditions.  It's houses have distinctive paper walls and pagoda roofs. The current king is [[User:Lylic|Lylic]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Staff Contacts / Support=&lt;br /&gt;
&lt;br /&gt;
Additionally to the staffs listed below you can also use the [http://support.cyberjoueurs.com/support/ support center] to get help.&lt;br /&gt;
&lt;br /&gt;
==Administration==&lt;br /&gt;
&lt;br /&gt;
====[[User:dNeonb|Björn]]====&lt;br /&gt;
Björn is Player Manager of [[Graal Kingdoms]].&lt;br /&gt;
Contactable via:&lt;br /&gt;
* Forum PM: dNeonb&lt;br /&gt;
* E-Mail: dneonb@graalonline.com&lt;br /&gt;
* AIM: GraalNeon&lt;br /&gt;
&lt;br /&gt;
He can mostly be found on [[Worlds/Graal Kingdoms|Graal Kingdoms]], [[Worlds/Kingdoms Debug|Kingdoms Debug]], [[Worlds/Zone|Zone]] and [[Worlds/Atlantis|Atlantis]].&lt;br /&gt;
&lt;br /&gt;
====[[User:Lance|Lance]]====&lt;br /&gt;
Lance is Administrator of [[Worlds/Graal Kingdoms|Graal Kingdoms]].&lt;br /&gt;
Contactable via:&lt;br /&gt;
* Forum PM: Lance&lt;br /&gt;
* E-Mail: lance@graalonline.com&lt;br /&gt;
&lt;br /&gt;
He can mostly be found on [[Worlds/Graal Kingdoms|Graal Kingdoms]], [[Worlds/Kingdoms Debug|Kingdoms Debug]] and [[Worlds/Graal2001|Graal2001]].&lt;br /&gt;
&lt;br /&gt;
====[[User:Sam|Sam]]====&lt;br /&gt;
Sam is Events Admin of [[Worlds/Graal Kingdoms|Graal Kingdoms]].&lt;br /&gt;
Contactable via:&lt;br /&gt;
* Forum PM: Sam&lt;br /&gt;
* E-Mail: mail4u@vitare.de&lt;br /&gt;
* MSN: neub3@hotmail.com&lt;br /&gt;
&lt;br /&gt;
He can mostly be found on [[Worlds/Graal Kingdoms|Graal Kingdoms]].&lt;br /&gt;
&lt;br /&gt;
==Police==&lt;br /&gt;
===[[User:REW_darklink200|Grirahan]]===&lt;br /&gt;
* Forum PM: REW_darklink200&lt;br /&gt;
&lt;br /&gt;
==Events Masters==&lt;br /&gt;
===Lars===&lt;br /&gt;
&lt;br /&gt;
===Ed===&lt;br /&gt;
&lt;br /&gt;
===Tempist===&lt;br /&gt;
&lt;br /&gt;
===Bloody-Sword===&lt;br /&gt;
&lt;br /&gt;
===Draenin===&lt;br /&gt;
&lt;br /&gt;
===[[User:Damix2|Damix]]===&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Support_center&amp;diff=5874</id>
		<title>Support center</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Support_center&amp;diff=5874"/>
		<updated>2006-01-28T02:05:13Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Fixed link; text can be improved maybe?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For most players the Support Center is the primary means of contacting staff - whether it be for reporting bugs, voicing complaints or making requests. Each item of communication is stored as a 'ticket' and placed in a queue from which [[Creation/Management/Contacts|various admins]] can retrieve it.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
[http://support.cyberjoueurs.com/support/ Cyberjoueurs Support Center - for Graal Support]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Mudlib&amp;diff=5873</id>
		<title>Creation/Dev/Mudlib</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Mudlib&amp;diff=5873"/>
		<updated>2006-01-28T01:48:18Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Mudlib''' provides [[Worlds/Graal Kingdoms|Graal Kingdoms]] - and, by extension, [[Worlds/Kingdoms Debug|Kingdoms Debug]] - with its extra '''M'''ulti-'''U'''ser '''D'''ungeon options.&lt;br /&gt;
&lt;br /&gt;
This library also extends [[Creation/Dev/GScript|GScript]] with a few extra commands that allow it to access and modify MUD accounts.&lt;br /&gt;
&lt;br /&gt;
The [[Worlds/Graal Kingdoms|Graal Kingdoms]] mudlib is derived from [http://crossfire.real-time.com/ Crossfire].&lt;br /&gt;
&lt;br /&gt;
With the recent advancements in [[Creation/Dev/GScript|GScript]], some playerworlds are scripting their own MUD type system.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Index&amp;diff=5872</id>
		<title>Creation/Dev/Script/Index</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Index&amp;diff=5872"/>
		<updated>2006-01-28T01:46:09Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list contains most script-related articles of the Graal Bible. For general information about Graal Script go [[Creation/Dev/GScript|here]].&lt;br /&gt;
&lt;br /&gt;
* [[Creation/Dev/GScript|GScript]]&lt;br /&gt;
** [[Creation/Dev/NPC scripting|NPC Scripting]]&lt;br /&gt;
** [[Creation/Dev/GScript2|GScript2]]&lt;br /&gt;
** [[Creation/Dev/GS1 To GS2|GS1 To GS2]]&lt;br /&gt;
** [[Creation/Dev/Output Methods|GScript2 Output Methods]]&lt;br /&gt;
** [[Creation/Dev/Using Classes Effectively|Using Classes Effectively]]&lt;br /&gt;
** [[Creation/Dev/Old GScript|Old GScript]]&lt;br /&gt;
*** [[Creation/Dev/Old GScript:playermp|Old GScript:playermp]]&lt;br /&gt;
** [[Creation/Dev/NPC|NPC]]&lt;br /&gt;
*** [[Creation/Dev/NPC weapon|NPC weapon]]&lt;br /&gt;
*** [[Creation/Dev/Database NPC|Database NPC]]&lt;br /&gt;
** [[Creation/Dev/Clientside|Clientside]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client|Client Script Functions]]&lt;br /&gt;
** [[Creation/Dev/Serverside|Serverside]]&lt;br /&gt;
*** [[Creation/Dev/Script Functions: NPC Server|NPC Server Script Functions]]&lt;br /&gt;
** [[Graal3D:_Engine|Graal3D]]&lt;br /&gt;
*** [[Creation/Dev/Script Functions: Graal 3D|Graal 3D Script Functions]]&lt;br /&gt;
** [[Creation/Dev/Graal v4 IRC|Graal v4 IRC]]&lt;br /&gt;
*** [[Creation/Dev/Troubleshooting_Graal_v4_IRC|Troubleshooting Graal v4 IRC]]&lt;br /&gt;
** [[Creation/Dev/Mudlib|Mudlib]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript2&amp;diff=5871</id>
		<title>Creation/Dev/GScript2</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript2&amp;diff=5871"/>
		<updated>2006-01-28T01:42:51Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What was formerly called '''GScript2''' has now replaced [[Creation/Dev/Old GScript|Old GScript]] as [[Creation/Dev/GScript|Graal's scripting language]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/NPC&amp;diff=5870</id>
		<title>Creation/Dev/NPC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/NPC&amp;diff=5870"/>
		<updated>2006-01-28T01:39:46Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The acronym '''NPC''' expands to Non-Player-Characters; traditionally beings controlled by the game system and not players.&lt;br /&gt;
In [[Graal]], this term has a much broader meaning and applies not only to human characters or monsters, but also to example decoration and weapons; basically anything that is scripted in [[Creation/Dev/GScript|GScript]].&lt;br /&gt;
&lt;br /&gt;
There are mainly three kinds of NPCs, [[Creation/Dev/NPC weapon|NPC weapon]]s which are held in the player's inventory, [[Creation/Dev/Local NPC|Local NPC]]s that belong to a level and [[Creation/Dev/Database NPC|Database NPC]]s that appear like [[Creation/Dev/Local NPC|Local NPC]]s but are treated specially.&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev/NPC scripting|NPC scripting]] is a key element of creating your own [[Playerworld]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds&amp;diff=5762</id>
		<title>Worlds</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds&amp;diff=5762"/>
		<updated>2006-01-27T21:01:16Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of Graal worlds.&lt;br /&gt;
&lt;br /&gt;
=Gold Services=&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server kingdoms.png|thumb|left|150px|Graal Kingdoms]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server zone.png|thumb|left|150px|Zone]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=3D Services=&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server graal3d.png|thumb|left|150px|Graal 3D]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Classic Services=&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server atlantis.png|thumb|left|150px|Atlantis]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server classic.png|thumb|left|150px|Classic]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server delteria.png|thumb|left|150px|Delteria]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image: Login server era.png|thumb|left|150px|Era]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server maloria.png|thumb|left|150px|Maloria]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server npulse.png|thumb|left|150px|N-Pulse]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server shaded.png|thumb|left|150px|Shaded Legend]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server unholy.png|thumb|left|150px|Unholy Nation]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server valikorlia.png|thumb|left|150px|Valikorlia]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Hosted Services=&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server aeon.png|thumb|left|150px|Aeon]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server atrius.png|thumb|left|150px|Atrius]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server zodiac.png|thumb|left|150px|Zodiac]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Image:Login server zenkou.png|thumb|left|150px|Zenkou]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Development / Private Services=&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Worlds/Babylon|Babylon]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[Worlds/VS:CONFLICT|VS:CONFLICT]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/VS:CONFLICT&amp;diff=5755</id>
		<title>Worlds/VS:CONFLICT</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/VS:CONFLICT&amp;diff=5755"/>
		<updated>2006-01-27T20:59:49Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: VS:CONFLICT moved to Worlds/VS:CONFLICT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Basic Summary==&lt;br /&gt;
&lt;br /&gt;
VS:CONFLICT is a playerworld being made by WanDaMan!&lt;br /&gt;
&lt;br /&gt;
The [[playerworld]] itself is said to be just non-stop action!&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Graal_Communication_Center/Rules&amp;diff=5362</id>
		<title>Graal Communication Center/Rules</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Graal_Communication_Center/Rules&amp;diff=5362"/>
		<updated>2006-01-19T21:13:16Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can find the official document by following this link: [http://forums.graalonline.com/forums/showthread.php?t=50158 Forum Rules]&lt;br /&gt;
&lt;br /&gt;
Please note that this may not be the most up-to-date version.&lt;br /&gt;
&lt;br /&gt;
Forum rules shown here were last updated on Nov. 21, 2005. Which is the latest as of Jan. 19, 2006.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== POSTING ==&lt;br /&gt;
&lt;br /&gt;
If a thread has been closed or deleted by a moderator or admin, it is intended that the topics held therein are to be discontinued. Unless specific, verifiable consent is given, no member is permitted to recreate such threads.&lt;br /&gt;
&lt;br /&gt;
Similarly, it is illegal to recreate a deleted post. If you intend to alter a deleted message such that it is acceptable, contact a moderator to gain permission to post it.&lt;br /&gt;
&lt;br /&gt;
The act of posting two messages to the same thread in quick succession - with no other members posting in between - is known as 'double-posting'. Often, users neglect to mention something in their first post and then make another in order to include it. This is not allowed. If you wish to add something to your previous message, simply use the edit feature to modify the original post. Currently we permit double-posting if each post is in reply to a different message. Users are encouraged to combine their posts into one.&lt;br /&gt;
'''Users who choose to use the Linear view should quote anyone they are replying to, so those using other viewing methods will be able to see whom you are replying to.'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;Note, because of new forums&amp;gt; Users who use the hybrid view will be allowed the right to post multiple times in a thread to not break the tree structure, but should also remember to quote whom they are talking to as to not create confusion.'''&lt;br /&gt;
&lt;br /&gt;
'''OUT OF COURTESY FOR THE READERS, WE ASK THAT YOU ALWAYS QUOTE WHO YOU ARE SPEAKING TO!'''&lt;br /&gt;
&lt;br /&gt;
The Private Message feature of the Graal Communication Centre allows users to send messages to one another without other members seeing them. If you wish to contact a person, to give them a message or request that they speak with you, always use PMs instead of making a thread purely for that purpose. Furthermore, do not post off-topic messages in a thread with the intention of contacting a person. Again, using PMs is the best approach to such matters.&lt;br /&gt;
&lt;br /&gt;
If you wish to create a thread, please ensure that you select the correct forum for the message. If you do not, the thread may be moved or - in extreme cases - deleted. Also, try to give your threads explicit titles (For example, 'RAM problems' is better than 'Help!'), and avoid irritating short titles like '.' or '!'. Poorly-labeled threads may be renamed by the moderators.&lt;br /&gt;
&lt;br /&gt;
Do not make threads to bash a playerworld. If you have a problem you wish to report please contact a member of the Playerworld Administration. If you have a problem that can be sorted out locally (jails, scams, some bans etc... please contact a staff member on the playerworld first)&lt;br /&gt;
&lt;br /&gt;
Do not post private history.&lt;br /&gt;
&lt;br /&gt;
== CONTENT ==&lt;br /&gt;
&lt;br /&gt;
If any material you bring to the board (including, but not limited to: Text or referenced images in posts or signatures, attached files, text in profiles, links to sites) is deemed excessively offensive or repulsive, it may be forcibly removed or you may be asked to change it. Bringing such material to the board is considered an offense, and severe and/or repeated violations may warrant an official warning or - in extreme cases - an instant ban. When deciding whether or not a piece of material is appropriate, bear in mind that Graal's user base includes young teenagers.&lt;br /&gt;
&lt;br /&gt;
To safeguard against malicious users, all members are forbidden from attaching executable files to their posts, linking directly to executables or linking to a page dedicated to the download of executables.&lt;br /&gt;
&lt;br /&gt;
You are not permitted to use misleading links in order to trick people into giving ratings, either to you or anyone else.&lt;br /&gt;
&lt;br /&gt;
If you wish to reply to a large post (one that covers many lines, possibly including a large image), do not quote it in its entirety. Remove images taller than 200 pixels, and reduce the text to the exact statements to which you wish to respond. Generally the quoted text should not be much larger than your reply.&lt;br /&gt;
&lt;br /&gt;
Harassment of any user is forbidden. Any offenses against another user are treated far more harshly if they are persistent and occur in multiple threads. You may dislike somebody, but you are not permitted to harass them.&lt;br /&gt;
&lt;br /&gt;
Putting defamatory messages about another user in your signature, personal title or profile is considered harassment. Any user has the right to request that any such references to him/herself are removed, even if you do not consider them offensive or intend them to be so.&lt;br /&gt;
&lt;br /&gt;
The Graal Communication Centre utilizes a profanity filter to censor inappropriate words. It is intended that such words are not used by members, so it is illegal to attempt to evade the filter by deliberately using misspelled versions thereof. The same applies to the addition of characters between the letters of the word.&lt;br /&gt;
&lt;br /&gt;
Users are forbidden from posting racist or homophobic messages on the boards. This includes using terms referring to any group as if they were derogatory labels (for example, referring to something as '***' to express the opinion that it is bad). Again, you are not permitted to use alternate spellings in order to post such words.&lt;br /&gt;
&lt;br /&gt;
'''When in a forum discussion if you provoke another user into an ‘insultive argument’ rarther than a discussion you will be warned/banned for doing so. You can express a disagreement with someone, without attacking them. If you reply to someone provoking you to insult/harass/attack the user who provoked you, then you too will be warned/banned. You shouldn’t return the attack, just report to a mod via forum PM for it to be looked at.'''&lt;br /&gt;
&lt;br /&gt;
You are not permitted to discuss illegal activities such as game piracy on the board. This extends to discussing the activities or presence of anti-Graal groups. If you feel that you have important information on such people, contact an admin directly instead of posting it to the board.&lt;br /&gt;
&lt;br /&gt;
For the benefit of all users, we forbid members from posting links to sites including code that may cause older browsers to crash (for example, a site that opens the user's CD tray). The same applies to sites designed to irritate viewers, such as those that open endless pop up windows or cause multiple alert messages to appear on screen.&lt;br /&gt;
&lt;br /&gt;
'''Threads/posts which promote the vast use/consumption of alcohol or drugs, will not be allowed.'''&lt;br /&gt;
&lt;br /&gt;
Do not discuss MMORPGs other than Graal on the board.&lt;br /&gt;
&lt;br /&gt;
== SPAM ==&lt;br /&gt;
&lt;br /&gt;
Posting of spam is not allowed. Spam is defined as any irrelevant or inappropriate message. Due to the nature of the forums, what is considered spam varies between threads. In other words: in some threads, small posts such as &amp;quot;...&amp;quot; are perfectly valid responses, whereas in other threads it is inappropriate. The context of the message is very important in this regard. It is the right and responsibility of the administrators or moderators to determine whether or not a message is spam and to take appropriate action if it is.&lt;br /&gt;
&lt;br /&gt;
Only quoting someone, without adding anything from yourself, is considered spam, and is not allowed.&lt;br /&gt;
&lt;br /&gt;
== SIGNATURES, AVATARS, AND CUSTOM TITLES ==&lt;br /&gt;
&lt;br /&gt;
The size of signatures is limited for the benefit of all users. The width and height limits are 550 pixels (width) and 300 pixels (height). The maximum data size is 100KB. Please note that these limits refer to the properties of the entire sig, and not individual elements thereof.&lt;br /&gt;
&lt;br /&gt;
Users are not permitted to set signatures or avatars that mimic those of another member without his/her explicit permission. The moderators reserve the right to arbitrate on whether or not a signature violates this rule.&lt;br /&gt;
&lt;br /&gt;
Similarly, users are not permitted to set custom titles which misrepresent the user as a GraalOnline or GraalOnline Communication Center moderator/administrator.&lt;br /&gt;
&lt;br /&gt;
You are permitted to include a section in your signature that links directly to the rating system of the board. However, there are two conditions: Firstly, the full range of values must be presented as options. Secondly, they must all be clearly labeled, informing other users of their purpose.&lt;br /&gt;
&lt;br /&gt;
== ACCOUNTS ==&lt;br /&gt;
&lt;br /&gt;
If you are banned, the ban applies to you specifically - not merely your account. If you return to the board with a new account, it is considered evasion of your ban - regardless of how much time has passed since the original banning. If you obtain special permission to post from a high admin, you must make the moderators aware of this by contacting a supermod before you register your account. If you do not, your account may still be banned.&lt;br /&gt;
&lt;br /&gt;
You are not permitted to share your account with other people, regardless of their relationship with you. The owner of the account is considered to be the person for whom the account was purchased - usually the same person as that which bought it. After this point, accounts cannot be transferred to new owners, and the original owner is the only person permitted to make use of it.&lt;br /&gt;
Furthermore, you are not permitted to post messages on the behalf of non-members.&lt;br /&gt;
&lt;br /&gt;
Accounts that take the form 'Admin-Playerworldxxx' or other local staff accounts (staff accounts rae defined as accounts which only work on the server its name contains, for example: Graal2001_FAQ) are not to be used on the message board. These exist purely for administration of the relevant playerworld. Upgrading them yourself (a bad idea anyway) does not remove this restriction.&lt;br /&gt;
&lt;br /&gt;
== GENERAL ==&lt;br /&gt;
&lt;br /&gt;
The moderation staff reserve the right to apply bans according to their own discretion - you receive warnings by convention, not necessity. Furthermore, they are entitled to arbitrate on any matters within their moderation roles. Moderators of individual forums, for example, can edit or delete your posts if they feel it necessary but cannot demand that you change your signature or other account details.&lt;br /&gt;
&lt;br /&gt;
Discussions of bans are not permissible. If you have a question about a ban or would like to make an appeal, contact the relevant administrator by Forum PM (Private Message) or by e-mail.&lt;br /&gt;
&lt;br /&gt;
If you feel that you have been wronged by a moderator, contact a higher member of staff such as a supermod or admin, and calmly explain the situation. Do not disregard what you have been told, regardless of whether or not you consider it fair or reasonable.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Graal_Communication_Center/Rules&amp;diff=5361</id>
		<title>Graal Communication Center/Rules</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Graal_Communication_Center/Rules&amp;diff=5361"/>
		<updated>2006-01-19T21:09:36Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Updated + added disclaimer and very slightly better formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can find the official document by following this link: [http://forums.graalonline.com/forums/showthread.php?t=50158 Forum Rules]&lt;br /&gt;
&lt;br /&gt;
Please note that this may not be the most up-to-date version.&lt;br /&gt;
&lt;br /&gt;
Forum rules shown here were last updated on Nov. 21, 2005. Which is the latest as of Jan. 19, 2006.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POSTING'''&lt;br /&gt;
&lt;br /&gt;
If a thread has been closed or deleted by a moderator or admin, it is intended that the topics held therein are to be discontinued. Unless specific, verifiable consent is given, no member is permitted to recreate such threads.&lt;br /&gt;
&lt;br /&gt;
Similarly, it is illegal to recreate a deleted post. If you intend to alter a deleted message such that it is acceptable, contact a moderator to gain permission to post it.&lt;br /&gt;
&lt;br /&gt;
The act of posting two messages to the same thread in quick succession - with no other members posting in between - is known as 'double-posting'. Often, users neglect to mention something in their first post and then make another in order to include it. This is not allowed. If you wish to add something to your previous message, simply use the edit feature to modify the original post. Currently we permit double-posting if each post is in reply to a different message. Users are encouraged to combine their posts into one.&lt;br /&gt;
'''Users who choose to use the Linear view should quote anyone they are replying to, so those using other viewing methods will be able to see whom you are replying to.'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;Note, because of new forums&amp;gt; Users who use the hybrid view will be allowed the right to post multiple times in a thread to not break the tree structure, but should also remember to quote whom they are talking to as to not create confusion.'''&lt;br /&gt;
&lt;br /&gt;
'''OUT OF COURTESY FOR THE READERS, WE ASK THAT YOU ALWAYS QUOTE WHO YOU ARE SPEAKING TO!'''&lt;br /&gt;
&lt;br /&gt;
The Private Message feature of the Graal Communication Centre allows users to send messages to one another without other members seeing them. If you wish to contact a person, to give them a message or request that they speak with you, always use PMs instead of making a thread purely for that purpose. Furthermore, do not post off-topic messages in a thread with the intention of contacting a person. Again, using PMs is the best approach to such matters.&lt;br /&gt;
&lt;br /&gt;
If you wish to create a thread, please ensure that you select the correct forum for the message. If you do not, the thread may be moved or - in extreme cases - deleted. Also, try to give your threads explicit titles (For example, 'RAM problems' is better than 'Help!'), and avoid irritating short titles like '.' or '!'. Poorly-labeled threads may be renamed by the moderators.&lt;br /&gt;
&lt;br /&gt;
Do not make threads to bash a playerworld. If you have a problem you wish to report please contact a member of the Playerworld Administration. If you have a problem that can be sorted out locally (jails, scams, some bans etc... please contact a staff member on the playerworld first)&lt;br /&gt;
&lt;br /&gt;
Do not post private history.&lt;br /&gt;
&lt;br /&gt;
'''CONTENT'''&lt;br /&gt;
&lt;br /&gt;
If any material you bring to the board (including, but not limited to: Text or referenced images in posts or signatures, attached files, text in profiles, links to sites) is deemed excessively offensive or repulsive, it may be forcibly removed or you may be asked to change it. Bringing such material to the board is considered an offense, and severe and/or repeated violations may warrant an official warning or - in extreme cases - an instant ban. When deciding whether or not a piece of material is appropriate, bear in mind that Graal's user base includes young teenagers.&lt;br /&gt;
&lt;br /&gt;
To safeguard against malicious users, all members are forbidden from attaching executable files to their posts, linking directly to executables or linking to a page dedicated to the download of executables.&lt;br /&gt;
&lt;br /&gt;
You are not permitted to use misleading links in order to trick people into giving ratings, either to you or anyone else.&lt;br /&gt;
&lt;br /&gt;
If you wish to reply to a large post (one that covers many lines, possibly including a large image), do not quote it in its entirety. Remove images taller than 200 pixels, and reduce the text to the exact statements to which you wish to respond. Generally the quoted text should not be much larger than your reply.&lt;br /&gt;
&lt;br /&gt;
Harassment of any user is forbidden. Any offenses against another user are treated far more harshly if they are persistent and occur in multiple threads. You may dislike somebody, but you are not permitted to harass them.&lt;br /&gt;
&lt;br /&gt;
Putting defamatory messages about another user in your signature, personal title or profile is considered harassment. Any user has the right to request that any such references to him/herself are removed, even if you do not consider them offensive or intend them to be so.&lt;br /&gt;
&lt;br /&gt;
The Graal Communication Centre utilizes a profanity filter to censor inappropriate words. It is intended that such words are not used by members, so it is illegal to attempt to evade the filter by deliberately using misspelled versions thereof. The same applies to the addition of characters between the letters of the word.&lt;br /&gt;
&lt;br /&gt;
Users are forbidden from posting racist or homophobic messages on the boards. This includes using terms referring to any group as if they were derogatory labels (for example, referring to something as '***' to express the opinion that it is bad). Again, you are not permitted to use alternate spellings in order to post such words.&lt;br /&gt;
&lt;br /&gt;
'''When in a forum discussion if you provoke another user into an ‘insultive argument’ rarther than a discussion you will be warned/banned for doing so. You can express a disagreement with someone, without attacking them. If you reply to someone provoking you to insult/harass/attack the user who provoked you, then you too will be warned/banned. You shouldn’t return the attack, just report to a mod via forum PM for it to be looked at.'''&lt;br /&gt;
&lt;br /&gt;
You are not permitted to discuss illegal activities such as game piracy on the board. This extends to discussing the activities or presence of anti-Graal groups. If you feel that you have important information on such people, contact an admin directly instead of posting it to the board.&lt;br /&gt;
&lt;br /&gt;
For the benefit of all users, we forbid members from posting links to sites including code that may cause older browsers to crash (for example, a site that opens the user's CD tray). The same applies to sites designed to irritate viewers, such as those that open endless pop up windows or cause multiple alert messages to appear on screen.&lt;br /&gt;
&lt;br /&gt;
'''Threads/posts which promote the vast use/consumption of alcohol or drugs, will not be allowed.'''&lt;br /&gt;
&lt;br /&gt;
Do not discuss MMORPGs other than Graal on the board.&lt;br /&gt;
&lt;br /&gt;
'''SPAM'''&lt;br /&gt;
&lt;br /&gt;
Posting of spam is not allowed. Spam is defined as any irrelevant or inappropriate message. Due to the nature of the forums, what is considered spam varies between threads. In other words: in some threads, small posts such as &amp;quot;...&amp;quot; are perfectly valid responses, whereas in other threads it is inappropriate. The context of the message is very important in this regard. It is the right and responsibility of the administrators or moderators to determine whether or not a message is spam and to take appropriate action if it is.&lt;br /&gt;
&lt;br /&gt;
Only quoting someone, without adding anything from yourself, is considered spam, and is not allowed.&lt;br /&gt;
&lt;br /&gt;
'''SIGNATURES, AVATARS, AND CUSTOM TITLES'''&lt;br /&gt;
&lt;br /&gt;
The size of signatures is limited for the benefit of all users. The width and height limits are 550 pixels (width) and 300 pixels (height). The maximum data size is 100KB. Please note that these limits refer to the properties of the entire sig, and not individual elements thereof.&lt;br /&gt;
&lt;br /&gt;
Users are not permitted to set signatures or avatars that mimic those of another member without his/her explicit permission. The moderators reserve the right to arbitrate on whether or not a signature violates this rule.&lt;br /&gt;
&lt;br /&gt;
Similarly, users are not permitted to set custom titles which misrepresent the user as a GraalOnline or GraalOnline Communication Center moderator/administrator.&lt;br /&gt;
&lt;br /&gt;
You are permitted to include a section in your signature that links directly to the rating system of the board. However, there are two conditions: Firstly, the full range of values must be presented as options. Secondly, they must all be clearly labeled, informing other users of their purpose.&lt;br /&gt;
&lt;br /&gt;
'''ACCOUNTS'''&lt;br /&gt;
&lt;br /&gt;
If you are banned, the ban applies to you specifically - not merely your account. If you return to the board with a new account, it is considered evasion of your ban - regardless of how much time has passed since the original banning. If you obtain special permission to post from a high admin, you must make the moderators aware of this by contacting a supermod before you register your account. If you do not, your account may still be banned.&lt;br /&gt;
&lt;br /&gt;
You are not permitted to share your account with other people, regardless of their relationship with you. The owner of the account is considered to be the person for whom the account was purchased - usually the same person as that which bought it. After this point, accounts cannot be transferred to new owners, and the original owner is the only person permitted to make use of it.&lt;br /&gt;
Furthermore, you are not permitted to post messages on the behalf of non-members.&lt;br /&gt;
&lt;br /&gt;
Accounts that take the form 'Admin-Playerworldxxx' or other local staff accounts (staff accounts rae defined as accounts which only work on the server its name contains, for example: Graal2001_FAQ) are not to be used on the message board. These exist purely for administration of the relevant playerworld. Upgrading them yourself (a bad idea anyway) does not remove this restriction.&lt;br /&gt;
&lt;br /&gt;
'''GENERAL'''&lt;br /&gt;
&lt;br /&gt;
The moderation staff reserve the right to apply bans according to their own discretion - you receive warnings by convention, not necessity. Furthermore, they are entitled to arbitrate on any matters within their moderation roles. Moderators of individual forums, for example, can edit or delete your posts if they feel it necessary but cannot demand that you change your signature or other account details.&lt;br /&gt;
&lt;br /&gt;
Discussions of bans are not permissible. If you have a question about a ban or would like to make an appeal, contact the relevant administrator by Forum PM (Private Message) or by e-mail.&lt;br /&gt;
&lt;br /&gt;
If you feel that you have been wronged by a moderator, contact a higher member of staff such as a supermod or admin, and calmly explain the situation. Do not disregard what you have been told, regardless of whether or not you consider it fair or reasonable.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=GMap&amp;diff=5276</id>
		<title>GMap</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=GMap&amp;diff=5276"/>
		<updated>2006-01-10T20:46:57Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: GMap moved to Creation/Dev/GMap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/GMap]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GMap&amp;diff=5275</id>
		<title>Creation/Dev/GMap</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GMap&amp;diff=5275"/>
		<updated>2006-01-10T20:46:57Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: GMap moved to Creation/Dev/GMap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''GMaps''' are files that contain information about how to links many single [[Level]] files (.nw) to a big [[Map]] that seems like one level in game. This makes it possible to have a map that displays all players who are in the same area, and removes restrictions on what NPCs can do caused by the separation of levels.&lt;br /&gt;
Earlier this was done through [[bigmap.txt|.txt files]] merely containing a list of [[Level]]s, and the [[Old GScript:setmap]] command, but this lacks many of the features the gmap way provides, and therefore is considered deprecated. Many [[Playerworld]]s still use the old way, but this is merely because of the difficulties that make it hard and error prone to convert a whole server to a new format.&lt;br /&gt;
&lt;br /&gt;
== Creation ==&lt;br /&gt;
GMaps, if not handmade, are created by the [[Level generator]] that is installed&lt;br /&gt;
through [[Graal]]'s [[setup.exe]] along with the [[Delphi client|Windows version ]]of the game. There is also a [[dungeon generator]] which can generate dungeons or caves and is available on Windows and Linux.&amp;lt;br&amp;gt;&lt;br /&gt;
GMaps can also hold height information that are used by the Graal engine to&lt;br /&gt;
display [[Level]]s in a three dimensional looking way. This is called [[Terrain]].  The height information is mainly created by the level editor and the [[Terrain Generator]] programs that allows creation of whole islands.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
GMaps are plain text files, and all GMaps as of now start with the string ''GRMAP001'', followed by a newline. Then, in each line, a 'command' is given, usually in capital letters. Parameters to those commands are put into the same line after a whitespace. Some commands are in fact lists, which have nothing in their line, but which treat all following lines as their parameters until they see themselves followed by 'END' without any whitespace again.&lt;br /&gt;
&lt;br /&gt;
To learn about all that, in addition to reading this article, it is recommended to&lt;br /&gt;
check your 'maps' subfolder, and have a look at some [[Playerworld]]s' GMaps.&lt;br /&gt;
&lt;br /&gt;
=== WIDTH, and HEIGHT ===&lt;br /&gt;
    followed by an integral number&lt;br /&gt;
Dimensions of the whole map, given in single levels. If given incorrectly, these can break the whole map, thus be careful.&lt;br /&gt;
=== GENERATED ===&lt;br /&gt;
    followed by a level name&lt;br /&gt;
Gives the last, or bottom right, level that was generated if the gmap was created along with a whole set of levels using a device such as the terrain generator.&lt;br /&gt;
=== LEVELNAMES ===&lt;br /&gt;
    followed by a list of levels, and terminated by '''LEVELNAMESEND'''&lt;br /&gt;
The list of levels that are part of this map. Each 'row' of levels goes into one line, seperated by commas. There is no comma at the end of a line. If there are &amp;quot;holes&amp;quot; in your map (areas where there is no level, meaning the GMap is not a perfect square), you must make sure the levels surrounding each hole don't contain links to nonexistant levels.&lt;br /&gt;
&lt;br /&gt;
=== MAPIMG ===&lt;br /&gt;
    followed by a [[PNG]] file name&lt;br /&gt;
The image file that is to be used as the map that players see if they press their Map key.&amp;lt;br /&amp;gt;&lt;br /&gt;
''Note: This feature is not supported in Graal4''&lt;br /&gt;
=== MINIMAPIMG ===&lt;br /&gt;
    followed by a PNG file name&lt;br /&gt;
The image file that is to be used as the mini map in the bottom left corner of one's screen.&lt;br /&gt;
=== NOAUTOMAPPING ===&lt;br /&gt;
    uses no param&lt;br /&gt;
Disables the assembly of automagical screenshots into a map that is drawn over the MAPIMG image.&lt;br /&gt;
=== LOADFULLMAP ===&lt;br /&gt;
A serverside option: The gmap loading is optimized so that parts are only loaded when they are needed, and afterwards they are removed from memory again. If you put this line, that will be disabled and the full map with all levels will be loaded at once.&lt;br /&gt;
&lt;br /&gt;
=== LOADATSTART ===&lt;br /&gt;
    followed by a list of level names, terminated by '''LOADATSTARTEND'''&lt;br /&gt;
A serverside option: The level names given here are not subject to the optimizations described above.&lt;br /&gt;
&lt;br /&gt;
=== Terrain settings ===&lt;br /&gt;
'''GENEVENBORDERS''', followed by true/false&lt;br /&gt;
&lt;br /&gt;
'''GENSEED''', followed by a big number used to seed randomness&lt;br /&gt;
&lt;br /&gt;
'''GENBASE''', followed by a height value&lt;br /&gt;
&lt;br /&gt;
'''GENHEIGHT''' and '''LEVHEIGHT''', followed by a height value&lt;br /&gt;
&lt;br /&gt;
'''GENCHAOS''' and LEVCHAOS, followed by a number between 0 and 1, I think, exact to 1/20&lt;br /&gt;
&lt;br /&gt;
'''HEIGHMAP''', followed by a list of height values for each level ordered similar to the '''LEVELNAMES''' list, terminated by '''HEIGHTMAPEND'''&lt;br /&gt;
&lt;br /&gt;
'''RANDOMSEEDS''', followed by lots of big numbers, probably ordered similar to the '''LEVELNAMES''' list, terminated by '''RANDOMSEEDSEND'''&lt;br /&gt;
&lt;br /&gt;
The random numbers generator is seeded with these to render the terrain in a three dimensional looking way. The borders of gmaps are defined by the global map attributes, but for map part heights a row of random numbers is used. The seeds are constant so the terrain looks the same all the time, and there are many of them so it is possible to take a small rectangle out of the map and still display it correctly, which would not be possible with one global seed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Not all of these lines are needed.&lt;br /&gt;
&lt;br /&gt;
== Deployment ==&lt;br /&gt;
&lt;br /&gt;
Now, imagine you have a gmap and a set of levels and want to actually use it&lt;br /&gt;
on your [[Playerworld]].&lt;br /&gt;
&lt;br /&gt;
For offline editing add the gmap name as a new line to a file loadgmaps.txt which must be put in your Graal Editor base folder. The editor will automatically load the gmap once it is started and will correctly link levels.&lt;br /&gt;
This will only enable the engine to assign and connect levels the player enters or sees. [[Level]]s must still have [[Link]] areas to each other in order for the player to move on the map.&lt;br /&gt;
&lt;br /&gt;
As you are going to use the GMap on your [[Playerworld]], you need to make it available for [[Player]]s to download, by putting it inside the levels/ folder hierarchy using the [[RC file manager]], and adding it to the [[Folder configuration]] as mere [[Level]]; level *.gmap, for example. It is neccessary to additionally register it as file in the folder configuration, but there is no gmap category to put it under.&lt;br /&gt;
&lt;br /&gt;
To make the [[NPC Server]] aware of your gmaps, you need to list them in the [[Server options]] too. Add a new option gmaps= followed by a comma seperated list of names without the .gmap extension. If your line gets too stuffed, you can as well use multiple lines, as long as you prefix each one with gmaps=. The entries in each lines will be added, and not replace each other.&lt;br /&gt;
&lt;br /&gt;
If you are converting levels that are already uploaded to use a GMap, you will need to restart the GServer, or you can keep all players out of the levels for about 5 to 10 minutes. The latter may be difficult, however, because players could log on to one of the levels nobody should be in, which would disrupt the 5/10 minute wait time, so restarting the GServer may be a better choice.&lt;br /&gt;
&lt;br /&gt;
For speeding up the entering of maps you can preload gmaps on clientside using the script command &amp;quot;loadmap &amp;lt;mapname&amp;gt;;&amp;quot;. This is actually not required, but will reduce the loading time when the player is warped onto the map.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Tile&amp;diff=5274</id>
		<title>Tile</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Tile&amp;diff=5274"/>
		<updated>2006-01-10T20:46:41Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Tile moved to Creation/Dev/Tile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/Tile]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Tile&amp;diff=5273</id>
		<title>Creation/Dev/Tile</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Tile&amp;diff=5273"/>
		<updated>2006-01-10T20:46:41Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Tile moved to Creation/Dev/Tile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''tile''' is a square of color, 16 pixels in height and width. [[Level|Levels]] are made up of 4096 tiles, making a 64x64 grid.&lt;br /&gt;
&lt;br /&gt;
The tile is also the standard unit of measure when dealing with objects within levels, although players and NPCs can have positions that don't align with the tile grid.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Old_GScript:playermp&amp;diff=5269</id>
		<title>Creation/Dev/Old GScript:playermp</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Old_GScript:playermp&amp;diff=5269"/>
		<updated>2006-01-10T20:34:32Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Old GScript:playermp moved to Creation/Dev/Old GScript:playermp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A built-in variable used in [[Old GScript]] that ranges from 0 to 100, and measures [[MP]].  Used only in the old [[PW:Classic|Classic]] server, which was wiped clean for insertion of an [[NPC Server]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Mudlib&amp;diff=5268</id>
		<title>Mudlib</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Mudlib&amp;diff=5268"/>
		<updated>2006-01-10T20:34:05Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Mudlib moved to Creation/Dev/Mudlib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/Mudlib]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Mudlib&amp;diff=5267</id>
		<title>Creation/Dev/Mudlib</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Mudlib&amp;diff=5267"/>
		<updated>2006-01-10T20:34:05Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Mudlib moved to Creation/Dev/Mudlib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Mudlib''' provides [[Graal Kingdoms]] - and, by extension, [[Graal2002 Debug]] - with its extra '''M'''ulti-'''U'''ser '''D'''ungeon options.&lt;br /&gt;
&lt;br /&gt;
This library also extends [[GScript]] with a few extra commands that allow it to access and modify MUD accounts.&lt;br /&gt;
&lt;br /&gt;
The [[Graal Kingdoms]] mudlib is derived from [http://crossfire.real-time.com/ Crossfire].&lt;br /&gt;
&lt;br /&gt;
With the recent advancements in [[GScript]], some playerworlds are scripting their own MUD type system.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Level&amp;diff=5266</id>
		<title>Level</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Level&amp;diff=5266"/>
		<updated>2006-01-10T20:33:27Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Level moved to Creation/Dev/Level&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/Level]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Level&amp;diff=5265</id>
		<title>Creation/Dev/Level</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Level&amp;diff=5265"/>
		<updated>2006-01-10T20:33:27Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Level moved to Creation/Dev/Level&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Level''' is the building piece of a [[Playerworld]]. It is a squarish area of 64x64 [[Tile]]s, and can hold [[Baddy|Baddies]], [[Sign]]s, [[Chest]]s, and most importantly [[NPC]]s.&lt;br /&gt;
&lt;br /&gt;
Levels can be connected via [[Link]]s that will instantly transport the player to another position on the server once touched. Most servers feature an overworld where almost every level is linked to four adjacent ones. Previously, levels were also optically linked to appear smoother using [[Bigmap]]s, which is now deprecated in favour of [[GMap]]s which make the whole overworld appear as one single levels in even more ways.&lt;br /&gt;
&lt;br /&gt;
Previously, level designers often used [[Baddy|Baddies]] as standard foes for the player wherever such was needed. Therefore these Zelda-A-Link-To-The-Past-like soldiers and monsters were often seen all over the place. Now, this practice is deprecated and developers should create customly scripted [[NPC]] baddies which work better when multiple players are engaged in battle at once, and also they usually provide more fun to players.&lt;br /&gt;
&lt;br /&gt;
[[Sign]]s are handy for small labels or descriptions, but more complex and even dynamic messages can be displayed with the  [[Old GScript:say2|scripting command say2]].&lt;br /&gt;
&lt;br /&gt;
[[Chest]]s can hold treasures and boni like [[Gralat]]s, [[Fullheart]]s and basic weapons. Their lack of versatility encourages the use of [[NPC]]s in their place.&lt;br /&gt;
&lt;br /&gt;
[[NPC]]s, finally, are objects that hold scripts that define their behaviour. Using them, a developers can emulate all other components of a level, and of course more complex things such as characters a player can talk with, elaborate traps and enemies, graphical effects, and the like.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript2&amp;diff=5263</id>
		<title>Creation/Dev/GScript2</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript2&amp;diff=5263"/>
		<updated>2006-01-10T20:32:50Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: GScript2 moved to Creation/Dev/GScript2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What was formerly called '''GScript2''' has now replaced [[Old GScript]] as [[GScript|Graal's scripting language]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GS1_To_GS2&amp;diff=5261</id>
		<title>Creation/Dev/GS1 To GS2</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GS1_To_GS2&amp;diff=5261"/>
		<updated>2006-01-10T20:31:51Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: GS1 To GS2 moved to Creation/Dev/GS1 To GS2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducing the new scripting engine ==&lt;br /&gt;
&lt;br /&gt;
This document is describing some problems and solutions&lt;br /&gt;
when switching from the old Graal scripting engine (GS1) to&lt;br /&gt;
the new engine (GS2). The new scripting engine has been&lt;br /&gt;
designed to on the one hand be compatible to the old&lt;br /&gt;
engine, and on the other hand provide new functionality&lt;br /&gt;
to make it easier to write Graal scripts and do more&lt;br /&gt;
interesting things with it. Those new things include&lt;br /&gt;
a windowing system (GUI), a particle engine, multi-dimensional&lt;br /&gt;
arrays, function parameter passing, true object orientation.&lt;br /&gt;
&lt;br /&gt;
Since the old engine has been designed 7 years ago, a lot&lt;br /&gt;
of functionality has been added to that engine while the basic&lt;br /&gt;
design has not been changed, so a lot of modifications can be&lt;br /&gt;
more seen as a &amp;quot;hack&amp;quot; and are not very easy to use. For example&lt;br /&gt;
numeric variables and string variables must be accessed&lt;br /&gt;
in a different way, even more complex operations need to be&lt;br /&gt;
used to access numeric arrays and string lists.&lt;br /&gt;
The new scripting engine tries to stay compatible with the old&lt;br /&gt;
functions, but also add easier ways to access the variables.&lt;br /&gt;
Numeric and string variables can now be accessed the same way,&lt;br /&gt;
as well as numeric arrays and string lists.&lt;br /&gt;
&lt;br /&gt;
To make the new functionality easy to use, some old &amp;quot;hacky&amp;quot; ways of&lt;br /&gt;
accessing variables are not supported anymore. If scripts are&lt;br /&gt;
written correctly without using those methods, then they will work&lt;br /&gt;
fine in the new engine. If not, then they need to be fixed manually.&lt;br /&gt;
In generally there are not a lot of scripts using those problematic&lt;br /&gt;
ways of accessing variables, but sometime scripters just use&lt;br /&gt;
copy &amp;amp; paste and so also copy the error to a lot of scripts. Then&lt;br /&gt;
the only solution will be to edit those scripts manually, copying&lt;br /&gt;
the fixed code part to the other affected scripts, or directly use&lt;br /&gt;
classes and the ''join'' function.&lt;br /&gt;
&lt;br /&gt;
== Using the correct syntax ==&lt;br /&gt;
&lt;br /&gt;
The new scripting engine finally reports syntax errors, when&lt;br /&gt;
modifying scripts you see the error output on RC chat (RC is&lt;br /&gt;
short for [[RC|RemoteControl]], an admin tool for Graal). If there&lt;br /&gt;
are errors while the npcserver is starting up, then the errors&lt;br /&gt;
are written in to logs/syntaxerrors.txt.&lt;br /&gt;
The new engine also reports errors while running the scripts,&lt;br /&gt;
including endless loops (loops are limited to 10000 cycles)&lt;br /&gt;
and call of non-existing functions. On clientside those&lt;br /&gt;
errors are output into the F2 window, on serverside they&lt;br /&gt;
are displayed on RC chat, but can also be redirected to&lt;br /&gt;
file using the [[server options|server option]] ''logscripterrorstofile=true'',&lt;br /&gt;
the errors will then appear in logs/scripterrors.txt.&lt;br /&gt;
&lt;br /&gt;
While some people might get headache when seeing a lot of&lt;br /&gt;
script errors, that error reporting is actually giving you&lt;br /&gt;
the possibility to track errors easily. While the new engine&lt;br /&gt;
is not accepting as many syntax hacks as the old engine,&lt;br /&gt;
it is actually easier now to fix them.&lt;br /&gt;
&lt;br /&gt;
=== Closing brackets ===&lt;br /&gt;
&lt;br /&gt;
An error that often happens is a missing opening bracket or&lt;br /&gt;
missing closing bracket. The best way to not accidently do&lt;br /&gt;
that error is to follow a constant and ordered scripting&lt;br /&gt;
style, indenting scripting lines, using spaces between&lt;br /&gt;
operators. Each time you open a '''{''' bracket you indent the&lt;br /&gt;
following lines by 2 spaces. You can also use 4 spaces, that&lt;br /&gt;
doesn't matter as long as you keep the same number of spaces&lt;br /&gt;
in the whole script. Tabulators are not recommended since&lt;br /&gt;
special characters are automatically removed by the engine.&lt;br /&gt;
When you afterwards use a '''}''', then you stop the indenting.&lt;br /&gt;
That way you can check the correct number of opening and closing&lt;br /&gt;
brackets by just watching if the last closing bracket appears&lt;br /&gt;
at the very beginning of a line.&lt;br /&gt;
The Graal script compiler doesn't require that indenting, but it&lt;br /&gt;
is still recommended.&lt;br /&gt;
&lt;br /&gt;
=== Semicolon ===&lt;br /&gt;
&lt;br /&gt;
A thing that is quite simple to keep care of but is often&lt;br /&gt;
done wrong is to add semicolons behind commands. That must&lt;br /&gt;
be done to separate the commands from each other.&lt;br /&gt;
In the old scripting engine it was possible to forget the&lt;br /&gt;
semicolon if the next character was a closing bracket '''}'''.&lt;br /&gt;
The bracket was automatically finishing the last command.&lt;br /&gt;
In the new engine that it possible too as long as the last&lt;br /&gt;
command is a function call, it's not working if the last&lt;br /&gt;
command is an assignment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bad:  if (playerenters) {x=3}&lt;br /&gt;
Good: if (playerenters) {x=3;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scripters also often think that a closing bracket '''}'''&lt;br /&gt;
never needs a semicolon behind it, although the semicolon is&lt;br /&gt;
required if the brackets are used for defining an array or&lt;br /&gt;
subscript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bad:  setshape2 2,2,{0,0,0,0}&lt;br /&gt;
Good: setshape2 2,2,{0,0,0,0};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That mainly affects the function calls ''setshape2'', ''showpoly''&lt;br /&gt;
and ''putnpc2''. Those always require a semicolon at the end,&lt;br /&gt;
no matter if the function parameters are finishing with a&lt;br /&gt;
closing bracket '''}'''.&lt;br /&gt;
&lt;br /&gt;
=== Syntax incompatibilities ===&lt;br /&gt;
&lt;br /&gt;
While most old scripts compile fine when having no syntax&lt;br /&gt;
error, there is one exception when a correct old script&lt;br /&gt;
is not working with the new scripting engine: the&lt;br /&gt;
in-operator is different:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Works in GS1:  i = (playerx,playery in &amp;lt;20,40&amp;gt;);&lt;br /&gt;
Works in both: i = (playerx in &amp;lt;20,40&amp;gt; &amp;amp;&amp;amp; playery in &amp;lt;20,40&amp;gt;);&lt;br /&gt;
Works in GS2:  i = ({playerx,playery} in &amp;lt;20,40&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable lookup ==&lt;br /&gt;
&lt;br /&gt;
As described in chapter one, the variable lookup has been&lt;br /&gt;
changed in the new scripting engine. Lookup means the&lt;br /&gt;
behaviour how variable names are translated into actual&lt;br /&gt;
object attributes, or to be more close to the hardware,&lt;br /&gt;
lookup is the translation into memory addresses.&lt;br /&gt;
That means that a variable that was formerly connected&lt;br /&gt;
to one value, is now connected to another value, and&lt;br /&gt;
eventually having different behaviour when modifying it,&lt;br /&gt;
and is so changing the logic of the script or even&lt;br /&gt;
mess it up.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
Several scripts were using the variable ''this.x'' to store&lt;br /&gt;
temporary data, or just as for-loop variable.&lt;br /&gt;
While in the old engine ''this.x'' was just a numeric scripting&lt;br /&gt;
variable, it is now redirecting to the ''x'' value of the&lt;br /&gt;
current script object (''this''). So if you modify it, then&lt;br /&gt;
the npc is magically starting to move, which was&lt;br /&gt;
probably not the intention of the scripter.&lt;br /&gt;
In that case the variable name must be modified to something&lt;br /&gt;
like ''i'' or ''temp.i''.&lt;br /&gt;
&lt;br /&gt;
=== Variable types in the new scripting engine ===&lt;br /&gt;
&lt;br /&gt;
The new scripting engine (GS2) has basicly 3 types of variables:&lt;br /&gt;
&lt;br /&gt;
* Object variables: objectname.variablename &amp;lt;br&amp;gt; Object can be ''this'' for the current object, or ''player'' or an NPC name like ''DB_Items''. The variable will then access the attributes of the object if there is a built-in attribute with that name (e.g. ''this.x''), or a script variable belonging to that object (e.g. ''this.i'')&lt;br /&gt;
&lt;br /&gt;
* Attributes of the active object: attributename &amp;lt;br&amp;gt; If there is no leading, then the attributes of the current script object (for which the script is executed) are accessed, if there is an attribute with that name, e.g. ''x''.&lt;br /&gt;
&lt;br /&gt;
* Global variables: variablename &amp;lt;br&amp;gt; If the variable name has no leading and is not matching a built-in attribute of the current script object, then it is taken from the global variable pool. This is different to most other scripting languages where variables without leading are seen as local variables, but this behaviour is required to be compatible with the old scripting engine. Also it is a simple way to share data between scripts - you can set a flag in one script and read the flag in another script without needing to know where it is stored. Global variables are not saved, so they are not persistent and disappear after a server restart.&lt;br /&gt;
&lt;br /&gt;
There are a few exceptions to this lookup scheme, e.g.&lt;br /&gt;
function parameters can be accessed without a leading in&lt;br /&gt;
front of the variable name. Also the ''with'' operator can&lt;br /&gt;
temporary modify the current script object (''this'').&lt;br /&gt;
In generally you don't need to care about those exceptions,&lt;br /&gt;
to be sure that everything is working fine you should&lt;br /&gt;
prefer to add a leading in front of variable names&lt;br /&gt;
though.&lt;br /&gt;
&lt;br /&gt;
=== Change of variable lookup ===&lt;br /&gt;
&lt;br /&gt;
==== Attributes of the current object ====&lt;br /&gt;
&lt;br /&gt;
As described in chapter 3.1., the built-in attributes of the&lt;br /&gt;
current object can be accessed by ''this.x'', ''this.y'' etc. now.&lt;br /&gt;
In the old scripting engine that was not possible, those&lt;br /&gt;
variable names were used for normal variables. That means&lt;br /&gt;
if your scripts are using such variables, make sure that it is&lt;br /&gt;
used for the correct thing. That includes numeric variables&lt;br /&gt;
(''this.x = 3;'') as well as string variables (''setstring this.x,3;'');&lt;br /&gt;
&lt;br /&gt;
Most common variables that need to be changed:&lt;br /&gt;
* ''this.x'', ''this.y'', ''this.dir'', ''this.hp'', ''this.ap''&lt;br /&gt;
* ''this.hp'' on serverside&lt;br /&gt;
* ''this.width'', ''this.height'', ''this.image''&lt;br /&gt;
&lt;br /&gt;
==== Global variables ====&lt;br /&gt;
&lt;br /&gt;
Variables without leading are global now. While on clientside&lt;br /&gt;
that was already the case in the old scripting engine, on&lt;br /&gt;
serverside those variables were formerly only accessible in the&lt;br /&gt;
current script. If you are using such variables, don't trust&lt;br /&gt;
that other scripts are not modifying it. Eventually rename&lt;br /&gt;
those variables, or use ''this.variables'' which are only working&lt;br /&gt;
for the current object, or ''temp.variables'' which are only working&lt;br /&gt;
in the current function body.&lt;br /&gt;
&lt;br /&gt;
==== With-Operator ====&lt;br /&gt;
&lt;br /&gt;
The ''with'' operator is temporary changing the current&lt;br /&gt;
script object (''this''): all ''this.'' variables inside the&lt;br /&gt;
opening and closing bracket are redirected to the&lt;br /&gt;
with-object instead of the executing script object.&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.myvar = 3;&lt;br /&gt;
with (findplayer(&amp;quot;Max&amp;quot;)) {&lt;br /&gt;
  this.myvar = 5;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After executing that code, ''myvar'' of the npc has&lt;br /&gt;
the value 3, while ''myvar'' of the player &amp;quot;Max&amp;quot; has 5.&lt;br /&gt;
The player &amp;quot;Max&amp;quot; is the with-object in this case.&lt;br /&gt;
While both variables are accessed using the same&lt;br /&gt;
variable name, they are directing to different&lt;br /&gt;
variables.&lt;br /&gt;
In the old scripting engine ''this'' was only modified&lt;br /&gt;
when the with-object is another npc. In the new&lt;br /&gt;
engine any script object can overwrite ''this''.&lt;br /&gt;
&lt;br /&gt;
Another thing that you need to keep care of is that you&lt;br /&gt;
can also access the built-in variables of the with-object&lt;br /&gt;
without using the ''this'' leading:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
x = 20;&lt;br /&gt;
with (findnpc(&amp;quot;Turret&amp;quot;)) {&lt;br /&gt;
  x = 30;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the ''x'' position of the current npc will&lt;br /&gt;
be changed to 20, while the ''x'' position of the Turret&lt;br /&gt;
will be changed to 30.&lt;br /&gt;
The only exceptions for this behaviour are the variables&lt;br /&gt;
''x'', ''y'', ''dir'' and ''ap'' when using a player as&lt;br /&gt;
with-object: an ''x'' without leading will never direct&lt;br /&gt;
to the ''player.x'' variable, it will always take the&lt;br /&gt;
npc for which the script is executed, or the npc that is&lt;br /&gt;
positioned highest in the ''with''-stack when using several&lt;br /&gt;
''with''-operations inside each other.&lt;br /&gt;
&lt;br /&gt;
=== Numeric variables, string variables and array using the same name ===&lt;br /&gt;
&lt;br /&gt;
One major improvement in the new scripting engine is that&lt;br /&gt;
you can easier access string variables and arrays. One&lt;br /&gt;
drawback is that if you have used numeric variables, arrays or&lt;br /&gt;
string variables with the same name, those are now directing to&lt;br /&gt;
the same variable. So you will need to modify the variable&lt;br /&gt;
names if they are supposed to hold different data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bad:&lt;br /&gt;
  this.myvar = 1;&lt;br /&gt;
  setstring this.myvar,2;&lt;br /&gt;
  this.myvar = {1,2,3};&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
  this.mynumericvar = 1;&lt;br /&gt;
  this.mystringvar = &amp;quot;2&amp;quot;;&lt;br /&gt;
  this.myarrayvar = {1,2,3};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Easier access to string variables ==&lt;br /&gt;
&lt;br /&gt;
You only need to read this chapter if you want to use the&lt;br /&gt;
new way of accessing string variables, it is not&lt;br /&gt;
required to make old scripts compatible.&lt;br /&gt;
&lt;br /&gt;
String variables can be accessed easier now:&amp;lt;br&amp;gt;&lt;br /&gt;
Writing string variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Old: setstring this.myvar,text;&lt;br /&gt;
New: this.myvar = &amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reading string variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Old: #s(this.mvyar)&lt;br /&gt;
New: this.myvar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see that string variables can now be accessed&lt;br /&gt;
similar to numeric variables. Sometimes the variable&lt;br /&gt;
name must have a different leading though to access&lt;br /&gt;
the same variable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Old: setstring varwithoutleading,text;&lt;br /&gt;
New: player.varwithoutleading = &amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also constructing dynamic variable names for string&lt;br /&gt;
variables is different now, you need to use the&lt;br /&gt;
new syntax. This documentation is not for explaining&lt;br /&gt;
the complete syntax, but it might help to lead you&lt;br /&gt;
to the correct path:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Old: setstring this.item#v(itemnumber),apple;&lt;br /&gt;
New: this.(&amp;quot;item&amp;quot; @ itemnumber) = &amp;quot;apple&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to keep care on following things:&lt;br /&gt;
* you concat strings using @&lt;br /&gt;
* if you want to concat a string to another variable, don't forget to put &amp;quot;&amp;quot; around it to mark it as string&lt;br /&gt;
* never put a dot inside the dynamic variable name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bad:  (&amp;quot;this.item&amp;quot; @ itemnumber)&lt;br /&gt;
Good: this.(&amp;quot;item&amp;quot; @ itemnumber)&lt;br /&gt;
Good: (&amp;quot;Party&amp;quot; @ partynumber).name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* never use array brackets in the dynamic variable name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bad:  this.(&amp;quot;item[&amp;quot; @ index @ &amp;quot;]&amp;quot;)&lt;br /&gt;
Good: this.item[index]&lt;br /&gt;
Good: this.(&amp;quot;itemstats_&amp;quot; @ itemnumber)[index]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server-side and client-side ==&lt;br /&gt;
&lt;br /&gt;
The new scripting engine is reporting the calls of&lt;br /&gt;
non-existing functions. As described in chapter 2,&lt;br /&gt;
you can redirect those error reports to file using&lt;br /&gt;
[[server options|server option]] ''logscripterrorstofile=true'', or you&lt;br /&gt;
set the variable ''this.scriptlogmissingfunctions'' to&lt;br /&gt;
false in case a script wants to call functions of&lt;br /&gt;
unknown objects and doesn't want to flood the&lt;br /&gt;
RC chat.&lt;br /&gt;
Still it is not good to call non-existing functions,&lt;br /&gt;
most of the time that function call actually&lt;br /&gt;
was meant to have a purpose and is causing problems&lt;br /&gt;
if it's not executed. In some cases the object&lt;br /&gt;
might have disappeared or was accessed using a&lt;br /&gt;
bad name.&lt;br /&gt;
It might also be possible that the function&lt;br /&gt;
actually doesn't exist: on many servers scripts&lt;br /&gt;
are executed on server-side which are meant for&lt;br /&gt;
client-side, and vice-versa. There are lists of&lt;br /&gt;
available scripting functions, check those if&lt;br /&gt;
you are not sure if the function is existing &lt;br /&gt;
([[Script Functions: NPC Server]], [[Script Functions: Client]]).&lt;br /&gt;
&lt;br /&gt;
You can add a line ''//#CLIENTSIDE'' in front of a&lt;br /&gt;
script if it's meant for clientside execution,&lt;br /&gt;
or remove that line if its meant for serverside&lt;br /&gt;
executing. If you call the non-existing function&lt;br /&gt;
on the bad side but rely on executing that function,&lt;br /&gt;
then you will need to send a trigger to the other&lt;br /&gt;
side or modify a variable, which can be read on&lt;br /&gt;
the other side and reacted probably.&lt;br /&gt;
&lt;br /&gt;
Common functions that are client-side only:&lt;br /&gt;
* '''play'''(soundfile);&lt;br /&gt;
* '''hurt'''(hurtpower);&lt;br /&gt;
* '''addtiledef'''(image,levelstart,tilestype)&lt;br /&gt;
* '''addtiledef2'''(image,levelstart,x,y)&lt;br /&gt;
* '''showtext'''(index,x,y,font,style,text); &amp;lt;br&amp;gt; also ''showani'', ''showpoly'' etc. &amp;lt;br&amp;gt; those might be added soon to serverside though, currently only ''showimg'' and ''changeimgcolors'' etc. is available on serverside&lt;br /&gt;
&lt;br /&gt;
Common functions that are server-side only:&lt;br /&gt;
* '''setlevel2'''(levelname,newx,newy);&lt;br /&gt;
* '''putnpc2'''(newx,newy,script);&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Serverside&amp;diff=5259</id>
		<title>Serverside</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Serverside&amp;diff=5259"/>
		<updated>2006-01-10T19:24:33Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Serverside moved to Creation/Dev/Serverside&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/Serverside]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Serverside&amp;diff=5258</id>
		<title>Creation/Dev/Serverside</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Serverside&amp;diff=5258"/>
		<updated>2006-01-10T19:24:33Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Serverside moved to Creation/Dev/Serverside&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Serverside''' scripts are those that run on the [[NPC Server]], as opposed to [[Clientside]] scripts that are run on each client's graal client.&lt;br /&gt;
&lt;br /&gt;
Serverside scripting requires a wholly different approach to scripting.&lt;br /&gt;
As the code is being executed on the server, clients cannot tamper with it and therefore everything that needs to be remotely secure should happen on the serverside.&lt;br /&gt;
However, there is only a limited amount of CPU power on the server, therefore it is advisable kick everything to [[Clientside]] if possible, and not to use tight loops or 0.1 second timeouts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Someone needs to make the [[NPC Server]] page less comprehensive and outdated and move the fun stuff over here and to [[Clientside]] and [[GScript]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Clientside&amp;diff=5256</id>
		<title>Creation/Dev/Clientside</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Clientside&amp;diff=5256"/>
		<updated>2006-01-10T19:10:54Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Clientside moved to Creation/Dev/Clientside&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Clientside''' scripts are sent by the server to individual players' clients to be executed. Clientside scripts typically handle simple, insecure tasks, such as drawing visuals and playing sounds. They are easily manipulated by cheating tools, so critical tasks are usually reserved for [[serverside]] scripts. However, they are faster and generally produce less lag than their serverside counterparts, as clientside data is (with a few exceptions) not sent to other players.&lt;br /&gt;
&lt;br /&gt;
In [[GScript]], the most commonly-used command for script interaction between the client and server is [[Old_GScript:triggeraction|triggeraction]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=NPC_weapon&amp;diff=5255</id>
		<title>NPC weapon</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=NPC_weapon&amp;diff=5255"/>
		<updated>2006-01-10T19:09:42Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: NPC weapon moved to Creation/Dev/NPC weapon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/NPC weapon]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/NPC_weapon&amp;diff=5254</id>
		<title>Creation/Dev/NPC weapon</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/NPC_weapon&amp;diff=5254"/>
		<updated>2006-01-10T19:09:42Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: NPC weapon moved to Creation/Dev/NPC weapon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A npc that is a weapon&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Database_NPC&amp;diff=5252</id>
		<title>Creation/Dev/Database NPC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Database_NPC&amp;diff=5252"/>
		<updated>2006-01-10T19:09:08Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Database NPC moved to Creation/Dev/Database NPC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Database NPCs&amp;lt;/b&amp;gt; are [[NPC]]s stored in an [[NPC Server]]. They are given a user-defined NPC name ([[Old GScript:Message Codes|#N]]) and can warp to anywhere on a server.&lt;br /&gt;
&lt;br /&gt;
[[NPC Control|NC]] contains a section for administering Database NPCs, including editing the script, this. flags, viewing [[Old GScript:Variable|Variable]]s and resetting them. This allows an Admin to change things about the [[NPC]] which cannot be done in-game without another NPC.&lt;br /&gt;
&lt;br /&gt;
Database NPCs are usually [[Serverside]] to be able to function simultaneously with multiple players, warp, use [[Old GScript:with|with]], etc, so they can work with players and other database NPCs in a collaborative way. Your Database NPC may be used as a [[Guild]] Manager, so it needs to interact with the player and server.&lt;br /&gt;
&lt;br /&gt;
Database NPCs can use [[Old GScript:canwarp|canwarp]]/[[Old GScript:canwarp2|canwarp2]] to warp with [[Level]] warp [[Link]]s, and level boundaries on normal [[Map]]s.&lt;br /&gt;
They are also given [[GMap]] coordinates when on a GMap (i.e. 120,110 would be 60,50 in level b2).&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=NPC&amp;diff=5250</id>
		<title>NPC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=NPC&amp;diff=5250"/>
		<updated>2006-01-10T19:04:03Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: NPC moved to Creation/Dev/NPC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/NPC]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/NPC&amp;diff=5249</id>
		<title>Creation/Dev/NPC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/NPC&amp;diff=5249"/>
		<updated>2006-01-10T19:04:03Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: NPC moved to Creation/Dev/NPC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The acronym '''NPC''' expands to Non-Player-Characters; traditionally beings controlled by the game system and not players.&lt;br /&gt;
In [[Graal]], this term has a much broader meaning and applies not only to human characters or monsters, but also to example decoration and weapons; basically anything that is scripted in [[GScript]].&lt;br /&gt;
&lt;br /&gt;
There are mainly three kinds of NPCs, [[NPC weapon]]s which are held in the player's inventory, [[Local NPC]]s that belong to a level and [[Database NPC]]s that appear like [[Local NPC]]s but are treated specially.&lt;br /&gt;
&lt;br /&gt;
[[NPC scripting]] is a key element of creating your own [[Playerworld]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=NPC_scripting&amp;diff=5248</id>
		<title>NPC scripting</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=NPC_scripting&amp;diff=5248"/>
		<updated>2006-01-10T19:02:47Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: NPC scripting moved to Creation/Dev/NPC scripting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/NPC scripting]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/NPC_scripting&amp;diff=5247</id>
		<title>Creation/Dev/NPC scripting</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/NPC_scripting&amp;diff=5247"/>
		<updated>2006-01-10T19:02:47Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: NPC scripting moved to Creation/Dev/NPC scripting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NPC scripting (noun) is the act of creating (verb) an NPC using [[GScript]].&lt;br /&gt;
&lt;br /&gt;
This is normally done in the Level Editor or the NC/NPC-Control portion of RC.&lt;br /&gt;
&lt;br /&gt;
There are three types of NPC scripting:&lt;br /&gt;
&lt;br /&gt;
  ''NPC scripting''&lt;br /&gt;
  ''Weapon scripting''&lt;br /&gt;
  ''Class scripting''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== NPC Scripting ==&lt;br /&gt;
&lt;br /&gt;
An NPC, or Non-Playing Character, is a scripted object in a level, or on a server. This may take the form of a mysterious old man who leads you to a quest, or a light that  you can turn on by clicking it. They add detail to the level; however, they must be used sparingly because they generate lots of lag.&lt;br /&gt;
&lt;br /&gt;
== Weapon Scripting ==&lt;br /&gt;
&lt;br /&gt;
A weapon, defined in Graal terms, is an NPC that does not appear in a level or on a server; it is carried with the client. Weapons are mainly [[clientside]]. Examples of weapons include GUI's, swords, modified playerlists, and other things that apply to a player. Weapons may also be used as hacker detection devices.&lt;br /&gt;
&lt;br /&gt;
== Class Scripting ==&lt;br /&gt;
&lt;br /&gt;
A class is a script that is &amp;quot;included&amp;quot; in other scripts. They are used to unify level NPCs by making sure no alterations are performed (E.g., a coke machine works the same way in every level), and to add scripting functions to weapons and NPCs.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script_Functions:_Client&amp;diff=5245</id>
		<title>Creation/Dev/Script Functions: Client</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script_Functions:_Client&amp;diff=5245"/>
		<updated>2006-01-10T18:57:56Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Script Functions: Client moved to Creation/Dev/Script Functions: Client&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Global:&lt;br /&gt;
  $pref::graal::automapping - boolean&lt;br /&gt;
  $pref::graal::choosenvoicecodec - integer&lt;br /&gt;
  $pref::graal::defaultfontsize - integer&lt;br /&gt;
  $pref::graal::dontconnectlevels - boolean&lt;br /&gt;
  $pref::graal::dontloadlistheads - boolean&lt;br /&gt;
  $pref::graal::dontsavepasswords - boolean&lt;br /&gt;
  $pref::graal::fixedport - boolean&lt;br /&gt;
  $pref::graal::fixedudpport - integer&lt;br /&gt;
  $pref::graal::language - string&lt;br /&gt;
  $pref::graal::limitnicknames - boolean&lt;br /&gt;
  $pref::graal::microactivatebyvolume - boolean&lt;br /&gt;
  $pref::graal::microactivationlevel - integer&lt;br /&gt;
  $pref::graal::microinputdevice - integer&lt;br /&gt;
  $pref::graal::microon - boolean&lt;br /&gt;
  $pref::graal::midivolume - integer&lt;br /&gt;
  $pref::graal::mp3volume - integer&lt;br /&gt;
  $pref::graal::nicknamelimit - integer&lt;br /&gt;
  $pref::graal::nomassmessages - boolean&lt;br /&gt;
  $pref::graal::notoalls - boolean&lt;br /&gt;
  $pref::graal::noudp - boolean&lt;br /&gt;
  $pref::graal::radiovolume - integer&lt;br /&gt;
  $pref::graal::reversestereo - boolean&lt;br /&gt;
  $pref::graal::sfxvolume - integer&lt;br /&gt;
  $pref::graal::voicevolume - integer&lt;br /&gt;
  allfeatures - integer (read only)&lt;br /&gt;
    the sum of all game features (use with enablefeatures)&lt;br /&gt;
  allplayerscount - integer (read only)&lt;br /&gt;
    the number of players on the server&lt;br /&gt;
  allstats - integer (read only)&lt;br /&gt;
    the sum of all pieces of the status (use with showstats)&lt;br /&gt;
  canspin - boolean (read only)&lt;br /&gt;
    the player has spin attack&lt;br /&gt;
  carriesblackstone - boolean (read only)&lt;br /&gt;
    the player is carrying a black (level 2) stone&lt;br /&gt;
  carriesbush - boolean (read only)&lt;br /&gt;
    the player is carrying a bush&lt;br /&gt;
  carriesnpc - boolean (read only)&lt;br /&gt;
    the player is carrying an NPC&lt;br /&gt;
  carriessign - boolean (read only)&lt;br /&gt;
    the player is carrying a sign&lt;br /&gt;
  carriesstone - boolean (read only)&lt;br /&gt;
    the player is carrying a green (level 1) stone&lt;br /&gt;
  carriesvase - boolean (read only)&lt;br /&gt;
    the player is carrying a vase&lt;br /&gt;
  downloadfile - string (read only)&lt;br /&gt;
    name of the current file being downloaded&lt;br /&gt;
  downloadpos - integer (read only)&lt;br /&gt;
    how much of the file has been downloaded in bytes&lt;br /&gt;
  downloadsize - integer (read only)&lt;br /&gt;
    size of the downloading file is in bytes&lt;br /&gt;
  emoticonchar - string (read only)&lt;br /&gt;
    the key being held with CTRL to show an emoticon&lt;br /&gt;
  focusx - float (read only)&lt;br /&gt;
    x value of the screen's focus&lt;br /&gt;
  focusy - float (read only)&lt;br /&gt;
    y value of the screen's focus&lt;br /&gt;
  graalversion - float (read only)&lt;br /&gt;
    version of the player's Graal client&lt;br /&gt;
  gravity - float&lt;br /&gt;
    effects the speed of projectiles (broken in GS2?)&lt;br /&gt;
  iscarrying - boolean (read only)&lt;br /&gt;
    the player is carrying any object&lt;br /&gt;
  isfocused - boolean (read only)&lt;br /&gt;
    the player's screen is focused somewhere other than the player&lt;br /&gt;
  isgraal3d - boolean (read only)  !DEPRECATED&lt;br /&gt;
    the player is using the Graal3 client &lt;br /&gt;
  isleader - boolean (read only)&lt;br /&gt;
    the player is the first to have entered the level (ID 0)&lt;br /&gt;
  isonmap - boolean (read only)&lt;br /&gt;
    the player's level is attached to other levels (i.e. a gmap)&lt;br /&gt;
  lastdownloadfile - string (read only)&lt;br /&gt;
    name of the last file to be downloaded&lt;br /&gt;
  leftmousebutton - boolean (read only)&lt;br /&gt;
    the left mouse button is being held&lt;br /&gt;
  levelorgx - float (read only)&lt;br /&gt;
    the origin of the player's x position (changes when attached to NPCs)&lt;br /&gt;
  levelorgy - float (read only)&lt;br /&gt;
    the origin of the player's y position (changes when attached to NPCs)&lt;br /&gt;
  lighteffectsenabled - boolean (read only)&lt;br /&gt;
    light effects are enabled (v2 only)&lt;br /&gt;
  middlemousebutton - boolean (read only)&lt;br /&gt;
    the middle mouse button is being held&lt;br /&gt;
  mousebuttons - integer (read only)&lt;br /&gt;
    sum of mouse buttons being held&lt;br /&gt;
      1 = left&lt;br /&gt;
      2 = middle&lt;br /&gt;
      4 = right&lt;br /&gt;
  mousescreenx - integer&lt;br /&gt;
    position of the mouse on the graal window&lt;br /&gt;
  mousescreeny - integer&lt;br /&gt;
    position of the mouse on the graal window&lt;br /&gt;
  mousewheeldelta - integer (read only)&lt;br /&gt;
    the change in the mouse wheel's position in the last .05 seconds&lt;br /&gt;
  mousex - float&lt;br /&gt;
    position of the mouse on the level&lt;br /&gt;
  mousey - float&lt;br /&gt;
    position of the mouse on the level&lt;br /&gt;
  musiclen - integer (read only)&lt;br /&gt;
    length of the currently playing music in seconds&lt;br /&gt;
  musicpos - integer (read only)&lt;br /&gt;
    how long the music has been played&lt;br /&gt;
  rightmousebutton - boolean (read only)&lt;br /&gt;
    the right mouse button is being held&lt;br /&gt;
  screenheight - integer (read only)&lt;br /&gt;
    the height of the Graal window&lt;br /&gt;
  screenwidth - integer (read only)&lt;br /&gt;
    the width of the Graal window&lt;br /&gt;
  scriptedcontrols - boolean (read only)&lt;br /&gt;
  scriptedplayerlist - boolean (read only)&lt;br /&gt;
  selectedsword - integer&lt;br /&gt;
  selectedweapon - integer&lt;br /&gt;
    position of the player's currently selected weapon in the 'weapons' array.&lt;br /&gt;
  servername - string (read only)&lt;br /&gt;
    name of the server the player is connected to&lt;br /&gt;
  serverstartconnect - string&lt;br /&gt;
  serverstartparams - string&lt;br /&gt;
  shotbybaddy - boolean (read only) &lt;br /&gt;
    the NPC was shot by a baddy (DEPRECATED?)&lt;br /&gt;
  shotbyplayer - boolean (read only)&lt;br /&gt;
    the NPC was shot by a player (DEPRECATED?)&lt;br /&gt;
  timevar - integer (read only)&lt;br /&gt;
    a global variable that rises by 1 every 5 seconds&lt;br /&gt;
  timevar2 - float (read only)&lt;br /&gt;
    how long the player's CPU has been running (time since 00:00, January 1, 2000 when used serverside)&lt;br /&gt;
  wasshooted - boolean (read only)&lt;br /&gt;
    the NPC was shot by anything&lt;br /&gt;
  waterheight - float&lt;br /&gt;
  weapons - object (read only)&lt;br /&gt;
    a list of weapons in the player's possesion (read as an array)&lt;br /&gt;
  weaponsenabled - boolean&lt;br /&gt;
    the player's weapons are enabled&lt;br /&gt;
  addcontrol(obj)&lt;br /&gt;
  addtiledef(image, levelstart, neworder)&lt;br /&gt;
    changes the tileset of all levels beginning with 'levelstart' to the specified image&lt;br /&gt;
    neworder is whether the type of each tile corresponds to the original pics1.png; use 0 or 1&lt;br /&gt;
  addtiledef2(image, levelstart, x, y)&lt;br /&gt;
    changes part of the tileset of all levels beginning with 'levelstart' to the specified image, beginning at 'x' and 'y'&lt;br /&gt;
  adventure_installgraal(str, bool, bool)&lt;br /&gt;
  adventure_openexternaloptions() - returns boolean&lt;br /&gt;
  adventure_openexternalpm(obj) - returns boolean&lt;br /&gt;
  adventure_openserverlist()&lt;br /&gt;
  adventure_savegraaloptions()&lt;br /&gt;
  adventure_selectpath(str) - returns object&lt;br /&gt;
  adventure_setaccountname(str)&lt;br /&gt;
  adventure_setchat(str)&lt;br /&gt;
  adventure_setnickname(str)&lt;br /&gt;
  adventure_setpassword(str)&lt;br /&gt;
  adventure_startofflinemode()&lt;br /&gt;
  adventure_updateaccountfield()&lt;br /&gt;
  adventure_updatemicroactivationlevel()&lt;br /&gt;
  adventure_updatemidivolume()&lt;br /&gt;
  adventure_updatemp3volume()&lt;br /&gt;
  adventure_updateplayermuted()&lt;br /&gt;
  adventure_updateplayerprofile(bool, str, str, int, str, str, str, str, str, str)&lt;br /&gt;
  adventure_updateradiovolume()&lt;br /&gt;
  aindexof(float, array) - returns integer  !DEPRECATED&lt;br /&gt;
    use obj.index(value)&lt;br /&gt;
  attachplayertoobj(type, id)&lt;br /&gt;
    attaches the player to the object with the specified id; currently the only type is 0 (NPC)&lt;br /&gt;
  callnpc(id, params)&lt;br /&gt;
    use npcs[id].trigger(action, params);&lt;br /&gt;
  callweapon(id, params)&lt;br /&gt;
    use weapons[id].trigger(action, params);&lt;br /&gt;
  contains(object, value) - returns boolean&lt;br /&gt;
    checks if 'object' contains the specified value in it&lt;br /&gt;
  cursoroff()&lt;br /&gt;
    hides the cursor&lt;br /&gt;
  cursoron()&lt;br /&gt;
    shows the cursor&lt;br /&gt;
  degtorad(angle) - returns float&lt;br /&gt;
    converts an angle in degrees to a radian&lt;br /&gt;
  detachplayer()&lt;br /&gt;
    detaches a player from an NPC&lt;br /&gt;
  disabledefmovement()&lt;br /&gt;
    disables default controls of the player's character&lt;br /&gt;
  disablemap()&lt;br /&gt;
    disables the large map&lt;br /&gt;
  disablepause()&lt;br /&gt;
    disables the pause button&lt;br /&gt;
  disableselectweapons()&lt;br /&gt;
    disables the weapon select menu&lt;br /&gt;
  disableweapons()&lt;br /&gt;
    disables usage of NPC weapons&lt;br /&gt;
  echo(text)&lt;br /&gt;
    sends 'text' to RC chat&lt;br /&gt;
  enabledefmovement()&lt;br /&gt;
    enables default control of the player's character&lt;br /&gt;
  enablefeatures(features)&lt;br /&gt;
    enables all features specified and disables the rest (use allfeatures)&lt;br /&gt;
  enablemap()&lt;br /&gt;
    enables the large map&lt;br /&gt;
  enablepause()&lt;br /&gt;
    enables the pause button&lt;br /&gt;
  enableselectweapons()&lt;br /&gt;
    enables the weapon select menu&lt;br /&gt;
  enableweapons()&lt;br /&gt;
    enables usage of NPC weapons&lt;br /&gt;
  explodebomb(id)&lt;br /&gt;
    explodes the bomb with the specified id&lt;br /&gt;
  extractfilebase(filepath) - returns string&lt;br /&gt;
    returns the base of a file out of the file's path&lt;br /&gt;
  extractfileext(filepath) - returns string&lt;br /&gt;
    returns the extension of a file out of the file's path&lt;br /&gt;
  extractfilename(filepath) - returns string&lt;br /&gt;
    returns the name of the file out of the file's path&lt;br /&gt;
  extractfilepath(filepath) - returns string&lt;br /&gt;
    returns the path of the file&lt;br /&gt;
  fileexists(file) - returns boolean&lt;br /&gt;
    checks if a file exists&lt;br /&gt;
  filesize(file) - returns integer&lt;br /&gt;
    gets the size of the specified file in bytes&lt;br /&gt;
  fileupdate(file) - returns boolean&lt;br /&gt;
    checks if a file has been updated&lt;br /&gt;
  findani(gani) - returns object&lt;br /&gt;
    creates a reference to the specified gani&lt;br /&gt;
  findfiles(str, int) - returns object&lt;br /&gt;
  findlevel(level) - returns object&lt;br /&gt;
    creates a reference to the specified level&lt;br /&gt;
  findplayer(account) - returns object&lt;br /&gt;
    creates a reference to the specified player&lt;br /&gt;
  findplayerbyid(id) - returns object&lt;br /&gt;
    creates a reference to the specified player&lt;br /&gt;
  findweapon(weapon) - returns object&lt;br /&gt;
    creates a reference to the specified weapon&lt;br /&gt;
  freezeplayer(freezetime)&lt;br /&gt;
    freezes the player for the specified amount of time&lt;br /&gt;
  getascii(character) - returns integer&lt;br /&gt;
    returns the ascii code of the character&lt;br /&gt;
  getbasepackage() - returns object    &lt;br /&gt;
  getboxcenter(str) - returns string&lt;br /&gt;
  getdownloadedupdatepackagesize() - returns integer&lt;br /&gt;
  getdownloadingpackage() - returns object&lt;br /&gt;
  getdownloadingpackagescount() - returns integer&lt;br /&gt;
  getextension(file) - returns string&lt;br /&gt;
    returns the extension of a file&lt;br /&gt;
  getimgheight(image) - returns integer&lt;br /&gt;
    the height of the specified image in pixels&lt;br /&gt;
  getimgwidth(image) - returns integer&lt;br /&gt;
    the width of the specified image in pixels&lt;br /&gt;
  getkeycode(key) - returns integer&lt;br /&gt;
    the key code of the specified key&lt;br /&gt;
  getmapx(level) - returns integer&lt;br /&gt;
    x-position of the level on the gmap&lt;br /&gt;
  getmapy(level) - returns integer&lt;br /&gt;
    y-position of the level on the gmap&lt;br /&gt;
  getobjectat(x, y) - returns object&lt;br /&gt;
    references the object at the specified x and y&lt;br /&gt;
  getobjectatmouse() - returns object&lt;br /&gt;
    references the object under the mouse&lt;br /&gt;
  getobjectbyray(str, str) - returns object&lt;br /&gt;
  getpackagesdownloadcomplete() - returns boolean&lt;br /&gt;
  getpackagesdownloaded() - returns boolean&lt;br /&gt;
  getplatform() - returns string&lt;br /&gt;
    the operating system of the player&lt;br /&gt;
  getservername() - returns string&lt;br /&gt;
    the server's name&lt;br /&gt;
  getstringkeys(prefix) - returns object&lt;br /&gt;
    creates a list of all variables beginning with 'prefix'&lt;br /&gt;
  gettextheight(zoom, font, style) - returns integer&lt;br /&gt;
    height of the text with the specified attributes in pixels&lt;br /&gt;
  gettextwidth(zoom, font, style, text) - returns integer&lt;br /&gt;
    width of the specified text in pixels&lt;br /&gt;
  gettotalupdatepackagesize() - returns integer&lt;br /&gt;
  getupdatepackage(str) - returns object&lt;br /&gt;
  getz(float, float) - returns float&lt;br /&gt;
  hideplayer(time)  !DEPRECATED&lt;br /&gt;
    hides all of the player but the shadow for the specified time&lt;br /&gt;
  hidesword(time)&lt;br /&gt;
    hides the player's sword image for the specified time&lt;br /&gt;
  hitnpc(id, halfhearts, fromx, fromy)&lt;br /&gt;
    hits the NPC with the specified ID for halfhearts damage&lt;br /&gt;
    fromx and fromy are used to calculate hurtx and hurty&lt;br /&gt;
  hitobjects(halfhearts, x, y)&lt;br /&gt;
    hits anything at the specified x and y for 'halfhearts' damage&lt;br /&gt;
  hitplayer(id, halfhearts, fromx, fromy)&lt;br /&gt;
    hits the player with the specified ID for 'halfhearts' damage&lt;br /&gt;
    fromx and fromy are used to calculate hurtdx and hurtdy&lt;br /&gt;
  isadminguild(guild) - returns boolean&lt;br /&gt;
    checks if the specified guild appears in the staff list&lt;br /&gt;
  iscursoron() - returns boolean&lt;br /&gt;
    checks if the cursor is being shown&lt;br /&gt;
  isobject(object) - returns boolean&lt;br /&gt;
    checks if the caller is the specified object&lt;br /&gt;
  keydown(integer) - returns boolean&lt;br /&gt;
    checks if a certain key is being held&lt;br /&gt;
      0 = up&lt;br /&gt;
      1 = left&lt;br /&gt;
      2 = down&lt;br /&gt;
      3 = right&lt;br /&gt;
      4 = D&lt;br /&gt;
      5 = S&lt;br /&gt;
      6 = A&lt;br /&gt;
  keydown2(keycode, ignorecase) - returns boolean&lt;br /&gt;
    checks if the key corresponding to 'keycode' is being held&lt;br /&gt;
    'ignorecase' is whether it ignores shift/caplocks or not&lt;br /&gt;
  keyname(keycode) - returns string&lt;br /&gt;
    returns the key correspoding to 'keycode'&lt;br /&gt;
  lay2(item, x, y)&lt;br /&gt;
    lays an item at the specified x and y&lt;br /&gt;
      greenrupee&lt;br /&gt;
      bluerupee&lt;br /&gt;
      redrupee&lt;br /&gt;
      bombs&lt;br /&gt;
      darts&lt;br /&gt;
      heart&lt;br /&gt;
      glove1&lt;br /&gt;
      bow&lt;br /&gt;
      bomb&lt;br /&gt;
      shield&lt;br /&gt;
      sword&lt;br /&gt;
      fullheart&lt;br /&gt;
      superbomb&lt;br /&gt;
      battleaxe&lt;br /&gt;
      goldensword&lt;br /&gt;
      mirrorshield&lt;br /&gt;
      glove2&lt;br /&gt;
      lizardshield&lt;br /&gt;
      lizardsword&lt;br /&gt;
      goldrupee&lt;br /&gt;
      fireball&lt;br /&gt;
      fireblast&lt;br /&gt;
      nukeshot&lt;br /&gt;
      joltbomb&lt;br /&gt;
      spinattack&lt;br /&gt;
  loadmap(gmap)&lt;br /&gt;
    loads the specified gmap (omit the '.gmap' extension)&lt;br /&gt;
  lowercase(text) - returns string&lt;br /&gt;
    converts 'text' to all lowercase characters&lt;br /&gt;
  matrixcreate(str, str) - returns string&lt;br /&gt;
  matrixcreatefromeuler(str) - returns string&lt;br /&gt;
  matrixmulpoint(str, str) - returns string&lt;br /&gt;
  matrixmultiply(str, str) - returns string&lt;br /&gt;
  matrixmulvector(str, str) - returns string&lt;br /&gt;
  noplayerkilling()&lt;br /&gt;
    disables the ability to hurt other players&lt;br /&gt;
  onwall(x, y) - returns boolean&lt;br /&gt;
    checks if the specified x and y is being blocked&lt;br /&gt;
  onwall2(x, y, width, height) - returns boolean&lt;br /&gt;
    checks if anywhere in the specified area is being blocked&lt;br /&gt;
  onwater(x, y) - returns boolean&lt;br /&gt;
    checks if the specified x and y is water&lt;br /&gt;
  onwater2(x, y, width, height) - returns boolean&lt;br /&gt;
    checks if anywhere in the specified area is water&lt;br /&gt;
  openurl(url)&lt;br /&gt;
    opens the specified URL in the default browser (seems to take over the first browser opened)&lt;br /&gt;
  openurl2(url, width, height)&lt;br /&gt;
    opens the specified URL in a default browser with the specified width and height&lt;br /&gt;
  play(sound)&lt;br /&gt;
    plays a sound file&lt;br /&gt;
  play2(sound, x, y, volume)&lt;br /&gt;
    plays a sound file at the specified x and y&lt;br /&gt;
    1 is normal volume&lt;br /&gt;
  playlooped(sound)&lt;br /&gt;
    plays a sound file in a loop&lt;br /&gt;
  popdialog()&lt;br /&gt;
  pushdialog(obj)&lt;br /&gt;
  putleaps(leap, x, y)&lt;br /&gt;
    creates an explosion-like effect at the specified x and y.&lt;br /&gt;
      0 = bush&lt;br /&gt;
      1 = swamp grass&lt;br /&gt;
      2 = rock&lt;br /&gt;
      3 = sign&lt;br /&gt;
      4 = ball&lt;br /&gt;
      5 = water&lt;br /&gt;
  radtodeg(angle) - returns float&lt;br /&gt;
    converts an angle in radianss to a degree&lt;br /&gt;
  randomstring(list) - returns string&lt;br /&gt;
    picks a random entry out of the list&lt;br /&gt;
  reloadfile(file)&lt;br /&gt;
    reloads the specified file into memory&lt;br /&gt;
  removetiledefs(levelstart)&lt;br /&gt;
    removes any custom tilesets from all levels beginning with 'levelstart'&lt;br /&gt;
  replaceani(oldgani, newgani)&lt;br /&gt;
    replaces a default gani with a new gani&lt;br /&gt;
  requestfiledeletion(str)&lt;br /&gt;
  requestfilerename(str, str)&lt;br /&gt;
  requestfilesmove(str, str)&lt;br /&gt;
  requesttext(type, options)&lt;br /&gt;
    requests certain text from the server&lt;br /&gt;
    calls the function 'onReceiveText(requestedtype, requestedoptions, text)'&lt;br /&gt;
      weapon, weaponname&lt;br /&gt;
        requests the script of a specified weapon&lt;br /&gt;
      weaponlist&lt;br /&gt;
        requests a list of weapons on the server&lt;br /&gt;
      class, classname&lt;br /&gt;
        requests the script of a specified class&lt;br /&gt;
      classlist&lt;br /&gt;
        requests a list of classes on the server&lt;br /&gt;
      options&lt;br /&gt;
        requests the server options&lt;br /&gt;
      serverflags&lt;br /&gt;
        requests the server flags&lt;br /&gt;
      folders&lt;br /&gt;
        requests a list of folders&lt;br /&gt;
      folder, folderpath&lt;br /&gt;
        requests a list of the contents of a specified folder&lt;br /&gt;
  resetfocus()&lt;br /&gt;
    returns screen focus to the player&lt;br /&gt;
  savelog(text)  !DEPRECATED&lt;br /&gt;
    saves text to log.txt; use savelog2&lt;br /&gt;
  say(id)  !DEPRECATED&lt;br /&gt;
    shows the text of the sign id in a message box; use say2&lt;br /&gt;
  say2(text)&lt;br /&gt;
    shows the specified text in a message box&lt;br /&gt;
  screenx(x, y) - returns integer&lt;br /&gt;
    converts level x coordinates to screen x coordinates&lt;br /&gt;
  screeny(x, y) - returns integer&lt;br /&gt;
    converts level y coordinates to screen y coordinates&lt;br /&gt;
  selectfilefordownload(str)&lt;br /&gt;
  selectfileforupload()&lt;br /&gt;
  sendrpgmessage(text)&lt;br /&gt;
    adds the specified text to the RPG log&lt;br /&gt;
  sendtext(type, options, params)&lt;br /&gt;
    saves anything requestable by 'requesttext' back to the server&lt;br /&gt;
      weapon, weaponname&lt;br /&gt;
        saves over the specified weapon's script&lt;br /&gt;
      class, classname&lt;br /&gt;
        saves over the specified class's script&lt;br /&gt;
      options&lt;br /&gt;
        saves over the server options&lt;br /&gt;
      serverflags&lt;br /&gt;
        saves over the server flags&lt;br /&gt;
      folders&lt;br /&gt;
        saves over the folder config&lt;br /&gt;
  sendtorc(text)&lt;br /&gt;
    sends a string of text to RC chat, through the NPC-Server&lt;br /&gt;
  serverwarp(server)&lt;br /&gt;
    warps the player to the specified server&lt;br /&gt;
  setani(gani, params)&lt;br /&gt;
    sets the player's gani&lt;br /&gt;
  setbeltcolor(color)  !DEPRECATED&lt;br /&gt;
    use player.colors[#]&lt;br /&gt;
  setcoatcolor(color)  !DEPRECATED&lt;br /&gt;
    use player.colors[#]&lt;br /&gt;
  setcontentcontrol(obj)&lt;br /&gt;
  setcursor2(str)&lt;br /&gt;
  seteffect(red, green, blue, alpha)&lt;br /&gt;
    tints the Graal window with the specified colors and transparency&lt;br /&gt;
    all values are between 0 and 1&lt;br /&gt;
  setfocus(x, y)&lt;br /&gt;
    focuses the screen on the specified x and y&lt;br /&gt;
  setgender(gender)&lt;br /&gt;
    sets the player's gender to either male or female&lt;br /&gt;
  sethead(image)  !DEPRECATED&lt;br /&gt;
    use player.headimg&lt;br /&gt;
  setletters(image)&lt;br /&gt;
    changes the image used by 'say' messages.&lt;br /&gt;
  setmap(image, levellist, originx, originy)&lt;br /&gt;
    sets the large map to the specified image, using 'originx' and 'orginy' as the origin for head icons&lt;br /&gt;
    'levellist' is a .txt file containing a list of levels included in the map&lt;br /&gt;
  setminimap(image, levellist, originx, originy)&lt;br /&gt;
    sets the minimap to the specified image, using 'originx' and 'orginy' as the origin for head icons&lt;br /&gt;
    'levellist' is a .txt file containing a list of levels included in the map&lt;br /&gt;
  setmusicvolume(left, right)&lt;br /&gt;
    changes the music volume&lt;br /&gt;
    values are 0 or 1&lt;br /&gt;
  setplayerdir(direction)  !DEPRECATED&lt;br /&gt;
    use player.dir&lt;br /&gt;
  setshield(image, shieldpower)  !DEPRECATED&lt;br /&gt;
    use player.shieldimg &amp;amp; player.shieldpower&lt;br /&gt;
  setshoecolor(color)  !DEPRECATED&lt;br /&gt;
    use player.colors[#]&lt;br /&gt;
  setshootparams(params)&lt;br /&gt;
    changes the parameters used by all new projectiles&lt;br /&gt;
  setskincolor(color)  !DEPRECATED&lt;br /&gt;
    use player.colors[#]&lt;br /&gt;
  setsleevecolor(color)  !DEPRECATED&lt;br /&gt;
    use player.colors[#]&lt;br /&gt;
  setsword(image, swordpower)  !!DEPRECATED&lt;br /&gt;
    use player.swordimg &amp;amp; player.swordpower&lt;br /&gt;
  showstats(stats)&lt;br /&gt;
    shows the specified parts of the screen status and hides the rest (use allstats)&lt;br /&gt;
  spyfire(power, length)&lt;br /&gt;
    creates a single-direction explosion with the specified length&lt;br /&gt;
      0 = regular bomb&lt;br /&gt;
      2 = jolt bomb&lt;br /&gt;
  stopmidi()&lt;br /&gt;
    stops all sound files being played&lt;br /&gt;
  stopsound(sound)&lt;br /&gt;
    stops the specified sound file&lt;br /&gt;
  strcmp(str, str) - returns integer&lt;br /&gt;
  strequals(string, text) - returns boolean  !DEPRECATED&lt;br /&gt;
    use (string == string)&lt;br /&gt;
  takeplayercarry()&lt;br /&gt;
    causes the player to throw it's carried object&lt;br /&gt;
  takeplayerhorse()&lt;br /&gt;
    causes the player to get off it's horse&lt;br /&gt;
  testplayer(x, y) - returns integer&lt;br /&gt;
    returns the id of the player at the specified x and y&lt;br /&gt;
  triggeraction(x, y, action, params)&lt;br /&gt;
    triggers an action at the specified positions&lt;br /&gt;
    catch with onAction&amp;lt;ACTION NAME&amp;gt;(params)&lt;br /&gt;
  triggerserver(str, str)&lt;br /&gt;
  updateboard(x, y, width, height)&lt;br /&gt;
    shows changes to tiles in a rectangle&lt;br /&gt;
  updateterrain()&lt;br /&gt;
  uppercase(text) - returns string&lt;br /&gt;
    converts the specified text to uppercase characters&lt;br /&gt;
  vectoradd(str, str) - returns string&lt;br /&gt;
  vectorcross(str, str) - returns string&lt;br /&gt;
  vectordist(str, str) - returns float&lt;br /&gt;
  vectordot(str, str) - returns float&lt;br /&gt;
  vectorlen(str) - returns float&lt;br /&gt;
  vectornormalize(str) - returns string&lt;br /&gt;
  vectororthobasis(str) - returns string&lt;br /&gt;
  vectorscale(str, float) - returns string&lt;br /&gt;
  vectorsub(str, str) - returns string&lt;br /&gt;
  worldx(x, y) - returns float&lt;br /&gt;
    converts screen coordinates to level coordinates&lt;br /&gt;
  worldy(x, y) - returns float&lt;br /&gt;
    converts screen coordinates to level coordinates&lt;br /&gt;
  wraptext(pixels, delimeters, text) - returns object&lt;br /&gt;
    splits a text string into an array every so many pixels or when a delimeter comes up&lt;br /&gt;
  wraptext2(width, zoom, delimeters, text) - returns object&lt;br /&gt;
    splits a text string into an array every so many pixels or when a delimeter comes up&lt;br /&gt;
&lt;br /&gt;
TGraalVar:&lt;br /&gt;
  initialized - boolean (read only)&lt;br /&gt;
    the NPC has already been initialized&lt;br /&gt;
  joinedclasses - object (read only)&lt;br /&gt;
    list of all classes joined to the NPC&lt;br /&gt;
  name - string (read only)&lt;br /&gt;
    name of the NPC (DBs)&lt;br /&gt;
  scriptlogmissingfunctions - boolean&lt;br /&gt;
  timeout - float&lt;br /&gt;
    the time left on the timer (use setTimer(time))&lt;br /&gt;
  addarray(array)&lt;br /&gt;
    adds two arrays together&lt;br /&gt;
  cancelevents(str)&lt;br /&gt;
  catchevent(object, oldevent, newevent)&lt;br /&gt;
    calls 'newevent' when 'oldevent' is called&lt;br /&gt;
  copyfrom(prefix)&lt;br /&gt;
    copies all variables beginning with the specified prefix&lt;br /&gt;
  getdatablockvars() - returns object&lt;br /&gt;
  getdynamicvarnames() - returns object&lt;br /&gt;
    returns a list of all the object's dynamic variables&lt;br /&gt;
  geteditvarnames() - returns object&lt;br /&gt;
    returns a list of all the object's edittable variables&lt;br /&gt;
  getfunctions() - returns object&lt;br /&gt;
    returns a list of all functions usable by the object&lt;br /&gt;
  getstaticvarnames() - returns object&lt;br /&gt;
    returns a list of all the object's static variables&lt;br /&gt;
  getvarnames() - returns object&lt;br /&gt;
    returns a list of all the object's variables&lt;br /&gt;
  ignoreevent(str, str)&lt;br /&gt;
  ignoreevents(str)&lt;br /&gt;
  insertarray(position, array)&lt;br /&gt;
    inserts an array into another array, at the specified position&lt;br /&gt;
  isinclass(class) - returns float&lt;br /&gt;
    &lt;br /&gt;
  loadfolder(folder, subfolders)&lt;br /&gt;
    loads the contents of a folder into an array&lt;br /&gt;
    subfolders is true or false; if true, the contents of subfolders is loaded&lt;br /&gt;
  loadlines(file)&lt;br /&gt;
    loads a file, as text, into an array, using each line as a new entry&lt;br /&gt;
in 'scriptfiles' in the clientside&lt;br /&gt;
  loadstring(file)&lt;br /&gt;
    loads the contents of a file into a string&lt;br /&gt;
  loadvars(file)&lt;br /&gt;
    loads the variables set in a text file into an object&lt;br /&gt;
  objecttype() - returns string&lt;br /&gt;
    returns the caller's object type&lt;br /&gt;
  savelines(file, append)&lt;br /&gt;
    saves an array into a text file, using each entry as a new line&lt;br /&gt;
  savestring(file, append)&lt;br /&gt;
    saves a string into a text file&lt;br /&gt;
  savevars(file, append)&lt;br /&gt;
    saves an object's variables into a file&lt;br /&gt;
  scheduleevent(float, str, params...) - returns object&lt;br /&gt;
  settimer(time)&lt;br /&gt;
    sets the timer to the specified time (calls onTimeout() when the timer hits 0)&lt;br /&gt;
  sortascending()&lt;br /&gt;
    sorts an array alphabetically, starting at the beginning&lt;br /&gt;
  sortdescending()&lt;br /&gt;
    sorts an array alphabetically, starting from the end&lt;br /&gt;
  timershow()&lt;br /&gt;
    sets the object's chat text to the time left on it's timer&lt;br /&gt;
  trigger(action, params)&lt;br /&gt;
    calls on&amp;lt;ACTION&amp;gt; on the specified object&lt;br /&gt;
&lt;br /&gt;
  GuiControl (TGraalVar):&lt;br /&gt;
    active - boolean&lt;br /&gt;
    awake - boolean (read only)&lt;br /&gt;
    canmove - boolean&lt;br /&gt;
    canresize - boolean&lt;br /&gt;
    editing - boolean&lt;br /&gt;
    extent - string&lt;br /&gt;
    height - integer&lt;br /&gt;
    hint - string&lt;br /&gt;
    horizsizing - string&lt;br /&gt;
    layer - integer (read only)&lt;br /&gt;
    minextent - string&lt;br /&gt;
    minsize - string - the same like &amp;quot;minExtent&amp;quot;&lt;br /&gt;
    parent - object (read only)&lt;br /&gt;
    position - string&lt;br /&gt;
    profile - object&lt;br /&gt;
    resizeheight - boolean&lt;br /&gt;
    resizewidth - boolean&lt;br /&gt;
    scrolllinex - integer&lt;br /&gt;
    scrollliney - integer&lt;br /&gt;
    showhint - boolean&lt;br /&gt;
    useownprofile - boolean&lt;br /&gt;
    vertsizing - string&lt;br /&gt;
    visible - boolean&lt;br /&gt;
    width - integer&lt;br /&gt;
    x - integer&lt;br /&gt;
    y - integer&lt;br /&gt;
    addcontrol(obj)&lt;br /&gt;
    bringtofront()&lt;br /&gt;
    destroy()&lt;br /&gt;
    getparent() - returns object&lt;br /&gt;
    globaltolocalcoord(str) - returns string - converts global screen coordinates to a position relative to the controls origin (0,0), can be used to know where exactly the user has clicked inside a control&lt;br /&gt;
    hide()&lt;br /&gt;
    isfirstresponder() - returns boolean&lt;br /&gt;
    localtoglobalcoord(str) - returns string - converts a position relative to the controls origin (0,0) to global screen coordinates, can be used to know where on the screen a control is displayed in case it is a child of another control (e.g. GuiWindowCtrl or GuiScrollCtrl)&lt;br /&gt;
    makefirstresponder(bool)&lt;br /&gt;
    pushtoback()&lt;br /&gt;
    resize(int, int, int, int)&lt;br /&gt;
    show()&lt;br /&gt;
    showtop() - calls show(), tabfirst() and bringtofront()&lt;br /&gt;
    tabfirst() - returns object&lt;br /&gt;
&lt;br /&gt;
    GuiArrayCtrl (GuiControl):&lt;br /&gt;
      allowmultipleselections - boolean&lt;br /&gt;
&lt;br /&gt;
      GuiTextListCtrl (GuiArrayCtrl):&lt;br /&gt;
        clipcolumntext - boolean&lt;br /&gt;
        columns - string - of format &amp;quot;0 16&amp;quot;, offset of the tabulators&lt;br /&gt;
        enumerate - boolean&lt;br /&gt;
        fitparentwidth - boolean&lt;br /&gt;
        groupsortorder - string&lt;br /&gt;
        iconheight - integer (read only)&lt;br /&gt;
        iconwidth - integer (read only)&lt;br /&gt;
        resizecell - boolean&lt;br /&gt;
        selected - object (read only)&lt;br /&gt;
        sortcolumn - integer&lt;br /&gt;
        sortmode - string&lt;br /&gt;
        sortorder - string&lt;br /&gt;
        addrow(int, str) - returns object - the added row&lt;br /&gt;
        clearrows()&lt;br /&gt;
        clearselection()&lt;br /&gt;
        findtext(str) - returns integer - row index&lt;br /&gt;
        findtextid(str) - returns integer - row id&lt;br /&gt;
        getrowatpoint(int, int) - returns integer - row index&lt;br /&gt;
        getrowidatpoint(int, int) - returns integer - row id&lt;br /&gt;
        getrownumbyid(int) - returns integer&lt;br /&gt;
        getselectedid() - returns integer - row id&lt;br /&gt;
        getselectedids() - returns object - array of row ids&lt;br /&gt;
        getselectedrow() - returns integer - row index&lt;br /&gt;
        getselectedrows() - returns object - array of row indices&lt;br /&gt;
        getselectedtext() - returns string&lt;br /&gt;
        insertrow(int, int, str) - returns object - the inserted row&lt;br /&gt;
        isidselected(int) - returns boolean&lt;br /&gt;
        isrowselected(int) - returns boolean&lt;br /&gt;
        makevisible(int)&lt;br /&gt;
        makevisiblebyid(int)&lt;br /&gt;
        removerow(int)&lt;br /&gt;
        removerowbyid(int)&lt;br /&gt;
        rowcount() - returns integer&lt;br /&gt;
        seticonsize(int, int)&lt;br /&gt;
        setselectedbyid(int)&lt;br /&gt;
        setselectedrow(int)&lt;br /&gt;
        sort()&lt;br /&gt;
&lt;br /&gt;
      GuiTreeViewCtrl (GuiArrayCtrl):&lt;br /&gt;
        clipcolumntext - boolean&lt;br /&gt;
        columns - string - of format &amp;quot;0 16&amp;quot;, offset of the tabulators&lt;br /&gt;
        expanded - boolean&lt;br /&gt;
        expandedimage - integer&lt;br /&gt;
        expandedselectedimage - integer&lt;br /&gt;
        expandondoubleclick - boolean&lt;br /&gt;
        fitparentwidth - boolean&lt;br /&gt;
        groupsortorder - string&lt;br /&gt;
        image - integer&lt;br /&gt;
        level - integer (read only)&lt;br /&gt;
        name - string&lt;br /&gt;
        nodes - object (read only)&lt;br /&gt;
        parent - object (read only)&lt;br /&gt;
        selectedimage - integer&lt;br /&gt;
        sortgroup - integer&lt;br /&gt;
        sortmode - string&lt;br /&gt;
        sortorder - string&lt;br /&gt;
        sortvalue - integer&lt;br /&gt;
        visible - boolean&lt;br /&gt;
        x - integer (read only)&lt;br /&gt;
        y - integer (read only)&lt;br /&gt;
        addlines(obj, bool)&lt;br /&gt;
        addnode(str) - returns object&lt;br /&gt;
        addnodebypath(str, str) - returns object&lt;br /&gt;
        addvars(obj, bool)&lt;br /&gt;
        clearnodes()&lt;br /&gt;
        destroy()&lt;br /&gt;
        getfullname(str) - returns string&lt;br /&gt;
        getnode(str) - returns object&lt;br /&gt;
        getnodeat(int, int) - returns object&lt;br /&gt;
        getnodebypath(str, str) - returns object&lt;br /&gt;
        getselectednode() - returns object&lt;br /&gt;
        select()&lt;br /&gt;
        seticonsize(int, int)&lt;br /&gt;
        sort()&lt;br /&gt;
&lt;br /&gt;
    GuiBackgroundCtrl (GuiControl):&lt;br /&gt;
&lt;br /&gt;
    GuiBitmapBorderCtrl (GuiControl):&lt;br /&gt;
      tile - boolean&lt;br /&gt;
&lt;br /&gt;
    GuiBitmapButtonCtrl (GuiControl):&lt;br /&gt;
      mouseoverbitmap - string&lt;br /&gt;
      normalbitmap - string&lt;br /&gt;
      pressedbitmap - string&lt;br /&gt;
      text - string&lt;br /&gt;
      setbitmap(str, int)&lt;br /&gt;
&lt;br /&gt;
    GuiBitmapCtrl (GuiControl):&lt;br /&gt;
      bitmap - string&lt;br /&gt;
      wrap - boolean&lt;br /&gt;
      setbitmap(str)&lt;br /&gt;
      setvalue(int, int)&lt;br /&gt;
&lt;br /&gt;
    GuiButtonBaseCtrl (GuiControl):&lt;br /&gt;
      buttontype - string&lt;br /&gt;
      checked - boolean&lt;br /&gt;
      groupnum - integer&lt;br /&gt;
      text - string&lt;br /&gt;
      gettext() - returns string&lt;br /&gt;
      performclick()&lt;br /&gt;
      settext(str)&lt;br /&gt;
&lt;br /&gt;
      GuiBorderButtonCtrl (GuiButtonBaseCtrl):&lt;br /&gt;
&lt;br /&gt;
      GuiButtonCtrl (GuiButtonBaseCtrl):&lt;br /&gt;
        seticonsize(int, int)&lt;br /&gt;
&lt;br /&gt;
      GuiCheckBoxCtrl (GuiButtonBaseCtrl):&lt;br /&gt;
&lt;br /&gt;
        GuiRadioCtrl (GuiCheckBoxCtrl):&lt;br /&gt;
&lt;br /&gt;
    GuiChunkedBitmapCtrl (GuiControl):&lt;br /&gt;
      bitmap - string&lt;br /&gt;
      tile - boolean&lt;br /&gt;
&lt;br /&gt;
    GuiContextMenuCtrl (GuiControl):&lt;br /&gt;
      clipcolumntext - boolean&lt;br /&gt;
      columns - string - of format &amp;quot;0 16&amp;quot;, offset of the tabulators&lt;br /&gt;
      enumerate - boolean&lt;br /&gt;
      fitparentwidth - boolean&lt;br /&gt;
      groupsortorder - string&lt;br /&gt;
      iconheight - integer (read only)&lt;br /&gt;
      iconwidth - integer (read only)&lt;br /&gt;
      profile - object&lt;br /&gt;
      resizecell - boolean&lt;br /&gt;
      rows - object (read only)&lt;br /&gt;
      scrollprofile - object&lt;br /&gt;
      selected - object (read only)&lt;br /&gt;
      sortcolumn - integer&lt;br /&gt;
      sortmode - string&lt;br /&gt;
      sortorder - string&lt;br /&gt;
      textprofile - object&lt;br /&gt;
      width - integer&lt;br /&gt;
      addrow(int, str) - returns object - the added row&lt;br /&gt;
      clearrows()&lt;br /&gt;
      clearselection()&lt;br /&gt;
      close()&lt;br /&gt;
      findtext(str) - returns integer - row index&lt;br /&gt;
      findtextid(str) - returns integer - row id&lt;br /&gt;
      getrowatpoint(int, int) - returns integer - row index&lt;br /&gt;
      getrowidatpoint(int, int) - returns integer - row id&lt;br /&gt;
      getrownumbyid(int) - returns integer&lt;br /&gt;
      getselectedid() - returns integer - row id&lt;br /&gt;
      getselectedids() - returns object - array of row ids&lt;br /&gt;
      getselectedrow() - returns integer - row index&lt;br /&gt;
      getselectedrows() - returns object - array of row indices&lt;br /&gt;
      getselectedtext() - returns string&lt;br /&gt;
      insertrow(int, int, str) - returns object - the inserted row&lt;br /&gt;
      isidselected(int) - returns boolean&lt;br /&gt;
      isrowselected(int) - returns boolean&lt;br /&gt;
      makevisible(int)&lt;br /&gt;
      makevisiblebyid(int)&lt;br /&gt;
      open(int, int)&lt;br /&gt;
      removerow(int)&lt;br /&gt;
      removerowbyid(int)&lt;br /&gt;
      rowcount() - returns integer&lt;br /&gt;
      seticonsize(int, int)&lt;br /&gt;
      setselectedbyid(int)&lt;br /&gt;
      setselectedrow(int)&lt;br /&gt;
      sort()&lt;br /&gt;
&lt;br /&gt;
    GuiDrawingPanel (GuiControl):&lt;br /&gt;
      parth - integer (read only)&lt;br /&gt;
      partw - integer (read only)&lt;br /&gt;
      partx - integer (read only)&lt;br /&gt;
      party - integer (read only)&lt;br /&gt;
      clearall()&lt;br /&gt;
      clearrectangle(int, int, int, int)&lt;br /&gt;
      drawimage(int, int, str)&lt;br /&gt;
      drawimagerectangle(int, int, str, int, int, int, int)&lt;br /&gt;
      drawimagestretched(int, int, int, int, str, int, int, int, int)&lt;br /&gt;
&lt;br /&gt;
    GuiFlash (GuiControl):&lt;br /&gt;
      backgroundalpha - float&lt;br /&gt;
      loopmovie - boolean&lt;br /&gt;
      moviename - string&lt;br /&gt;
      getflashvariable(str) - returns string&lt;br /&gt;
      loadmovie(str, bool, float)&lt;br /&gt;
      playmovie()&lt;br /&gt;
      restartmovie()&lt;br /&gt;
      setbackgroundalpha(float)&lt;br /&gt;
      setflashvariable(str, str)&lt;br /&gt;
      setlooping(bool)&lt;br /&gt;
      stopmovie()&lt;br /&gt;
&lt;br /&gt;
    GuiFrameSetCtrl (GuiControl):&lt;br /&gt;
      autobalance - boolean&lt;br /&gt;
      bordercolor - string&lt;br /&gt;
      borderenable - string&lt;br /&gt;
      bordermovable - string&lt;br /&gt;
      borderwidth - integer&lt;br /&gt;
      columncount - integer&lt;br /&gt;
      fudgefactor - integer&lt;br /&gt;
      minextent - string&lt;br /&gt;
      rowcount - integer&lt;br /&gt;
      getcolumncount() - returns integer&lt;br /&gt;
      getcolumnoffset(int) - returns integer&lt;br /&gt;
      getrowcount() - returns integer&lt;br /&gt;
      getrowoffset(int) - returns integer&lt;br /&gt;
      setcolumncount(int)&lt;br /&gt;
      setcolumnoffset(int, int)&lt;br /&gt;
      setrowcount(int)&lt;br /&gt;
      setrowoffset(int, int)&lt;br /&gt;
&lt;br /&gt;
    GuiGraalCtrl (GuiControl):&lt;br /&gt;
&lt;br /&gt;
      GuiGraal3DCtrl (GuiGraalCtrl):&lt;br /&gt;
&lt;br /&gt;
    GuiInputCtrl (GuiControl):&lt;br /&gt;
&lt;br /&gt;
    GuiMenuBar (GuiControl):&lt;br /&gt;
      addmenu(str, int)&lt;br /&gt;
      addmenuitem(str, str, int, str, int)&lt;br /&gt;
      clearmenuitems(str)&lt;br /&gt;
      clearmenus()&lt;br /&gt;
      removemenu(str)&lt;br /&gt;
      removemenuitem(str, str)&lt;br /&gt;
      setmenuitembitmap(str, str, int)&lt;br /&gt;
      setmenuitemchecked(str, str, bool)&lt;br /&gt;
      setmenuitemenable(str, str, bool)&lt;br /&gt;
      setmenuitemtext(str, str, str)&lt;br /&gt;
      setmenuitemvisible(str, str, bool)&lt;br /&gt;
      setmenutext(str, str)&lt;br /&gt;
      setmenuvisible(str, bool)&lt;br /&gt;
&lt;br /&gt;
    GuiMLTextCtrl (GuiControl):&lt;br /&gt;
      allowcolorchars - boolean&lt;br /&gt;
      allowedtags - string&lt;br /&gt;
      alpha - float&lt;br /&gt;
      deniedsound - string&lt;br /&gt;
      disallowedtags - string&lt;br /&gt;
      maxchars - integer&lt;br /&gt;
      parsetags - boolean&lt;br /&gt;
      syntaxhighlighting - boolean&lt;br /&gt;
      text - string&lt;br /&gt;
      wordwrap - boolean&lt;br /&gt;
      addtext(str, bool)&lt;br /&gt;
      getcursorline() - returns integer&lt;br /&gt;
      getline(int) - returns string&lt;br /&gt;
      getlinecount() - returns integer&lt;br /&gt;
      getlines() - returns object - array of lines&lt;br /&gt;
      gettext() - returns string&lt;br /&gt;
      reflow()&lt;br /&gt;
      scrolltobottom()&lt;br /&gt;
      scrolltotag(int)&lt;br /&gt;
      scrolltotop()&lt;br /&gt;
      setlines(obj)&lt;br /&gt;
      settext(str)&lt;br /&gt;
&lt;br /&gt;
      GuiMLTextEditCtrl (GuiMLTextCtrl):&lt;br /&gt;
&lt;br /&gt;
        GuiPMEditCtrl (GuiMLTextEditCtrl):&lt;br /&gt;
          sendmasspm(obj)&lt;br /&gt;
          sendpm(obj)&lt;br /&gt;
&lt;br /&gt;
      GuiPMCtrl (GuiMLTextCtrl):&lt;br /&gt;
        showpm(obj)&lt;br /&gt;
&lt;br /&gt;
      GuiPMHistoryCtrl (GuiMLTextCtrl):&lt;br /&gt;
        showhistory(obj)&lt;br /&gt;
&lt;br /&gt;
    GuiMouseEventCtrl (GuiControl):&lt;br /&gt;
      lockmouse - boolean&lt;br /&gt;
&lt;br /&gt;
    GuiProgressCtrl (GuiControl):&lt;br /&gt;
      progress - float&lt;br /&gt;
&lt;br /&gt;
    GuiScrollCtrl (GuiControl):&lt;br /&gt;
      childmargin - string&lt;br /&gt;
      constantthumbheight - boolean&lt;br /&gt;
      hscrollbar - string&lt;br /&gt;
      scrollpos - string&lt;br /&gt;
      tile - boolean&lt;br /&gt;
      vscrollbar - string&lt;br /&gt;
      wheelscrolllines - integer&lt;br /&gt;
      willfirstrespond - boolean&lt;br /&gt;
      scrolldelta(int, int)&lt;br /&gt;
      scrollto(int, int)&lt;br /&gt;
&lt;br /&gt;
    GuiShowImgCtrl (GuiControl):&lt;br /&gt;
      alpha - float&lt;br /&gt;
      ani - string&lt;br /&gt;
      ani - string&lt;br /&gt;
      blue - float&lt;br /&gt;
      code - string - the old representation as 'font@style@text'&lt;br /&gt;
      dimension - integer&lt;br /&gt;
      dir - integer&lt;br /&gt;
      dir - integer&lt;br /&gt;
      emitter - object (read only)&lt;br /&gt;
      eulerrotation - string&lt;br /&gt;
      font - string&lt;br /&gt;
      green - float&lt;br /&gt;
      image - string&lt;br /&gt;
      imageindex - integer (read only)&lt;br /&gt;
      layer - integer&lt;br /&gt;
      layer - integer&lt;br /&gt;
      mode - integer - the image drawing mode (0 - add, 1 - transparent, 2 - subtract)&lt;br /&gt;
      offsetx - integer&lt;br /&gt;
      offsety - integer&lt;br /&gt;
      playerlook - boolean - if the animation should take it's head, body, sword, shield and attr[] from the owner (playerlook), set this to false if you want to set the images yourself by changing showimg.actor.head etc.&lt;br /&gt;
      polygon - object&lt;br /&gt;
      red - float&lt;br /&gt;
      rotation - float&lt;br /&gt;
      shape - string&lt;br /&gt;
      stretchx - float&lt;br /&gt;
      stretchy - float&lt;br /&gt;
      style - string&lt;br /&gt;
      text - string&lt;br /&gt;
      x - float&lt;br /&gt;
      y - float&lt;br /&gt;
      zoom - float&lt;br /&gt;
&lt;br /&gt;
    GuiSliderCtrl (GuiControl):&lt;br /&gt;
      range - string&lt;br /&gt;
      ticks - integer&lt;br /&gt;
      value - float&lt;br /&gt;
&lt;br /&gt;
    GuiTabCtrl (GuiControl):&lt;br /&gt;
      iconheight - integer (read only)&lt;br /&gt;
      iconwidth - integer (read only)&lt;br /&gt;
      leveling - integer&lt;br /&gt;
      maxvisibletabs - integer (read only)&lt;br /&gt;
      selected - object (read only)&lt;br /&gt;
      tabwidth - integer&lt;br /&gt;
      addrow(int, str) - returns object - the added row&lt;br /&gt;
      clearrows()&lt;br /&gt;
      clearselection()&lt;br /&gt;
      findtext(str) - returns integer - row index&lt;br /&gt;
      findtextid(str) - returns integer - row id&lt;br /&gt;
      getrowatpoint(int, int) - returns integer - row index&lt;br /&gt;
      getrowidatpoint(int, int) - returns integer - row id&lt;br /&gt;
      getrownumbyid(int) - returns integer&lt;br /&gt;
      getselectedid() - returns integer - row id&lt;br /&gt;
      getselectedrow() - returns integer - row index&lt;br /&gt;
      getselectedtext() - returns string&lt;br /&gt;
      insertrow(int, int, str) - returns object - the inserted row&lt;br /&gt;
      isidselected(int) - returns boolean&lt;br /&gt;
      isrowselected(int) - returns boolean&lt;br /&gt;
      makevisible(int)&lt;br /&gt;
      makevisiblebyid(int)&lt;br /&gt;
      removerow(int)&lt;br /&gt;
      removerowbyid(int)&lt;br /&gt;
      rowcount() - returns integer&lt;br /&gt;
      seticonsize(int, int)&lt;br /&gt;
      setselectedbyid(int)&lt;br /&gt;
      setselectedrow(int)&lt;br /&gt;
&lt;br /&gt;
    GuiTextCtrl (GuiControl):&lt;br /&gt;
      text - string&lt;br /&gt;
      gettext() - returns string&lt;br /&gt;
      settext(str)&lt;br /&gt;
&lt;br /&gt;
      GuiBubbleTextCtrl (GuiTextCtrl):&lt;br /&gt;
&lt;br /&gt;
      GuiPopUpEditCtrl (GuiTextCtrl):&lt;br /&gt;
        clipcolumntext - boolean&lt;br /&gt;
        columns - string - of format &amp;quot;0 16&amp;quot;, offset of the tabulators&lt;br /&gt;
        enumerate - boolean&lt;br /&gt;
        fitparentwidth - boolean&lt;br /&gt;
        groupsortorder - string&lt;br /&gt;
        iconheight - integer (read only)&lt;br /&gt;
        iconwidth - integer (read only)&lt;br /&gt;
        maxpopupheight - integer&lt;br /&gt;
        profile - object&lt;br /&gt;
        resizecell - boolean&lt;br /&gt;
        rows - object (read only)&lt;br /&gt;
        scrollprofile - object&lt;br /&gt;
        selected - object (read only)&lt;br /&gt;
        sortcolumn - integer&lt;br /&gt;
        sortmode - string&lt;br /&gt;
        sortorder - string&lt;br /&gt;
        textprofile - object&lt;br /&gt;
        width - integer&lt;br /&gt;
        addrow(int, str) - returns object - the added row&lt;br /&gt;
        addtext(str, int) - deprecated, use addRow() instead&lt;br /&gt;
        clearrows()&lt;br /&gt;
        clearselection()&lt;br /&gt;
        close()&lt;br /&gt;
        findtext(str) - returns integer&lt;br /&gt;
        findtext(str) - returns integer - row index&lt;br /&gt;
        findtextid(str) - returns integer - row id&lt;br /&gt;
        forceclose()&lt;br /&gt;
        forceonaction()&lt;br /&gt;
        getrowatpoint(int, int) - returns integer - row index&lt;br /&gt;
        getrowidatpoint(int, int) - returns integer - row id&lt;br /&gt;
        getrownumbyid(int) - returns integer&lt;br /&gt;
        getselected() - returns integer&lt;br /&gt;
        getselectedid() - returns integer - row id&lt;br /&gt;
        getselectedids() - returns object - array of row ids&lt;br /&gt;
        getselectedrow() - returns integer - row index&lt;br /&gt;
        getselectedrows() - returns object - array of row indices&lt;br /&gt;
        getselectedtext() - returns string&lt;br /&gt;
        insertrow(int, int, str) - returns object - the inserted row&lt;br /&gt;
        isidselected(int) - returns boolean&lt;br /&gt;
        isrowselected(int) - returns boolean&lt;br /&gt;
        makevisible(int)&lt;br /&gt;
        makevisiblebyid(int)&lt;br /&gt;
        open(int, int)&lt;br /&gt;
        removerow(int)&lt;br /&gt;
        removerowbyid(int)&lt;br /&gt;
        rowcount() - returns integer&lt;br /&gt;
        rowcount() - returns integer&lt;br /&gt;
        seticonsize(int, int)&lt;br /&gt;
        setselected(int)&lt;br /&gt;
        setselectedbyid(int)&lt;br /&gt;
        setselectedrow(int)&lt;br /&gt;
        sort()&lt;br /&gt;
&lt;br /&gt;
      GuiPopUpMenuCtrl (GuiTextCtrl):&lt;br /&gt;
        clipcolumntext - boolean&lt;br /&gt;
        columns - string - of format &amp;quot;0 16&amp;quot;, offset of the tabulators&lt;br /&gt;
        enumerate - boolean&lt;br /&gt;
        fitparentwidth - boolean&lt;br /&gt;
        groupsortorder - string&lt;br /&gt;
        iconheight - integer (read only)&lt;br /&gt;
        iconwidth - integer (read only)&lt;br /&gt;
        maxpopupheight - integer&lt;br /&gt;
        profile - object&lt;br /&gt;
        resizecell - boolean&lt;br /&gt;
        rows - object (read only)&lt;br /&gt;
        scrollprofile - object&lt;br /&gt;
        selected - object (read only)&lt;br /&gt;
        sortcolumn - integer&lt;br /&gt;
        sortmode - string&lt;br /&gt;
        sortorder - string&lt;br /&gt;
        textprofile - object&lt;br /&gt;
        width - integer&lt;br /&gt;
        addrow(int, str) - returns object - the added row&lt;br /&gt;
        addtext(str, int) - deprecated, use addRow() instead&lt;br /&gt;
        clearrows()&lt;br /&gt;
        clearselection()&lt;br /&gt;
        close()&lt;br /&gt;
        findtext(str) - returns integer&lt;br /&gt;
        findtext(str) - returns integer - row index&lt;br /&gt;
        findtextid(str) - returns integer - row id&lt;br /&gt;
        forceclose()&lt;br /&gt;
        forceonaction()&lt;br /&gt;
        getrowatpoint(int, int) - returns integer - row index&lt;br /&gt;
        getrowidatpoint(int, int) - returns integer - row id&lt;br /&gt;
        getrownumbyid(int) - returns integer&lt;br /&gt;
        getselected() - returns integer&lt;br /&gt;
        getselectedid() - returns integer - row id&lt;br /&gt;
        getselectedids() - returns object - array of row ids&lt;br /&gt;
        getselectedrow() - returns integer - row index&lt;br /&gt;
        getselectedrows() - returns object - array of row indices&lt;br /&gt;
        getselectedtext() - returns string&lt;br /&gt;
        insertrow(int, int, str) - returns object - the inserted row&lt;br /&gt;
        isidselected(int) - returns boolean&lt;br /&gt;
        isrowselected(int) - returns boolean&lt;br /&gt;
        makevisible(int)&lt;br /&gt;
        makevisiblebyid(int)&lt;br /&gt;
        open(int, int)&lt;br /&gt;
        removerow(int)&lt;br /&gt;
        removerowbyid(int)&lt;br /&gt;
        rowcount() - returns integer&lt;br /&gt;
        rowcount() - returns integer&lt;br /&gt;
        seticonsize(int, int)&lt;br /&gt;
        setselected(int)&lt;br /&gt;
        setselectedbyid(int)&lt;br /&gt;
        setselectedrow(int)&lt;br /&gt;
        sort()&lt;br /&gt;
&lt;br /&gt;
      GuiTextEditCtrl (GuiTextCtrl):&lt;br /&gt;
        deniedsound - string&lt;br /&gt;
        historysize - integer&lt;br /&gt;
        password - boolean&lt;br /&gt;
        tabcomplete - boolean&lt;br /&gt;
        setselection(int, int)&lt;br /&gt;
        undo()&lt;br /&gt;
&lt;br /&gt;
        GuiTextEditSliderCtrl (GuiTextEditCtrl):&lt;br /&gt;
          allowedit - string&lt;br /&gt;
          format - string&lt;br /&gt;
          increment - float&lt;br /&gt;
          range - string&lt;br /&gt;
          value - float&lt;br /&gt;
&lt;br /&gt;
      GuiWindowCtrl (GuiTextCtrl):&lt;br /&gt;
        canclose - boolean&lt;br /&gt;
        canmaximize - boolean&lt;br /&gt;
        canminimize - boolean&lt;br /&gt;
        closequery - boolean&lt;br /&gt;
        destroyonhide - boolean&lt;br /&gt;
        extent - string&lt;br /&gt;
        maximized - boolean&lt;br /&gt;
        minimized - boolean&lt;br /&gt;
        tile - boolean&lt;br /&gt;
&lt;br /&gt;
  GuiControlProfile (TGraalVar):&lt;br /&gt;
    align - string&lt;br /&gt;
    autosizeheight - boolean&lt;br /&gt;
    autosizewidth - boolean&lt;br /&gt;
    bitmap - string&lt;br /&gt;
    border - integer&lt;br /&gt;
    bordercolor - string&lt;br /&gt;
    bordercolorhl - string&lt;br /&gt;
    bordercolorna - string&lt;br /&gt;
    borderthickness - integer&lt;br /&gt;
    cankeyfocus - boolean&lt;br /&gt;
    cursorcolor - string&lt;br /&gt;
    fillcolor - string&lt;br /&gt;
    fillcolorhl - string&lt;br /&gt;
    fillcolorna - string&lt;br /&gt;
    fontcolor - string&lt;br /&gt;
    fontcolorhl - string&lt;br /&gt;
    fontcolorlink - string&lt;br /&gt;
    fontcolorlinkhl - string&lt;br /&gt;
    fontcolorna - string&lt;br /&gt;
    fontcolorsel - string&lt;br /&gt;
    fontsize - integer&lt;br /&gt;
    fontstyle - string&lt;br /&gt;
    fonttype - string&lt;br /&gt;
    justify - string - the same like &amp;quot;align&amp;quot;&lt;br /&gt;
    linespacing - integer&lt;br /&gt;
    modal - boolean&lt;br /&gt;
    mouseoverselected - boolean&lt;br /&gt;
    numbersonly - boolean&lt;br /&gt;
    opaque - boolean&lt;br /&gt;
    returntab - boolean&lt;br /&gt;
    soundbuttondown - string&lt;br /&gt;
    soundbuttonover - string&lt;br /&gt;
    tab - boolean&lt;br /&gt;
    textoffset - string&lt;br /&gt;
    transparency - float&lt;br /&gt;
&lt;br /&gt;
  GuiCursor (TGraalVar):&lt;br /&gt;
&lt;br /&gt;
  GuiTabCtrlEntry (TGraalVar):&lt;br /&gt;
    hint - string&lt;br /&gt;
    id - integer&lt;br /&gt;
    text - string&lt;br /&gt;
    gettext() - returns string&lt;br /&gt;
    settext(str)&lt;br /&gt;
&lt;br /&gt;
  GuiTextListEntry (TGraalVar):&lt;br /&gt;
    active - boolean&lt;br /&gt;
    flickering - boolean&lt;br /&gt;
    id - integer&lt;br /&gt;
    image - integer&lt;br /&gt;
    selectedimage - integer&lt;br /&gt;
    sortgroup - integer&lt;br /&gt;
    sortvalue - integer&lt;br /&gt;
    text - string&lt;br /&gt;
    gettext() - returns string&lt;br /&gt;
    settext(str)&lt;br /&gt;
&lt;br /&gt;
  GuiTreeViewNode (TGraalVar):&lt;br /&gt;
    expanded - boolean&lt;br /&gt;
    expandedimage - integer&lt;br /&gt;
    expandedselectedimage - integer&lt;br /&gt;
    image - integer&lt;br /&gt;
    level - integer (read only)&lt;br /&gt;
    name - string&lt;br /&gt;
    parent - object (read only)&lt;br /&gt;
    selectedimage - integer&lt;br /&gt;
    sortgroup - integer&lt;br /&gt;
    sortvalue - integer&lt;br /&gt;
    visible - boolean&lt;br /&gt;
    x - integer (read only)&lt;br /&gt;
    y - integer (read only)&lt;br /&gt;
    addlines(obj, bool)&lt;br /&gt;
    addnode(str) - returns object&lt;br /&gt;
    addnodebypath(str, str) - returns object&lt;br /&gt;
    addvars(obj, bool)&lt;br /&gt;
    clearnodes()&lt;br /&gt;
    destroy()&lt;br /&gt;
    getfullname(str) - returns string&lt;br /&gt;
    getnode(str) - returns object&lt;br /&gt;
    getnodebypath(str, str) - returns object&lt;br /&gt;
    select()&lt;br /&gt;
&lt;br /&gt;
  TDrawableObject (TGraalVar):&lt;br /&gt;
    layer - integer (read only)&lt;br /&gt;
&lt;br /&gt;
    TBaddy (TDrawableObject):&lt;br /&gt;
      dir - integer&lt;br /&gt;
      headdir - integer&lt;br /&gt;
      mode - integer&lt;br /&gt;
      power - integer&lt;br /&gt;
      type - integer&lt;br /&gt;
      x - float&lt;br /&gt;
      y - float&lt;br /&gt;
&lt;br /&gt;
    TLevelObject (TDrawableObject):&lt;br /&gt;
      level - object (read only)&lt;br /&gt;
      x - float&lt;br /&gt;
      y - float&lt;br /&gt;
      z - float&lt;br /&gt;
&lt;br /&gt;
      TExplosion (TLevelObject):&lt;br /&gt;
        dir - integer (read only)&lt;br /&gt;
        power - integer (read only)&lt;br /&gt;
        time - float (read only)&lt;br /&gt;
&lt;br /&gt;
      TGaniObject (TLevelObject):&lt;br /&gt;
        ani - object (read only)&lt;br /&gt;
        anistep - integer (read only)&lt;br /&gt;
        attachid - integer (read only)&lt;br /&gt;
        attachtype - integer (read only)&lt;br /&gt;
        attr - object (read only)&lt;br /&gt;
        body - string&lt;br /&gt;
        bodyimg - string&lt;br /&gt;
        colors - object (read only)&lt;br /&gt;
        dir - integer&lt;br /&gt;
        head - string&lt;br /&gt;
        headimg - string&lt;br /&gt;
        shield - string&lt;br /&gt;
        sprite - integer&lt;br /&gt;
        sword - string&lt;br /&gt;
        getimageforsprite(obj) - returns string&lt;br /&gt;
        getsprite(str) - returns object&lt;br /&gt;
        getspriteforspritepos(obj) - returns object&lt;br /&gt;
&lt;br /&gt;
        TProjectile (TGaniObject):&lt;br /&gt;
          angle - float (read only)&lt;br /&gt;
          fromplayer - object (read only)&lt;br /&gt;
          horiz - boolean (read only)&lt;br /&gt;
          params - object (read only)&lt;br /&gt;
          speed - float (read only)&lt;br /&gt;
          x - float (read only)&lt;br /&gt;
          y - float (read only)&lt;br /&gt;
          z - float (read only)&lt;br /&gt;
          zspeed - float (read only)&lt;br /&gt;
&lt;br /&gt;
        TServerHorse (TGaniObject):&lt;br /&gt;
          bombpower - integer&lt;br /&gt;
          bombs - integer&lt;br /&gt;
          bushes - integer&lt;br /&gt;
          dir - integer&lt;br /&gt;
          type - integer&lt;br /&gt;
&lt;br /&gt;
        TServerPlayer (TGaniObject):&lt;br /&gt;
          account - string (read only)&lt;br /&gt;
          ap - integer&lt;br /&gt;
          attached - boolean (read only)&lt;br /&gt;
          bombs - integer&lt;br /&gt;
          chat - string&lt;br /&gt;
          darts - integer&lt;br /&gt;
          fullhearts - integer (read only)&lt;br /&gt;
          glovepower - integer&lt;br /&gt;
          gralats - integer&lt;br /&gt;
          guild - string (read only)&lt;br /&gt;
          headimg - string&lt;br /&gt;
          headset - integer&lt;br /&gt;
          hearts - float (read only)&lt;br /&gt;
          horseimg - string (read only)&lt;br /&gt;
          hp - float (read only)&lt;br /&gt;
          id - integer (read only)&lt;br /&gt;
          isadmin - boolean (read only)&lt;br /&gt;
          ischannel - boolean (read only)&lt;br /&gt;
          ischannelopen - boolean (read only)&lt;br /&gt;
          ischanneluser - boolean (read only)&lt;br /&gt;
          isexternal - boolean (read only)&lt;br /&gt;
          isfemale - boolean (read only)&lt;br /&gt;
          isignoring - boolean (read only)&lt;br /&gt;
          isloggedin - boolean (read only)&lt;br /&gt;
          ismale - boolean (read only)&lt;br /&gt;
          ismuted - boolean (read only)&lt;br /&gt;
          ismuting - boolean (read only)&lt;br /&gt;
          maxhp - integer (read only)&lt;br /&gt;
          messagebubble - integer (read only)&lt;br /&gt;
          mp - integer&lt;br /&gt;
          nick - string&lt;br /&gt;
          rupees - integer - better use 'gralats'&lt;br /&gt;
          shieldimg - string&lt;br /&gt;
          shieldpower - integer (read only)&lt;br /&gt;
          swordimg - string&lt;br /&gt;
          swordpower - integer (read only)&lt;br /&gt;
          x - float&lt;br /&gt;
          y - float&lt;br /&gt;
          isguildpm() - returns boolean&lt;br /&gt;
          ismasspm() - returns boolean&lt;br /&gt;
          pmswaiting() - returns boolean&lt;br /&gt;
          showprofile()&lt;br /&gt;
&lt;br /&gt;
          TPlayer (TServerPlayer):&lt;br /&gt;
            ap - integer&lt;br /&gt;
            chat - string&lt;br /&gt;
            freezetime - float&lt;br /&gt;
            hearts - float&lt;br /&gt;
            horseimg - string&lt;br /&gt;
            hp - float&lt;br /&gt;
            hurt - boolean (read only)&lt;br /&gt;
            hurtdx - float (read only)&lt;br /&gt;
            hurtdy - float (read only)&lt;br /&gt;
            hurted - boolean (read only)&lt;br /&gt;
            hurtpower - float (read only)&lt;br /&gt;
            isfemale - boolean (read only)&lt;br /&gt;
            ismale - boolean (read only)&lt;br /&gt;
            letters - string&lt;br /&gt;
            map - boolean (read only)&lt;br /&gt;
            nick - string (read only)&lt;br /&gt;
            onhorse - boolean (read only)&lt;br /&gt;
            online - boolean (read only)&lt;br /&gt;
            paused - boolean (read only)&lt;br /&gt;
            reading - boolean (read only)&lt;br /&gt;
            shieldimg - string&lt;br /&gt;
            sprite - integer&lt;br /&gt;
            swimming - boolean (read only)&lt;br /&gt;
            swordimg - string&lt;br /&gt;
            transform - string&lt;br /&gt;
            weapon - object (read only)&lt;br /&gt;
            weapons - object (read only)&lt;br /&gt;
&lt;br /&gt;
          TServerNPC (TServerPlayer):&lt;br /&gt;
            actionplayer - integer (read only)&lt;br /&gt;
            hearts - float&lt;br /&gt;
            height - float (read only)&lt;br /&gt;
            horseimg - string&lt;br /&gt;
            hp - float&lt;br /&gt;
            hurtdx - float&lt;br /&gt;
            hurtdy - float&lt;br /&gt;
            image - string&lt;br /&gt;
            layer - integer&lt;br /&gt;
            peltwithblackstone - boolean (read only)&lt;br /&gt;
            peltwithbush - boolean (read only)&lt;br /&gt;
            peltwithnpc - boolean (read only)&lt;br /&gt;
            peltwithsign - boolean (read only)&lt;br /&gt;
            peltwithstone - boolean (read only)&lt;br /&gt;
            peltwithvase - boolean (read only)&lt;br /&gt;
            save - object (read only)&lt;br /&gt;
            shieldpower - integer&lt;br /&gt;
            sprite - integer&lt;br /&gt;
            swordpower - integer&lt;br /&gt;
            visible - boolean&lt;br /&gt;
            width - float (read only)&lt;br /&gt;
            x - float&lt;br /&gt;
            y - float&lt;br /&gt;
            blockagain()&lt;br /&gt;
            blockagainlocal()&lt;br /&gt;
            canbecarried()&lt;br /&gt;
            canbepulled()&lt;br /&gt;
            canbepushed()&lt;br /&gt;
            cannotbecarried()&lt;br /&gt;
            cannotbepulled()&lt;br /&gt;
            cannotbepushed()&lt;br /&gt;
            carryobject(str)&lt;br /&gt;
            changeimgcolors(int, float, float, float, float)&lt;br /&gt;
            changeimgmode(int, int)&lt;br /&gt;
            changeimgpart(int, int, int, int, int)&lt;br /&gt;
            changeimgvis(int, int)&lt;br /&gt;
            changeimgzoom(int, float)&lt;br /&gt;
            destroy()&lt;br /&gt;
            dontblock()&lt;br /&gt;
            dontblocklocal()&lt;br /&gt;
            drawaslight()&lt;br /&gt;
            drawoverplayer()&lt;br /&gt;
            drawunderplayer()&lt;br /&gt;
            findimg(int) - returns object&lt;br /&gt;
            hide()&lt;br /&gt;
            hideimg(int)&lt;br /&gt;
            hideimgs(int, int)&lt;br /&gt;
            hidelocal()&lt;br /&gt;
            hurt(int)&lt;br /&gt;
            lay(str)&lt;br /&gt;
            message(str)&lt;br /&gt;
            move(float, float, float, int)&lt;br /&gt;
            setbow(str)&lt;br /&gt;
            setcharani(str, str)&lt;br /&gt;
            setchargender(str)&lt;br /&gt;
            setcoloreffect(float, float, float, float)&lt;br /&gt;
            seteffectmode(int)&lt;br /&gt;
            setimg(str)&lt;br /&gt;
            setimgpart(str, int, int, int, int)&lt;br /&gt;
            setshape(int, int, int)&lt;br /&gt;
            setshape2(int, int, obj)&lt;br /&gt;
            setzoomeffect(float)&lt;br /&gt;
            shootarrow(int)&lt;br /&gt;
            shootball()&lt;br /&gt;
            shootfireball(int)&lt;br /&gt;
            shootfireblast(int)&lt;br /&gt;
            shootnuke(int)&lt;br /&gt;
            show()&lt;br /&gt;
            showani(int, float, float, int, str) - returns object&lt;br /&gt;
            showani2(int, float, float, float, int, str) - returns object&lt;br /&gt;
            showcharacter()&lt;br /&gt;
            showimg(int, str, float, float) - returns object&lt;br /&gt;
            showimg2(int, str, float, float, float) - returns object&lt;br /&gt;
            showlocal()&lt;br /&gt;
            showpoly(int, obj) - returns object&lt;br /&gt;
            showpoly2(int, obj) - returns object&lt;br /&gt;
            showtext(int, float, float, str, str, str) - returns object&lt;br /&gt;
            showtext2(int, float, float, float, str, str, str) - returns object&lt;br /&gt;
            take(str)&lt;br /&gt;
            take2(int)&lt;br /&gt;
            takehorse(int)&lt;br /&gt;
            throwcarry()&lt;br /&gt;
            timereverywhere()&lt;br /&gt;
            toweapons(str)&lt;br /&gt;
&lt;br /&gt;
            TServerWeapon (TServerNPC):&lt;br /&gt;
              isweapon - boolean (read only)&lt;br /&gt;
&lt;br /&gt;
      TServerBomb (TLevelObject):&lt;br /&gt;
        power - integer&lt;br /&gt;
        time - float&lt;br /&gt;
&lt;br /&gt;
      TServerCarry (TLevelObject):&lt;br /&gt;
&lt;br /&gt;
      TServerChest (TLevelObject):&lt;br /&gt;
        isopen - boolean (read only)&lt;br /&gt;
        item - string (read only)&lt;br /&gt;
&lt;br /&gt;
      TServerExtra (TLevelObject):&lt;br /&gt;
        time - float (read only)&lt;br /&gt;
        type - integer (read only)&lt;br /&gt;
&lt;br /&gt;
      TServerFlying (TLevelObject):&lt;br /&gt;
        dir - integer (read only)&lt;br /&gt;
        dx - float&lt;br /&gt;
        dy - float&lt;br /&gt;
        from - integer (read only)&lt;br /&gt;
        type - integer (read only)&lt;br /&gt;
&lt;br /&gt;
      TServerLeap (TLevelObject):&lt;br /&gt;
&lt;br /&gt;
      TServerSign (TLevelObject):&lt;br /&gt;
        text - string&lt;br /&gt;
&lt;br /&gt;
      TShowImg (TLevelObject):&lt;br /&gt;
        alpha - float&lt;br /&gt;
        ani - string&lt;br /&gt;
        blue - float&lt;br /&gt;
        code - string - the old representation as 'font@style@text'&lt;br /&gt;
        dimension - integer&lt;br /&gt;
        dir - integer&lt;br /&gt;
        emitter - object (read only)&lt;br /&gt;
        eulerrotation - string&lt;br /&gt;
        font - string&lt;br /&gt;
        green - float&lt;br /&gt;
        image - string&lt;br /&gt;
        imageindex - integer (read only)&lt;br /&gt;
        layer - integer&lt;br /&gt;
        mode - integer - the image drawing mode (0 - add, 1 - transparent, 2 - subtract)&lt;br /&gt;
        playerlook - boolean - if the animation should take it's head, body, sword, shield and attr[] from the owner (playerlook), set this to false if you want to set the images yourself by changing showimg.actor.head etc.&lt;br /&gt;
        polygon - object&lt;br /&gt;
        red - float&lt;br /&gt;
        rotation - float&lt;br /&gt;
        shape - string&lt;br /&gt;
        stretchx - float&lt;br /&gt;
        stretchy - float&lt;br /&gt;
        style - string&lt;br /&gt;
        text - string&lt;br /&gt;
        x - float&lt;br /&gt;
        y - float&lt;br /&gt;
        zoom - float&lt;br /&gt;
&lt;br /&gt;
  TDrawingPanel (TGraalVar):&lt;br /&gt;
    height - integer (read only)&lt;br /&gt;
    parth - integer (read only)&lt;br /&gt;
    partw - integer (read only)&lt;br /&gt;
    partx - integer (read only)&lt;br /&gt;
    party - integer (read only)&lt;br /&gt;
    width - integer (read only)&lt;br /&gt;
    clearall()&lt;br /&gt;
    clearrectangle(int, int, int, int)&lt;br /&gt;
    drawimage(int, int, str)&lt;br /&gt;
    drawimagerectangle(int, int, str, int, int, int, int)&lt;br /&gt;
    drawimagestretched(int, int, int, int, str, int, int, int, int)&lt;br /&gt;
&lt;br /&gt;
  TFrameDetail (TGraalVar):&lt;br /&gt;
    bordercolor - string&lt;br /&gt;
    borderenable - string&lt;br /&gt;
    bordermovable - string&lt;br /&gt;
    borderwidth - integer&lt;br /&gt;
    minextent - string&lt;br /&gt;
&lt;br /&gt;
  TGaniParam (TGraalVar):&lt;br /&gt;
&lt;br /&gt;
  TGraalAni (TGraalVar):&lt;br /&gt;
    continuous - boolean&lt;br /&gt;
    ganitype - string (read only)&lt;br /&gt;
    loop - boolean&lt;br /&gt;
    movie - boolean&lt;br /&gt;
    setbackto - string&lt;br /&gt;
    singledirection - boolean&lt;br /&gt;
    addsprite(int) - returns object&lt;br /&gt;
    addstep() - returns object&lt;br /&gt;
    deletesprite(int)&lt;br /&gt;
    deletestep(int)&lt;br /&gt;
    getsprite(int) - returns object&lt;br /&gt;
    insertstep(int) - returns object&lt;br /&gt;
&lt;br /&gt;
  TGraalAniPart (TGraalVar):&lt;br /&gt;
    attr - integer&lt;br /&gt;
    dx - integer&lt;br /&gt;
    dy - integer&lt;br /&gt;
    param - integer&lt;br /&gt;
    sprite - object&lt;br /&gt;
&lt;br /&gt;
  TGraalAniSound (TGraalVar):&lt;br /&gt;
    delay - float&lt;br /&gt;
    dx - float&lt;br /&gt;
    dy - float&lt;br /&gt;
    sound - string&lt;br /&gt;
&lt;br /&gt;
  TGraalAniSprite (TGraalVar):&lt;br /&gt;
    alpha - float&lt;br /&gt;
    blue - float&lt;br /&gt;
    description - string&lt;br /&gt;
    green - float&lt;br /&gt;
    height - integer&lt;br /&gt;
    image - string&lt;br /&gt;
    imagetype - string (read only)&lt;br /&gt;
    mode - integer&lt;br /&gt;
    red - float&lt;br /&gt;
    spriteindex - integer&lt;br /&gt;
    width - integer&lt;br /&gt;
    x - integer&lt;br /&gt;
    y - integer&lt;br /&gt;
    zoom - float&lt;br /&gt;
    addattachment() - returns object&lt;br /&gt;
    deleteattachment(int)&lt;br /&gt;
    insertattachment(int) - returns object&lt;br /&gt;
&lt;br /&gt;
  TGraalAniStep (TGraalVar):&lt;br /&gt;
    delay - float&lt;br /&gt;
    addpos(int) - returns object&lt;br /&gt;
    deletepos(int, int)&lt;br /&gt;
    insertpos(int, int) - returns object&lt;br /&gt;
&lt;br /&gt;
  TGraalSpriteAttachment (TGraalVar):&lt;br /&gt;
    behind - boolean&lt;br /&gt;
    dx - integer&lt;br /&gt;
    dy - integer&lt;br /&gt;
    sprite - object&lt;br /&gt;
&lt;br /&gt;
  TParticle (TGraalVar):&lt;br /&gt;
    angle - float&lt;br /&gt;
    lifetime - float&lt;br /&gt;
    movementvector - string&lt;br /&gt;
    speed - float&lt;br /&gt;
    spin - float&lt;br /&gt;
    zangle - float&lt;br /&gt;
&lt;br /&gt;
  TParticleEmitter (TGraalVar):&lt;br /&gt;
    attachposition - boolean&lt;br /&gt;
    autorotation - boolean&lt;br /&gt;
    checkbelowterrain - boolean&lt;br /&gt;
    clippingbox - string&lt;br /&gt;
    currentparticlecount - integer (read only)&lt;br /&gt;
    delaymax - float&lt;br /&gt;
    delaymin - float&lt;br /&gt;
    emissionoffset - string&lt;br /&gt;
    emittedparticles - integer (read only)&lt;br /&gt;
    firstinfront - boolean&lt;br /&gt;
    maxparticles - integer&lt;br /&gt;
    nrofparticles - integer&lt;br /&gt;
    particle - object (read only)&lt;br /&gt;
    addemitmodifier(str, float, float, str, str, float, float) - returns object&lt;br /&gt;
    addglobalmodifier(str, float, float, str, str, float, float) - returns object&lt;br /&gt;
    addlocalmodifier(str, float, float, str, str, float, float) - returns object&lt;br /&gt;
    emit()&lt;br /&gt;
&lt;br /&gt;
  TParticleModifier (TGraalVar):&lt;br /&gt;
    addmod(str, str, float, float)&lt;br /&gt;
&lt;br /&gt;
  TServerLevel (TGraalVar):&lt;br /&gt;
    compsdead - boolean (read only)&lt;br /&gt;
    isnopkzone - boolean (read only)&lt;br /&gt;
    issparringzone - boolean (read only)&lt;br /&gt;
    nopkzone - boolean (read only) - same like 'isnopkzone'&lt;br /&gt;
    hitcompu(int, int, float, float)&lt;br /&gt;
    putbomb(int, float, float)&lt;br /&gt;
    putcomp(str, float, float)&lt;br /&gt;
    putexplosion(int, float, float)&lt;br /&gt;
    putexplosion2(int, int, float, float)&lt;br /&gt;
    puthorse(str, float, float)&lt;br /&gt;
    putnewcomp(str, float, float, str, int)&lt;br /&gt;
    reflectarrow(int)&lt;br /&gt;
    removearrow(int)&lt;br /&gt;
    removebomb(int)&lt;br /&gt;
    removecompus()&lt;br /&gt;
    removeexplo(int)&lt;br /&gt;
    removehorse(int)&lt;br /&gt;
    removeitem(int)&lt;br /&gt;
    setz(int, int, int, int, float, float, float, float)&lt;br /&gt;
    shoot(float, float, float, float, float, float, str, str)&lt;br /&gt;
    testbomb(float, float) - returns integer&lt;br /&gt;
    testexplo(float, float) - returns integer&lt;br /&gt;
    testhorse(float, float) - returns integer&lt;br /&gt;
    testitem(float, float) - returns integer&lt;br /&gt;
    testnpc(float, float) - returns integer&lt;br /&gt;
    testsign(float, float) - returns integer&lt;br /&gt;
    tiletype(float, float) - returns integer&lt;br /&gt;
&lt;br /&gt;
  TServerLevelLink (TGraalVar):&lt;br /&gt;
    destx - float (read only)&lt;br /&gt;
    desty - float (read only)&lt;br /&gt;
    height - float (read only)&lt;br /&gt;
    width - float (read only)&lt;br /&gt;
    x - float (read only)&lt;br /&gt;
    y - float (read only)&lt;br /&gt;
&lt;br /&gt;
  TShowImg_Values (TGraalVar):&lt;br /&gt;
    alpha - float&lt;br /&gt;
    blue - float&lt;br /&gt;
    green - float&lt;br /&gt;
    mode - integer - the image drawing mode (0 - add, 1 - transparent, 2 - subtract)&lt;br /&gt;
    red - float&lt;br /&gt;
    rotation - float&lt;br /&gt;
    stretchx - float&lt;br /&gt;
    stretchy - float&lt;br /&gt;
    zoom - float&lt;br /&gt;
&lt;br /&gt;
    TShowImg_Gani (TShowImg_Values):&lt;br /&gt;
      actor - object (read only)&lt;br /&gt;
&lt;br /&gt;
    TShowImg_Image (TShowImg_Values):&lt;br /&gt;
      height - float&lt;br /&gt;
      parth - integer&lt;br /&gt;
      partw - integer&lt;br /&gt;
      partx - integer&lt;br /&gt;
      party - integer&lt;br /&gt;
      width - float&lt;br /&gt;
&lt;br /&gt;
    TShowImg_Shape (TShowImg_Values):&lt;br /&gt;
      mounts - object (read only)&lt;br /&gt;
      setshapeanimation(str, float, bool) - returns boolean&lt;br /&gt;
&lt;br /&gt;
  TShowImgMount (TGraalVar):&lt;br /&gt;
    node - integer&lt;br /&gt;
    shape - string&lt;br /&gt;
&lt;br /&gt;
  TStaticVar (TGraalVar):&lt;br /&gt;
    destroy()&lt;br /&gt;
&lt;br /&gt;
  TUpdatePackage (TGraalVar):&lt;br /&gt;
    description - string (read only)&lt;br /&gt;
    downloadcomplete - boolean (read only)&lt;br /&gt;
    downloadedsize - integer (read only)&lt;br /&gt;
    filecount - integer (read only)&lt;br /&gt;
    filedownloadedsize - integer (read only)&lt;br /&gt;
    filename - string (read only)&lt;br /&gt;
    filetotalsize - integer (read only)&lt;br /&gt;
    isuninstalled - boolean (read only)&lt;br /&gt;
    lastdownloadfile - string (read only)&lt;br /&gt;
    localversion - float (read only)&lt;br /&gt;
    mode - string (read only)&lt;br /&gt;
    name - string (read only)&lt;br /&gt;
    parent - object (read only)&lt;br /&gt;
    platform - string (read only)&lt;br /&gt;
    protectoverwrite - boolean (read only)&lt;br /&gt;
    totalsize - integer (read only)&lt;br /&gt;
    usechecksum - boolean (read only)&lt;br /&gt;
    version - float (read only)&lt;br /&gt;
    reinstall() - returns boolean&lt;br /&gt;
    uninstall() - returns boolean&lt;br /&gt;
    update() - returns boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Old_GScript&amp;diff=5243</id>
		<title>Creation/Dev/Old GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Old_GScript&amp;diff=5243"/>
		<updated>2006-01-10T18:49:44Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Old GScript moved to Creation/Dev/Old GScript&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=GScript&amp;diff=5242</id>
		<title>GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=GScript&amp;diff=5242"/>
		<updated>2006-01-10T18:45:23Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: GScript moved to Creation/Dev/GScript&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Dev/GScript]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=5241</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=5241"/>
		<updated>2006-01-10T18:45:23Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: GScript moved to Creation/Dev/GScript&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''GScript''' is [[Graal]]'s scripting language.&lt;br /&gt;
&lt;br /&gt;
Its syntax and some of its semantics might seem familiar to those who program in [[WikiPedia:C (Programming Language) | C]] or derived languages, although it lacks some of the expressivity of a real programming language and has special constructs that make programming [[Graal]] [[NPC]]s easier.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language and has since kept up with improvements to the game engine and can now be used for pretty sophisticated scripts that greatly customise the gaming experience.&lt;br /&gt;
&lt;br /&gt;
It is used, with minor differences, for [[Clientside]] tasks like [[GUI | GUI programming]], special effects with nifty 3d lighting and custom [[NPC weapon|NPC Weapons]] or &amp;amp;quot;engines&amp;amp;quot;, and [[Serverside]] systems like player housing, complex baddies or pets.&lt;br /&gt;
&lt;br /&gt;
[[Old GScript]] has been replaced by a new version (dubbed GScript2 during development) that is rather advanced, in some way object oriented, and thanks to influence from [[WikiPedia:Java programming language| Java]] and [[Torque]]'s scripting language, less brain-damaged in some aspects. No offense intended.&lt;br /&gt;
&lt;br /&gt;
GScript can be discussed in the [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
In your scripting quest, you may find the following articles to be of use.&lt;br /&gt;
&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
* [[Script Functions: Client]] (including info on GUI controls)&lt;br /&gt;
* [[Script Functions: NPC Server]]&lt;br /&gt;
* [[Script Functions: Graal 3D]]&lt;br /&gt;
&lt;br /&gt;
'''IRC Functionality'''&lt;br /&gt;
* [[Graal v4 IRC|Graal IRC Scripting: Graal v4 IRC Scripting Reference]]&lt;br /&gt;
* [[Troubleshooting Graal v4 IRC|Graal IRC Scripting: Troubleshooting Scripting Reference]]&lt;br /&gt;
&lt;br /&gt;
'''New-Engine Specific'''&lt;br /&gt;
* [[Particle Engine|Graal v4 Particle Engine]]&lt;br /&gt;
* [[GS1 To GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Using Classes Effectively|GS2 Features: Effective ways to use classes]]&lt;br /&gt;
&lt;br /&gt;
Following is the original and most basic documentation for new engine scripting.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Why scripts ===&lt;br /&gt;
&lt;br /&gt;
Scripts bring life into objects and make it easy to &lt;br /&gt;
customize the game. Instead of just placing a stone&lt;br /&gt;
into your world, you can make it so that the stone&lt;br /&gt;
can be lifted or kicked. Instead of being limited to&lt;br /&gt;
some fixed player movement you can rescript it&lt;br /&gt;
to let the player jump, strafe and duck. To let the &lt;br /&gt;
player inspect and organize his/her items you can&lt;br /&gt;
create some dialogs and display those by script,&lt;br /&gt;
e.g. when the player presses a special key.&lt;br /&gt;
&lt;br /&gt;
In Graal the scripting is done in 'Graal Script',&lt;br /&gt;
it's looking like Java/C++, but brings some &lt;br /&gt;
additional features for making things easier&lt;br /&gt;
for game creators, while on the other hand&lt;br /&gt;
running in a sandbox and limiting access to&lt;br /&gt;
game-related stuff only.&lt;br /&gt;
&lt;br /&gt;
Graal Script is almost fully compatible to &lt;br /&gt;
the 'old' Graal script used in Graal v1.0 - 3.0,&lt;br /&gt;
and is partially compatible to Torque script. &lt;br /&gt;
&lt;br /&gt;
=== NPCs and 'weapons' ===&lt;br /&gt;
&lt;br /&gt;
There are generally two types of objects in Graal&lt;br /&gt;
which have scripts: The first type are the &lt;br /&gt;
non-player-characters (NPCs). The name 'NPC' is&lt;br /&gt;
actually used for all visible objects in the game: &lt;br /&gt;
monsters, stones, bushes, houses, ships, plants etc.&lt;br /&gt;
Scripts for npcs are most of the time containing&lt;br /&gt;
code for moving the npc or for reacting to &lt;br /&gt;
activities of the player, e.g. giving money to&lt;br /&gt;
the player when he grabs the npc.&lt;br /&gt;
The other type of script-holding objects are the&lt;br /&gt;
'weapons'. Those are items in the inventory of&lt;br /&gt;
the player, not necessary being weapons. Most of&lt;br /&gt;
the time they are actually just scripts which&lt;br /&gt;
control the movement of the player, display weapon&lt;br /&gt;
graphics, or display menus.&lt;br /&gt;
&lt;br /&gt;
So there are objects in the game which have &lt;br /&gt;
their own script, and players which have a set&lt;br /&gt;
of scripts in their invisible backpack.&lt;br /&gt;
&lt;br /&gt;
=== Server-side and client-side ===&lt;br /&gt;
&lt;br /&gt;
Graal is an online game, and there are differences&lt;br /&gt;
to standard scripting in offline games.&lt;br /&gt;
In offline programs you have access to everything,&lt;br /&gt;
anytime. In online games everything is divided&lt;br /&gt;
into two parts: the server-side which controls&lt;br /&gt;
most things in the game, and the client-side which&lt;br /&gt;
displays the game to the player.&lt;br /&gt;
Since the client only displays things, it is not&lt;br /&gt;
possible to cheat by hacking the client. On client-side&lt;br /&gt;
you mainly have code for displaying special effects,&lt;br /&gt;
for displaying the GUI (windows, status bars, item menus),&lt;br /&gt;
playing sound effects and music. Also the player &lt;br /&gt;
movement is done on client-side.&lt;br /&gt;
On the server-side scripts are used to do the more&lt;br /&gt;
secure parts of the game engine,&lt;br /&gt;
and things that are the same for all players -&lt;br /&gt;
npcs are added, moved, npcs interact with players,&lt;br /&gt;
the stats of the players are calculated, the&lt;br /&gt;
communication between players is handled.&lt;br /&gt;
&lt;br /&gt;
All scripts for npcs and weapons can contain&lt;br /&gt;
server-side code and client-side code. The server-side&lt;br /&gt;
code is executed directly on the server, the&lt;br /&gt;
client-side code is sent to the client when he/she&lt;br /&gt;
logins and executed separately for each player on&lt;br /&gt;
their own computer. Usually the two parts of the script&lt;br /&gt;
are divided by line that only contains &amp;quot;//#CLIENTSIDE&amp;quot;,&lt;br /&gt;
like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;// Server-side part which is setting the image&lt;br /&gt;
// of the npc when it is created&lt;br /&gt;
function onCreated() {&lt;br /&gt;
  setimg(&amp;quot;door.png&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//#CLIENTSIDE&lt;br /&gt;
&lt;br /&gt;
// Here follows the client-side part,&lt;br /&gt;
// which plays a sound effect when the player&lt;br /&gt;
// touchs the npc&lt;br /&gt;
function onPlayerTouchsme() {&lt;br /&gt;
  play(&amp;quot;chest.wav&amp;quot;);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
&lt;br /&gt;
In general scripts are made for reacting to &lt;br /&gt;
events - when the npc is created then the script&lt;br /&gt;
initializes the attributes of the npc,&lt;br /&gt;
when the player says something then the npc is&lt;br /&gt;
moving to the player, when the player grabs the&lt;br /&gt;
npc then the npc is giving the player some money etc.&lt;br /&gt;
So the script is basicly a collection of actions&lt;br /&gt;
that are done when special events are happening.&lt;br /&gt;
Events can e.g. be the &amp;quot;created&amp;quot; event when the npc&lt;br /&gt;
is created, the &amp;quot;playertouchsme&amp;quot; event when the &lt;br /&gt;
player touchs the npc, or the &amp;quot;playerchats&amp;quot; event&lt;br /&gt;
when the player says something. To write code that reacts&lt;br /&gt;
to one of those event, you define an event&lt;br /&gt;
function like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function onEVENTNAME() {&lt;br /&gt;
  // actions&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the event is happening, then Graal executes&lt;br /&gt;
that scripting function and all commands you &lt;br /&gt;
have added there.&lt;br /&gt;
Sometimes the event gives some parameters to the &lt;br /&gt;
event function, then change your function to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function onEVENTNAME(parameter1, parameter2, ...) {&lt;br /&gt;
  // actions&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By accessing 'parameter1' etc. (you can name&lt;br /&gt;
them differently) you can react to the event more&lt;br /&gt;
exactly. &lt;br /&gt;
&lt;br /&gt;
Instead of reacting to events, the npcs and&lt;br /&gt;
weapons can also invoke new events. That way &lt;br /&gt;
you can let other npcs doing things. You also&lt;br /&gt;
need that if you want to coninuously doing things -&lt;br /&gt;
use timeout events for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function onCreated() {&lt;br /&gt;
  setTimer(1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function onTimeout() {&lt;br /&gt;
  // actions&lt;br /&gt;
  setTimer(1);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the onCreated event function the script is&lt;br /&gt;
setting the timer to 1 second. When that second is&lt;br /&gt;
over, then the &amp;quot;timeout&amp;quot; event is invoked on the&lt;br /&gt;
npc and the onTimeout event function is executed.&lt;br /&gt;
Because it is setting the timer to 1 second&lt;br /&gt;
again, the onTimeout event will occur again after&lt;br /&gt;
one second, and so on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Compatibility note:&lt;br /&gt;
In older Graal scripts you will also find the&lt;br /&gt;
deprecated way of receiving events:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;if (EVENTNAME) {&lt;br /&gt;
  // actions&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is an if-command outside of any brackets. If&lt;br /&gt;
Graal sees that you use such an if-command, then&lt;br /&gt;
it will execute the whole script so that the actions&lt;br /&gt;
you have written inside the if-command will be&lt;br /&gt;
executed too.&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
=== Accessing variables ===&lt;br /&gt;
&lt;br /&gt;
Graal Script variables are 'variant', that means they are objects&lt;br /&gt;
that hold values of different types.&lt;br /&gt;
When you assign a value to the variable then it automatically&lt;br /&gt;
switches to the right type:&lt;br /&gt;
&lt;br /&gt;
Numeric (floating point):&lt;br /&gt;
  var = 1;&lt;br /&gt;
String (text):&lt;br /&gt;
  var = &amp;quot;hello&amp;quot;;&lt;br /&gt;
Object link:&lt;br /&gt;
  var = player;&lt;br /&gt;
Array (list of objects):&lt;br /&gt;
  var = {1,2,3};&lt;br /&gt;
&lt;br /&gt;
You can check the current type with the&lt;br /&gt;
type()-function - obj.type() returns&lt;br /&gt;
0,1,2,3 for numeric, string, object or array.&lt;br /&gt;
&lt;br /&gt;
=== Operators ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Addition                  a + b&lt;br /&gt;
Substraction              a - b&lt;br /&gt;
Mulitplication            a * b&lt;br /&gt;
Division                  a / b&lt;br /&gt;
Modulus                   a % b&lt;br /&gt;
Power                     a ^ b&lt;br /&gt;
String Concationation     a @ b&lt;br /&gt;
    with space            a SPC b&lt;br /&gt;
    with newline          a NL b&lt;br /&gt;
    with tabulator        a TAB b&lt;br /&gt;
Bool-And                  a &amp;amp;&amp;amp; b&lt;br /&gt;
Bool-Or                   a || b&lt;br /&gt;
Bool-Not                  !a&lt;br /&gt;
Negative                  -a&lt;br /&gt;
Equal                     a == b&lt;br /&gt;
Not-Equal                 a != b&lt;br /&gt;
Less                      a &amp;lt; b&lt;br /&gt;
Greater                   a &amp;gt; b&lt;br /&gt;
Less-Equal                a &amp;lt;= b,  a =&amp;lt; b&lt;br /&gt;
Greater-Equal             a &amp;gt;= b,  a =&amp;gt; b&lt;br /&gt;
In-Range                  a in &amp;lt;b,c&amp;gt;, a in |b,c&amp;gt;, a in &amp;lt;b,c|, a in |b,c|&lt;br /&gt;
In-Array                  a in {b,c,...}, {a,b,...} in {c,d,...}&lt;br /&gt;
Bitwise-Or                a | b&lt;br /&gt;
Bitwise-And               a &amp;amp; b&lt;br /&gt;
Bitwise-Shift left        a &amp;lt;&amp;lt; b&lt;br /&gt;
Bitwise-Shift right       a &amp;gt;&amp;gt; b&lt;br /&gt;
Bitwise-Invert            ~a&lt;br /&gt;
Bitwise-Xor               a xor b (operator ^ already used for power)&lt;br /&gt;
Array-Constructor         {a,b,...}&lt;br /&gt;
Empty Array               new [count], new[countdim1][countdim2]...&lt;br /&gt;
Array Member              a[index]&lt;br /&gt;
Function call             a(), a(b,c,...)&lt;br /&gt;
Object Attribute          a.b, a.(b)&lt;br /&gt;
Post Increment            a++&lt;br /&gt;
Post Decrement            a--&lt;br /&gt;
Pre Increment             ++a&lt;br /&gt;
Pre Decrement             --a&lt;br /&gt;
Old String Function       #a&lt;br /&gt;
Conditional               a? b : c&lt;br /&gt;
Assignment                a = b, a := b&lt;br /&gt;
Additive Assignment       a += b&lt;br /&gt;
Substractive Assignment   a -= b&lt;br /&gt;
Multiplicative Assignment a *= b&lt;br /&gt;
Division Assignment       a /= b&lt;br /&gt;
Modulus Assignment        a %= b&lt;br /&gt;
Power Assignment          a ^= b&lt;br /&gt;
Bitwise-Or Assignment     a |= b&lt;br /&gt;
Bitwise-And Assignment    a &amp;amp;= b&lt;br /&gt;
Shift Left Assignment     a &amp;lt;&amp;lt;= b&lt;br /&gt;
Shift Right Assignment    a &amp;gt;&amp;gt;= b&lt;br /&gt;
String Append             a @= b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard object functions ===&lt;br /&gt;
&lt;br /&gt;
For a complete list of functions and attributes of objects&lt;br /&gt;
see docu_graalscriptfunctions.txt. The base type of all&lt;br /&gt;
objects is &amp;quot;TGraalVar&amp;quot;. You can also get the latest list by&lt;br /&gt;
calling the executale with &amp;quot;-listscriptfunctions&amp;quot; as &lt;br /&gt;
command-line parameter. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;Someone please give a good explination of what an object is &lt;br /&gt;
and a brief example, as above, of any of these commands in use in its propper context&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here only some of the built-in functions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
obj.type()  - gets the type of the var (float 0, string 1, object 2, array 3)&lt;br /&gt;
obj.length() - string length&lt;br /&gt;
obj.trim() - removes spaces from the front and back of a string&lt;br /&gt;
obj.lower() - converts a string to lower case&lt;br /&gt;
obj.upper() - converts a string to upper case&lt;br /&gt;
obj.tokenize([delimiters])&lt;br /&gt;
obj.charat(pos)&lt;br /&gt;
obj.pos(substring)&lt;br /&gt;
obj.starts(string)&lt;br /&gt;
obj.ends(string)&lt;br /&gt;
obj.substring(index[,length])&lt;br /&gt;
obj.size() - array length&lt;br /&gt;
obj.subarray(index[,length])&lt;br /&gt;
obj.addarray(obj2)&lt;br /&gt;
obj.insertarray(index,obj2)&lt;br /&gt;
obj.index(obj2) - position of obj2 in the array&lt;br /&gt;
obj.clear()&lt;br /&gt;
obj.add(obj2)&lt;br /&gt;
obj.delete(index)&lt;br /&gt;
obj.remove(obj2)&lt;br /&gt;
obj.replace(index,obj2)&lt;br /&gt;
obj.insert(index,obj2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard functions ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
format(format,parameters,...) - formats a &amp;quot;%s %d&amp;quot; string, inserts the parameters, and returns a string&lt;br /&gt;
int(a)&lt;br /&gt;
abs(a)&lt;br /&gt;
random(rangestart,rangeend)&lt;br /&gt;
sin(a)&lt;br /&gt;
cos(a)&lt;br /&gt;
arctan(a)&lt;br /&gt;
exp(a)&lt;br /&gt;
log(base,a)&lt;br /&gt;
min(a,b)&lt;br /&gt;
max(a,b)&lt;br /&gt;
getangle(delta x,delta y)&lt;br /&gt;
getdir(delta x,delta y) - returns 0 for up, 1 for left, 2 for down, 3 for right&lt;br /&gt;
vecx(direction)&lt;br /&gt;
vecy(direction)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
=== GUI controls ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onAdd() when added to the parent&lt;br /&gt;
onRemove() when removed from the parent&lt;br /&gt;
onWake() when activated&lt;br /&gt;
onSleep() when deactivated&lt;br /&gt;
onResize(w,h)&lt;br /&gt;
onMove(x,y)&lt;br /&gt;
onMouseEnter(modifier,x,y,clickcount)&lt;br /&gt;
onMouseLeave(modifier,x,y,clickcount)&lt;br /&gt;
onMouseDown(modifier,x,y,clickcount)&lt;br /&gt;
onMouseUp(modifier,x,y,clickcount)&lt;br /&gt;
onMouseDragged(modifier,x,y,clickcount)&lt;br /&gt;
onMouseMove(modifier,x,y,clickcount)&lt;br /&gt;
onRightMouseDown(modifier,x,y,clickcount)&lt;br /&gt;
onRightMouseUp(modifier,x,y,clickcount)&lt;br /&gt;
onRightMouseDragged(modifier,x,y,clickcount)&lt;br /&gt;
onMouseWheelUp(modifier,x,y,clickcount)&lt;br /&gt;
onMouseWheelDown(modifier,x,y,clickcount)&lt;br /&gt;
onKeyDown(keycode,string)&lt;br /&gt;
onKeyUp(keycode,string)&lt;br /&gt;
onKeyRepeat(keycode,string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== GuiMLTextCtrl: ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onReflow(w,h) when the text has changed&lt;br /&gt;
onURL(url) when clicked on url&lt;br /&gt;
onSelectTag(tagid) when clicked on an image&lt;br /&gt;
&lt;br /&gt;
Text-Tags:&lt;br /&gt;
The text of multi-line text controls can contain&lt;br /&gt;
a few HTML-tags and Torque-tags, you can use both&lt;br /&gt;
of those tag types to define colors and fonts&lt;br /&gt;
or to include images. Currently following tags&lt;br /&gt;
are available:&lt;br /&gt;
&lt;br /&gt;
HTML:&lt;br /&gt;
&amp;lt;a href=url&amp;gt; text &amp;lt;/a&amp;gt; - when the user clicks on 'text' then &lt;br /&gt;
  a web browser is opened for the specified url&lt;br /&gt;
&amp;lt;body bgcolor=colorname or #rrggbb&amp;gt; - sets the background color&lt;br /&gt;
&amp;lt;br&amp;gt; - line break&lt;br /&gt;
&amp;lt;center&amp;gt; text &amp;lt;/center&amp;gt; - centers the contained text&lt;br /&gt;
&amp;lt;font face=fontname size=textsize color=colorname or #rrggbb&amp;gt; text &amp;lt;/font&amp;gt;&lt;br /&gt;
  - draws text with a special font, size and color; you only&lt;br /&gt;
  need to define one of those 3 attributes&lt;br /&gt;
&amp;lt;ignorelinebreaks&amp;gt; &amp;lt;/ignorelinebreaks&amp;gt; - go into normal HTML mode where&lt;br /&gt;
  you need to insert &amp;lt;br&amp;gt; to do a linebreak&lt;br /&gt;
&amp;lt;img src=filename id=integer&amp;gt; - an image is displayed, you &lt;br /&gt;
  can also specify a tagid if you want to get onSelectTag-events&lt;br /&gt;
  for this image&lt;br /&gt;
&amp;lt;p align=left/center/right&amp;gt; text &amp;lt;/p&amp;gt; - sets the align of the &lt;br /&gt;
  contained text&lt;br /&gt;
&amp;lt;span style=&amp;quot;width=100; height=100;&amp;quot; id=integer&amp;gt; &amp;lt;/span&amp;gt; - for &lt;br /&gt;
  displaying a subpage, you can also specifiy an id for &lt;br /&gt;
  onSelectTag-events; instead of &amp;lt;span&amp;gt; you can also use &amp;lt;div&amp;gt; tags&lt;br /&gt;
&lt;br /&gt;
Torque:&lt;br /&gt;
&amp;lt;a:url&amp;gt; text &amp;lt;/a&amp;gt; - when the user clicks on 'text' then &lt;br /&gt;
  a web browser is opened for the specified url&lt;br /&gt;
&amp;lt;bitmap:filename&amp;gt; - an image is displayed&lt;br /&gt;
&amp;lt;color:rrggbb&amp;gt; - sets the color of the text (hexadecimal value)&lt;br /&gt;
&amp;lt;lmargin:pixels&amp;gt; - sets the left margin for the text&lt;br /&gt;
&amp;lt;lmargin%:percent&amp;gt; - sets the size of the left margin depending &lt;br /&gt;
  on the width of the whole control&lt;br /&gt;
&amp;lt;linkcolor:rrggbb&amp;gt; - sets the color of links (the &amp;lt;a&amp;gt;-tag)&lt;br /&gt;
&amp;lt;linkcolorhl:rrggbb&amp;gt; - sets the highlighted color, when&lt;br /&gt;
  the user moves the mouse over a link&lt;br /&gt;
&amp;lt;just:left/center/right&amp;gt; - sets the align of the following text&lt;br /&gt;
&amp;lt;rmargin:pixels&amp;gt; - sets the right margin for the text&lt;br /&gt;
&amp;lt;rmargin%:percent&amp;gt; - sets the size of the right margin depending &lt;br /&gt;
  on the width of the whole control&lt;br /&gt;
&amp;lt;sbreak&amp;gt; - line break&lt;br /&gt;
&amp;lt;spush&amp;gt; - switches to a new style (like &amp;lt;font&amp;gt;)&lt;br /&gt;
&amp;lt;spop&amp;gt; - switches back to the last saved style (like &amp;lt;/font&amp;gt;)&lt;br /&gt;
&amp;lt;tab:tab1,tab2,..&amp;gt; - sets the position of where tabulators should&lt;br /&gt;
  be displayed if you have text like 'Apple \t Egg \t Chicken'&lt;br /&gt;
&amp;lt;tag:id&amp;gt; - inserts an invisible tag which can be used&lt;br /&gt;
  for the scrollToTag(id) function (beside image-tags)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GuiTextEditCtrl: ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onTabComplete()&lt;br /&gt;
onAction(text) when return key pressed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== GuiTextListCtrl: ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onSelect(id,text) when row selected&lt;br /&gt;
onDblClick(id) when double-click on row or return key pressed&lt;br /&gt;
onDeleteKey(id) when delete key pressed&lt;br /&gt;
onIconResized(w,h) when setIconSize() called&lt;br /&gt;
onOpenMenu(0,index,text) when an item was right-clicked&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== GuiPopUpMenuCtrl: ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onSelect(id,text) when menu option choosen&lt;br /&gt;
onCancel() when menu is closed without action&lt;br /&gt;
onOpenMenu(0,index,text) when an item was right-clicked&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== GuiMenuBar: ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onMenuSelect(menuid,menutext)&lt;br /&gt;
onMenuItemSelect(menuid,menutext,itemid,itemtext)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== GuiTreeViewCtrl: ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
onSelect(id,rightmouse) when row selected&lt;br /&gt;
onUnselect(id) when row de-selected&lt;br /&gt;
onInspect(id) when clicked on the name of an item&lt;br /&gt;
onOpenMenu(0,index,text) when an item was right-clicked&lt;br /&gt;
onContextMenu(&amp;quot;x y&amp;quot;,id) when clicked with right-mouse key on row&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Old script compatibility ==&lt;br /&gt;
&lt;br /&gt;
=== Removed functionality ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- toinventory&lt;br /&gt;
- followplayer&lt;br /&gt;
- playersays()&lt;br /&gt;
- setbackpal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Supported old scripting commands and their mapping to new script ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
addstring oldstring, oldstring;&lt;br /&gt;
                                list.add(string);&lt;br /&gt;
addtiledef oldstring, oldstring, float;&lt;br /&gt;
                                addtiledef(string,string,float);&lt;br /&gt;
addtiledef2 oldstring, oldstring, float, float;&lt;br /&gt;
                                addtiledef2(string,string,float,float);&lt;br /&gt;
attachplayertoobj float, float;&lt;br /&gt;
                                attachplayertoobj(float,float);&lt;br /&gt;
blockagain;&lt;br /&gt;
                                blockagain();&lt;br /&gt;
blockagainlocal;&lt;br /&gt;
                                blockagainlocal();&lt;br /&gt;
callnpc float, oldstring;&lt;br /&gt;
                                callnpc(float,string);&lt;br /&gt;
callweapon float, oldstring;&lt;br /&gt;
                                callweapon(float,string);&lt;br /&gt;
canbecarried;&lt;br /&gt;
                                canbecarried();&lt;br /&gt;
canbepulled;&lt;br /&gt;
                                canbepulled();&lt;br /&gt;
canbepushed;&lt;br /&gt;
                                canbepushed();&lt;br /&gt;
cannotbecarried;&lt;br /&gt;
                                cannotbecarried();&lt;br /&gt;
cannotbepulled;&lt;br /&gt;
                                cannotbepulled();&lt;br /&gt;
cannotbepushed;&lt;br /&gt;
                                cannotbepushed();&lt;br /&gt;
canwarp;&lt;br /&gt;
                                canwarp();&lt;br /&gt;
canwarp2;&lt;br /&gt;
                                canwarp2();&lt;br /&gt;
carryobject oldstring;&lt;br /&gt;
                                carryobject(string);&lt;br /&gt;
changeimgcolors float, float, float, float, float;&lt;br /&gt;
                                changeimgcolors(float,float,float,float,float);&lt;br /&gt;
changeimgmode float, float;&lt;br /&gt;
                                changeimgmode(float,float);&lt;br /&gt;
changeimgpart float, float, float, float, float;&lt;br /&gt;
                                changeimgpart(float,float,float,float,float);&lt;br /&gt;
changeimgvis float, float;&lt;br /&gt;
                                changeimgvis(float,float);&lt;br /&gt;
changeimgzoom float, float;&lt;br /&gt;
                                changeimgzoom(float,float);&lt;br /&gt;
deletestring oldstring, float;&lt;br /&gt;
                                deletestring(string,float);&lt;br /&gt;
destroy;&lt;br /&gt;
                                destroy();&lt;br /&gt;
detachplayer;&lt;br /&gt;
                                detachplayer();&lt;br /&gt;
disabledefmovement;&lt;br /&gt;
                                disabledefmovement();&lt;br /&gt;
disablemap;&lt;br /&gt;
                                disablemap();&lt;br /&gt;
disablepause;&lt;br /&gt;
                                disablepause();&lt;br /&gt;
disableselectweapons;&lt;br /&gt;
                                disableselectweapons();&lt;br /&gt;
disableweapons;&lt;br /&gt;
                                disableweapons();&lt;br /&gt;
dontblock;&lt;br /&gt;
                                dontblock();&lt;br /&gt;
dontblocklocal;&lt;br /&gt;
                                dontblocklocal();&lt;br /&gt;
drawaslight;&lt;br /&gt;
                                drawaslight();&lt;br /&gt;
drawoverplayer;&lt;br /&gt;
                                drawoverplayer();&lt;br /&gt;
drawunderplayer;&lt;br /&gt;
                                drawunderplayer();&lt;br /&gt;
enabledefmovement;&lt;br /&gt;
                                enabledefmovement();&lt;br /&gt;
enablefeatures float;&lt;br /&gt;
                                enablefeatures(float);&lt;br /&gt;
enablemap;&lt;br /&gt;
                                enablemap();&lt;br /&gt;
enablepause;&lt;br /&gt;
                                enablepause();&lt;br /&gt;
enableselectweapons;&lt;br /&gt;
                                enableselectweapons();&lt;br /&gt;
enableweapons;&lt;br /&gt;
                                enableweapons();&lt;br /&gt;
explodebomb float;&lt;br /&gt;
                                explodebomb(float);&lt;br /&gt;
followplayer;&lt;br /&gt;
                                followplayer();&lt;br /&gt;
freezeplayer float;&lt;br /&gt;
                                freezeplayer(float);&lt;br /&gt;
freezeplayer2;&lt;br /&gt;
                                freezeplayer2();&lt;br /&gt;
hide;&lt;br /&gt;
                                hide();&lt;br /&gt;
hideimg float;&lt;br /&gt;
                                hideimg(float);&lt;br /&gt;
hideimgs float, float;&lt;br /&gt;
                                hideimgs(float,float);&lt;br /&gt;
hidelocal;&lt;br /&gt;
                                hidelocal();&lt;br /&gt;
&lt;br /&gt;
hitcompu float, float, float, float;&lt;br /&gt;
                                hitcompu(float,float,float,float);&lt;br /&gt;
hitnpc float, float, float, float;&lt;br /&gt;
                                hitnpc(float,float,float,float);&lt;br /&gt;
hitobjects float, float, float;&lt;br /&gt;
                                hitobjects(float,float,float);&lt;br /&gt;
hideplayer float;&lt;br /&gt;
                                hideplayer(float);&lt;br /&gt;
hidesword float;&lt;br /&gt;
                                hidesword(float);&lt;br /&gt;
hitplayer float, float, float, float;&lt;br /&gt;
                                hitplayer(float,float,float,float);&lt;br /&gt;
hurt float;&lt;br /&gt;
                                hurt(float);&lt;br /&gt;
insertstring oldstring, float, oldstring;&lt;br /&gt;
                                insertstring(string,float,string);&lt;br /&gt;
join oldstring;&lt;br /&gt;
                                join(string);&lt;br /&gt;
lay oldstring;&lt;br /&gt;
                                lay(string);&lt;br /&gt;
lay2 oldstring, float, float;&lt;br /&gt;
                                lay2(string,float,float);&lt;br /&gt;
loadmap oldstring;&lt;br /&gt;
                                loadmap(string);&lt;br /&gt;
message oldstring;&lt;br /&gt;
                                message(string);&lt;br /&gt;
move float, float, float, float;&lt;br /&gt;
                                move(float,float,float,float);&lt;br /&gt;
noplayerkilling;&lt;br /&gt;
                                noplayerkilling();&lt;br /&gt;
openurl oldstring;&lt;br /&gt;
                                openurl(string);&lt;br /&gt;
openurl2 oldstring, float, float;&lt;br /&gt;
                                openurl2(string,float,float);&lt;br /&gt;
play oldstring;&lt;br /&gt;
                                play(string);&lt;br /&gt;
play2 oldstring, float, float, float;&lt;br /&gt;
                                play2(string,float,float,float);&lt;br /&gt;
playlooped oldstring;&lt;br /&gt;
                                playlooped(string);&lt;br /&gt;
putbomb float, float, float;&lt;br /&gt;
                                putbomb(float,float,float);&lt;br /&gt;
putcomp oldstring, float, float;&lt;br /&gt;
                                putcomp(string,float,float);&lt;br /&gt;
putexplosion float, float, float;&lt;br /&gt;
                                putexplosion(float,float,float);&lt;br /&gt;
putexplosion2 float, float, float, float;&lt;br /&gt;
                                putexplosion2(float,float,float,float);&lt;br /&gt;
puthorse oldstring, float, float;&lt;br /&gt;
                                puthorse(string,float,float);&lt;br /&gt;
putleaps float, float, float;&lt;br /&gt;
                                putleaps(float,float,float);&lt;br /&gt;
putnewcomp oldstring, float, float, oldstring, float;&lt;br /&gt;
                                putnewcomp(string,float,float,string,float);&lt;br /&gt;
putnpc oldstring, oldstring, float, float;&lt;br /&gt;
                                putnpc(string,string,float,float);&lt;br /&gt;
putnpc2 float, float, oldstring;&lt;br /&gt;
                                putnpc2(float,float,string);&lt;br /&gt;
reflectarrow float;&lt;br /&gt;
                                reflectarrow(float);&lt;br /&gt;
removearrow float;&lt;br /&gt;
                                removearrow(float);&lt;br /&gt;
removebomb float;&lt;br /&gt;
                                removebomb(float);&lt;br /&gt;
removecompus;&lt;br /&gt;
                                removecompus();&lt;br /&gt;
removeexplo float;&lt;br /&gt;
                                removeexplo(float);&lt;br /&gt;
removehorse float;&lt;br /&gt;
                                removehorse(float);&lt;br /&gt;
rmeoveitem float;&lt;br /&gt;
                                removeitem(float)&lt;br /&gt;
removestring oldstring, oldstring;&lt;br /&gt;
                                removestring(string,string);&lt;br /&gt;
removetiledefs oldstring;&lt;br /&gt;
                                removetiledefs(string);&lt;br /&gt;
replaceani oldstring, oldstring;&lt;br /&gt;
                                replaceani(string,string);&lt;br /&gt;
replacestring oldstring, float, oldstring;&lt;br /&gt;
                                replacestring(string,float,string);&lt;br /&gt;
resetfocus;&lt;br /&gt;
                                resetfocus();&lt;br /&gt;
savelog oldstring;&lt;br /&gt;
                                savelog(string);&lt;br /&gt;
savelog2 oldstring, oldstring;&lt;br /&gt;
                                savelog2(string,string);&lt;br /&gt;
say float;&lt;br /&gt;
                                say(float);&lt;br /&gt;
say2 oldstring;&lt;br /&gt;
                                say2(string);&lt;br /&gt;
sendrpgmessage oldstring;&lt;br /&gt;
                                sendrpgmessage(string);&lt;br /&gt;
sendpm oldstring;&lt;br /&gt;
                                sendpm(string);&lt;br /&gt;
sendtonc oldstring;&lt;br /&gt;
                                sendtonc(string);&lt;br /&gt;
sendtorc oldstring;&lt;br /&gt;
                                sendtorc(string);&lt;br /&gt;
serverwarp oldstring;&lt;br /&gt;
                                serverwarp(string);&lt;br /&gt;
set oldstring;&lt;br /&gt;
                                set(string);&lt;br /&gt;
setani oldstring, oldstring;&lt;br /&gt;
                                setani(string,string);&lt;br /&gt;
setarray float, float;&lt;br /&gt;
                                setarray(var,float);&lt;br /&gt;
setbeltcolor oldstring;&lt;br /&gt;
                                setbeltcolor(string);&lt;br /&gt;
setbow oldstring;&lt;br /&gt;
                                setbow(string);&lt;br /&gt;
setcharani oldstring, oldstring;&lt;br /&gt;
                                setcharani(string,string);&lt;br /&gt;
setchargender oldstring;&lt;br /&gt;
                                setchargender(string);&lt;br /&gt;
setcharprop oldstring, oldstring;&lt;br /&gt;
                                string = string;&lt;br /&gt;
setcoatcolor oldstring;&lt;br /&gt;
                                setcoatcolor(string);&lt;br /&gt;
setcoloreffect float, float, float, float;&lt;br /&gt;
                                setcoloreffect(float,float,float,float);&lt;br /&gt;
setcursor float;&lt;br /&gt;
                                setcursor(float);&lt;br /&gt;
setcurcor2 oldstring;&lt;br /&gt;
                                setcursor2(string);&lt;br /&gt;
seteffect float, float, float, float;&lt;br /&gt;
                                seteffect(float,float,float,float);&lt;br /&gt;
seteffectmode float;&lt;br /&gt;
                                seteffectmode(float);&lt;br /&gt;
setfocus float, float;&lt;br /&gt;
                                setfocus(float,float);&lt;br /&gt;
setgender oldstring;&lt;br /&gt;
                                setgender(string);&lt;br /&gt;
sethead oldstring;&lt;br /&gt;
                                sethead(string);&lt;br /&gt;
setlevel oldstring;&lt;br /&gt;
                                setlevel(string);&lt;br /&gt;
setlevel2 oldstring, float, float;&lt;br /&gt;
                                setlevel2(string,float,float);&lt;br /&gt;
setmap oldstring, oldstring, float, float;&lt;br /&gt;
                                setmap(string,string,float,float);&lt;br /&gt;
setminimap oldstring, oldstring, float, float;&lt;br /&gt;
                                setminimap(string,string,float,float);&lt;br /&gt;
setmusicvolume float, float;&lt;br /&gt;
                                setmusicvolume(float,float);&lt;br /&gt;
setimg oldstring;&lt;br /&gt;
                                setimg(string);&lt;br /&gt;
setimgpart oldstring, float, float, float, float;&lt;br /&gt;
                                setimgpart(string,float,float,float,float);&lt;br /&gt;
setletters oldstring;&lt;br /&gt;
                                setletters(string);&lt;br /&gt;
setplayerdir oldstring;&lt;br /&gt;
                                setplayerdir(string);&lt;br /&gt;
setplayerprop oldstring, oldstring;&lt;br /&gt;
                                string = string;&lt;br /&gt;
setpm oldstring;&lt;br /&gt;
                                setpm(string);&lt;br /&gt;
setshape float, float, float;&lt;br /&gt;
                                setshape(float,float,float);&lt;br /&gt;
setshape2 float, float, float;&lt;br /&gt;
                                setshape2(float,float,float);&lt;br /&gt;
setshield oldstring, float;&lt;br /&gt;
                                setshield(string,float);&lt;br /&gt;
setshoecolor oldstring;&lt;br /&gt;
                                setshoecolor(string);&lt;br /&gt;
setshootparams oldstring;&lt;br /&gt;
                                setshootparams(string);&lt;br /&gt;
setskincolor oldstring;&lt;br /&gt;
                                setskincolor(string);&lt;br /&gt;
setsleevecolor oldstring;&lt;br /&gt;
                                setsleevecolor(string);&lt;br /&gt;
setstring oldstring, oldstring;&lt;br /&gt;
                                setstring(string,string);&lt;br /&gt;
setsword oldstring, float;&lt;br /&gt;
                                setsword(string,float);&lt;br /&gt;
seturllevel oldstring;&lt;br /&gt;
                                seturllevel(string);&lt;br /&gt;
setz float, float, float, float, float, float, float, float;&lt;br /&gt;
                                setz(float,float,float,float,float,float,float,float);&lt;br /&gt;
setzoomeffect float;&lt;br /&gt;
                                setzoomeffect(float);&lt;br /&gt;
shoot float, float, float, float, float, float, oldstring, oldstring;&lt;br /&gt;
                                shoot(float,float,float,float,float,float,string,string);&lt;br /&gt;
shootarrow float;&lt;br /&gt;
                                shootarrow(float);&lt;br /&gt;
shootball;&lt;br /&gt;
                                shootball();&lt;br /&gt;
shootfireball float;&lt;br /&gt;
                                shootfireball(float);&lt;br /&gt;
shootfireblast float;&lt;br /&gt;
                                shootfireblast(float);&lt;br /&gt;
shootnuke float;&lt;br /&gt;
                                shootnuke(float);&lt;br /&gt;
show;&lt;br /&gt;
                                show();&lt;br /&gt;
showani float, float, float, float, oldstring;&lt;br /&gt;
                                showani(float,float,float,float,string);&lt;br /&gt;
showani2 float, float, float, float, float, oldstring;&lt;br /&gt;
                                showani2(float,float,float,float,float,string);&lt;br /&gt;
showcharacter;&lt;br /&gt;
                                showcharacter();&lt;br /&gt;
showfile oldstring;&lt;br /&gt;
                                showfile(string);&lt;br /&gt;
showimg float, oldstring, float, float;&lt;br /&gt;
                                showimg(float,string,float,float);&lt;br /&gt;
showimg2 float, oldstring, float, float, float;&lt;br /&gt;
                                showimg2(float,string,float,float,float);&lt;br /&gt;
showlocal;&lt;br /&gt;
                                showlocal();&lt;br /&gt;
&lt;br /&gt;
showpoly float, float;&lt;br /&gt;
                                showpoly(float,array);&lt;br /&gt;
showpoly2 float, float;&lt;br /&gt;
                                showpoly2(float,array);&lt;br /&gt;
showstats float;&lt;br /&gt;
                                showstats(float);&lt;br /&gt;
showtext float, float, float, oldstring, oldstring, oldstring;&lt;br /&gt;
                                showtext(float,float,float,string,string,string);&lt;br /&gt;
showtext2 float, float, float, float, oldstring, oldstring, oldstring;&lt;br /&gt;
                                showtext2(float,float,float,float,string,string,string);&lt;br /&gt;
sleep float;&lt;br /&gt;
                                sleep(float);&lt;br /&gt;
spyfire float, float;&lt;br /&gt;
                                spyfire(float,float);&lt;br /&gt;
stopmidi;&lt;br /&gt;
                                stopmidi();&lt;br /&gt;
stopsound oldstring;&lt;br /&gt;
                                stopsound(string);&lt;br /&gt;
take oldstring;&lt;br /&gt;
                                take(string);&lt;br /&gt;
take2 float;&lt;br /&gt;
                                take2(float);&lt;br /&gt;
takehorse float;&lt;br /&gt;
                                takehorse(float);&lt;br /&gt;
takeplayercarry;&lt;br /&gt;
                                takeplayercarry();&lt;br /&gt;
takeplayerhorse;&lt;br /&gt;
                                takeplayerhorse();&lt;br /&gt;
throwcarry;&lt;br /&gt;
                                throwcarry();&lt;br /&gt;
timereverywhere;&lt;br /&gt;
                                timereverywhere();&lt;br /&gt;
timershow;&lt;br /&gt;
                                timershow();&lt;br /&gt;
toinventory oldstring;&lt;br /&gt;
                                toinventory(string);&lt;br /&gt;
tokenize oldstring;&lt;br /&gt;
                                tokens = string.tokenize();&lt;br /&gt;
tokenize2 oldstring, oldstring;&lt;br /&gt;
                                tokens = string.tokenize(&amp;quot; ,&amp;quot; @ string);&lt;br /&gt;
toweapons oldstring;&lt;br /&gt;
                                toweapons(string);&lt;br /&gt;
triggeraction float, float, oldstring, oldstring;&lt;br /&gt;
                                triggeraction(float,float,string,string);&lt;br /&gt;
unfreezeplayer;&lt;br /&gt;
                                unfreezeplayer();&lt;br /&gt;
unset oldstring;&lt;br /&gt;
                                unset(string);&lt;br /&gt;
updateboard float, float, float, float;&lt;br /&gt;
                                updateboard(float,float,float,float);&lt;br /&gt;
updateterrain;&lt;br /&gt;
                                updateterrain();&lt;br /&gt;
wraptext float, oldstring, oldstring;&lt;br /&gt;
                                tokens = wraptext(float,&amp;quot; ,&amp;quot; @ string,string);&lt;br /&gt;
wraptext2 float, float, oldstring, oldstring;&lt;br /&gt;
                                tokens = wraptext2(float,float,&amp;quot; ,&amp;quot; @ string,string);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supported old string operations ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
These old string operators can be used in string parameters&lt;br /&gt;
for the old commands, also you can use them directly as operators, e.g.&lt;br /&gt;
#c = &amp;quot;hello&amp;quot;&lt;br /&gt;
is actually doing&lt;br /&gt;
player.chat = &amp;quot;hello&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#a            player.account&lt;br /&gt;
#a(float)     players[float].account&lt;br /&gt;
#m            player.ani&lt;br /&gt;
              ani&lt;br /&gt;
#m(float)     players[float].ani&lt;br /&gt;
#K(float)     char(float)&lt;br /&gt;
#8            player.bodyimg&lt;br /&gt;
              bodyimg&lt;br /&gt;
#8(float)     players[float].bodyimg&lt;br /&gt;
#c            player.chat&lt;br /&gt;
              chat&lt;br /&gt;
#c(float)     players[float].chat&lt;br /&gt;
#C0           player.colors[0]&lt;br /&gt;
              colors[0]&lt;br /&gt;
#C0(float)    players[float].colors[0]&lt;br /&gt;
#C1           player.colors[1]&lt;br /&gt;
              colors[1]&lt;br /&gt;
#C1(float)    players[float].colors[1]&lt;br /&gt;
#C2           player.colors[2]&lt;br /&gt;
              colors[2]&lt;br /&gt;
#C2(float)    players[float].colors[2]&lt;br /&gt;
#C3           player.colors[3]&lt;br /&gt;
              colors[3]&lt;br /&gt;
#C3(float)    players[float].colors[3]&lt;br /&gt;
#C4           player.colors[4]&lt;br /&gt;
              colors[4]&lt;br /&gt;
#C4(float)    players[float].colors[4]&lt;br /&gt;
#C5           player.colors[5]&lt;br /&gt;
              colors[5]&lt;br /&gt;
#C5(float)    players[float].colors[5]&lt;br /&gt;
#D            downloadfile()&lt;br /&gt;
#E            emoticonchar()&lt;br /&gt;
#e(float,float,oldstring)&lt;br /&gt;
              string.substring(float,float)&lt;br /&gt;
#g            player.guild&lt;br /&gt;
              guild&lt;br /&gt;
#g(float)     players[float].guild&lt;br /&gt;
#3            player.headimg&lt;br /&gt;
              headimg&lt;br /&gt;
#3(float)     players[float].headimg&lt;br /&gt;
#5            player.horseimg&lt;br /&gt;
              horseimg&lt;br /&gt;
#5(float)     players[float].horseimg&lt;br /&gt;
#k(float)     keyname(float)&lt;br /&gt;
#L            player.level&lt;br /&gt;
#I(oldstring,float)&lt;br /&gt;
              getstring(string)[float]&lt;br /&gt;
#n            player.nick&lt;br /&gt;
              nick&lt;br /&gt;
#n(float)     players[float].nick&lt;br /&gt;
#f            image&lt;br /&gt;
#f(float)     npcs[float].image&lt;br /&gt;
#F            level&lt;br /&gt;
#p(float)     params[float]&lt;br /&gt;
#P(float)     player.attr[float]&lt;br /&gt;
              attr[float]&lt;br /&gt;
#P(float_1,float_2)&lt;br /&gt;
              players[float_2].attr[float_1]&lt;br /&gt;
#P1           player.attr[1]&lt;br /&gt;
              attr[1]&lt;br /&gt;
#P1(float)    players[float].attr[1]&lt;br /&gt;
#P2           player.attr[2]&lt;br /&gt;
              attr[2]&lt;br /&gt;
#P2(float)    players[float].attr[2]&lt;br /&gt;
#P3           player.attr[3]&lt;br /&gt;
              attr[3]&lt;br /&gt;
#P3(float)    players[float].attr[3]&lt;br /&gt;
#P4           player.attr[4]&lt;br /&gt;
              attr[4]&lt;br /&gt;
#P4(float)    players[float].attr[4]&lt;br /&gt;
#P5           player.attr[5]&lt;br /&gt;
              attr[5]&lt;br /&gt;
#P5(float)    players[float].attr[5]&lt;br /&gt;
#P6           player.attr[6]&lt;br /&gt;
              attr[6]&lt;br /&gt;
#P6(float)    players[float].attr[6]&lt;br /&gt;
#P7           player.attr[7]&lt;br /&gt;
              attr[7]&lt;br /&gt;
#P7(float)    players[float].attr[7]&lt;br /&gt;
#P8           player.attr[8]&lt;br /&gt;
              attr[8]&lt;br /&gt;
#P8(float)    players[float].attr[8]&lt;br /&gt;
#P9           player.attr[9]&lt;br /&gt;
              attr[9]&lt;br /&gt;
#P9(float)    players[float].attr[9]&lt;br /&gt;
#R(oldstring) string.random()&lt;br /&gt;
#2            player.shieldimg&lt;br /&gt;
              shieldimg&lt;br /&gt;
#2(float)     players[float].shieldimg&lt;br /&gt;
#s(oldstring) getstring(string)&lt;br /&gt;
#1            player.swordimg&lt;br /&gt;
              swordimg&lt;br /&gt;
#1(float)     players[float].swordimg&lt;br /&gt;
#S            player.sword.script&lt;br /&gt;
#t(float)     tokens[float]&lt;br /&gt;
#T(oldstring) string.trim()&lt;br /&gt;
#v(float)     float&lt;br /&gt;
#W            player.weapon.image&lt;br /&gt;
#W(float)     weapons[float].image&lt;br /&gt;
#w            player.weapon.name&lt;br /&gt;
#w(float)     weapons[float].name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Compatibility note:&lt;br /&gt;
When you use the command setcharprop then the first parameter&lt;br /&gt;
is handled differently: instead of changing 'player.chat' it&lt;br /&gt;
is changing 'chat', the chat text of the npc. So 'setcharprop #c,hello'&lt;br /&gt;
would be translated into&lt;br /&gt;
chat = &amp;quot;hello&amp;quot;&lt;br /&gt;
while 'setplayerprop #c,hello' is translated into&lt;br /&gt;
player.chat = &amp;quot;hello&amp;quot;&lt;br /&gt;
In the list above both possibilities are listed.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=RC&amp;diff=5240</id>
		<title>RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=RC&amp;diff=5240"/>
		<updated>2006-01-10T18:44:15Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: RC moved to Creation/Management/RC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Creation/Management/RC]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Management/Remote_Control&amp;diff=5239</id>
		<title>Creation/Management/Remote Control</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Management/Remote_Control&amp;diff=5239"/>
		<updated>2006-01-10T18:44:15Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: RC moved to Creation/Management/RC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RC]] stands for RemoteControl.  The Remote Control is a tool that comes with graal and can be used by high level staff on all servers to manipulate major aspects of the server.  With the [[RC]], you can, with the correct rights:&lt;br /&gt;
Manipulate levels, [[NPC]]s, classes, [[server options]], bans, [[player attributes]], account information...&lt;br /&gt;
However, most of the items listed are not available to the average person.&lt;br /&gt;
You must have gold and/or vip to access [[RC]] on Gold Servers or Hosted/Private Servers.&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation&amp;diff=5238</id>
		<title>Creation</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation&amp;diff=5238"/>
		<updated>2006-01-10T18:31:54Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Creation/Concept|Concept]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Buy|Buy]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Management|Management]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev|Development]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Level_editor&amp;diff=5236</id>
		<title>Creation/Dev/Level editor</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Level_editor&amp;diff=5236"/>
		<updated>2006-01-10T18:30:00Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: Level editor moved to Creation/Dev/Level editor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''level editor''' is a tool provided by [[GraalOnline]] for designing and editing [[Level|levels]]. It is in many ways a reduced version of the online client, and it allows designers to enter the level as though it were online. It also facilitates the creation of [[Old GScript]] [[NPC|NPCs]], and features a debugger (accessed via F6) to aid in the development thereof.&lt;br /&gt;
&lt;br /&gt;
As of [[Graal4|Graal 4]], the only way to access the level editor is by opening GraalEditor.exe in the [[Graal]] folder. Windows can be configured to use the editor by default when opening .nw and .graal files.&lt;br /&gt;
&lt;br /&gt;
Once a [[level]] has been saved, it can be uploaded to a [[Playerworld]] using the [[RC file manager]].&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation&amp;diff=5235</id>
		<title>Creation</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation&amp;diff=5235"/>
		<updated>2006-01-10T18:25:38Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Creation/Concept|Concept]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Buy|Buy]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Managment|Managment]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev|Development]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds&amp;diff=5233</id>
		<title>Worlds</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds&amp;diff=5233"/>
		<updated>2006-01-10T18:06:33Z</updated>

		<summary type="html">&lt;p&gt;Ibonic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of Graal Worlds&lt;br /&gt;
&lt;br /&gt;
* Gold:&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Graal Kingdoms|Graal Kingdoms]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Zone|Zone]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Graal2001|Graal 2001]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Graal3D|Graal 3D]]&lt;br /&gt;
&lt;br /&gt;
* Classic:&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Classic|Classic]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Unholy Nation|Unholy Nation]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Era|Era]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/N-Pulse|N-Pulse]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Atlantis|Atlantis]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Maloria|Maloria]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Shaded Legend|Shaded Legend]]&lt;br /&gt;
&lt;br /&gt;
* Hosted/Other:&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Aeon|Aeon]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Babylon|Babylon]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Graal2002 Debug|Kingdoms Debug]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/RP Kingdoms|RP Kingdoms]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Elemental Kingdoms|Elemental Kingdoms]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Ordinance|Ordinance]]&lt;br /&gt;
&lt;br /&gt;
** [[Worlds/Lostworld|Lostworld]]&lt;/div&gt;</summary>
		<author><name>Ibonic</name></author>
	</entry>
</feed>