<?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=Skyld</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=Skyld"/>
	<link rel="alternate" type="text/html" href="https://graalonline.net/Special:Contributions/Skyld"/>
	<updated>2026-04-09T20:38:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16736</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16736"/>
		<updated>2010-07-10T01:03:51Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Recent updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
====10th July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* It's now possible to have more than one text editor open, so opening flags, weapons, ban history etc. won't reuse the same window, it'll open a new one.&lt;br /&gt;
* You can now detach tabs from the Script Editor by right-clicking the tab name. This will cause the script to open in a new separate window outside of the Script Editor.&lt;br /&gt;
&lt;br /&gt;
====6th July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been updated so that it is not missing any attributes.&lt;br /&gt;
* The Apply and Delete buttons in the Script Editor now grey out when no script tabs are open.&lt;br /&gt;
&lt;br /&gt;
====3rd July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The file browser log is now resizable.&lt;br /&gt;
* The F7 key to open the playerlist now works from the RC window.&lt;br /&gt;
* The script editor now has a line counter, which makes debugging easier.&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size. The settings are now effective across all servers that you have RC on.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16670</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16670"/>
		<updated>2010-07-06T15:09:51Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Recent updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====6th July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been updated so that it is not missing any attributes.&lt;br /&gt;
* The Apply and Delete buttons in the Script Editor now grey out when no script tabs are open.&lt;br /&gt;
&lt;br /&gt;
====3rd July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The file browser log is now resizable.&lt;br /&gt;
* The F7 key to open the playerlist now works from the RC window.&lt;br /&gt;
* The script editor now has a line counter, which makes debugging easier.&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size. The settings are now effective across all servers that you have RC on.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16617</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16617"/>
		<updated>2010-07-04T00:04:31Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* 3rd July 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====3rd July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The file browser log is now resizable.&lt;br /&gt;
* The F7 key to open the playerlist now works from the RC window.&lt;br /&gt;
* The script editor now has a line counter, which makes debugging easier.&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size. The settings are now effective across all servers that you have RC on.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16616</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16616"/>
		<updated>2010-07-03T22:05:22Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* ==3rd July 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====3rd July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The file browser log is now resizable.&lt;br /&gt;
* The F7 key to open the playerlist now works from the RC window.&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size. The settings are now effective across all servers that you have RC on.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16615</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16615"/>
		<updated>2010-07-03T22:05:07Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Recent updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====3rd July 2010==&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The file browser log is now resizable.&lt;br /&gt;
* The F7 key to open the playerlist now works from the RC window.&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size. The settings are now effective across all servers that you have RC on.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16611</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16611"/>
		<updated>2010-07-01T14:16:09Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* 1st July 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size. The settings are now effective across all servers that you have RC on.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16610</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16610"/>
		<updated>2010-07-01T14:13:40Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16609</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16609"/>
		<updated>2010-07-01T14:13:06Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16608</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16608"/>
		<updated>2010-07-01T14:12:53Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ScriptedRC.png|300px|thumb|left|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16607</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16607"/>
		<updated>2010-07-01T14:12:25Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;br /&gt;
&lt;br /&gt;
[[Category:Remote Control]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16606</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16606"/>
		<updated>2010-07-01T14:11:44Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Recent updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Remote Control]]&lt;br /&gt;
[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====1st July 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* Toggling the playerlist should work better now.&lt;br /&gt;
* Global bans are now supported, and the drop-down menus in the ban window should be fixed and the window is now resizable.&lt;br /&gt;
* Drop-down menus in the attributes window should be fixed.&lt;br /&gt;
* The RC options have been updated and are working properly now, also it is possible to change the script editor and RC chat font size.&lt;br /&gt;
* The file browser sorting has been updated so now it is sorting size and modified by greatest first.&lt;br /&gt;
* The ban time is now shown in proper timestamp format in the open account window.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16604</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16604"/>
		<updated>2010-06-29T13:52:03Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Remote Control]]&lt;br /&gt;
[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
====28th June 2010====&lt;br /&gt;
The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
====Attributes====&lt;br /&gt;
In Scripted RC, the player's attributes are more separated. You must edit attributes, weapons and flags separately. The following commands help you to edit attributes:&lt;br /&gt;
* &amp;lt;tt&amp;gt;/open account name&amp;lt;/tt&amp;gt; for basic attributes, look, etc&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openflags account name&amp;lt;/tt&amp;gt; for editing client flags&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openweapons account name&amp;lt;/tt&amp;gt; for editing weapons&lt;br /&gt;
* &amp;lt;tt&amp;gt;/openchests account name&amp;lt;/tt&amp;gt; for editing opened chests&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16601</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16601"/>
		<updated>2010-06-29T13:27:17Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
'''28th June 2010''': The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=User:Skyld&amp;diff=16600</id>
		<title>User:Skyld</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=User:Skyld&amp;diff=16600"/>
		<updated>2010-06-29T13:26:27Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Accounts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Users]][[Category:Administration]][[Category:Global Staff]]&lt;br /&gt;
{{player}}&lt;br /&gt;
----&lt;br /&gt;
Lex, aka `Skyld'&lt;br /&gt;
&lt;br /&gt;
=== About ===&lt;br /&gt;
Skyld is a [[Regular]] user of the [[GScript IRC Channel|#gscript]] IRC Channel (freenode) and [[GScript IRC Channel|#gscript]] [[Guild]] member. He is a high level[[Scripter]] and, and has been known to help other #gscript visitors with their scripting problems. &lt;br /&gt;
&lt;br /&gt;
=== Staff Experience === &lt;br /&gt;
&lt;br /&gt;
Skyld has been a member of the Global Sripting team since March 25th, 2006. For a short time, Skyld was also a PWA, but stepped back due to being busy with the university. &lt;br /&gt;
&lt;br /&gt;
Skyld returned and resumed his management of the Global Scripting team. A short time later, in late August of 2009, the Global development team was formed and Skyld joined the team as a technical administrator.&lt;br /&gt;
&lt;br /&gt;
Skyld has had experience working on multiple servers as a GST, but Skyld's home server has always been Rudora, a server that he manages. &lt;br /&gt;
&lt;br /&gt;
=== Accounts ===&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;
| '''Admin level'''&lt;br /&gt;
| '''Banned?'''&lt;br /&gt;
| '''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
| Skyld&lt;br /&gt;
| 2 (All)&lt;br /&gt;
| No&lt;br /&gt;
| [[GST]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Documents written by Skyld ===&lt;br /&gt;
* [[Creation/Dev/Graal_v4_IRC|Graal v4 IRC Documentation]]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting_Graal_v4_IRC|Troubleshooting Graal v4 IRC]]&lt;br /&gt;
* [[Creation/Dev/Basics_of_NPC-Control|Basics of NPC-Control]]&lt;br /&gt;
* [[Creation/Dev/Output_Methods|GScript2 Output Methods]]&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
See [[User_Talk:Skyld|Skyld's Talk Page]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16599</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16599"/>
		<updated>2010-06-29T13:25:56Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
'''28th June 2010''': The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;br /&gt;
&lt;br /&gt;
==Having trouble?==&lt;br /&gt;
&lt;br /&gt;
If you are having problems with the Scripted RC or would like to report any bugs or issues, please post them in [http://forums.graalonline.com/forums/showthread.php?t=73833 this thread] on the Graal forums or contact [[User:Skyld]].&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=ScriptedRC&amp;diff=16598</id>
		<title>ScriptedRC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=ScriptedRC&amp;diff=16598"/>
		<updated>2010-06-29T13:23:44Z</updated>

		<summary type="html">&lt;p&gt;Skyld: moved ScriptedRC to Scripted RC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Scripted RC]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16597</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16597"/>
		<updated>2010-06-29T13:23:44Z</updated>

		<summary type="html">&lt;p&gt;Skyld: moved ScriptedRC to Scripted RC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
'''28th June 2010''': The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16596</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16596"/>
		<updated>2010-06-29T13:23:08Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ScriptedRC.png|300px|thumb|right|Scripted RC window]]The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
'''28th June 2010''': The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=File:ScriptedRC.png&amp;diff=16595</id>
		<title>File:ScriptedRC.png</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=File:ScriptedRC.png&amp;diff=16595"/>
		<updated>2010-06-29T13:21:40Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16594</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16594"/>
		<updated>2010-06-29T13:20:48Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Scripted RC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
'''28th June 2010''': The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16593</id>
		<title>Scripted RC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Scripted_RC&amp;diff=16593"/>
		<updated>2010-06-29T13:20:36Z</updated>

		<summary type="html">&lt;p&gt;Skyld: Created page with '=Scripted RC=  The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Scripted RC=&lt;br /&gt;
&lt;br /&gt;
The Scripted RC is an in-game utility that allows administration of Graal servers without needing to download extra software. It supports most of the functionality of the external RC, including editing attributes, rights, bans, uploading and downloading files, adding, removing and editing NPCs, etc.&lt;br /&gt;
&lt;br /&gt;
You can access the Scripted RC by pressing F6. Note that you must have admin rights on the server.&lt;br /&gt;
&lt;br /&gt;
==Recent updates==&lt;br /&gt;
&lt;br /&gt;
'''28th June 2010''': The Scripted RC received the following updates:&lt;br /&gt;
* The attributes window has been improved so that colours are now selectable using a drop-down box.&lt;br /&gt;
* The rights window is now tabbed and works like the external RC.&lt;br /&gt;
* The ban window is much improved, now supporting computer bans properly, working like the external RC, and ban lengths are properly listed now.&lt;br /&gt;
* The file manager has been improved, it is now possible to drag the pane between the folder tree and the file list. Columns can also be sorted by clicking the column header, and you can search the file list by clicking the list and typing what it is you are looking for.&lt;br /&gt;
* The RC playerlist has been removed, instead moving shortcuts into the scripted playerlist (F7). Once you have logged into Scripted RC, you can right-click players on the playerlist to open their attributes, etc.&lt;br /&gt;
* The script menu has been removed, instead making it possible to add new weapons, classes and NPCs from inside the script editor itself.&lt;br /&gt;
* RC chat is now stripping HTML tags properly.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12953</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12953"/>
		<updated>2009-09-09T19:01:47Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Worlds]]&lt;br /&gt;
{{playerworld}}&lt;br /&gt;
&lt;br /&gt;
[[Image:RudoraBank.png|frame|border|right||alt=Rudora Bank|Screenshot of Rudora Bank]]Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added.&lt;br /&gt;
&lt;br /&gt;
====Playerworld Status====&lt;br /&gt;
&lt;br /&gt;
Rudora is currently a private playerworld, although it has previously been on both the Classic and the Hosted tabs.&lt;br /&gt;
&lt;br /&gt;
====Current Staff====&lt;br /&gt;
&lt;br /&gt;
Skyld is the only person currently working on the project.&lt;br /&gt;
&lt;br /&gt;
====New Features====&lt;br /&gt;
&lt;br /&gt;
A compliment of new features has been added to the older overworld in order to improve gameplay.&lt;br /&gt;
&lt;br /&gt;
* A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
* Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
* A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
* A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
* Both new and old jobs have been added to the server, including fishing, berry picking, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items. The old Lottery has been readded too.&lt;br /&gt;
&lt;br /&gt;
* A new guilds system allows players to create local guilds, providing they have the support of at least 5 other players. Importance will be brought back to guilds by providing some guild events and quests, although some guilds may require that you have a certain rating first!&lt;br /&gt;
&lt;br /&gt;
* Hats have been added with a new hat shop and dynamic pricing. The prices of hats are changed automatically to reflect upon their rarity. A hat that is bought more often will go down in price, and a hat that is bought less often will stay at a higher price (as it is classed &amp;quot;more rare&amp;quot;). Special hats will be added for certain guilds and also a couple of collector hats will be moved into circulation.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12952</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12952"/>
		<updated>2009-09-09T19:01:14Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Worlds]]&lt;br /&gt;
{{playerworld}}&lt;br /&gt;
&lt;br /&gt;
[[Image:RudoraBank.png|frame|border|right||alt=Rudora Bank|Screenshot of Rudora Bank]]Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added.&lt;br /&gt;
&lt;br /&gt;
===Playerworld Status===&lt;br /&gt;
&lt;br /&gt;
Rudora is currently a private playerworld, although it has previously been on both the Classic and the Hosted tabs.&lt;br /&gt;
&lt;br /&gt;
===Current Staff===&lt;br /&gt;
&lt;br /&gt;
Skyld is the only person currently working on the project.&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
A compliment of new features has been added to the older overworld in order to improve gameplay.&lt;br /&gt;
&lt;br /&gt;
* A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
* Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
* A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
* A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
* Both new and old jobs have been added to the server, including fishing, berry picking, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items. The old Lottery has been readded too.&lt;br /&gt;
&lt;br /&gt;
* A new guilds system allows players to create local guilds, providing they have the support of at least 5 other players. Importance will be brought back to guilds by providing some guild events and quests, although some guilds may require that you have a certain rating first!&lt;br /&gt;
&lt;br /&gt;
* Hats have been added with a new hat shop and dynamic pricing. The prices of hats are changed automatically to reflect upon their rarity. A hat that is bought more often will go down in price, and a hat that is bought less often will stay at a higher price (as it is classed &amp;quot;more rare&amp;quot;). Special hats will be added for certain guilds and also a couple of collector hats will be moved into circulation.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12951</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12951"/>
		<updated>2009-09-09T18:59:32Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:RudoraBank.png|frame|border|right||alt=Rudora Bank|Screenshot of Rudora Bank]]Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added.&lt;br /&gt;
&lt;br /&gt;
===Current Staff===&lt;br /&gt;
&lt;br /&gt;
Skyld is the only person currently working on the project.&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
A compliment of new features has been added to the older overworld in order to improve gameplay.&lt;br /&gt;
&lt;br /&gt;
* A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
* Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
* A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
* A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
* Both new and old jobs have been added to the server, including fishing, berry picking, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items. The old Lottery has been readded too.&lt;br /&gt;
&lt;br /&gt;
* A new guilds system allows players to create local guilds, providing they have the support of at least 5 other players. Importance will be brought back to guilds by providing some guild events and quests, although some guilds may require that you have a certain rating first!&lt;br /&gt;
&lt;br /&gt;
* Hats have been added with a new hat shop and dynamic pricing. The prices of hats are changed automatically to reflect upon their rarity. A hat that is bought more often will go down in price, and a hat that is bought less often will stay at a higher price (as it is classed &amp;quot;more rare&amp;quot;). Special hats will be added for certain guilds and also a couple of collector hats will be moved into circulation.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=File:RudoraBank.png&amp;diff=12950</id>
		<title>File:RudoraBank.png</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=File:RudoraBank.png&amp;diff=12950"/>
		<updated>2009-09-09T18:57:36Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12949</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12949"/>
		<updated>2009-09-09T18:52:57Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* New Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added.&lt;br /&gt;
&lt;br /&gt;
===Current Staff===&lt;br /&gt;
&lt;br /&gt;
Skyld is the only person currently working on the project.&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
A compliment of new features has been added to the older overworld in order to improve gameplay.&lt;br /&gt;
&lt;br /&gt;
* A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
* Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
* A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
* A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
* Both new and old jobs have been added to the server, including fishing, berry picking, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items. The old Lottery has been readded too.&lt;br /&gt;
&lt;br /&gt;
* A new guilds system allows players to create local guilds, providing they have the support of at least 5 other players. Importance will be brought back to guilds by providing some guild events and quests, although some guilds may require that you have a certain rating first!&lt;br /&gt;
&lt;br /&gt;
* Hats have been added with a new hat shop and dynamic pricing. The prices of hats are changed automatically to reflect upon their rarity. A hat that is bought more often will go down in price, and a hat that is bought less often will stay at a higher price (as it is classed &amp;quot;more rare&amp;quot;). Special hats will be added for certain guilds and also a couple of collector hats will be moved into circulation.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12948</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12948"/>
		<updated>2009-09-09T18:50:23Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* New Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added.&lt;br /&gt;
&lt;br /&gt;
===Current Staff===&lt;br /&gt;
&lt;br /&gt;
Skyld is the only person currently working on the project.&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
A compliment of new features has been added to the older overworld in order to improve gameplay.&lt;br /&gt;
&lt;br /&gt;
* A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
* Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
* A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
* A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
* Both new and old jobs have been added to the server, including fishing, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items. The old Lottery has been readded too.&lt;br /&gt;
&lt;br /&gt;
* A new guilds system allows players to create local guilds, providing they have the support of at least 5 other players. Importance will be brought back to guilds by providing some guild events and quests, although some guilds may require that you have a certain rating first!&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12947</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12947"/>
		<updated>2009-09-09T18:48:52Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added.&lt;br /&gt;
&lt;br /&gt;
===Current Staff===&lt;br /&gt;
&lt;br /&gt;
Skyld is the only person currently working on the project.&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
* Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
* A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
* A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
* Both new and old jobs have been added to the server, including fishing, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items. The old Lottery has been readded too.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12946</id>
		<title>Worlds/Rudora</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Rudora&amp;diff=12946"/>
		<updated>2009-09-09T18:46:43Z</updated>

		<summary type="html">&lt;p&gt;Skyld: New page: Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rudora was one of the original Classic playerworlds of GraalOnline. It was originally created by Spark911, Wan and Fox, and has since been managed by GrowlZ and, now, Skyld. It maintains a strong classic theme using the default tileset. For the past few years, Rudora has been under slow redevelopment by Skyld, renewing the scripted features (including a complete conversion to the new GScript language) and a freshen up of the overworld. A number of new jobs have been added. &lt;br /&gt;
&lt;br /&gt;
==New Features==&lt;br /&gt;
&lt;br /&gt;
- A new ratings system has been added that gives players three separate ratings: a PK rating (or otherwise known as your regular rating), a spar rating and a quest rating. This is a value out of 100 that starts at 50 and improves with more kills and worsens with more deaths. This serves as a replacement to the aging AP system. Your AP is updated as you enter different levels, for instance, as you enter a spar level, your AP is changed to match your spar rating. A scoreboard system is in place to show the top five PK, spar and quest ratings from players on the server.&lt;br /&gt;
&lt;br /&gt;
- Rudora uses a hybrid HP system that distributes tasks between the clientside and the serverside. Quests and events can easily use clientside HP to improve response times.&lt;br /&gt;
&lt;br /&gt;
- A simple item system has been added that allows item collection, trading and selling. A marketplace has been added which allows players to rent stalls and sell their items to other players. With it, a new scripted inventory has been added which allows players to select and equip items, as well as drop them and see information about them. The inventory menu is accessible by keyboard (Q key, up and down) and by mouse (clicking on the top-left icon and then scrolling and clicking the item you want). For additional device compatibility with platforms such as the iPhone, it is possible to scroll up and down on the list by dragging with your finger. &lt;br /&gt;
&lt;br /&gt;
- A new events system has been added making it much easier for Events Team to announce, host and end events, and distribute event coins. Players can join and leave events as they wish. &lt;br /&gt;
&lt;br /&gt;
- Both new and old jobs have been added to the server, including fishing, tree cutting, vine growing, mining and crafting. All produced items from these jobs can be sold, and some can be used for other jobs such as crafting new items.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=News/2007/September&amp;diff=9897</id>
		<title>News/2007/September</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=News/2007/September&amp;diff=9897"/>
		<updated>2007-09-09T20:32:55Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== September ===&lt;br /&gt;
&lt;br /&gt;
* '''September 9th''' - '''Rudora Development Progress''' {{News/Playerworlds}}&lt;br /&gt;
&lt;br /&gt;
Some of you are probably quite familiar with the world Rudora, back from the older days of Graal. It's currently a development server, and recently has been under redevelopment in hope to bring a new Classic world. Quite a lot of progress has been made so far.&lt;br /&gt;
* Quite a lot of the systems have been rescripted and updated, including the Q menu and weapons&lt;br /&gt;
* The events have been redone, and some new ones created&lt;br /&gt;
* New quests are on the way&lt;br /&gt;
&lt;br /&gt;
[[Image:Rudora_news.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''September 9th''' - '''Zone Heavy Laser''' {{News/Zone}}&lt;br /&gt;
&lt;br /&gt;
A new weapon is available in the shop: the Heavy Laser which is similar to the Laser Force, is slightly slower but also more powerful.&lt;br /&gt;
&lt;br /&gt;
[[Image:Zone_heavylaser.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''September 8th''' - '''Zone Comets''' {{News/Zone}}&lt;br /&gt;
&lt;br /&gt;
We have added flying comets on Koth and Alpha, they are not killing yet though:&lt;br /&gt;
&lt;br /&gt;
[[Image:Zone_comets.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''September 7th''' - '''Skill Games Improvements''' {{News/Skills}}&lt;br /&gt;
&lt;br /&gt;
We have improved several skill games:&lt;br /&gt;
* BomberMad can be be played with joystick and gamepad now&lt;br /&gt;
* We have fixed a bug in the chess computer logic (not moving when being in check)&lt;br /&gt;
* When training a game then you have a new &amp;quot;Demo&amp;quot; button next to the &amp;quot;Restart&amp;quot; button which lets you watch a match computer vs computer&lt;br /&gt;
* In Invaders X the fire slots are not decreasing anymore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''September 6th''' - '''Developer Gold''' {{News/General}}&lt;br /&gt;
&lt;br /&gt;
We have switched all graal.net playerworlds to the new Developer Gold system:&lt;br /&gt;
&lt;br /&gt;
* Renting a server is as easy as upgrading an account - just go on the website and buy a Developer Gold subscription: http://www.graalonline.com/playerworlds/stores/upgrade&lt;br /&gt;
* Instead of just using PayPal, you can now also use PayByCash which offers more payment methods.&lt;br /&gt;
* Same price as before&lt;br /&gt;
* The servers are bound to the owners account. You don't have a separate admin-account, but the owner account gets full access.&lt;br /&gt;
* You see the remaining subscription time on the serverlist.&lt;br /&gt;
* You see your server on the serverlist&lt;br /&gt;
&lt;br /&gt;
We also want to remind you that there is now the Developer Pack available on the website - it lets you share the costs of a server between several developers. The price is basicly 1/3 of Developer Gold, and you need 3 people to create the server.&lt;br /&gt;
&lt;br /&gt;
* '''September 3rd''' - '''Era Releases New Quest''' {{News/Playerworlds/Era}}&lt;br /&gt;
&lt;br /&gt;
Era has just released a new quest! Located west of Tachi and north of the Hospital is an old military storage compound that is rumored to still have weapons inside. Find a way in, avoid the guards, and buy the guns to beat the quest.&lt;br /&gt;
&lt;br /&gt;
[[Image:Eraquest.png]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=File:Rudora_news.png&amp;diff=9896</id>
		<title>File:Rudora news.png</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=File:Rudora_news.png&amp;diff=9896"/>
		<updated>2007-09-09T20:24:27Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=9832</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=9832"/>
		<updated>2007-09-01T13:16:29Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &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 [[WikiPedia:Java_programming_language|Java]]. In some ways it is more dynamic, e.g. supporting dynamicly joining and leaving of classes, and brings support for easy management of online game content.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language ([[Creation/Dev/Old GScript|Old GScript]]) 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;
GScript can be discussed in the non-official [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
'''If you would like to contribute to the GraalBible's GScript documentation, you might want to [[Creation/Dev/GScript/Contribute|read this article]].'''&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;
'''Basic information'''&lt;br /&gt;
* [[Creation/Dev/Script/Starting Guide|Starting Guide]]&lt;br /&gt;
* [[Creation/Dev/Script/Client|Functions, variables and objects (clientside)]] &lt;br /&gt;
* [[Creation/Dev/Script/Client/GuiControls_List|GUI Controls]]&lt;br /&gt;
&lt;br /&gt;
'''Specific Features'''&lt;br /&gt;
* [[Creation/Dev/GS1_To_GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Particle Engine|Particle Engine]]&lt;br /&gt;
* [[Creation/Dev/Graal v4 IRC|Graal IRC Scripting: Graal IRC Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting Graal v4 IRC|Graal IRC Scripting: Troubleshooting Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Output Methods|Output methods]]&lt;br /&gt;
* [[Creation/Dev/Using Classes Effectively|Use of classes]]&lt;br /&gt;
* [[Creation/Dev/GScript/Understanding GUI Profiles|GUI Features: Understanding GUI profiles]]&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|Constants]]&lt;br /&gt;
* [[Vectors]] (3D)&lt;br /&gt;
&lt;br /&gt;
'''Tutorials'''&lt;br /&gt;
* [[Creation/Dev/Creating Tabbed Window Panes|Creating Tabbed Window Panes]]&lt;br /&gt;
* [[Creation/Dev/Database_Communication|Indexed Database Communication]]&lt;br /&gt;
* [[Creation/Dev/Excalibur's scripting guide|Excalibur's Scripting Guide]]&lt;br /&gt;
&lt;br /&gt;
'''External Links'''&lt;br /&gt;
* [http://skyld.vip.graal.net GScript Wiki]&lt;br /&gt;
* [http://twinny.vip.graal.net Twinny's Scripting Page]&lt;br /&gt;
&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
&lt;br /&gt;
These are frequently updated, to get the latest list run Graal with the -listscriptfunctions option:&lt;br /&gt;
* [[Creation/Dev/Script/Clientside_Functions|Client side]]&lt;br /&gt;
* [[Creation/Dev/Script Functions: NPC Server|Server side]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev/Script/Index |Related Artices]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Client/PrecipitationData&amp;diff=8673</id>
		<title>Creation/Dev/Script/Client/PrecipitationData</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Client/PrecipitationData&amp;diff=8673"/>
		<updated>2007-06-30T22:30:53Z</updated>

		<summary type="html">&lt;p&gt;Skyld: Replacing page with '&amp;lt;pre&amp;gt;
        PrecipitationData (GameBaseData):
          soundprofile - object
&amp;lt;/pre&amp;gt;'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
        PrecipitationData (GameBaseData):&lt;br /&gt;
          soundprofile - object&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=8672</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=8672"/>
		<updated>2007-06-30T22:29:12Z</updated>

		<summary type="html">&lt;p&gt;Skyld: Undoing defaced page. Look, dude. I recognise that you probably have a few things to say, but please. This is a reference guide, not a ranting page.&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 [[WikiPedia:Java_programming_language|Java]]. In some ways it is more dynamic, e.g. supporting dynamicly joining and leaving of classes, and brings support for easy management of online game content.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language ([[Creation/Dev/Old GScript|Old GScript]]) 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;
GScript can be discussed in the non-official [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
'''If you would like to contribute to the GraalBible's GScript documentation, you might want to [[Creation/Dev/GScript/Contribute|read this article]].'''&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;
'''Basic information'''&lt;br /&gt;
* [[Creation/Dev/Script/Starting Guide|Starting Guide]]&lt;br /&gt;
* [[Creation/Dev/Script/Client|Functions, variables and objects (clientside)]] &lt;br /&gt;
* [[Creation/Dev/Script/Client/GuiControls_List|GUI Controls]]&lt;br /&gt;
&lt;br /&gt;
'''Specific Features'''&lt;br /&gt;
* [[Creation/Dev/GS1_To_GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Particle Engine|Particle Engine]]&lt;br /&gt;
* [[Creation/Dev/Graal v4 IRC|Graal IRC Scripting: Graal IRC Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting Graal v4 IRC|Graal IRC Scripting: Troubleshooting Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Output Methods|Output methods]]&lt;br /&gt;
* [[Creation/Dev/Using Classes Effectively|Use of classes]]&lt;br /&gt;
* [[Creation/Dev/GScript/Understanding GUI Profiles|GUI Features: Understanding GUI profiles]]&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|Constants]]&lt;br /&gt;
* [[Vectors]] (3D)&lt;br /&gt;
&lt;br /&gt;
'''Tutorials'''&lt;br /&gt;
* [[Creation/Dev/Creating Tabbed Window Panes|Creating Tabbed Window Panes]]&lt;br /&gt;
* [[Creation/Dev/Database_Communication|Indexed Database Communication]]&lt;br /&gt;
* [[Creation/Dev/Excalibur's scripting guide|Excalibur's Scripting Guide]]&lt;br /&gt;
* [http://twinny.vip.graal.net Twinny's Scripting Page]&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
&lt;br /&gt;
These are frequently updated, to get the latest list run Graal with the -listscriptfunctions option:&lt;br /&gt;
* [[Creation/Dev/Script/Clientside_Functions|Client side]]&lt;br /&gt;
* [[Creation/Dev/Script Functions: NPC Server|Server side]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev/Script/Index |Related Artices]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Graal3D&amp;diff=7699</id>
		<title>Worlds/Graal3D</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Graal3D&amp;diff=7699"/>
		<updated>2006-12-03T13:37:02Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{playerworld}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Login_server_graal3d.png|right]]&lt;br /&gt;
&lt;br /&gt;
The Graal3D project is GraalOnline's official 3D development project.&lt;br /&gt;
&lt;br /&gt;
Rumors suggest that the Graal3D project is to recreate [[Graal Kingdoms]] in a 3D environment, using the [[Graal3D: Engine|Graal3D Engine]].&lt;br /&gt;
&lt;br /&gt;
Currently, only a preview of the project is available.&lt;br /&gt;
&lt;br /&gt;
Please note that since the creation of this article, many closed changes have been made to the Graal3D project, and this article can no longer guarantee accuracy in representing the project.&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Client/GuiControl&amp;diff=7698</id>
		<title>Creation/Dev/Script/Client/GuiControl</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Client/GuiControl&amp;diff=7698"/>
		<updated>2006-12-03T13:34:23Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Inherits from [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]].&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
[[Image:Guicontrol_panel.png]]&lt;br /&gt;
&lt;br /&gt;
GuiControl is the base control, therefore general functions listed here are available to all GUI controls. Most of the time it is used as container for positioning groups of other controls. It can either have a border (border=1..5) or just be plain transparent, and just display its child controls.&lt;br /&gt;
&lt;br /&gt;
=Variables=&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;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| active&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| awake&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| canmove&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| canresize&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| controls&lt;br /&gt;
| object&lt;br /&gt;
| array of [[Creation/Dev/Script/Client/GuiControl|GuiControl]] (subcontrols)&lt;br /&gt;
|-&lt;br /&gt;
| editing&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| extent&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| height&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hint&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| horizsizing&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| layer&lt;br /&gt;
| integer (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| minextent&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| minsize&lt;br /&gt;
| string&lt;br /&gt;
| the same like &amp;quot;minExtent&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| parent&lt;br /&gt;
| object (read only)&lt;br /&gt;
| a [[Creation/Dev/Script/Client/GuiControl|GuiControl]]&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| profile&lt;br /&gt;
| object&lt;br /&gt;
| see [[Creation/Dev/Script/Client/GuiControlProfile|GuiControlProfile]]&lt;br /&gt;
|-&lt;br /&gt;
| resizeheight&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| resizewidth&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scrolllinex&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scrollliney&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| showhint&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| useownprofile&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| vertsizing&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| visible&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| width&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| x&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| y&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Functions=&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;
| '''Return Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(obj)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bringtofront()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| destroy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getparent()&lt;br /&gt;
| object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| globaltolocalcoord({x,y})&lt;br /&gt;
| {x,y}&lt;br /&gt;
| 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;
|-&lt;br /&gt;
| hide()&lt;br /&gt;
|&lt;br /&gt;
| Hide the control&lt;br /&gt;
|-&lt;br /&gt;
| isfirstresponder()&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns whether or not this control is the first responder&lt;br /&gt;
|-&lt;br /&gt;
| localtoglobalcoord({x,y})&lt;br /&gt;
| {x,y}&lt;br /&gt;
| 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;
|-&lt;br /&gt;
| makefirstresponder(bool)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pushtoback()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| resize(int x, int y, int width, int height)&lt;br /&gt;
|&lt;br /&gt;
| Resize the control&lt;br /&gt;
|-&lt;br /&gt;
| show()&lt;br /&gt;
|&lt;br /&gt;
| Show the control&lt;br /&gt;
|-&lt;br /&gt;
| showtop()&lt;br /&gt;
|&lt;br /&gt;
| calls show(), tabfirst() and bringtofront()&lt;br /&gt;
|-&lt;br /&gt;
| tabfirst()&lt;br /&gt;
| object&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
&lt;br /&gt;
onAdd() - is invoked when the control is added to another control (addcontrol)&lt;br /&gt;
&lt;br /&gt;
onRemove() - is invoked when the control is removed from its parent&lt;br /&gt;
&lt;br /&gt;
onShow() - is invoked when the control is shown or gets awakened while being 'visible'&lt;br /&gt;
&lt;br /&gt;
onHide() - is invoked when the control is made hidden&lt;br /&gt;
&lt;br /&gt;
onWake() - is invoked when the control is awakened and becomes visible on the screen&lt;br /&gt;
&lt;br /&gt;
onSleep() - is invoked for windows when a dialog window is removed from the screen&lt;br /&gt;
&lt;br /&gt;
onMove(newx,newy) - is invoked when the control is moved&lt;br /&gt;
&lt;br /&gt;
onResize(newwidth,newheight) - is invoked when the control is resized&lt;br /&gt;
&lt;br /&gt;
onAction() - is invoked when a button control is pressed, you press the enter-key in a text edit control, or move a slider control, &lt;br /&gt;
&lt;br /&gt;
onDialogPush() - is invoked when a dialog control is placed on the screen (using pushDialog(control))&lt;br /&gt;
&lt;br /&gt;
onDialogPop() - is invoked when a dialog control is removed from the screen again (using popDialog())&lt;br /&gt;
&lt;br /&gt;
onKeyDown(keycode,keystring,scancode) - a key has been pressed while the control had the input focus (makeFirstResponder())&lt;br /&gt;
&lt;br /&gt;
onKeyUp(keycode,keystring,scancode) - the key has been released&lt;br /&gt;
&lt;br /&gt;
onMouseYawPitch(xaxis,yaxis) - mouse event in Graal3D when the mouse has been turned off&lt;br /&gt;
&lt;br /&gt;
onMouseDown(keymodifier,mousescreenx,mousescreeny,clickcount) - the left mouse button has been pressed inside this control&lt;br /&gt;
&lt;br /&gt;
onMouseUp(keymodifier,mousescreenx,mousescreeny) - the left mouse button has been released&lt;br /&gt;
&lt;br /&gt;
onMouseEnter(keymodifier,mousescreenx,mousescreeny) - the mouse moved inside this control&lt;br /&gt;
&lt;br /&gt;
onMouseLeave(keymodifier,mousescreenx,mousescreeny) - the mouse left the control&lt;br /&gt;
&lt;br /&gt;
onMouseDragged(keymodifier,mousescreenx,mousescreeny) - the mouse is moved while the left mouse button is pressed&lt;br /&gt;
&lt;br /&gt;
onMouseMove(keymodifier,mousescreenx,mousescreeny) - the mouse has been moved&lt;br /&gt;
&lt;br /&gt;
onRightMouseDown(keymodifier,mousescreenx,mousescreeny,clickcount) - the right mouse button has been pressed&lt;br /&gt;
&lt;br /&gt;
onRightMouseUp(keymodifier,mousescreenx,mousescreeny) - the right mouse button has been released&lt;br /&gt;
&lt;br /&gt;
onRightMouseDragged(keymodifier,mousescreenx,mousescreeny) - the mouse has been moved while the right mouse button is pressed&lt;br /&gt;
&lt;br /&gt;
onMouseWheelUp(keymodifier) - the mouse wheel has been scrolled up&lt;br /&gt;
&lt;br /&gt;
onMouseWheelDown(keymodifier) - the mouse wheel has been scrolled down&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&lt;br /&gt;
  new GuiControl(&amp;quot;Test_Back&amp;quot;) {&lt;br /&gt;
    useownprofile = true;&lt;br /&gt;
    profile.border = 3;&lt;br /&gt;
    x = 10;&lt;br /&gt;
    y = 10;&lt;br /&gt;
    width = 160;&lt;br /&gt;
    height = 80;&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7609</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7609"/>
		<updated>2006-11-19T14:29:56Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Using GScript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;br /&gt;
* '''Event Functions''': These are functions that are called by the scripting engine automatically based on events happening. For example, one function may be called when a player touches the NPC, and another one might be called when a player enters the level. Note that these event functions are only called if you have written the instructions for them yourself. This will be explained in the Functions section.&lt;br /&gt;
&lt;br /&gt;
= Using GScript =&lt;br /&gt;
== Basic concepts ==&lt;br /&gt;
It is important to remember a couple of very basic, but very important concepts when using GScript.&lt;br /&gt;
* All statements (that is, function calls, writing to variables) '''must''' end in a semicolon (that's a ;). This simply tells the engine that the current statement has finished. You must remember to include it, or the engine will throw errors at you when it does not realise that you have finished a statement before it moves onto the next one.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
A function, like mentioned in the Glossary of Terms, is a defined block of instructions. Practically everything you do in GScript will rely on functions. First, let's look at how you can define a function.&lt;br /&gt;
&lt;br /&gt;
=== Defining a function ===&lt;br /&gt;
The syntax for defining a function is, in fact, very simple. Let's look at an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first thing to identify is the 'function' keyword. This tells the scripting engine that you're going to define a function. This is absolutely necessary in defining functions of any kind yourself.&lt;br /&gt;
&lt;br /&gt;
Second, you'll notice a name - 'myFunction'. This is the bit where you specify the name of the function that you're defining. This can be anything, providing that it doesn't contain strange symbols (usually an underscore '_' is the best suited symbol to split up function names with, since other symbols can cause errors).&lt;br /&gt;
&lt;br /&gt;
Thirdly, you'll see (). This is a convention that is later used for parameters, but for now, that's not important. Just stick () on the end of your name for now.&lt;br /&gt;
&lt;br /&gt;
Finally, you'll see { and }. These are braces, and define exactly what the function contains. Anything inside the braces is code that is specific to the function. If it's inside the braces for that function, it'll run when you call that function. Very simple.&lt;br /&gt;
&lt;br /&gt;
=== Function scopes ===&lt;br /&gt;
A fairly important concept is the idea of scopes. As demonstrated before, anything inside the { and } of a function means that it's a part of the function. Now, imagine that the entire script is like a hallway, and behind every door, is a function. When you walk into a room and close the door behind you, you are in a fairly closed space. This is true of functions.&lt;br /&gt;
&lt;br /&gt;
Some types of variable, when set inside a function, are placed in the function's 'local' scope. This simply means that the variable is available for use inside the function, but not outside of the function. The 'global' scope is where other types of variable are stored, for example, variables that need to be accessible in all functions. This will be explained further in the variables section.&lt;br /&gt;
&lt;br /&gt;
=== Calling a function ===&lt;br /&gt;
Now you've created your function, it's there to be used. Anywhere inside your script, you can call this function using the following method:&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the 'function' keyword is not present because we are not defining a function, we are just calling one. Now, the moment the scripting engine hits a function call, any code that you put inside of your function will run. Let's use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a very basic function that just sets the player's chat text. Let's call the function.&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suddenly, the player's chat will be set to &amp;quot;Hello!&amp;quot;. By calling the function, you've told the engine to run the code inside of that function - in this case, setting the player's chat.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Now, you've seen how functions work. The next very important part is using variables. As you have read in the glossary of terms, a variable is simply a sort of object that stores information.&lt;br /&gt;
&lt;br /&gt;
Variables have three important factors: name, type and value.&lt;br /&gt;
=== Name ===&lt;br /&gt;
Every variable must have a unique name. This is how you will access the value that is stored inside of the variable whenever you want to use it. &lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
Every variable also has a type. In GScript, there is a clever little system in place for variables called 'variants'. This sounds complicated, but is in fact also very simple. It simply means that the variable's type ''adjusts itself'' in order to suit the sort of data that it contains.&lt;br /&gt;
&lt;br /&gt;
For example, if you make the value of a variable &amp;quot;Hello!&amp;quot;, then the variable automatically becomes a string, and simply because you assigned it a value of a string. In GScript, all string values must be enclosed in &amp;quot;speechmarks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
What about a number? You don't even need to use speechmarks for numbers - you just type the number! Simple, no? When you do so, the variable automatically becomes either an integer or a float type in order to suit the number that you just put in it.&lt;br /&gt;
&lt;br /&gt;
=== Value ===&lt;br /&gt;
As already established, this is simply the information/data that the variable contains.&lt;br /&gt;
&lt;br /&gt;
=== Why variables are useful ===&lt;br /&gt;
Variables are incredibly useful for a number of reasons. They allow you to:&lt;br /&gt;
* Store a value that you plan to repeatedly use in your script. If you change the value of the variable, then the script uses the new value in every place the variable is used.&lt;br /&gt;
* Keep a value saved for when you want it later. If you take the player's chat text and want to save it, then you can use a variable.&lt;br /&gt;
* Manipulate a value. There are many predefined functions available in the scripting engine that will allow you to modify and use the value that is stored inside a variable; for example, mathematical operations.&lt;br /&gt;
&lt;br /&gt;
=== Setting a variable ===&lt;br /&gt;
Setting the value of a variable is ''even'' simpler than defining a function. Let's use an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
myVariable = 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looking at this, it's easy to see the logic here.&lt;br /&gt;
* First, the engine is taking the variable name - in this case, &amp;quot;myVariable&amp;quot;.&lt;br /&gt;
* Second, it is identifying the assignment operator (=). Simply, the engine has so far established that you want &amp;quot;myVariable&amp;quot; to equal something.&lt;br /&gt;
* Finally, it is taking the value that you want to set the variable's value to, and setting it.&lt;br /&gt;
&lt;br /&gt;
In our example, we initially set the variable &amp;quot;myVariable&amp;quot; to &amp;quot;Hello!&amp;quot;. This turns the variable automatically into a string. However! Immediately after, we have rewritten the value of &amp;quot;myVariable&amp;quot; with the number 3. Since there are no decimal places, the variable suddenly becomes an integer.&lt;br /&gt;
&lt;br /&gt;
=== Reading a variable ===&lt;br /&gt;
Any time you want to get a variable's value and use it, you simply write the name of the variable. This is best explained while using a Conditional Check.&lt;br /&gt;
&lt;br /&gt;
== Conditional Checks ==&lt;br /&gt;
For your script to even be remotely useful, you're going to have to check something somewhere. For example, if you want the script to only respond to a player saying &amp;quot;Foo&amp;quot;, then you're going to have to use a conditional check.&lt;br /&gt;
&lt;br /&gt;
There is another operator, called the comparison operator. It's two equals signs stuck together (==), and just instructs the engine to compare the two values. If the two values are the same, then it'll return TRUE. If they are different, it'll return FALSE.&lt;br /&gt;
&lt;br /&gt;
This is simple enough. Observe the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;excellent&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We've set the variable 'myVariable' to &amp;quot;excellent&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;excellent&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This time, we're checking to see if 'myVariable' equals &amp;quot;excellent&amp;quot;. Since it does, this statement will evaluate to be TRUE.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;fabulous&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're checking to see if 'myVariable' equals &amp;quot;fabulous&amp;quot;. It clearly doesn't, since we set it's value to &amp;quot;excellent&amp;quot; instead. As a result, this statement returns FALSE.&lt;br /&gt;
&lt;br /&gt;
=== Working with if () checks ===&lt;br /&gt;
Now, conditional checks alone are no good to you in a complex script. You'll need to actually use the result of your conditional checks to make a difference in what happens during the execution of the script.&lt;br /&gt;
&lt;br /&gt;
To do this, you use an 'if' statement. 'if' is a very simple operator (it doesn't get complicated yet!) that simply runs one thing if the statement you give it is true, and optionally runs another thing if it isn't.&lt;br /&gt;
&lt;br /&gt;
Since using examples so far has been the common way, let's see one here. We'll even include a bit of what you've learned already:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  myVariable = &amp;quot;excellent&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  if (myVariable == &amp;quot;excellent&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;Hooray! The values match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
    else&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;The values don't match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now. The first thing about an if statement is giving it something to check. The statement &amp;quot;myVariable ==&amp;quot; alone will return either one of two values - TRUE (1, one) or FALSE (0, zero).&lt;br /&gt;
&lt;br /&gt;
An if () statement by itself will only check if something is true. If not, it'll ignore it. If you put an else in, like in the above example, that code will be run in the case of a failure.&lt;br /&gt;
&lt;br /&gt;
=== Storing the result of a conditional check ===&lt;br /&gt;
Now, as previously mentioned, a comparison (==) will only produce either true or false. If you want to store the value of a conditional check for use later, then you can assign the result to a variable, instead of using it in an if () check now.&lt;br /&gt;
&amp;lt;pre&amp;gt;this.variable = (myVariable == &amp;quot;excellent&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... saves the result of the check into this.variable. So later, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;if (this.variable)&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
... to see if the check was successful. Similarly, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;if (!this.variable)&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
... to see if the check failed.&lt;br /&gt;
&lt;br /&gt;
== Manipulating data ==&lt;br /&gt;
=== Explanation ===&lt;br /&gt;
Data can be manipulated in various ways. For example, you can modify parts of a string. You can apply math functions to a number. This section explains those sorts of functions.&lt;br /&gt;
&lt;br /&gt;
=== Basic math ===&lt;br /&gt;
GScript allows you to perform basic operations like add, subtract, multiply, divide, etc. However, GScript does not use functions for this. Instead, it has a set of &amp;quot;operators&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Examine the following examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = 3 + 4; // addition (sets this.result to 7 in this case)&lt;br /&gt;
this.result = 3 - 4; // subtraction (sets this.result to -1 in this case)&lt;br /&gt;
this.result = 3 * 4; // multiplication (sets this.result to 12 in this case)&lt;br /&gt;
this.result = 3 / 4; // division (sets this.result to 0.75 in this case)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note how the operators are between two values: the value to start with, and then the value to operate with. The use of an operator returns a value in the same way as other comparisons, so let's take this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;if ((3 - 4) == -1)&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement evaluates to be true, because 3 - 4 does, in fact, equal -1.&lt;br /&gt;
&lt;br /&gt;
=== Priority order ===&lt;br /&gt;
If you're doing complex operations, it is important to ensure that your priority order is correct. In it's most basic mathematic form, the default order of operations is the following:&lt;br /&gt;
* B - Brackets&lt;br /&gt;
* O - Order&lt;br /&gt;
* D - Division&lt;br /&gt;
* M - Multiplication&lt;br /&gt;
* A - Addition&lt;br /&gt;
* S - Subtraction&lt;br /&gt;
That means that in a complex expression, multiplication takes priority order over addition, and that a part of the expression surrounded by brackets will always be calculated first.&lt;br /&gt;
&lt;br /&gt;
Brackets are very useful because it allows you to specify the order of operations. Consider this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = (3 * 4) / (2 * 3);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is calculated in this order:&lt;br /&gt;
* First, 3 is multiplied by 4:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = 12 / (2 * 3);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Second, 2 is multiplied by 3:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = 12 / 6;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Finally, 12 is divided by 6:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result == 2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slightly more complex operators ===&lt;br /&gt;
There are another set of operators which allow for basic math manipulation on a variable. These allow you to add and subtract to a number variable, without having to perform the expression yourself. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result += 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = this.result + 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result -= 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = this.result - 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The increment and decrement operators are as follows:&lt;br /&gt;
* += - add to&lt;br /&gt;
* -= - subtract to&lt;br /&gt;
* *= - multiply by&lt;br /&gt;
* /= - divide by&lt;br /&gt;
&lt;br /&gt;
Occasionally it is useful to just add or subtract one to a variable. There are operators to do this, too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var ++;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var = this.var + 1;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var --;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var = this.var - 1;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Understanding booleans ==&lt;br /&gt;
&lt;br /&gt;
Booleans are, plainly and simply, true or false values. They don't do anything else.&lt;br /&gt;
&amp;lt;pre&amp;gt;this.value = true;&lt;br /&gt;
this.value = false;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technically, true is the same as 1, and false is the same as 0, but the keywords are here to tidy things up a bit. Booleans are very useful because they help to control how your script operates. Now, as you know, a conditional check will produce a true or false result. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;3 == 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
... produces true, because 3 equals three.&lt;br /&gt;
&amp;lt;pre&amp;gt;3 == 2&amp;lt;/pre&amp;gt;&lt;br /&gt;
... produces false, because 3 doesn't equal 2.&lt;br /&gt;
&lt;br /&gt;
== Functions continued ==&lt;br /&gt;
&lt;br /&gt;
There are many features about functions that can greatly improve the usefulness of your script, for example, function parameters and return values.&lt;br /&gt;
&lt;br /&gt;
=== Return values ===&lt;br /&gt;
A function execution can return a value to where the function was called. This is how a lot of Graal's built-in functions work: by returning the value.&lt;br /&gt;
&lt;br /&gt;
Take the following example, which will return the value of timevar2 (a built-in variable which counts how many seconds it has been since 1st January 1970):&lt;br /&gt;
&amp;lt;pre&amp;gt;function getTime()&lt;br /&gt;
{&lt;br /&gt;
  return timevar2;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you call the function, like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.time = getTime();&amp;lt;/pre&amp;gt;&lt;br /&gt;
... then this.time will be set to the value of timevar2.&lt;br /&gt;
&lt;br /&gt;
It is very important to remember that the return function immediately ends the function's execution. Therefore:&lt;br /&gt;
&amp;lt;pre&amp;gt;function foo()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Foo&amp;quot;;&lt;br /&gt;
  return;&lt;br /&gt;
  player.chat = &amp;quot;Bar&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
player.chat = &amp;quot;Bar&amp;quot;; won't be executed because of return; being used.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7410</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7410"/>
		<updated>2006-09-18T17:02:58Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &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 [[WikiPedia:Java_programming_language|Java]]. In some ways it is more dynamic, e.g. supporting dynamicly joining and leaving of classes, and brings support for easy management of online game content.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language ([[Creation/Dev/Old GScript|Old GScript]]) 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;
GScript can be discussed in the non-official [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
'''If you would like to contribute to the GraalBible's GScript documentation, you might want to [[Creation/Dev/GScript/Contribute|read this article]].'''&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;
'''Basic information'''&lt;br /&gt;
* [[Creation/Dev/Script/Starting Guide|Starting Guide]]&lt;br /&gt;
* [[Creation/Dev/Script/Client|Functions, variables and objects (clientside)]] &lt;br /&gt;
* [[Creation/Dev/Script/Client/GuiControls_List|GUI Controls]]&lt;br /&gt;
&lt;br /&gt;
'''Specific Features'''&lt;br /&gt;
* [[Creation/Dev/GS1_To_GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Particle Engine|Particle Engine]]&lt;br /&gt;
* [[Creation/Dev/Graal v4 IRC|Graal IRC Scripting: Graal IRC Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting Graal v4 IRC|Graal IRC Scripting: Troubleshooting Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Output Methods|Output methods]]&lt;br /&gt;
* [[Creation/Dev/Using Classes Effectively|Use of classes]]&lt;br /&gt;
* [[Creation/Dev/GScript/Understanding GUI Profiles|GUI Features: Understanding GUI profiles]]&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|Constants]]&lt;br /&gt;
&lt;br /&gt;
'''Tutorials'''&lt;br /&gt;
* [[Creation/Dev/Creating Tabbed Window Panes|Creating Tabbed Window Panes]]&lt;br /&gt;
* [[Creation/Dev/Database_Communication|Indexed Database Communication]]&lt;br /&gt;
&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
&lt;br /&gt;
These are frequently updated, to get the latest list run Graal with the -listscriptfunctions option:&lt;br /&gt;
* [[Creation/Dev/Script/Clientside_Functions|Client side]]&lt;br /&gt;
* [[Creation/Dev/Script Functions: NPC Server|Server side]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev/Script/Index|Related Artices]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7324</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7324"/>
		<updated>2006-09-16T19:20:12Z</updated>

		<summary type="html">&lt;p&gt;Skyld: Changed &amp;quot;Functions &amp;amp; Variables &amp;amp; Objects&amp;quot; for better sentence flow&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 [[WikiPedia:Java_programming_language|Java]]. In some ways it is more dynamic, e.g. supporting dynamicly joining and leaving of classes, and brings support for easy management of online game content.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language ([[Creation/Dev/Old GScript|Old GScript]]) 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;
GScript can be discussed in the non-official [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
'''If you would like to contribute to the GraalBible's GScript documentation, you might want to [[Creation/Dev/GScript/Contribute|read this article]].'''&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;
'''Basic information'''&lt;br /&gt;
* [[Creation/Dev/Script/Starting Guide|Starting Guide]]&lt;br /&gt;
* [[Creation/Dev/Script/Client|Functions, variables and objects (clientside)]] &lt;br /&gt;
&lt;br /&gt;
'''Specific Features'''&lt;br /&gt;
* [[Creation/Dev/GS1_To_GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Particle Engine|Particle Engine]]&lt;br /&gt;
* [[Creation/Dev/Graal v4 IRC|Graal IRC Scripting: Graal IRC Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting Graal v4 IRC|Graal IRC Scripting: Troubleshooting Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/Output Methods|Output methods]]&lt;br /&gt;
* [[Creation/Dev/Using Classes Effectively|Use of classes]]&lt;br /&gt;
* [[Creation/Dev/GScript/Understanding GUI Profiles|GUI Features: Understanding GUI profiles]]&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|Constants]]&lt;br /&gt;
&lt;br /&gt;
'''Tutorials'''&lt;br /&gt;
* [[Creation/Dev/Creating Tabbed Window Panes|Creating Tabbed Window Panes]]&lt;br /&gt;
* [[Creation/Dev/Database_Communication|Indexed Database Communication]]&lt;br /&gt;
&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
&lt;br /&gt;
These are frequently updated, to get the latest list run Graal with the -listscriptfunctions option:&lt;br /&gt;
* [[Creation/Dev/Script/Clientside_Functions|Client side]]&lt;br /&gt;
* [[Creation/Dev/Script Functions: NPC Server|Server side]]&lt;br /&gt;
&lt;br /&gt;
[[Creation/Dev/Script/Index|Related Artices]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7207</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7207"/>
		<updated>2006-08-17T12:03:48Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;br /&gt;
* '''Event Functions''': These are functions that are called by the scripting engine automatically based on events happening. For example, one function may be called when a player touches the NPC, and another one might be called when a player enters the level. Note that these event functions are only called if you have written the instructions for them yourself. This will be explained in the Functions section.&lt;br /&gt;
&lt;br /&gt;
= Using GScript =&lt;br /&gt;
== Basic concepts ==&lt;br /&gt;
It is important to remember a couple of very basic, but very important concepts when using GScript.&lt;br /&gt;
* All statements (that is, function calls, writing to variables) '''must''' end in a semicolon (that's a ;). This simply tells the engine that the current statement has finished. You must remember to include it, or the engine will throw errors at you when it does not realise that you have finished a statement before it moves onto the next one.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
A function, like mentioned in the Glossary of Terms, is a defined block of instructions. Practically everything you do in GScript will rely on functions. First, let's look at how you can define a function.&lt;br /&gt;
&lt;br /&gt;
=== Defining a function ===&lt;br /&gt;
The syntax for defining a function is, in fact, very simple. Let's look at an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first thing to identify is the 'function' keyword. This tells the scripting engine that you're going to define a function. This is absolutely necessary in defining functions of any kind yourself.&lt;br /&gt;
&lt;br /&gt;
Second, you'll notice a name - 'myFunction'. This is the bit where you specify the name of the function that you're defining. This can be anything, providing that it doesn't contain strange symbols (usually an underscore '_' is the best suited symbol to split up function names with, since other symbols can cause errors).&lt;br /&gt;
&lt;br /&gt;
Thirdly, you'll see (). This is a convention that is later used for parameters, but for now, that's not important. Just stick () on the end of your name for now.&lt;br /&gt;
&lt;br /&gt;
Finally, you'll see { and }. These are braces, and define exactly what the function contains. Anything inside the braces is code that is specific to the function. If it's inside the braces for that function, it'll run when you call that function. Very simple.&lt;br /&gt;
&lt;br /&gt;
=== Function scopes ===&lt;br /&gt;
A fairly important concept is the idea of scopes. As demonstrated before, anything inside the { and } of a function means that it's a part of the function. Now, imagine that the entire script is like a hallway, and behind every door, is a function. When you walk into a room and close the door behind you, you are in a fairly closed space. This is true of functions.&lt;br /&gt;
&lt;br /&gt;
Some types of variable, when set inside a function, are placed in the function's 'local' scope. This simply means that the variable is available for use inside the function, but not outside of the function. The 'global' scope is where other types of variable are stored, for example, variables that need to be accessible in all functions. This will be explained further in the variables section.&lt;br /&gt;
&lt;br /&gt;
=== Calling a function ===&lt;br /&gt;
Now you've created your function, it's there to be used. Anywhere inside your script, you can call this function using the following method:&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the 'function' keyword is not present because we are not defining a function, we are just calling one. Now, the moment the scripting engine hits a function call, any code that you put inside of your function will run. Let's use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a very basic function that just sets the player's chat text. Let's call the function.&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suddenly, the player's chat will be set to &amp;quot;Hello!&amp;quot;. By calling the function, you've told the engine to run the code inside of that function - in this case, setting the player's chat.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Now, you've seen how functions work. The next very important part is using variables. As you have read in the glossary of terms, a variable is simply a sort of object that stores information.&lt;br /&gt;
&lt;br /&gt;
Variables have three important factors: name, type and value.&lt;br /&gt;
=== Name ===&lt;br /&gt;
Every variable must have a unique name. This is how you will access the value that is stored inside of the variable whenever you want to use it. &lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
Every variable also has a type. In GScript, there is a clever little system in place for variables called 'variants'. This sounds complicated, but is in fact also very simple. It simply means that the variable's type ''adjusts itself'' in order to suit the sort of data that it contains.&lt;br /&gt;
&lt;br /&gt;
For example, if you make the value of a variable &amp;quot;Hello!&amp;quot;, then the variable automatically becomes a string, and simply because you assigned it a value of a string. In GScript, all string values must be enclosed in &amp;quot;speechmarks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
What about a number? You don't even need to use speechmarks for numbers - you just type the number! Simple, no? When you do so, the variable automatically becomes either an integer or a float type in order to suit the number that you just put in it.&lt;br /&gt;
&lt;br /&gt;
=== Value ===&lt;br /&gt;
As already established, this is simply the information/data that the variable contains.&lt;br /&gt;
&lt;br /&gt;
=== Why variables are useful ===&lt;br /&gt;
Variables are incredibly useful for a number of reasons. They allow you to:&lt;br /&gt;
* Store a value that you plan to repeatedly use in your script. If you change the value of the variable, then the script uses the new value in every place the variable is used.&lt;br /&gt;
* Keep a value saved for when you want it later. If you take the player's chat text and want to save it, then you can use a variable.&lt;br /&gt;
* Manipulate a value. There are many predefined functions available in the scripting engine that will allow you to modify and use the value that is stored inside a variable; for example, mathematical operations.&lt;br /&gt;
&lt;br /&gt;
=== Setting a variable ===&lt;br /&gt;
Setting the value of a variable is ''even'' simpler than defining a function. Let's use an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
myVariable = 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looking at this, it's easy to see the logic here.&lt;br /&gt;
* First, the engine is taking the variable name - in this case, &amp;quot;myVariable&amp;quot;.&lt;br /&gt;
* Second, it is identifying the assignment operator (=). Simply, the engine has so far established that you want &amp;quot;myVariable&amp;quot; to equal something.&lt;br /&gt;
* Finally, it is taking the value that you want to set the variable's value to, and setting it.&lt;br /&gt;
&lt;br /&gt;
In our example, we initially set the variable &amp;quot;myVariable&amp;quot; to &amp;quot;Hello!&amp;quot;. This turns the variable automatically into a string. However! Immediately after, we have rewritten the value of &amp;quot;myVariable&amp;quot; with the number 3. Since there are no decimal places, the variable suddenly becomes an integer.&lt;br /&gt;
&lt;br /&gt;
=== Reading a variable ===&lt;br /&gt;
Any time you want to get a variable's value and use it, you simply write the name of the variable. This is best explained while using a Conditional Check.&lt;br /&gt;
&lt;br /&gt;
== Conditional Checks ==&lt;br /&gt;
For your script to even be remotely useful, you're going to have to check something somewhere. For example, if you want the script to only respond to a player saying &amp;quot;Foo&amp;quot;, then you're going to have to use a conditional check.&lt;br /&gt;
&lt;br /&gt;
There is another operator, called the comparison operator. It's two equals signs stuck together (==), and just instructs the engine to compare the two values. If the two values are the same, then it'll return TRUE. If they are different, it'll return FALSE.&lt;br /&gt;
&lt;br /&gt;
This is simple enough. Observe the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;excellent&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We've set the variable 'myVariable' to &amp;quot;excellent&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;excellent&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This time, we're checking to see if 'myVariable' equals &amp;quot;excellent&amp;quot;. Since it does, this statement will evaluate to be TRUE.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;fabulous&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're checking to see if 'myVariable' equals &amp;quot;fabulous&amp;quot;. It clearly doesn't, since we set it's value to &amp;quot;excellent&amp;quot; instead. As a result, this statement returns FALSE.&lt;br /&gt;
&lt;br /&gt;
=== Working with if () checks ===&lt;br /&gt;
Now, conditional checks alone are no good to you in a complex script. You'll need to actually use the result of your conditional checks to make a difference in what happens during the execution of the script.&lt;br /&gt;
&lt;br /&gt;
To do this, you use an 'if' statement. 'if' is a very simple operator (it doesn't get complicated yet!) that simply runs one thing if the statement you give it is true, and optionally runs another thing if it isn't.&lt;br /&gt;
&lt;br /&gt;
Since using examples so far has been the common way, let's see one here. We'll even include a bit of what you've learned already:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  myVariable = &amp;quot;excellent&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  if (myVariable == &amp;quot;excellent&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;Hooray! The values match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
    else&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;The values don't match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now. The first thing about an if statement is giving it something to check. The statement &amp;quot;myVariable ==&amp;quot; alone will return either one of two values - TRUE (1, one) or FALSE (0, zero).&lt;br /&gt;
&lt;br /&gt;
An if () statement by itself will only check if something is true. If not, it'll ignore it. If you put an else in, like in the above example, that code will be run in the case of a failure.&lt;br /&gt;
&lt;br /&gt;
=== Storing the result of a conditional check ===&lt;br /&gt;
Now, as previously mentioned, a comparison (==) will only produce either true or false. If you want to store the value of a conditional check for use later, then you can assign the result to a variable, instead of using it in an if () check now.&lt;br /&gt;
&amp;lt;pre&amp;gt;this.variable = (myVariable == &amp;quot;excellent&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... saves the result of the check into this.variable. So later, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;if (this.variable)&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
... to see if the check was successful. Similarly, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;if (!this.variable)&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
... to see if the check failed.&lt;br /&gt;
&lt;br /&gt;
== Manipulating data ==&lt;br /&gt;
=== Explanation ===&lt;br /&gt;
Data can be manipulated in various ways. For example, you can modify parts of a string. You can apply math functions to a number. This section explains those sorts of functions.&lt;br /&gt;
&lt;br /&gt;
=== Basic math ===&lt;br /&gt;
GScript allows you to perform basic operations like add, subtract, multiply, divide, etc. However, GScript does not use functions for this. Instead, it has a set of &amp;quot;operators&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Examine the following examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = 3 + 4; // addition (sets this.result to 7 in this case)&lt;br /&gt;
this.result = 3 - 4; // subtraction (sets this.result to -1 in this case)&lt;br /&gt;
this.result = 3 * 4; // multiplication (sets this.result to 12 in this case)&lt;br /&gt;
this.result = 3 / 4; // division (sets this.result to 0.75 in this case)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note how the operators are between two values: the value to start with, and then the value to operate with. The use of an operator returns a value in the same way as other comparisons, so let's take this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;if ((3 - 4) == -1)&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement evaluates to be true, because 3 - 4 does, in fact, equal -1.&lt;br /&gt;
&lt;br /&gt;
=== Priority order ===&lt;br /&gt;
If you're doing complex operations, it is important to ensure that your priority order is correct. In it's most basic mathematic form, the default order of operations is the following:&lt;br /&gt;
* B - Brackets&lt;br /&gt;
* O - Order&lt;br /&gt;
* D - Division&lt;br /&gt;
* M - Multiplication&lt;br /&gt;
* A - Addition&lt;br /&gt;
* S - Subtraction&lt;br /&gt;
That means that in a complex expression, multiplication takes priority order over addition, and that a part of the expression surrounded by brackets will always be calculated first.&lt;br /&gt;
&lt;br /&gt;
Brackets are very useful because it allows you to specify the order of operations. Consider this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = (3 * 4) / (2 * 3);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is calculated in this order:&lt;br /&gt;
* First, 3 is multiplied by 4:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = 12 / (2 * 3);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Second, 2 is multiplied by 3:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = 12 / 6;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Finally, 12 is divided by 6:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result == 2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slightly more complex operators ===&lt;br /&gt;
There are another set of operators which allow for basic math manipulation on a variable. These allow you to add and subtract to a number variable, without having to perform the expression yourself. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result += 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = this.result + 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result -= 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.result = this.result - 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The increment and decrement operators are as follows:&lt;br /&gt;
* += - add to&lt;br /&gt;
* -= - subtract to&lt;br /&gt;
* *= - multiply by&lt;br /&gt;
* /= - divide by&lt;br /&gt;
&lt;br /&gt;
Occasionally it is useful to just add or subtract one to a variable. There are operators to do this, too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var ++;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var = this.var + 1;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var --;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... is the same as doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;this.var = this.var - 1;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7196</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7196"/>
		<updated>2006-08-06T08:52:59Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &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 [[WikiPedia:Java_programming_language|Java]]. In some ways it is more dynamic, e.g. supporting dynamicly joining and leaving of classes, and brings support for easy management of online game content.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language ([[Creation/Dev/Old GScript|Old GScript]]) 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;
GScript can be discussed in the non-official [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
'''If you would like to contribute to the GraalBible's GScript documentation, you might want to [[Creation/Dev/GScript/Contribute|read this article]].'''&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;
'''Starting Guide'''&lt;br /&gt;
* [[Creation/Dev/Script/Starting Guide|Starting Guide]]&lt;br /&gt;
&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
(to get the latest list run Graal with the -listscriptfunctions option)&lt;br /&gt;
* [[Creation/Dev/Script/Client|Script Functions: Client]] [[Creation/Dev/Script/Clientside_Functions|(2)]] (including info on GUI controls)&lt;br /&gt;
* [[Creation/Dev/Script Functions: NPC Server|Script Functions: NPC Server]]&lt;br /&gt;
&lt;br /&gt;
'''IRC Functionality'''&lt;br /&gt;
* [[Creation/Dev/Graal v4 IRC|Graal IRC Scripting: Graal v4 IRC Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/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;
* [[Creation/Dev/GS1_To_GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Creation/Dev/Using Classes Effectively|GS2 Features: Effective ways to use classes]]&lt;br /&gt;
* [[Creation/Dev/Output Methods|GS2 Features: Output methods]]&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|GS2 Features: Constants]]&lt;br /&gt;
* [[Creation/Dev/GScript/Understanding GUI Profiles|GS2 GUI Features: Understanding GUI profiles]]&lt;br /&gt;
&lt;br /&gt;
'''Tutorials'''&lt;br /&gt;
* [[Creation/Dev/Creating Tabbed Window Panes|Creating Tabbed Window Panes]]&lt;br /&gt;
* [[Creation/Dev/Database_Communication|Indexed Database Communication]]&lt;br /&gt;
&lt;br /&gt;
'''Index of all script-related articles'''&lt;br /&gt;
* [[Creation/Dev/Script/Index|Index]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7195</id>
		<title>Creation/Dev/GScript</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript&amp;diff=7195"/>
		<updated>2006-08-06T08:52:32Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &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 [[WikiPedia:Java_programming_language|Java]]. In some ways it is more dynamic, e.g. supporting dynamicly joining and leaving of classes, and brings support for easy management of online game content.&lt;br /&gt;
&lt;br /&gt;
GScript started as a very limited language ([[Creation/Dev/Old GScript|Old GScript]]) 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;
GScript can be discussed in the non-official [[GScript IRC channel]].&lt;br /&gt;
&lt;br /&gt;
'''If you would like to contribute to the GraalBible's GScript documentation, you might want to [[Creation/Dev/GScript/Contribute|read this article]].'''&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;
'''Starting Guide'''&lt;br /&gt;
* [[Creation/Dev/Script/Starting Guide|Starting Guide]]&lt;br /&gt;
&lt;br /&gt;
'''Script Functions'''&lt;br /&gt;
(to get the latest list run Graal with the -listscriptfunctions option)&lt;br /&gt;
* [[Creation/Dev/Script/Client|Script Functions: Client]] [[Creation/Dev/Script/Clientside_Functions|(2)]] (including info on GUI controls)&lt;br /&gt;
* [[Creation/Dev/Script Functions: NPC Server|Script Functions: NPC Server]]&lt;br /&gt;
&lt;br /&gt;
'''IRC Functionality'''&lt;br /&gt;
* [[Creation/Dev/Graal v4 IRC|Graal IRC Scripting: Graal v4 IRC Scripting Reference]]&lt;br /&gt;
* [[Creation/Dev/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;
* [[Creation/Dev/GS1_To_GS2|GS1 To GS2: Guide for fixing scripts to work with the new engine]]&lt;br /&gt;
* [[Creation/Dev/Using Classes Effectively|GS2 Features: Effective ways to use classes]]&lt;br /&gt;
* [[Creation/Dev/Output Methods|GS2 Features: Output methods]]&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|GS2 Features: Constants]]&lt;br /&gt;
* [[Creation/Dev/GScript/Understanding_GUI_Profiles:GS2 GUI Features: Understanding GUI profiles]]&lt;br /&gt;
&lt;br /&gt;
'''Tutorials'''&lt;br /&gt;
* [[Creation/Dev/Creating Tabbed Window Panes|Creating Tabbed Window Panes]]&lt;br /&gt;
* [[Creation/Dev/Database_Communication|Indexed Database Communication]]&lt;br /&gt;
&lt;br /&gt;
'''Index of all script-related articles'''&lt;br /&gt;
* [[Creation/Dev/Script/Index|Index]]&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/Understanding_GUI_Profiles&amp;diff=7194</id>
		<title>Creation/Dev/GScript/Understanding GUI Profiles</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/Understanding_GUI_Profiles&amp;diff=7194"/>
		<updated>2006-08-06T08:51:34Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
GUI profiles are a set of characteristics that define how a GUI control looks. By default when you create a GUI control, it will be using the default profile for the control type; for example, &amp;quot;GuiButtonControl&amp;quot; by default uses &amp;quot;GuiButtonProfile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This profile tells the program that this button needs to be red with a golden border and have orange text. It can define various things such as font face, size, colour, background colour, borders, images, etc.&lt;br /&gt;
&lt;br /&gt;
A GUI profile is created in a similar way to a GUI control itself.&lt;br /&gt;
&amp;lt;pre&amp;gt;new GuiControlProfile(&amp;quot;ProfileName&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  attr = value;&lt;br /&gt;
  attr = value;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can then be applied to a control like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;new GuiControl(&amp;quot;ControlName&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  profile = &amp;quot;ProfileName&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The control will then be formatted as is directed by the GUI profile.&lt;br /&gt;
&lt;br /&gt;
An example profile looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;new GuiControlProfile(&amp;quot;MyProfile&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  fillColor = {255, 0, 0};&lt;br /&gt;
  fontColor = {255, 255, 255};&lt;br /&gt;
&lt;br /&gt;
  bitmap = &amp;quot;myEvilImage.png&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  opaque = false;&lt;br /&gt;
  transparency = 0.5;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Available Attributes ==&lt;br /&gt;
Here are the attributes that you can set in a GUI profile.&lt;br /&gt;
&amp;lt;pre&amp;gt;GuiControlProfile (TGraalVar):&lt;br /&gt;
align - string - controls justification of text&lt;br /&gt;
autosizeheight - boolean&lt;br /&gt;
autosizewidth - boolean&lt;br /&gt;
bitmap - string - the image map to be used with the control&lt;br /&gt;
border - integer - border setting&lt;br /&gt;
bordercolor - string - colour of the border&lt;br /&gt;
bordercolorhl - string&lt;br /&gt;
bordercolorna - string&lt;br /&gt;
borderthickness - integer - thickness of the border&lt;br /&gt;
cankeyfocus - boolean&lt;br /&gt;
cursorcolor - string - colour of the cursor for editable text controls&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 - size of the font to be used&lt;br /&gt;
fontstyle - string - font attribute (bold, italics, underline, ...)&lt;br /&gt;
fonttype - string - name of the font to be used&lt;br /&gt;
justify - string - the same like &amp;quot;align&amp;quot;; controls justification of text&lt;br /&gt;
linespacing - integer - adjusts line spacing for multi-line controls&lt;br /&gt;
modal - boolean&lt;br /&gt;
mouseoverselected - boolean&lt;br /&gt;
numbersonly - boolean&lt;br /&gt;
opaque - boolean - controls whether the object is transparent or opaque&lt;br /&gt;
returntab - boolean&lt;br /&gt;
soundbuttondown - string - sound to play when the control is active&lt;br /&gt;
soundbuttonover - string - sound to play when the control is rolled over&lt;br /&gt;
tab - boolean&lt;br /&gt;
textoffset - string - controls how far offset the text is from the top-left of the control&lt;br /&gt;
transparency - float - controls the transparency of the control&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Editing control-specific profile information ==&lt;br /&gt;
You can also edit the profile attributes of a single control. This is using the &amp;quot;profile&amp;quot; object of each GUI control.&lt;br /&gt;
&lt;br /&gt;
The profile object contains members exactly the same as a normal GUI profile (i.e. &amp;quot;transparency&amp;quot; =&amp;gt; &amp;quot;controlname.profile.transparency&amp;quot;. This provides a way to edit the profile.&lt;br /&gt;
&lt;br /&gt;
However! You must be careful. A variable, &amp;quot;useOwnProfile&amp;quot;, plays an important role here. useOwnProfile tells the control not to share any changes made to the profile.&lt;br /&gt;
&lt;br /&gt;
For example, if you did the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;profile = &amp;quot;MyProfile&amp;quot;;&lt;br /&gt;
profile.transparency = 1;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... then every control using the profile &amp;quot;MyProfile&amp;quot; would set transparency to 1.&lt;br /&gt;
&lt;br /&gt;
useOwnProfile stops this happening:&lt;br /&gt;
&amp;lt;pre&amp;gt;profile = &amp;quot;MyProfile&amp;quot;;&lt;br /&gt;
useOwnProfile = true;&lt;br /&gt;
profile.transparency = 1;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... causes only the current control to have transparency set to 1.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Graal_IRC&amp;diff=7193</id>
		<title>Creation/Dev/Graal IRC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Graal_IRC&amp;diff=7193"/>
		<updated>2006-08-05T10:30:26Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Working With Messages Specifically */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by [[User:Skyld|Skyld]], 26/07/2005. Edits made by [[User:Stefan|Stefan]] since. Hooray for [[User:Stefan|Stefan]]!&lt;br /&gt;
= IRC Information =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Graal 4 comes with a built-in form of IRC to allow people to chat between servers in rooms. Like IRC. But not, if you get my point. Now, there are ways in which you can use this IRC system to your advantage. Perhaps you want to script some kind of client for your players to use, or perhaps you want to script some kind of bot. Either way, the communication is simple.&lt;br /&gt;
&lt;br /&gt;
=== Links===&lt;br /&gt;
* [http://forums.graalonline.com/forums/showthread.php?t=60809 Graal v4 IRC Problem Information Thread]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting Graal v4 IRC|Troubleshooting Graal v4 IRC]]&lt;br /&gt;
&lt;br /&gt;
== Logging In ==&lt;br /&gt;
To use the IRC, you just need to have basic knowledge of sendtext() and onReceiveText(). The fundamentals are that you have three parameters for each outgoing and incoming message. If you have used onReceiveText() before, you are likely to know &lt;br /&gt;
it has a structure like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&amp;lt;/pre&amp;gt;&lt;br /&gt;
The texttype will always equal &amp;quot;irc&amp;quot; if it is an IRC command. This helps to filter out unwanted commands from, say, the scripted RC. The textoptions will always equal the command that you've sent, and the textlines will equal any parameters necessary for that command. &lt;br /&gt;
&lt;br /&gt;
An important thing to note is that the IRC server will not throw any errors at you if you make a mistake with a command, so you should ensure throughly that your requests are correct. &lt;br /&gt;
&lt;br /&gt;
You send requests like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;command&amp;quot;, &amp;quot;params&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Like any other IRC server, you need to log in before you can use it. &lt;br /&gt;
This is quite simply done. From your NPC, use the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;login&amp;quot;, &amp;quot;nickname&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The nickname behaviour is different on the serverside. If you are logging in from the serverside, your nickname MUST begin with Graal, EventsBot or IRCBot. If you do not provide a valid nickname, then a suitable name (like IRCBot_2) will be automatically assigned and your nickname ignored. &lt;br /&gt;
Now, with any luck, you will have been logged in successfully!&amp;lt;br&amp;gt;&lt;br /&gt;
'''NOTE2:''' There is also the command requesttext(texttype,textoption), but it is not used for irc communication since most irc commands require additional data.&lt;br /&gt;
&lt;br /&gt;
== Joining a Channel ==&lt;br /&gt;
Now, you could probably get away with not joining a channel if you felt it necessary, but that would make communicating with you hard. So, why not join a channel? Joining and leaving channels is much like, again, in normal IRC. You sendtext(&amp;quot;irc&amp;quot;, &amp;quot;join&amp;quot;, &amp;quot;#channame&amp;quot;) to join a channel, and you sendtext(&amp;quot;irc&amp;quot;, &amp;quot;part&amp;quot;, &amp;quot;#channame&amp;quot;) to leave one. &lt;br /&gt;
&lt;br /&gt;
You can be in multiple channels, however, if you are writing a bot, you should probably make sure that you are always replying to the correct channel. I suppose the same applies to if you are writing a client - make sure you are sending to the right channel! &lt;br /&gt;
&lt;br /&gt;
== Receiving Information ==&lt;br /&gt;
Information from the IRC server comes to you in the form of onReceiveText(),providing you have logged into the server first. So, you will want to make sure that your script is receiving the information, or you might as well talk to a nice stone. I am not sure that it will help you, however. &lt;br /&gt;
&lt;br /&gt;
Now, earlier in the document, I said about the onReceiveText structure. &lt;br /&gt;
Just for reference, it looks like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&amp;lt;/pre&amp;gt;&lt;br /&gt;
To ensure that you are only receiving information from the IRC server, you should put an if check to check that the texttype is always &amp;quot;irc&amp;quot;: &lt;br /&gt;
&amp;lt;pre&amp;gt;if (texttype == &amp;quot;irc&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
 // Let's do this if we get IRC data&lt;br /&gt;
} &lt;br /&gt;
  else&lt;br /&gt;
{&lt;br /&gt;
  echo(&amp;quot;I am receiving non-IRC data!&amp;quot;);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTE:''' Commands like &amp;quot;privmsg&amp;quot; will be broadcasted to the whole channel, and will be sent back to you in the process. &amp;quot;join&amp;quot; and &amp;quot;part&amp;quot; are also sent to you to confirm that you have joined a channel, but can also be used for kicking.&lt;br /&gt;
&lt;br /&gt;
The textoptions will equal the command type, such as &amp;quot;join&amp;quot;, &amp;quot;part&amp;quot; or whatever. &lt;br /&gt;
&lt;br /&gt;
So, you will want next to check what kind of information is being sent to you: &lt;br /&gt;
&amp;lt;pre&amp;gt;if (textoptions == &amp;quot;join&amp;quot;) echo(&amp;quot;You joined the channel successfully!&amp;quot;);&lt;br /&gt;
if (textoptions == &amp;quot;part&amp;quot;) echo(&amp;quot;You left successfully&amp;quot;);&lt;br /&gt;
if (textoptions == &amp;quot;privmsg&amp;quot;) echo(&amp;quot;Message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;quot;privmsg&amp;quot; differs here - it contains messages from anyone, not just yourself. I'll explain about &amp;quot;privmsg&amp;quot; in a second. To know who is joining or leaving your channel you need to handle the &amp;quot;addchanneluser&amp;quot; and &amp;quot;deletechanneluser&amp;quot; types.&lt;br /&gt;
&lt;br /&gt;
You may also receive information of the &amp;quot;notice&amp;quot; or &amp;quot;topic&amp;quot; types. These aren't so important yet and will be explained later.&lt;br /&gt;
&lt;br /&gt;
== Working With Messages Specifically ==&lt;br /&gt;
The type you will most likely be interested in receiving is the &amp;quot;privmsg&amp;quot; command. This is the most complicated, as if it isn't used correctly, you'll end up no further forward then you were at the beginning of this section. &lt;br /&gt;
* When you send a &amp;quot;privmsg&amp;quot;, you send the destination and the message.&lt;br /&gt;
* When you receive a &amp;quot;privmsg&amp;quot;, you receive the source, destination and message.&lt;br /&gt;
&lt;br /&gt;
So, let's assume that you've joined the channel #test. If you want to send a message to #test, you would use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;#test&amp;quot;, &amp;quot;THIS IS MY MESSAGE&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sensible idea would be to create a function that makes that mildly less tedious, so let's use this for example: &lt;br /&gt;
&amp;lt;pre&amp;gt;function send(dest, msg)&lt;br /&gt;
{&lt;br /&gt;
  sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {dest, msg});&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, you can just use send(&amp;quot;#test&amp;quot;, &amp;quot;lolmsg&amp;quot;); to send a message to a channel or user. &lt;br /&gt;
&lt;br /&gt;
However! Like I said before with &amp;quot;privmsg&amp;quot;, what you get back will not be the same! &lt;br /&gt;
&lt;br /&gt;
Instead of receiving {&amp;quot;destination&amp;quot;,&amp;quot;message&amp;quot;}, you will get {&amp;quot;source&amp;quot;,&amp;quot;destination&amp;quot;,&amp;quot;message&amp;quot;}, where source is the nickname that you logged in with. This allows you to find out who sent a message in the case that you are writing a client script, or for using people's names as an identity, say, with a bot. &lt;br /&gt;
&lt;br /&gt;
So, what about parsing an incoming privmsg? &lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&lt;br /&gt;
{&lt;br /&gt;
 if (texttype == &amp;quot;irc&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
   if (textoptions == &amp;quot;privmsg&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     // Do some stuff here&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the function, you can read who sent the message with textlines[0], where it was directed to with textlines[1] (say, #test) and the actual message with textlines[2].&lt;br /&gt;
&lt;br /&gt;
== Logging Out ==&lt;br /&gt;
If you are writing a client, or a bot that might have a reason to log out of the IRC server, you send a &amp;quot;logout&amp;quot; command like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;logout&amp;quot;, &amp;quot;&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTE:''' The third parameter is ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Other IRC Commands ==&lt;br /&gt;
There are a couple of other IRC commands, such as ''TOPIC'' and ''NOTICE''. &lt;br /&gt;
&lt;br /&gt;
=== topic (Channel Topic) ===&lt;br /&gt;
''TOPIC'' commands are used to set the topic of a channel. This might be useful for you if you are writing a client, and simply uses this format: &lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;topic&amp;quot;, {&amp;quot;#channel&amp;quot;, &amp;quot;Topic goes here&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should also receive any ''TOPIC'' commands in the same format.&lt;br /&gt;
&lt;br /&gt;
=== notice (Notices) ===&lt;br /&gt;
''NOTICE'' is similar to ''PRIVMSG'', but is considered less important, and while ''PRIVMSG'' to a single player is automatically converted into a regular [[PM]], ''NOTICE'' is not, and can so be used for sending information back to the user. The events bot is using ''NOTICE'' commands for event management.&lt;br /&gt;
&lt;br /&gt;
=== addchanneluser (Channel Join Notifications) ===&lt;br /&gt;
''ADDCHANNELUSER'' is received when a new user joins a channel. The received data contains the channel name, irc nick, [[Server|Graal server]] and account name of the new user.&lt;br /&gt;
&lt;br /&gt;
=== deletechanneluser (Channel Part Notifications) ===&lt;br /&gt;
''DELETECHANNELUSER'' is received when a user leaves a channel. Only the channel name and the irc nick of the leaving user are received.&lt;br /&gt;
&lt;br /&gt;
== Multiple bots on one machine ==&lt;br /&gt;
It is possible to have more than one irc bot per machine - on the client you need to use two different weapon scripts which both login to the irc, on serverside you must use two independent database npcs or weapon scripts which both login to the irc and possibly use different nicknames.&lt;br /&gt;
&lt;br /&gt;
= Extra Information =&lt;br /&gt;
== Events Bots ==&lt;br /&gt;
For making it possible that events from your [[server]] are displayed on the global events list of [[Graal4]], the server needs to have an '''EventsBot'''. That is an irc bot with a name starting with EventsBot. That [[NPC|npc]] or weapon npc automatically gets information about when events should be started. It needs to login to the irc and then wait for instructions using '''onReceiveText'''. If there is no EventsBot for the server, then events will not work for it. The EventsBot also needs to send some information to the IRCBot about who is [[Events Team|Events Admin]] on the server, and which channel should be used for talking about the events. That must be done as answer to a &amp;quot;!eventsbotlogin&amp;quot; message from the IRC Bot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function onCreated() doConnect();&lt;br /&gt;
function onInitialized() doConnect();&lt;br /&gt;
function onServerListerConnect() doConnect();&lt;br /&gt;
&lt;br /&gt;
function doConnect()&lt;br /&gt;
{&lt;br /&gt;
  sendtext(&amp;quot;irc&amp;quot;, &amp;quot;login&amp;quot;, &amp;quot;EventsBot&amp;quot;);&lt;br /&gt;
  sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;IRCBot&amp;quot;, &amp;quot;!resetevents&amp;quot;});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function onReceiveText(texttype,textoption,textlines)&lt;br /&gt;
{&lt;br /&gt;
  if (texttype == &amp;quot;irc&amp;quot; &amp;amp;&amp;amp; textoption == &amp;quot;privmsg&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
  textlines[0] == &amp;quot;IRCBot&amp;quot; &amp;amp;&amp;amp; textlines[2] == &amp;quot;!eventsbotlogin&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;IRCBot&amp;quot;, {&amp;quot;!eventadmins&amp;quot;, &amp;quot;AccountName&amp;quot;, &amp;quot;AccountName2&amp;quot;}});&lt;br /&gt;
    sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;IRCBot&amp;quot;, {&amp;quot;!eventchannel&amp;quot;, &amp;quot;#ChannelName&amp;quot;}});&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EventsBot will also need to start events on the server, and tell the IRCbot about the status of the events.&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
Here are some quick reference notes.&lt;br /&gt;
&lt;br /&gt;
=== Outgoing data ===&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, command, parameters)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Format:&lt;br /&gt;
* '''command:''' ''parameters'' - description&lt;br /&gt;
Outgoing data:&lt;br /&gt;
* '''login:''' ''name'' - Connects to the IRC using name as the connection's nickname&lt;br /&gt;
* '''logout:''' ''&amp;quot;&amp;quot;'' - Disconnects from the IRC&lt;br /&gt;
* '''privmsg:''' ''{destination, message}'' - Sends a message to a channel or user&lt;br /&gt;
* '''notice:''' ''{destination, message}'' - Sends a &amp;quot;notice&amp;quot; message to a channel or user&lt;br /&gt;
* '''join:''' ''channelname'' - Join channelname&lt;br /&gt;
* '''part:''' ''channelname'' - Leave channelname&lt;br /&gt;
* '''topic:''' ''{channel, topic}'' - Set the topic for the channel&lt;br /&gt;
&lt;br /&gt;
=== Incoming data ===&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Format:&lt;br /&gt;
* '''textoptions:''' ''textlines'' - description&lt;br /&gt;
Note:&lt;br /&gt;
''The texttype will always be &amp;quot;irc&amp;quot; when information is sent from the IRC server.''&lt;br /&gt;
Incoming data:&lt;br /&gt;
* '''privmsg:''' ''{source, destination, message}'' - Sends the ''source'' of a message, where the message was directed to (''destination'') and the message&lt;br /&gt;
* '''notice:''' ''{source, destination, message}'' - Sends the ''source'' of a notice, where the notice was directed to (''destination'') and the notice&lt;br /&gt;
* '''addchanneluser:''' ''{channel, name, (servername), (account)}'' - Mechanism used to alert IRC scripts when users have joined the current channel, and lists users in the channel upon join. Shows the ''channel'' that ''name'' joined.&lt;br /&gt;
* '''deletechanneluser:''' ''{channel, name}'' - Mechanism used to alert IRC scripts when users have left the current channel&lt;br /&gt;
* '''join:''' ''{channel}'' - Mechanism used to confirm that you have joined ''channel''&lt;br /&gt;
* '''part:''' ''{channel}'' - Mechanism used to confirm that you have left ''channel''&lt;br /&gt;
&lt;br /&gt;
=== Nickname Rules ===&lt;br /&gt;
If you are connecting from the serverside, you must start your nickname with one of the following:&lt;br /&gt;
* IRCBot_&lt;br /&gt;
* EventsBot_&lt;br /&gt;
* Graal_&lt;br /&gt;
If an invalid nickname is provided from the serverside, you will automatically be assigned with an IRCBot_'''n''' nickname.&lt;br /&gt;
&lt;br /&gt;
Nicknames should not contain spaces.&lt;br /&gt;
&lt;br /&gt;
== IRCBots for Old Scripting ==&lt;br /&gt;
It is now possible for servers using the old scripting engine to do IRCBots using the commands sendtext, requesttext, and the &amp;quot;if (receivetext)&amp;quot; event. A script example for a simple EventsBot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (created || initialized || serverlisterconnect) {&lt;br /&gt;
  doConnect();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function doConnect() {&lt;br /&gt;
  sendtext irc,logout,;&lt;br /&gt;
  sendtext irc,login,EventsBot_OldScript;&lt;br /&gt;
  setstring this.options,;&lt;br /&gt;
  addstring this.options,IRCBot;&lt;br /&gt;
  addstring this.options,!resetevents;&lt;br /&gt;
  sendtext irc,privmsg,#s(this.options);&lt;br /&gt;
  sendtext irc,join,#OldScriptTest;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (receivetext) {&lt;br /&gt;
  sendtonc irc: #p(0) - #p(1) - #p(2) - #p(3) - #p(4) - #p(5) - #p(6) - #p(7);&lt;br /&gt;
  if (strequals(#p(0),irc) &amp;amp;&amp;amp; strequals(#p(1),privmsg) &amp;amp;&amp;amp;&lt;br /&gt;
      strequals(#p(2),IRCBot)) {&lt;br /&gt;
    if (strequals(#p(4),!eventsbotlogin)) {&lt;br /&gt;
      setstring this.options,;&lt;br /&gt;
      addstring this.options,IRCBot;&lt;br /&gt;
        setstring this.options2,;&lt;br /&gt;
        addstring this.options2,!eventadmins;&lt;br /&gt;
        addstring this.options2,Stefan;&lt;br /&gt;
        addstring this.options2,Spark910;&lt;br /&gt;
      addstring this.options,#s(this.options2);&lt;br /&gt;
      sendtext irc,privmsg,#s(this.options);&lt;br /&gt;
&lt;br /&gt;
      setstring this.options,;&lt;br /&gt;
      addstring this.options,IRCBot;&lt;br /&gt;
        setstring this.options2,;&lt;br /&gt;
        addstring this.options2,!eventchannel;&lt;br /&gt;
        addstring this.options2,#OldScriptTest;&lt;br /&gt;
      addstring this.options,#s(this.options2);&lt;br /&gt;
      sendtext irc,privmsg,#s(this.options);&lt;br /&gt;
    } else if (strequals(#p(4),!startevent)) {&lt;br /&gt;
    } else if (strequals(#p(4),!resetevent)) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to add a few script lines to the Control-NPC because in old scripting only the Control-NPC gets an event if the serverlister (=irc server) is reconnecting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (serverlisterconnect) {&lt;br /&gt;
  with (getnpc(EventsBot)) {&lt;br /&gt;
    // Forwarding the event to the Events Bot&lt;br /&gt;
    callnpc -1,serverlisterconnect;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Graal_IRC&amp;diff=7192</id>
		<title>Creation/Dev/Graal IRC</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Graal_IRC&amp;diff=7192"/>
		<updated>2006-08-05T10:29:04Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Receiving Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by [[User:Skyld|Skyld]], 26/07/2005. Edits made by [[User:Stefan|Stefan]] since. Hooray for [[User:Stefan|Stefan]]!&lt;br /&gt;
= IRC Information =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Graal 4 comes with a built-in form of IRC to allow people to chat between servers in rooms. Like IRC. But not, if you get my point. Now, there are ways in which you can use this IRC system to your advantage. Perhaps you want to script some kind of client for your players to use, or perhaps you want to script some kind of bot. Either way, the communication is simple.&lt;br /&gt;
&lt;br /&gt;
=== Links===&lt;br /&gt;
* [http://forums.graalonline.com/forums/showthread.php?t=60809 Graal v4 IRC Problem Information Thread]&lt;br /&gt;
* [[Creation/Dev/Troubleshooting Graal v4 IRC|Troubleshooting Graal v4 IRC]]&lt;br /&gt;
&lt;br /&gt;
== Logging In ==&lt;br /&gt;
To use the IRC, you just need to have basic knowledge of sendtext() and onReceiveText(). The fundamentals are that you have three parameters for each outgoing and incoming message. If you have used onReceiveText() before, you are likely to know &lt;br /&gt;
it has a structure like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&amp;lt;/pre&amp;gt;&lt;br /&gt;
The texttype will always equal &amp;quot;irc&amp;quot; if it is an IRC command. This helps to filter out unwanted commands from, say, the scripted RC. The textoptions will always equal the command that you've sent, and the textlines will equal any parameters necessary for that command. &lt;br /&gt;
&lt;br /&gt;
An important thing to note is that the IRC server will not throw any errors at you if you make a mistake with a command, so you should ensure throughly that your requests are correct. &lt;br /&gt;
&lt;br /&gt;
You send requests like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;command&amp;quot;, &amp;quot;params&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Like any other IRC server, you need to log in before you can use it. &lt;br /&gt;
This is quite simply done. From your NPC, use the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;login&amp;quot;, &amp;quot;nickname&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The nickname behaviour is different on the serverside. If you are logging in from the serverside, your nickname MUST begin with Graal, EventsBot or IRCBot. If you do not provide a valid nickname, then a suitable name (like IRCBot_2) will be automatically assigned and your nickname ignored. &lt;br /&gt;
Now, with any luck, you will have been logged in successfully!&amp;lt;br&amp;gt;&lt;br /&gt;
'''NOTE2:''' There is also the command requesttext(texttype,textoption), but it is not used for irc communication since most irc commands require additional data.&lt;br /&gt;
&lt;br /&gt;
== Joining a Channel ==&lt;br /&gt;
Now, you could probably get away with not joining a channel if you felt it necessary, but that would make communicating with you hard. So, why not join a channel? Joining and leaving channels is much like, again, in normal IRC. You sendtext(&amp;quot;irc&amp;quot;, &amp;quot;join&amp;quot;, &amp;quot;#channame&amp;quot;) to join a channel, and you sendtext(&amp;quot;irc&amp;quot;, &amp;quot;part&amp;quot;, &amp;quot;#channame&amp;quot;) to leave one. &lt;br /&gt;
&lt;br /&gt;
You can be in multiple channels, however, if you are writing a bot, you should probably make sure that you are always replying to the correct channel. I suppose the same applies to if you are writing a client - make sure you are sending to the right channel! &lt;br /&gt;
&lt;br /&gt;
== Receiving Information ==&lt;br /&gt;
Information from the IRC server comes to you in the form of onReceiveText(),providing you have logged into the server first. So, you will want to make sure that your script is receiving the information, or you might as well talk to a nice stone. I am not sure that it will help you, however. &lt;br /&gt;
&lt;br /&gt;
Now, earlier in the document, I said about the onReceiveText structure. &lt;br /&gt;
Just for reference, it looks like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&amp;lt;/pre&amp;gt;&lt;br /&gt;
To ensure that you are only receiving information from the IRC server, you should put an if check to check that the texttype is always &amp;quot;irc&amp;quot;: &lt;br /&gt;
&amp;lt;pre&amp;gt;if (texttype == &amp;quot;irc&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
 // Let's do this if we get IRC data&lt;br /&gt;
} &lt;br /&gt;
  else&lt;br /&gt;
{&lt;br /&gt;
  echo(&amp;quot;I am receiving non-IRC data!&amp;quot;);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTE:''' Commands like &amp;quot;privmsg&amp;quot; will be broadcasted to the whole channel, and will be sent back to you in the process. &amp;quot;join&amp;quot; and &amp;quot;part&amp;quot; are also sent to you to confirm that you have joined a channel, but can also be used for kicking.&lt;br /&gt;
&lt;br /&gt;
The textoptions will equal the command type, such as &amp;quot;join&amp;quot;, &amp;quot;part&amp;quot; or whatever. &lt;br /&gt;
&lt;br /&gt;
So, you will want next to check what kind of information is being sent to you: &lt;br /&gt;
&amp;lt;pre&amp;gt;if (textoptions == &amp;quot;join&amp;quot;) echo(&amp;quot;You joined the channel successfully!&amp;quot;);&lt;br /&gt;
if (textoptions == &amp;quot;part&amp;quot;) echo(&amp;quot;You left successfully&amp;quot;);&lt;br /&gt;
if (textoptions == &amp;quot;privmsg&amp;quot;) echo(&amp;quot;Message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;quot;privmsg&amp;quot; differs here - it contains messages from anyone, not just yourself. I'll explain about &amp;quot;privmsg&amp;quot; in a second. To know who is joining or leaving your channel you need to handle the &amp;quot;addchanneluser&amp;quot; and &amp;quot;deletechanneluser&amp;quot; types.&lt;br /&gt;
&lt;br /&gt;
You may also receive information of the &amp;quot;notice&amp;quot; or &amp;quot;topic&amp;quot; types. These aren't so important yet and will be explained later.&lt;br /&gt;
&lt;br /&gt;
== Working With Messages Specifically ==&lt;br /&gt;
The type you will most likely be interested in receiving is the &amp;quot;privmsg&amp;quot; command. This is the most complicated, as if it isn't used correctly, you'll end up no further forward then you were at the beginning of this section. &lt;br /&gt;
* When you send a &amp;quot;privmsg&amp;quot;, you send the destination and the message.&lt;br /&gt;
* When you receive a &amp;quot;privmsg&amp;quot;, you receive the source, destination and message.&lt;br /&gt;
&lt;br /&gt;
So, let's assume that you've joined the channel #test. If you want to send a message to #test, you would use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;#test&amp;quot;, &amp;quot;THIS IS MY MESSAGE&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sensible idea would be to create a function that makes that mildly less tedious, so let's use this for example: &lt;br /&gt;
&amp;lt;pre&amp;gt;function send(dest, msg) &lt;br /&gt;
  sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {dest, msg});&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, you can just use send(&amp;quot;#test&amp;quot;, &amp;quot;lolmsg&amp;quot;); to send a message to a channel or user. &lt;br /&gt;
&lt;br /&gt;
However! Like I said before with &amp;quot;privmsg&amp;quot;, what you get back will not be the same! &lt;br /&gt;
&lt;br /&gt;
Instead of receiving {&amp;quot;destination&amp;quot;,&amp;quot;message&amp;quot;}, you will get {&amp;quot;source&amp;quot;,&amp;quot;destination&amp;quot;,&amp;quot;message&amp;quot;}, where source is the nickname that you logged in with. This allows you to find out who sent a message in the case that you are writing a client script, or for using people's names as an identity, say, with a bot. &lt;br /&gt;
&lt;br /&gt;
So, what about parsing an incoming privmsg? &lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&lt;br /&gt;
{&lt;br /&gt;
 if (texttype == &amp;quot;irc&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
   if (textoptions == &amp;quot;privmsg&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     // Do some stuff here&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the function, you can read who sent the message with textlines[0], where it was directed to with textlines[1] (say, #test) and the actual message with textlines[2].&lt;br /&gt;
&lt;br /&gt;
== Logging Out ==&lt;br /&gt;
If you are writing a client, or a bot that might have a reason to log out of the IRC server, you send a &amp;quot;logout&amp;quot; command like this: &lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;logout&amp;quot;, &amp;quot;&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTE:''' The third parameter is ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Other IRC Commands ==&lt;br /&gt;
There are a couple of other IRC commands, such as ''TOPIC'' and ''NOTICE''. &lt;br /&gt;
&lt;br /&gt;
=== topic (Channel Topic) ===&lt;br /&gt;
''TOPIC'' commands are used to set the topic of a channel. This might be useful for you if you are writing a client, and simply uses this format: &lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, &amp;quot;topic&amp;quot;, {&amp;quot;#channel&amp;quot;, &amp;quot;Topic goes here&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should also receive any ''TOPIC'' commands in the same format.&lt;br /&gt;
&lt;br /&gt;
=== notice (Notices) ===&lt;br /&gt;
''NOTICE'' is similar to ''PRIVMSG'', but is considered less important, and while ''PRIVMSG'' to a single player is automatically converted into a regular [[PM]], ''NOTICE'' is not, and can so be used for sending information back to the user. The events bot is using ''NOTICE'' commands for event management.&lt;br /&gt;
&lt;br /&gt;
=== addchanneluser (Channel Join Notifications) ===&lt;br /&gt;
''ADDCHANNELUSER'' is received when a new user joins a channel. The received data contains the channel name, irc nick, [[Server|Graal server]] and account name of the new user.&lt;br /&gt;
&lt;br /&gt;
=== deletechanneluser (Channel Part Notifications) ===&lt;br /&gt;
''DELETECHANNELUSER'' is received when a user leaves a channel. Only the channel name and the irc nick of the leaving user are received.&lt;br /&gt;
&lt;br /&gt;
== Multiple bots on one machine ==&lt;br /&gt;
It is possible to have more than one irc bot per machine - on the client you need to use two different weapon scripts which both login to the irc, on serverside you must use two independent database npcs or weapon scripts which both login to the irc and possibly use different nicknames.&lt;br /&gt;
&lt;br /&gt;
= Extra Information =&lt;br /&gt;
== Events Bots ==&lt;br /&gt;
For making it possible that events from your [[server]] are displayed on the global events list of [[Graal4]], the server needs to have an '''EventsBot'''. That is an irc bot with a name starting with EventsBot. That [[NPC|npc]] or weapon npc automatically gets information about when events should be started. It needs to login to the irc and then wait for instructions using '''onReceiveText'''. If there is no EventsBot for the server, then events will not work for it. The EventsBot also needs to send some information to the IRCBot about who is [[Events Team|Events Admin]] on the server, and which channel should be used for talking about the events. That must be done as answer to a &amp;quot;!eventsbotlogin&amp;quot; message from the IRC Bot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function onCreated() doConnect();&lt;br /&gt;
function onInitialized() doConnect();&lt;br /&gt;
function onServerListerConnect() doConnect();&lt;br /&gt;
&lt;br /&gt;
function doConnect()&lt;br /&gt;
{&lt;br /&gt;
  sendtext(&amp;quot;irc&amp;quot;, &amp;quot;login&amp;quot;, &amp;quot;EventsBot&amp;quot;);&lt;br /&gt;
  sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;IRCBot&amp;quot;, &amp;quot;!resetevents&amp;quot;});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function onReceiveText(texttype,textoption,textlines)&lt;br /&gt;
{&lt;br /&gt;
  if (texttype == &amp;quot;irc&amp;quot; &amp;amp;&amp;amp; textoption == &amp;quot;privmsg&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
  textlines[0] == &amp;quot;IRCBot&amp;quot; &amp;amp;&amp;amp; textlines[2] == &amp;quot;!eventsbotlogin&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;IRCBot&amp;quot;, {&amp;quot;!eventadmins&amp;quot;, &amp;quot;AccountName&amp;quot;, &amp;quot;AccountName2&amp;quot;}});&lt;br /&gt;
    sendtext(&amp;quot;irc&amp;quot;, &amp;quot;privmsg&amp;quot;, {&amp;quot;IRCBot&amp;quot;, {&amp;quot;!eventchannel&amp;quot;, &amp;quot;#ChannelName&amp;quot;}});&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EventsBot will also need to start events on the server, and tell the IRCbot about the status of the events.&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
Here are some quick reference notes.&lt;br /&gt;
&lt;br /&gt;
=== Outgoing data ===&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtext(&amp;quot;irc&amp;quot;, command, parameters)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Format:&lt;br /&gt;
* '''command:''' ''parameters'' - description&lt;br /&gt;
Outgoing data:&lt;br /&gt;
* '''login:''' ''name'' - Connects to the IRC using name as the connection's nickname&lt;br /&gt;
* '''logout:''' ''&amp;quot;&amp;quot;'' - Disconnects from the IRC&lt;br /&gt;
* '''privmsg:''' ''{destination, message}'' - Sends a message to a channel or user&lt;br /&gt;
* '''notice:''' ''{destination, message}'' - Sends a &amp;quot;notice&amp;quot; message to a channel or user&lt;br /&gt;
* '''join:''' ''channelname'' - Join channelname&lt;br /&gt;
* '''part:''' ''channelname'' - Leave channelname&lt;br /&gt;
* '''topic:''' ''{channel, topic}'' - Set the topic for the channel&lt;br /&gt;
&lt;br /&gt;
=== Incoming data ===&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;function onReceiveText(texttype, textoptions, textlines)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Format:&lt;br /&gt;
* '''textoptions:''' ''textlines'' - description&lt;br /&gt;
Note:&lt;br /&gt;
''The texttype will always be &amp;quot;irc&amp;quot; when information is sent from the IRC server.''&lt;br /&gt;
Incoming data:&lt;br /&gt;
* '''privmsg:''' ''{source, destination, message}'' - Sends the ''source'' of a message, where the message was directed to (''destination'') and the message&lt;br /&gt;
* '''notice:''' ''{source, destination, message}'' - Sends the ''source'' of a notice, where the notice was directed to (''destination'') and the notice&lt;br /&gt;
* '''addchanneluser:''' ''{channel, name, (servername), (account)}'' - Mechanism used to alert IRC scripts when users have joined the current channel, and lists users in the channel upon join. Shows the ''channel'' that ''name'' joined.&lt;br /&gt;
* '''deletechanneluser:''' ''{channel, name}'' - Mechanism used to alert IRC scripts when users have left the current channel&lt;br /&gt;
* '''join:''' ''{channel}'' - Mechanism used to confirm that you have joined ''channel''&lt;br /&gt;
* '''part:''' ''{channel}'' - Mechanism used to confirm that you have left ''channel''&lt;br /&gt;
&lt;br /&gt;
=== Nickname Rules ===&lt;br /&gt;
If you are connecting from the serverside, you must start your nickname with one of the following:&lt;br /&gt;
* IRCBot_&lt;br /&gt;
* EventsBot_&lt;br /&gt;
* Graal_&lt;br /&gt;
If an invalid nickname is provided from the serverside, you will automatically be assigned with an IRCBot_'''n''' nickname.&lt;br /&gt;
&lt;br /&gt;
Nicknames should not contain spaces.&lt;br /&gt;
&lt;br /&gt;
== IRCBots for Old Scripting ==&lt;br /&gt;
It is now possible for servers using the old scripting engine to do IRCBots using the commands sendtext, requesttext, and the &amp;quot;if (receivetext)&amp;quot; event. A script example for a simple EventsBot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (created || initialized || serverlisterconnect) {&lt;br /&gt;
  doConnect();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function doConnect() {&lt;br /&gt;
  sendtext irc,logout,;&lt;br /&gt;
  sendtext irc,login,EventsBot_OldScript;&lt;br /&gt;
  setstring this.options,;&lt;br /&gt;
  addstring this.options,IRCBot;&lt;br /&gt;
  addstring this.options,!resetevents;&lt;br /&gt;
  sendtext irc,privmsg,#s(this.options);&lt;br /&gt;
  sendtext irc,join,#OldScriptTest;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (receivetext) {&lt;br /&gt;
  sendtonc irc: #p(0) - #p(1) - #p(2) - #p(3) - #p(4) - #p(5) - #p(6) - #p(7);&lt;br /&gt;
  if (strequals(#p(0),irc) &amp;amp;&amp;amp; strequals(#p(1),privmsg) &amp;amp;&amp;amp;&lt;br /&gt;
      strequals(#p(2),IRCBot)) {&lt;br /&gt;
    if (strequals(#p(4),!eventsbotlogin)) {&lt;br /&gt;
      setstring this.options,;&lt;br /&gt;
      addstring this.options,IRCBot;&lt;br /&gt;
        setstring this.options2,;&lt;br /&gt;
        addstring this.options2,!eventadmins;&lt;br /&gt;
        addstring this.options2,Stefan;&lt;br /&gt;
        addstring this.options2,Spark910;&lt;br /&gt;
      addstring this.options,#s(this.options2);&lt;br /&gt;
      sendtext irc,privmsg,#s(this.options);&lt;br /&gt;
&lt;br /&gt;
      setstring this.options,;&lt;br /&gt;
      addstring this.options,IRCBot;&lt;br /&gt;
        setstring this.options2,;&lt;br /&gt;
        addstring this.options2,!eventchannel;&lt;br /&gt;
        addstring this.options2,#OldScriptTest;&lt;br /&gt;
      addstring this.options,#s(this.options2);&lt;br /&gt;
      sendtext irc,privmsg,#s(this.options);&lt;br /&gt;
    } else if (strequals(#p(4),!startevent)) {&lt;br /&gt;
    } else if (strequals(#p(4),!resetevent)) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to add a few script lines to the Control-NPC because in old scripting only the Control-NPC gets an event if the serverlister (=irc server) is reconnecting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (serverlisterconnect) {&lt;br /&gt;
  with (getnpc(EventsBot)) {&lt;br /&gt;
    // Forwarding the event to the Events Bot&lt;br /&gt;
    callnpc -1,serverlisterconnect;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7117</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7117"/>
		<updated>2006-06-26T20:21:03Z</updated>

		<summary type="html">&lt;p&gt;Skyld: /* Working with if () checks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;br /&gt;
* '''Event Functions''': These are functions that are called by the scripting engine automatically based on events happening. For example, one function may be called when a player touches the NPC, and another one might be called when a player enters the level. Note that these event functions are only called if you have written the instructions for them yourself. This will be explained in the Functions section.&lt;br /&gt;
&lt;br /&gt;
= Using GScript =&lt;br /&gt;
== Basic concepts ==&lt;br /&gt;
It is important to remember a couple of very basic, but very important concepts when using GScript.&lt;br /&gt;
* All statements (that is, function calls, writing to variables) '''must''' end in a semicolon (that's a ;). This simply tells the engine that the current statement has finished. You must remember to include it, or the engine will throw errors at you when it does not realise that you have finished a statement before it moves onto the next one.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
A function, like mentioned in the Glossary of Terms, is a defined block of instructions. Practically everything you do in GScript will rely on functions. First, let's look at how you can define a function.&lt;br /&gt;
&lt;br /&gt;
=== Defining a function ===&lt;br /&gt;
The syntax for defining a function is, in fact, very simple. Let's look at an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first thing to identify is the 'function' keyword. This tells the scripting engine that you're going to define a function. This is absolutely necessary in defining functions of any kind yourself.&lt;br /&gt;
&lt;br /&gt;
Second, you'll notice a name - 'myFunction'. This is the bit where you specify the name of the function that you're defining. This can be anything, providing that it doesn't contain strange symbols (usually an underscore '_' is the best suited symbol to split up function names with, since other symbols can cause errors).&lt;br /&gt;
&lt;br /&gt;
Thirdly, you'll see (). This is a convention that is later used for parameters, but for now, that's not important. Just stick () on the end of your name for now.&lt;br /&gt;
&lt;br /&gt;
Finally, you'll see { and }. These are braces, and define exactly what the function contains. Anything inside the braces is code that is specific to the function. If it's inside the braces for that function, it'll run when you call that function. Very simple.&lt;br /&gt;
&lt;br /&gt;
=== Function scopes ===&lt;br /&gt;
A fairly important concept is the idea of scopes. As demonstrated before, anything inside the { and } of a function means that it's a part of the function. Now, imagine that the entire script is like a hallway, and behind every door, is a function. When you walk into a room and close the door behind you, you are in a fairly closed space. This is true of functions.&lt;br /&gt;
&lt;br /&gt;
Some types of variable, when set inside a function, are placed in the function's 'local' scope. This simply means that the variable is available for use inside the function, but not outside of the function. The 'global' scope is where other types of variable are stored, for example, variables that need to be accessible in all functions. This will be explained further in the variables section.&lt;br /&gt;
&lt;br /&gt;
=== Calling a function ===&lt;br /&gt;
Now you've created your function, it's there to be used. Anywhere inside your script, you can call this function using the following method:&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the 'function' keyword is not present because we are not defining a function, we are just calling one. Now, the moment the scripting engine hits a function call, any code that you put inside of your function will run. Let's use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a very basic function that just sets the player's chat text. Let's call the function.&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suddenly, the player's chat will be set to &amp;quot;Hello!&amp;quot;. By calling the function, you've told the engine to run the code inside of that function - in this case, setting the player's chat.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Now, you've seen how functions work. The next very important part is using variables. As you have read in the glossary of terms, a variable is simply a sort of object that stores information.&lt;br /&gt;
&lt;br /&gt;
Variables have three important factors: name, type and value.&lt;br /&gt;
=== Name ===&lt;br /&gt;
Every variable must have a unique name. This is how you will access the value that is stored inside of the variable whenever you want to use it. &lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
Every variable also has a type. In GScript, there is a clever little system in place for variables called 'variants'. This sounds complicated, but is in fact also very simple. It simply means that the variable's type ''adjusts itself'' in order to suit the sort of data that it contains.&lt;br /&gt;
&lt;br /&gt;
For example, if you make the value of a variable &amp;quot;Hello!&amp;quot;, then the variable automatically becomes a string, and simply because you assigned it a value of a string. In GScript, all string values must be enclosed in &amp;quot;speechmarks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
What about a number? You don't even need to use speechmarks for numbers - you just type the number! Simple, no? When you do so, the variable automatically becomes either an integer or a float type in order to suit the number that you just put in it.&lt;br /&gt;
&lt;br /&gt;
=== Value ===&lt;br /&gt;
As already established, this is simply the information/data that the variable contains.&lt;br /&gt;
&lt;br /&gt;
=== Why variables are useful ===&lt;br /&gt;
Variables are incredibly useful for a number of reasons. They allow you to:&lt;br /&gt;
* Store a value that you plan to repeatedly use in your script. If you change the value of the variable, then the script uses the new value in every place the variable is used.&lt;br /&gt;
* Keep a value saved for when you want it later. If you take the player's chat text and want to save it, then you can use a variable.&lt;br /&gt;
* Manipulate a value. There are many predefined functions available in the scripting engine that will allow you to modify and use the value that is stored inside a variable; for example, mathematical operations.&lt;br /&gt;
&lt;br /&gt;
=== Setting a variable ===&lt;br /&gt;
Setting the value of a variable is ''even'' simpler than defining a function. Let's use an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
myVariable = 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looking at this, it's easy to see the logic here.&lt;br /&gt;
* First, the engine is taking the variable name - in this case, &amp;quot;myVariable&amp;quot;.&lt;br /&gt;
* Second, it is identifying the assignment operator (=). Simply, the engine has so far established that you want &amp;quot;myVariable&amp;quot; to equal something.&lt;br /&gt;
* Finally, it is taking the value that you want to set the variable's value to, and setting it.&lt;br /&gt;
&lt;br /&gt;
In our example, we initially set the variable &amp;quot;myVariable&amp;quot; to &amp;quot;Hello!&amp;quot;. This turns the variable automatically into a string. However! Immediately after, we have rewritten the value of &amp;quot;myVariable&amp;quot; with the number 3. Since there are no decimal places, the variable suddenly becomes an integer.&lt;br /&gt;
&lt;br /&gt;
=== Reading a variable ===&lt;br /&gt;
Any time you want to get a variable's value and use it, you simply write the name of the variable. This is best explained while using a Conditional Check.&lt;br /&gt;
&lt;br /&gt;
== Conditional Checks ==&lt;br /&gt;
For your script to even be remotely useful, you're going to have to check something somewhere. For example, if you want the script to only respond to a player saying &amp;quot;Foo&amp;quot;, then you're going to have to use a conditional check.&lt;br /&gt;
&lt;br /&gt;
There is another operator, called the comparison operator. It's two equals signs stuck together (==), and just instructs the engine to compare the two values. If the two values are the same, then it'll return TRUE. If they are different, it'll return FALSE.&lt;br /&gt;
&lt;br /&gt;
This is simple enough. Observe the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;excellent&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We've set the variable 'myVariable' to &amp;quot;excellent&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;excellent&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This time, we're checking to see if 'myVariable' equals &amp;quot;excellent&amp;quot;. Since it does, this statement will evaluate to be TRUE.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;fabulous&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're checking to see if 'myVariable' equals &amp;quot;fabulous&amp;quot;. It clearly doesn't, since we set it's value to &amp;quot;excellent&amp;quot; instead. As a result, this statement returns FALSE.&lt;br /&gt;
&lt;br /&gt;
=== Working with if () checks ===&lt;br /&gt;
Now, conditional checks alone are no good to you in a complex script. You'll need to actually use the result of your conditional checks to make a difference in what happens during the execution of the script.&lt;br /&gt;
&lt;br /&gt;
To do this, you use an 'if' statement. 'if' is a very simple operator (it doesn't get complicated yet!) that simply runs one thing if the statement you give it is true, and optionally runs another thing if it isn't.&lt;br /&gt;
&lt;br /&gt;
Since using examples so far has been the common way, let's see one here. We'll even include a bit of what you've learned already:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  myVariable = &amp;quot;excellent&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  if (myVariable == &amp;quot;excellent&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;Hooray! The values match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
    else&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;The values don't match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now. The first thing about an if statement is giving it something to check. The statement &amp;quot;myVariable ==&amp;quot; alone will return either one of two values - TRUE (1, one) or FALSE (0, zero).&lt;br /&gt;
&lt;br /&gt;
An if () statement by itself will only check if something is true. If not, it'll ignore it. If you put an else in, like in the above example, that code will be run in the case of a failure.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7065</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7065"/>
		<updated>2006-06-15T16:39:10Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;br /&gt;
* '''Event Functions''': These are functions that are called by the scripting engine automatically based on events happening. For example, one function may be called when a player touches the NPC, and another one might be called when a player enters the level. Note that these event functions are only called if you have written the instructions for them yourself. This will be explained in the Functions section.&lt;br /&gt;
&lt;br /&gt;
= Using GScript =&lt;br /&gt;
== Basic concepts ==&lt;br /&gt;
It is important to remember a couple of very basic, but very important concepts when using GScript.&lt;br /&gt;
* All statements (that is, function calls, writing to variables) '''must''' end in a semicolon (that's a ;). This simply tells the engine that the current statement has finished. You must remember to include it, or the engine will throw errors at you when it does not realise that you have finished a statement before it moves onto the next one.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
A function, like mentioned in the Glossary of Terms, is a defined block of instructions. Practically everything you do in GScript will rely on functions. First, let's look at how you can define a function.&lt;br /&gt;
&lt;br /&gt;
=== Defining a function ===&lt;br /&gt;
The syntax for defining a function is, in fact, very simple. Let's look at an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first thing to identify is the 'function' keyword. This tells the scripting engine that you're going to define a function. This is absolutely necessary in defining functions of any kind yourself.&lt;br /&gt;
&lt;br /&gt;
Second, you'll notice a name - 'myFunction'. This is the bit where you specify the name of the function that you're defining. This can be anything, providing that it doesn't contain strange symbols (usually an underscore '_' is the best suited symbol to split up function names with, since other symbols can cause errors).&lt;br /&gt;
&lt;br /&gt;
Thirdly, you'll see (). This is a convention that is later used for parameters, but for now, that's not important. Just stick () on the end of your name for now.&lt;br /&gt;
&lt;br /&gt;
Finally, you'll see { and }. These are braces, and define exactly what the function contains. Anything inside the braces is code that is specific to the function. If it's inside the braces for that function, it'll run when you call that function. Very simple.&lt;br /&gt;
&lt;br /&gt;
=== Function scopes ===&lt;br /&gt;
A fairly important concept is the idea of scopes. As demonstrated before, anything inside the { and } of a function means that it's a part of the function. Now, imagine that the entire script is like a hallway, and behind every door, is a function. When you walk into a room and close the door behind you, you are in a fairly closed space. This is true of functions.&lt;br /&gt;
&lt;br /&gt;
Some types of variable, when set inside a function, are placed in the function's 'local' scope. This simply means that the variable is available for use inside the function, but not outside of the function. The 'global' scope is where other types of variable are stored, for example, variables that need to be accessible in all functions. This will be explained further in the variables section.&lt;br /&gt;
&lt;br /&gt;
=== Calling a function ===&lt;br /&gt;
Now you've created your function, it's there to be used. Anywhere inside your script, you can call this function using the following method:&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the 'function' keyword is not present because we are not defining a function, we are just calling one. Now, the moment the scripting engine hits a function call, any code that you put inside of your function will run. Let's use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a very basic function that just sets the player's chat text. Let's call the function.&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suddenly, the player's chat will be set to &amp;quot;Hello!&amp;quot;. By calling the function, you've told the engine to run the code inside of that function - in this case, setting the player's chat.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Now, you've seen how functions work. The next very important part is using variables. As you have read in the glossary of terms, a variable is simply a sort of object that stores information.&lt;br /&gt;
&lt;br /&gt;
Variables have three important factors: name, type and value.&lt;br /&gt;
=== Name ===&lt;br /&gt;
Every variable must have a unique name. This is how you will access the value that is stored inside of the variable whenever you want to use it. &lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
Every variable also has a type. In GScript, there is a clever little system in place for variables called 'variants'. This sounds complicated, but is in fact also very simple. It simply means that the variable's type ''adjusts itself'' in order to suit the sort of data that it contains.&lt;br /&gt;
&lt;br /&gt;
For example, if you make the value of a variable &amp;quot;Hello!&amp;quot;, then the variable automatically becomes a string, and simply because you assigned it a value of a string. In GScript, all string values must be enclosed in &amp;quot;speechmarks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
What about a number? You don't even need to use speechmarks for numbers - you just type the number! Simple, no? When you do so, the variable automatically becomes either an integer or a float type in order to suit the number that you just put in it.&lt;br /&gt;
&lt;br /&gt;
=== Value ===&lt;br /&gt;
As already established, this is simply the information/data that the variable contains.&lt;br /&gt;
&lt;br /&gt;
=== Why variables are useful ===&lt;br /&gt;
Variables are incredibly useful for a number of reasons. They allow you to:&lt;br /&gt;
* Store a value that you plan to repeatedly use in your script. If you change the value of the variable, then the script uses the new value in every place the variable is used.&lt;br /&gt;
* Keep a value saved for when you want it later. If you take the player's chat text and want to save it, then you can use a variable.&lt;br /&gt;
* Manipulate a value. There are many predefined functions available in the scripting engine that will allow you to modify and use the value that is stored inside a variable; for example, mathematical operations.&lt;br /&gt;
&lt;br /&gt;
=== Setting a variable ===&lt;br /&gt;
Setting the value of a variable is ''even'' simpler than defining a function. Let's use an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
myVariable = 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looking at this, it's easy to see the logic here.&lt;br /&gt;
* First, the engine is taking the variable name - in this case, &amp;quot;myVariable&amp;quot;.&lt;br /&gt;
* Second, it is identifying the assignment operator (=). Simply, the engine has so far established that you want &amp;quot;myVariable&amp;quot; to equal something.&lt;br /&gt;
* Finally, it is taking the value that you want to set the variable's value to, and setting it.&lt;br /&gt;
&lt;br /&gt;
In our example, we initially set the variable &amp;quot;myVariable&amp;quot; to &amp;quot;Hello!&amp;quot;. This turns the variable automatically into a string. However! Immediately after, we have rewritten the value of &amp;quot;myVariable&amp;quot; with the number 3. Since there are no decimal places, the variable suddenly becomes an integer.&lt;br /&gt;
&lt;br /&gt;
=== Reading a variable ===&lt;br /&gt;
Any time you want to get a variable's value and use it, you simply write the name of the variable. This is best explained while using a Conditional Check.&lt;br /&gt;
&lt;br /&gt;
== Conditional Checks ==&lt;br /&gt;
For your script to even be remotely useful, you're going to have to check something somewhere. For example, if you want the script to only respond to a player saying &amp;quot;Foo&amp;quot;, then you're going to have to use a conditional check.&lt;br /&gt;
&lt;br /&gt;
There is another operator, called the comparison operator. It's two equals signs stuck together (==), and just instructs the engine to compare the two values. If the two values are the same, then it'll return TRUE. If they are different, it'll return FALSE.&lt;br /&gt;
&lt;br /&gt;
This is simple enough. Observe the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;excellent&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We've set the variable 'myVariable' to &amp;quot;excellent&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;excellent&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This time, we're checking to see if 'myVariable' equals &amp;quot;excellent&amp;quot;. Since it does, this statement will evaluate to be TRUE.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;fabulous&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're checking to see if 'myVariable' equals &amp;quot;fabulous&amp;quot;. It clearly doesn't, since we set it's value to &amp;quot;excellent&amp;quot; instead. As a result, this statement returns FALSE.&lt;br /&gt;
&lt;br /&gt;
=== Working with if () checks ===&lt;br /&gt;
Now, conditional checks alone are no good to you in a complex script. You'll need to actually use the conditional checks to make a difference in what happens.&lt;br /&gt;
&lt;br /&gt;
To do this, you use an 'if' check'. 'if' is a very simple operator (it doesn't get complicated yet!) that simply runs one thing if the statement you give it is true, and optionally runs another thing if it isn't.&lt;br /&gt;
&lt;br /&gt;
Since using examples so far has been the common way, let's see one here. We'll even include a bit of what you've learned already:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  myVariable = &amp;quot;excellent&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  if (myVariable == &amp;quot;excellent&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;Hooray! The values match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
    else&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;The values don't match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now. The first thing about an if statement is giving it something to check. The statement &amp;quot;myVariable ==&amp;quot; alone will return either one of two values - TRUE (1, one) or FALSE (0, zero).&lt;br /&gt;
&lt;br /&gt;
An if () statement by itself will only check if something is true. If not, it'll ignore it. If you put an else in, like in the above example, that code will be run in the case of a failure.&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7064</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7064"/>
		<updated>2006-06-15T15:46:48Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;br /&gt;
* '''Event Functions''': These are functions that are called by the scripting engine automatically based on events happening. For example, one function may be called when a player touches the NPC, and another one might be called when a player enters the level. Note that these event functions are only called if you have written the instructions for them yourself. This will be explained in the Functions section.&lt;br /&gt;
&lt;br /&gt;
= Using GScript =&lt;br /&gt;
== Basic concepts ==&lt;br /&gt;
It is important to remember a couple of very basic, but very important concepts when using GScript.&lt;br /&gt;
* All statements (that is, function calls, writing to variables) '''must''' end in a semicolon (that's a ;). This simply tells the engine that the current statement has finished. You must remember to include it, or the engine will throw errors at you when it does not realise that you have finished a statement before it moves onto the next one.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
A function, like mentioned in the Glossary of Terms, is a defined block of instructions. Practically everything you do in GScript will rely on functions. First, let's look at how you can define a function.&lt;br /&gt;
&lt;br /&gt;
=== Defining a function ===&lt;br /&gt;
The syntax for defining a function is, in fact, very simple. Let's look at an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first thing to identify is the 'function' keyword. This tells the scripting engine that you're going to define a function. This is absolutely necessary in defining functions of any kind yourself.&lt;br /&gt;
&lt;br /&gt;
Second, you'll notice a name - 'myFunction'. This is the bit where you specify the name of the function that you're defining. This can be anything, providing that it doesn't contain strange symbols (usually an underscore '_' is the best suited symbol to split up function names with, since other symbols can cause errors).&lt;br /&gt;
&lt;br /&gt;
Thirdly, you'll see (). This is a convention that is later used for parameters, but for now, that's not important. Just stick () on the end of your name for now.&lt;br /&gt;
&lt;br /&gt;
Finally, you'll see { and }. These are braces, and define exactly what the function contains. Anything inside the braces is code that is specific to the function. If it's inside the braces for that function, it'll run when you call that function. Very simple.&lt;br /&gt;
&lt;br /&gt;
=== Function scopes ===&lt;br /&gt;
A fairly important concept is the idea of scopes. As demonstrated before, anything inside the { and } of a function means that it's a part of the function. Now, imagine that the entire script is like a hallway, and behind every door, is a function. When you walk into a room and close the door behind you, you are in a fairly closed space. This is true of functions.&lt;br /&gt;
&lt;br /&gt;
Some types of variable, when set inside a function, are placed in the function's 'local' scope. This simply means that the variable is available for use inside the function, but not outside of the function. The 'global' scope is where other types of variable are stored, for example, variables that need to be accessible in all functions. This will be explained further in the variables section.&lt;br /&gt;
&lt;br /&gt;
=== Calling a function ===&lt;br /&gt;
Now you've created your function, it's there to be used. Anywhere inside your script, you can call this function using the following method:&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the 'function' keyword is not present because we are not defining a function, we are just calling one. Now, the moment the scripting engine hits a function call, any code that you put inside of your function will run. Let's use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a very basic function that just sets the player's chat text. Let's call the function.&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suddenly, the player's chat will be set to &amp;quot;Hello!&amp;quot;. By calling the function, you've told the engine to run the code inside of that function - in this case, setting the player's chat.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Now, you've seen how functions work. The next very important part is using variables. As you have read in the glossary of terms, a variable is simply a sort of object that stores information.&lt;br /&gt;
&lt;br /&gt;
Variables have three important factors: name, type and value.&lt;br /&gt;
=== Name ===&lt;br /&gt;
Every variable must have a unique name. This is how you will access the value that is stored inside of the variable whenever you want to use it. &lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
Every variable also has a type. In GScript, there is a clever little system in place for variables called 'variants'. This sounds complicated, but is in fact also very simple. It simply means that the variable's type ''adjusts itself'' in order to suit the sort of data that it contains.&lt;br /&gt;
&lt;br /&gt;
For example, if you make the value of a variable &amp;quot;Hello!&amp;quot;, then the variable automatically becomes a string, and simply because you assigned it a value of a string. In GScript, all string values must be enclosed in &amp;quot;speechmarks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
What about a number? You don't even need to use speechmarks for numbers - you just type the number! Simple, no? When you do so, the variable automatically becomes either an integer or a float type in order to suit the number that you just put in it.&lt;br /&gt;
&lt;br /&gt;
=== Value ===&lt;br /&gt;
As already established, this is simply the information/data that the variable contains.&lt;br /&gt;
&lt;br /&gt;
=== Why variables are useful ===&lt;br /&gt;
Variables are incredibly useful for a number of reasons. They allow you to:&lt;br /&gt;
* Store a value that you plan to repeatedly use in your script. If you change the value of the variable, then the script uses the new value in every place the variable is used.&lt;br /&gt;
* Keep a value saved for when you want it later. If you take the player's chat text and want to save it, then you can use a variable.&lt;br /&gt;
* Manipulate a value. There are many predefined functions available in the scripting engine that will allow you to modify and use the value that is stored inside a variable; for example, mathematical operations.&lt;br /&gt;
&lt;br /&gt;
=== Setting a variable ===&lt;br /&gt;
Setting the value of a variable is ''even'' simpler than defining a function. Let's use an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
myVariable = 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looking at this, it's easy to see the logic here.&lt;br /&gt;
* First, the engine is taking the variable name - in this case, &amp;quot;myVariable&amp;quot;.&lt;br /&gt;
* Second, it is identifying the assignment operator (=). Simply, the engine has so far established that you want &amp;quot;myVariable&amp;quot; to equal something.&lt;br /&gt;
* Finally, it is taking the value that you want to set the variable's value to, and setting it.&lt;br /&gt;
&lt;br /&gt;
In our example, we initially set the variable &amp;quot;myVariable&amp;quot; to &amp;quot;Hello!&amp;quot;. This turns the variable automatically into a string. However! Immediately after, we have rewritten the value of &amp;quot;myVariable&amp;quot; with the number 3. Since there are no decimal places, the variable suddenly becomes an integer.&lt;br /&gt;
&lt;br /&gt;
=== Reading a variable ===&lt;br /&gt;
Any time you want to get a variable's value and use it, you simply write the name of the variable. This is best explained while using a Conditional Check.&lt;br /&gt;
&lt;br /&gt;
== Conditional Checks ==&lt;br /&gt;
For your script to even be remotely useful, you're going to have to check something somewhere. For example, if you want the script to only respond to a player saying &amp;quot;Foo&amp;quot;, then you're going to have to use a conditional check.&lt;br /&gt;
&lt;br /&gt;
There is another operator, called the comparison operator. It's two equals signs stuck together (==), and just instructs the engine to compare the two values. If the two values are the same, then it'll return TRUE. If they are different, it'll return FALSE.&lt;br /&gt;
&lt;br /&gt;
This is simple enough. Observe the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;excellent&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
We've set the variable 'myVariable' to &amp;quot;excellent&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;excellent&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This time, we're checking to see if 'myVariable' equals &amp;quot;excellent&amp;quot;. Since it does, this statement will evaluate to be TRUE.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable == &amp;quot;fabulous&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're checking to see if 'myVariable' equals &amp;quot;fabulous&amp;quot;. It clearly doesn't, since we set it's value to &amp;quot;excellent&amp;quot; instead. As a result, this statement returns FALSE.&lt;br /&gt;
&lt;br /&gt;
=== Working with if () checks ===&lt;br /&gt;
Now, conditional checks alone are no good to you in a complex script. You'll need to actually use the conditional checks to make a difference in what happens.&lt;br /&gt;
&lt;br /&gt;
To do this, you use an 'if' check'. 'if' is a very simple operator (it doesn't get complicated yet!) that simply runs one thing if the statement you give it is true, and optionally runs another thing if it isn't.&lt;br /&gt;
&lt;br /&gt;
Since using examples so far has been the common way, let's see one here. We'll even include a bit of what you've learned already:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  myVariable = &amp;quot;excellent&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  if (myVariable == &amp;quot;excellent&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;Hooray! The values match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
    else&lt;br /&gt;
  {&lt;br /&gt;
    player.chat = &amp;quot;The values don't match.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now. The first thing about an if statement is giving it something to check. The statement &amp;quot;myVariable ==&amp;quot; alone will return either one of two values - TRUE (1, one) or FALSE (0, zero).&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7063</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7063"/>
		<updated>2006-06-15T15:39:56Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;br /&gt;
* '''Event Functions''': These are functions that are called by the scripting engine automatically based on events happening. For example, one function may be called when a player touches the NPC, and another one might be called when a player enters the level. Note that these event functions are only called if you have written the instructions for them yourself. This will be explained in the Functions section.&lt;br /&gt;
&lt;br /&gt;
= Using GScript =&lt;br /&gt;
== Basic concepts ==&lt;br /&gt;
It is important to remember a couple of very basic, but very important concepts when using GScript.&lt;br /&gt;
* All statements (that is, function calls, writing to variables) '''must''' end in a semicolon (that's a ;). This simply tells the engine that the current statement has finished. You must remember to include it, or the engine will throw errors at you when it does not realise that you have finished a statement before it moves onto the next one.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
A function, like mentioned in the Glossary of Terms, is a defined block of instructions. Practically everything you do in GScript will rely on functions. First, let's look at how you can define a function.&lt;br /&gt;
&lt;br /&gt;
=== Defining a function ===&lt;br /&gt;
The syntax for defining a function is, in fact, very simple. Let's look at an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  // code&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first thing to identify is the 'function' keyword. This tells the scripting engine that you're going to define a function. This is absolutely necessary in defining functions of any kind yourself.&lt;br /&gt;
&lt;br /&gt;
Second, you'll notice a name - 'myFunction'. This is the bit where you specify the name of the function that you're defining. This can be anything, providing that it doesn't contain strange symbols (usually an underscore '_' is the best suited symbol to split up function names with, since other symbols can cause errors).&lt;br /&gt;
&lt;br /&gt;
Thirdly, you'll see (). This is a convention that is later used for parameters, but for now, that's not important. Just stick () on the end of your name for now.&lt;br /&gt;
&lt;br /&gt;
Finally, you'll see { and }. These are braces, and define exactly what the function contains. Anything inside the braces is code that is specific to the function. If it's inside the braces for that function, it'll run when you call that function. Very simple.&lt;br /&gt;
&lt;br /&gt;
=== Function scopes ===&lt;br /&gt;
A fairly important concept is the idea of scopes. As demonstrated before, anything inside the { and } of a function means that it's a part of the function. Now, imagine that the entire script is like a hallway, and behind every door, is a function. When you walk into a room and close the door behind you, you are in a fairly closed space. This is true of functions.&lt;br /&gt;
&lt;br /&gt;
Some types of variable, when set inside a function, are placed in the function's 'local' scope. This simply means that the variable is available for use inside the function, but not outside of the function. The 'global' scope is where other types of variable are stored, for example, variables that need to be accessible in all functions. This will be explained further in the variables section.&lt;br /&gt;
&lt;br /&gt;
=== Calling a function ===&lt;br /&gt;
Now you've created your function, it's there to be used. Anywhere inside your script, you can call this function using the following method:&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the 'function' keyword is not present because we are not defining a function, we are just calling one. Now, the moment the scripting engine hits a function call, any code that you put inside of your function will run. Let's use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;function myFunction()&lt;br /&gt;
{&lt;br /&gt;
  player.chat = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a very basic function that just sets the player's chat text. Let's call the function.&lt;br /&gt;
&amp;lt;pre&amp;gt;myFunction();&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suddenly, the player's chat will be set to &amp;quot;Hello!&amp;quot;. By calling the function, you've told the engine to run the code inside of that function - in this case, setting the player's chat.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Now, you've seen how functions work. The next very important part is using variables. As you have read in the glossary of terms, a variable is simply a sort of object that stores information.&lt;br /&gt;
&lt;br /&gt;
Variables have three important factors: name, type and value.&lt;br /&gt;
=== Name ===&lt;br /&gt;
Every variable must have a unique name. This is how you will access the value that is stored inside of the variable whenever you want to use it. &lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
Every variable also has a type. In GScript, there is a clever little system in place for variables called 'variants'. This sounds complicated, but is in fact also very simple. It simply means that the variable's type ''adjusts itself'' in order to suit the sort of data that it contains.&lt;br /&gt;
&lt;br /&gt;
For example, if you make the value of a variable &amp;quot;Hello!&amp;quot;, then the variable automatically becomes a string, and simply because you assigned it a value of a string. In GScript, all string values must be enclosed in &amp;quot;speechmarks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
What about a number? You don't even need to use speechmarks for numbers - you just type the number! Simple, no? When you do so, the variable automatically becomes either an integer or a float type in order to suit the number that you just put in it.&lt;br /&gt;
&lt;br /&gt;
=== Value ===&lt;br /&gt;
As already established, this is simply the information/data that the variable contains.&lt;br /&gt;
&lt;br /&gt;
=== Why variables are useful ===&lt;br /&gt;
Variables are incredibly useful for a number of reasons. They allow you to:&lt;br /&gt;
* Store a value that you plan to repeatedly use in your script. If you change the value of the variable, then the script uses the new value in every place the variable is used.&lt;br /&gt;
* Keep a value saved for when you want it later. If you take the player's chat text and want to save it, then you can use a variable.&lt;br /&gt;
* Manipulate a value. There are many predefined functions available in the scripting engine that will allow you to modify and use the value that is stored inside a variable; for example, mathematical operations.&lt;br /&gt;
&lt;br /&gt;
=== Setting a variable ===&lt;br /&gt;
Setting the value of a variable is ''even'' simpler than defining a function. Let's use an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;myVariable = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
myVariable = 3;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looking at this, it's easy to see the logic here.&lt;br /&gt;
* First, the engine is taking the variable name - in this case, &amp;quot;myVariable&amp;quot;.&lt;br /&gt;
* Second, it is identifying the assignment operator (=). Simply, the engine has so far established that you want &amp;quot;myVariable&amp;quot; to equal something.&lt;br /&gt;
* Finally, it is taking the value that you want to set the variable's value to, and setting it.&lt;br /&gt;
&lt;br /&gt;
In our example, we initially set the variable &amp;quot;myVariable&amp;quot; to &amp;quot;Hello!&amp;quot;. This turns the variable automatically into a string. However! Immediately after, we have rewritten the value of &amp;quot;myVariable&amp;quot; with the number 3. Since there are no decimal places, the variable suddenly becomes an integer.&lt;br /&gt;
&lt;br /&gt;
=== Reading a variable ===&lt;br /&gt;
Any time you want to get a variable's value and use it, you simply write the name of the variable. This is best explained while using a Conditional Check.&lt;br /&gt;
&lt;br /&gt;
== Conditional Checks ==&lt;br /&gt;
For your script to even be remotely useful, you're going to have to check something somewhere. For example, if you want the script to only respond to a player saying &amp;quot;Foo&amp;quot;, then you're going to have to use a conditional check.&lt;br /&gt;
&lt;br /&gt;
There is another operator, called the comparison operator. It's two equals signs stuck together (==).&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7062</id>
		<title>Creation/Dev/GScript/GScript for Dummies</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/GScript_for_Dummies&amp;diff=7062"/>
		<updated>2006-06-15T15:10:25Z</updated>

		<summary type="html">&lt;p&gt;Skyld: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style='float: right;'&amp;gt;[[Image:s_dummies.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preface =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
New Engine GScript for Dummies is a guide designed to aid the learning of the new scripting engine, frequently dubbed 'gscript2'. This guide will explain the basics, such as functions, variables and some Gscript-specific concepts that you will need to know in order to get scripting in no time. The guide is indexed at the top of the page, and by clicking one of the index links, you will be taken to the appropriate section. If you haven't really a clue where to start, then you're probably best reading through the entire guide.&lt;br /&gt;
&lt;br /&gt;
== Who is this for? ==&lt;br /&gt;
This is for absolutely anyone who is interested in learning in Gscript. Having some previous knowledge of scripting would be beneficial, but isn't required.&lt;br /&gt;
&lt;br /&gt;
== What should I do if I have a problem or a question not covered here? ==&lt;br /&gt;
You can, of course, post your problem on the [http://forums.graalonline.com/forums/ GraalOnline Forums] in the NPC Scripting section. Similarly, you can also contact a member of the Global Scripting Team via Forum PM if you think that you require more direct assistance, although usually forum regulars will be happy to help.&lt;br /&gt;
&lt;br /&gt;
= Welcome to GScript =&lt;br /&gt;
GScript is the scripting language that powers most of the dynamic content provided by GraalOnline. The scripting language is a very useful tool, since it enables you to create a very wide variety of systems, including automated baddies, scripted systems, GUIs.&lt;br /&gt;
&lt;br /&gt;
== Glossary of Terms ==&lt;br /&gt;
Through this guide, a number of terms are likely to be used. In case you are not sure exactly what any of the terms mean, you can look them up here!&lt;br /&gt;
* '''Variable''': This is a special type of object that stores data. The data might be a string, an integer, a float, or an array.&lt;br /&gt;
* '''String''': This is a type of data that can be stored in a variable. A string is a collection of letters, numbers and symbols. For example, if you are interested in storing a sentence in a variable, a string is probably your best bet.&lt;br /&gt;
* '''Integer''': This is a type of data that can be stored in a variable. An integer is simply a round number. No decimal places. Positive or negative, it's just a round number.&lt;br /&gt;
* '''Float''': This is a type of data that can be stored in a variable. A float is a number that is not an integer, that may contain decimal places.&lt;br /&gt;
* '''Function''': This is a block of code. A function is a defined routine of instructions that can be ran at any time in a script.&lt;br /&gt;
* '''Predefined Function''': This is a function that is already available in the scripting engine. Such functions are internal, that usually allow mathematical and other variable operations, manipulation of players and such like. You do not need to define a predefined function yourself, since it is already there for you to use!&lt;/div&gt;</summary>
		<author><name>Skyld</name></author>
	</entry>
</feed>