<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NeonBlack</id>
	<title>Multi Theft Auto: Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NeonBlack"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/NeonBlack"/>
	<updated>2026-04-12T13:34:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=SetTimer&amp;diff=42600</id>
		<title>SetTimer</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=SetTimer&amp;diff=42600"/>
		<updated>2014-10-15T09:29:40Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
This function allows you to trigger a function after a number of milliseconds have elapsed. You can call one of your own functions or a built-in function. For example, you could set a timer to spawn a player after a number of seconds have elapsed.&lt;br /&gt;
&lt;br /&gt;
Once a timer has finished repeating, it no longer exists.&lt;br /&gt;
&lt;br /&gt;
'''The minimum accepted interval is 50ms.'''&lt;br /&gt;
&lt;br /&gt;
Multi Theft Auto guarantees that the timer will be triggered after ''at least'' the interval you specify. The resolution of the timer is tied to the frame rate (server side and client-side). All the overdue timers are triggered at a single point each frame. This means that if, for example, the player is running at 30 frames per second, then two timers specified to occur after 100ms and 110ms would more than likely occur during the same frame, as the difference in time between the two timers (10ms) is less than half the length of the frame (33ms). As with most timers provided by other languages, you shouldn't rely on the timer triggering at an exact point in the future. &lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
timer setTimer ( function theFunction, int timeInterval, int timesToExecute, [ var arguments... ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
{{OOP||Timer.create||}}&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''theFunction:''' The function you wish the timer to call. (Notice: Do not use a 'local' function, it must be global!)&lt;br /&gt;
{{New feature/item|3.0141|1.4.1|6773|&lt;br /&gt;
Added ''sourceTimer'' global variable to timer's callback function&lt;br /&gt;
}}&lt;br /&gt;
*'''timeInterval:''' The number of milliseconds that should elapse before the function is called. (the minimum is 50)(1000 milliseconds = 1 second)&lt;br /&gt;
*'''timesToExecute:''' The number of times you want the timer to execute, or 0 for infinite repetitions.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
{{OptionalArg}} &lt;br /&gt;
*'''arguments:''' Any arguments you wish to pass to the function can be listed after the ''timesToExecute'' argument. Note that any tables you want to pass will get cloned, whereas metatables and functions/function references in that passed table will get lost. Also changes you make in the original table before the function gets called won't get transferred.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns a [[timer]] pointer if the timer was set successfully, ''false'' if the arguments are invalid or the timer could not be set.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example will output some text after a small delay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- define function to be called&lt;br /&gt;
function delayedChat ( text )&lt;br /&gt;
	outputChatBox ( &amp;quot;Delayed text: &amp;quot; .. text )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- set a timer so the function is called after 1 second&lt;br /&gt;
setTimer ( delayedChat, 1000, 1, &amp;quot;Hello, World!&amp;quot; )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1 second after the line above has been executed, the text ''Delayed text: Hello, World!'' will be displayed in the chat box.&lt;br /&gt;
&lt;br /&gt;
This example will nest a whole function within a timer. This is nice for things like setting variables without having to call a function outside of your code block.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function mainFunction()&lt;br /&gt;
        outputChatBox (&amp;quot;Instant text!&amp;quot;)&lt;br /&gt;
	setTimer ( function()&lt;br /&gt;
		outputChatBox ( &amp;quot;5 second delay text!&amp;quot; )&lt;br /&gt;
	end, 5000, 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
mainFunction() --call function&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Utility functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Mtaserver.conf&amp;diff=28720</id>
		<title>Mtaserver.conf</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Mtaserver.conf&amp;diff=28720"/>
		<updated>2011-12-21T12:04:57Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: first part of mtaserver.conf documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lowercasetitle/&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
This page describes the syntax and usage of the file “mtaserver.conf” you can find in “&amp;lt;mta directory&amp;gt;/server/mods/deathmatch”. The file contains the configuration of the MTA:SA server.&lt;br /&gt;
It uses the common XML format. This article assumes the reader does already know this format.&lt;br /&gt;
&lt;br /&gt;
The root node of the server configuration is &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt;. After installing the server one can find a default server configuration in the above mentioned directory.&lt;br /&gt;
&lt;br /&gt;
This article is based on the server configuration file of MTA:SA 1.2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Server Name ==&lt;br /&gt;
'''Required:''' Yes&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;servername&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: Specifies the server's name. This name is used in the server browser and in server statistics.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Default:''' Default MTA Server&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- This parameter specifies the name the server will be visible as in the ingame server browser and on Game-Monitor. It is a required parameter. --&amp;gt;&lt;br /&gt;
&amp;lt;servername&amp;gt;Default MTA Server&amp;lt;/servername&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Server IP ==&lt;br /&gt;
'''Required:''' No&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;serverip&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: Can be used to specify the IP address the MTA:SA server application shall bind to if the server has more than one IP address assigned.&lt;br /&gt;
: If one does not know what this means they should leave it blank.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- ONLY USE THIS PARAMETER IF YOU ARE SURE OF WHAT YOU ARE DOING - it is generally only needed for professional servers and should be left blank otherwise. This parameter specifies the IP to use for servers that have multiple IP addresses. If left blank, it will default to server's standard local IP address. --&amp;gt;&lt;br /&gt;
&amp;lt;serverip&amp;gt;&amp;lt;/serverip&amp;gt;&lt;br /&gt;
&amp;lt;!-- SERVERIP SHOULD BE LEFT BLANK UNLESS YOU ARE SURE OF WHAT YOU ARE DOING --&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Server Port ==&lt;br /&gt;
'''Required:''' Yes&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;serverport&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: The TCP/UDP port the MTA:SA server application shall bind to.&lt;br /&gt;
'''Default:''' 22003&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- This parameter specifies the UDP port on which the server will be accepting incoming player connections; default value: 22003. It is a required parameter. --&amp;gt;&lt;br /&gt;
&amp;lt;serverport&amp;gt;22003&amp;lt;/serverport&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Player Limit ==&lt;br /&gt;
'''Required:''' Yes&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;maxplayers&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: Maximum amount of players that should be able to play on the server simultaneously. If this amount is reached new player connections will be declined.&lt;br /&gt;
'''Default:''' 32&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- This parameter specifies the number of maximum player slots available on the server; default value: 32. It is a required parameter. --&amp;gt;&lt;br /&gt;
&amp;lt;maxplayers&amp;gt;32&amp;lt;/maxplayers&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HTTP Server ==&lt;br /&gt;
'''Required:''' No&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;httpserver&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: For enabling or disabling the builtin HTTP server. If it is enabled resources are able to provide access to various features via web browser.&lt;br /&gt;
'''Values:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;: disabled&amp;lt;br/&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt;: enabled&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Default:''' 1&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- This parameter specifies whether the builtin http server will be used. Values: 0 - disabled , 1 - enabled ; default value: 1. Optional parameter. --&amp;gt;&lt;br /&gt;
&amp;lt;httpserver&amp;gt;1&amp;lt;/httpserver&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HTTP Port ==&lt;br /&gt;
'''Required:''' Yes, if &amp;lt;tt&amp;gt;httpserver&amp;lt;/tt&amp;gt; is set to 1, No otherwise&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;httpport&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: TCP port the builtin HTTP server shall bind to. This port needs to be used when accessing a resource via web browser.&lt;br /&gt;
'''Default:''' 22005&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- This parameter specifies the TCP port on which the server will be accepting incoming http connections. It can be set to the same value as &amp;lt;serverport&amp;gt;. It is a required parameter if &amp;lt;httpserver&amp;gt; is set to 1. --&amp;gt;&lt;br /&gt;
&amp;lt;httpport&amp;gt;22005&amp;lt;/httpport&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HTTP Download URL ==&lt;br /&gt;
'''Required:''' No&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;httpdownloadurl&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: If this is set MTA:SA clients will download all the needed client files from the URL specified. If left blank they will download directly from the MTA:SA server.&lt;br /&gt;
: This can be used to unburden the server MTA:SA is running on. One can find the directory structure needed on the external HTTP server in “&amp;lt;mta directory&amp;gt;/server/mods/deathmatch/resource-cache/http-client-files” after the MTA:SA server has been run at least one time with all the resoruces needed.&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- If set, this parameter specifies the external URL from which clients will be able to download needed resources ingame. Otherwise they will download them directly from the server. --&amp;gt;&lt;br /&gt;
&amp;lt;httpdownloadurl&amp;gt;&amp;lt;/httpdownloadurl&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automatic Client Files Copy ==&lt;br /&gt;
'''Required:''' No&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Tag:''' &amp;lt;tt&amp;gt;httpautoclientfiles&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Description:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: If enabled the MTA:SA server will create the “&amp;lt;mta directory&amp;gt;/server/mods/deathmatch/resource-cache/http-client-files” directory with copies of all files that get downloaded by the clients. The contents of this directory can be copied to an external server, which then can be used as external HTTP download server (see [[#HTTP Download URL|HTTP Download URL]]).&lt;br /&gt;
'''Values:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;: disabled&amp;lt;br/&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt;: enabled&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Default:''' 1&amp;lt;br/&amp;gt;&lt;br /&gt;
'''XML:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;!-- This parameter specifies whether the client files for hosting on an external web server should be automatically copied into mods/deathmatch/resource-cache/http-client-files/ Only relevant if &amp;lt;httpdownloadurl&amp;gt; is set. Values: 0 - disabled , 1 - enabled ; default value: 1. Optional parameter. --&amp;gt;&lt;br /&gt;
&amp;lt;httpautoclientfiles&amp;gt;1&amp;lt;/httpautoclientfiles&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To be continued.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 13:04, 21 December 2011 (CET)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=28718</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=28718"/>
		<updated>2011-12-21T10:44:22Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: link to English main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding: 5px; height: 130px;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Mtalogo.png|left|100px]]'''Willkommen im Multi Theft Auto Wiki.''' Hier findest Du eine Fülle an Informationen zu Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Menge [[How you can help|Dinge, die Du tun kannst, um uns bei der Verbesserung von MTA zu helfen]] - erstelle eine Map, einen Gamemode, hilf uns beim Dokumentieren von Skriptfunktionen, schreibe Beispielcode, Tutorials oder reporte einfach nur die Fehler, die Du beim Spielen von MTA entdeckst.&lt;br /&gt;
&lt;br /&gt;
Solltest Du Fragen oder Probleme bezüglich des Scriptings haben, so kannst Du uns gerne jederzeit in unserem [[IRC Channel|IRC Kanal]] besuchen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;''Stop playing with yourself''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Input-gaming.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Spielen ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #FFEEAA;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Go-down.png|link=http://mtasa.com/]] ''' [http://mtasa.com/ Download Multi Theft Auto: San Andreas {{Current Version|full}}]'''&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/MTA DM Client Anleitung|Client Anleitung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Changes_in_1.2|Änderungen in 1.2]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Known_Issues_-_FAQ|Bekannte Probleme]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Upgrading_from_MTA:Race|Wechsel von MTA:Race zu MTA:SA 1.0.x]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Server Anleitung|Server Anleitung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Map manager|Map Manager]]&lt;br /&gt;
&lt;br /&gt;
=== Map Editor ===&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Resource:Editor|Anleitung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Resource:Editor/EDF|Editor Definition Format (EDF)]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[Resource:DE/Editor/Plugins|Plugins]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Resource:Editor#FAQ|Frequently Asked Questions]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Package-x-generic.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datenbanken ===&lt;br /&gt;
Hier findest Du Informationen zu verfügbaren Module und Ressourcen.&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[:Category:Resource|Ressourcenkatalog]] - Hilfreich bei der Erstellung eigener Gamemodes&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Client side scripts|Clientseitige Skripte]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Modules|Module]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Applications-development.png‎‎‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Multi Theft Auto Entwicklung ===&lt;br /&gt;
[[File:Go-down.png|link=http://nightly.mtasa.com/]] [http://nightly.mtasa.com/ Nightly builds]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Compiling_MTASA|MTA:SA Kompilierung unter Windows]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Building_MTASA_Server_on_Mac_OS_X|MTA:SA Kompilierung unter Mac OS X]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Building_MTASA_Server_on_GNU_Linux|MTA:SA Kompilierung unter GNU/Linux]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Coding guidelines|Coding Guidelines]]&lt;br /&gt;
* [http://code.google.com/p/mtasa-blue Google Code SVN]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Roadmap]]&lt;br /&gt;
* [http://bugs.mtasa.com/ Bugtracker]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Applications-office.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wiki - Wie Du helfen kannst ===&lt;br /&gt;
* Vervollständige [[:Category:Incomplete|unvollständige Funktionsdokumentationen]].&lt;br /&gt;
* [[:Category:Needs_Example|Erstelle Beispiele für Funktionen und Events]].&lt;br /&gt;
* Prüfe [[:Category:Needs Checking|zu überprüfende Seiten]].&lt;br /&gt;
* Schreibe Tutorials und hilf Neulingen.&lt;br /&gt;
* Übersetze Artikel im Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Internet-group-chat.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Community ===&lt;br /&gt;
* [http://forum.multitheftauto.com/ Forum]&lt;br /&gt;
* [[File:Usen.gif|Offizieller Englischer Kanal]] IRC: [irc://irc.multitheftauto.com/mta irc.multitheftauto.com #mta]&lt;br /&gt;
* [[File:De.gif|Inoffizieller Deutscher Kanal]] IRC: [irc://irc.multitheftauto.com/mta.german irc.multitheftauto.com #mta.german]&lt;br /&gt;
* [http://community.mtasa.com/ MTA Community] - Teile Deine Ressourcen mit anderen.&lt;br /&gt;
* [http://www.youtube.com/user/MTAQA Youtube Kanal]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Accessories-text-editor.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/MTA Scripting Grundlagen|Scripting Grundlagen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Introduction to Scripting the GUI|GUI Scripting Grundlagen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Debugging|Debugging Tutorial]] - Wie man Fehler in seinem Skript findet&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Resources|Ressourcen Grundlagen]]&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[Resource Web Access|Webzugriff]] - Zugriff auf Ressourcen via HTTP&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]]&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[Meta.xml]] - Die Datei, die ein Verzeichnis zur Ressource macht&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[ACL]] - Access Control List (Zugriffskontrollliste): Wichtig für komplexere Ressourcen&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Writing_Gamemodes|Gamemodes erstellen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Useful_Functions|Nützliche Funktionen]] - von Skriptern für Skripter&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:start-here.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Allgemeine Hilfe zu Lua ===&lt;br /&gt;
Links und Artikel zur Sprache Lua&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Lua Tutorial|Lua Tutorial]] - für Menschen ohne Programmiererfahrung geeignet&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [http://lua.gts-stolberg.de „Lua für Anfänger“]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot;]&lt;br /&gt;
** [[File:Usen.gif|Englische Seite]] [http://www.lua.org/manual/5.1/#index Offizielle Lua Funktionsreferenz]&lt;br /&gt;
* [[File:Usen.gif|Englische Seite]] [http://lua-users.org/wiki/TutorialDirectory Lua Wiki]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Allgemeine Hilfe zu Lua von Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
=== Referenz ===&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[MTA Classes|MTA Klassen]] - Detaillierte Beschreibung aller MTA Datentypen&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[Element|MTA Elemente]] / [[File:Usen.gif|Englischer Artikel]] [[Element tree|Elementbaum]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:System-file-manager.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== [[Id|ID Listen]] ===&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Animations|Animationen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle IDs|Fahrzeuge]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle Colors|Fahrzeugfarben]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle variants|Fahrzeugvarianten]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Garage|Garagen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Interior IDs|Interiors]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[CJ_Clothes|Kleidung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Material IDs|Materials]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Projectiles|Projektile]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Radar Blips|Radaricons]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Character Skins|Skins]] ([[All Skins Page|alle]])&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Sounds]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle Upgrades|Tuningteile]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Waffen|Waffen]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Weather|Wetter]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Osi symbol.png|75px|link=http://opensource.org/]]&lt;br /&gt;
'''Multi Theft Auto''' ist '''Open Source'''. &lt;br /&gt;
Das heißt, dass jeder zur Verbesserung von Multi Theft Auto beitragen kann!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[fr:Main Page‎]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=28717</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=28717"/>
		<updated>2011-12-21T10:40:05Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: adapted the new main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding: 5px; height: 130px;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Mtalogo.png|left|100px]]'''Willkommen im Multi Theft Auto Wiki.''' Hier findest Du eine Fülle an Informationen zu Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Menge [[How you can help|Dinge, die Du tun kannst, um uns bei der Verbesserung von MTA zu helfen]] - erstelle eine Map, einen Gamemode, hilf uns beim Dokumentieren von Skriptfunktionen, schreibe Beispielcode, Tutorials oder reporte einfach nur die Fehler, die Du beim Spielen von MTA entdeckst.&lt;br /&gt;
&lt;br /&gt;
Solltest Du Fragen oder Probleme bezüglich des Scriptings haben, so kannst Du uns gerne jederzeit in unserem [[IRC Channel|IRC Kanal]] besuchen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;''Stop playing with yourself''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Input-gaming.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Spielen ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #FFEEAA;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Go-down.png|link=http://mtasa.com/]] ''' [http://mtasa.com/ Download Multi Theft Auto: San Andreas {{Current Version|full}}]'''&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/MTA DM Client Anleitung|Client Anleitung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Changes_in_1.2|Änderungen in 1.2]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Known_Issues_-_FAQ|Bekannte Probleme]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Upgrading_from_MTA:Race|Wechsel von MTA:Race zu MTA:SA 1.0.x]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Server Anleitung|Server Anleitung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Map manager|Map Manager]]&lt;br /&gt;
&lt;br /&gt;
=== Map Editor ===&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Resource:Editor|Anleitung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Resource:Editor/EDF|Editor Definition Format (EDF)]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[Resource:DE/Editor/Plugins|Plugins]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Resource:Editor#FAQ|Frequently Asked Questions]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Package-x-generic.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datenbanken ===&lt;br /&gt;
Hier findest Du Informationen zu verfügbaren Module und Ressourcen.&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[:Category:Resource|Ressourcenkatalog]] - Hilfreich bei der Erstellung eigener Gamemodes&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Client side scripts|Clientseitige Skripte]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Modules|Module]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Applications-development.png‎‎‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Multi Theft Auto Entwicklung ===&lt;br /&gt;
[[File:Go-down.png|link=http://nightly.mtasa.com/]] [http://nightly.mtasa.com/ Nightly builds]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Compiling_MTASA|MTA:SA Kompilierung unter Windows]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Building_MTASA_Server_on_Mac_OS_X|MTA:SA Kompilierung unter Mac OS X]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Building_MTASA_Server_on_GNU_Linux|MTA:SA Kompilierung unter GNU/Linux]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Coding guidelines|Coding Guidelines]]&lt;br /&gt;
* [http://code.google.com/p/mtasa-blue Google Code SVN]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Roadmap]]&lt;br /&gt;
* [http://bugs.mtasa.com/ Bugtracker]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Applications-office.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wiki - Wie Du helfen kannst ===&lt;br /&gt;
* Vervollständige [[:Category:Incomplete|unvollständige Funktionsdokumentationen]].&lt;br /&gt;
* [[:Category:Needs_Example|Erstelle Beispiele für Funktionen und Events]].&lt;br /&gt;
* Prüfe [[:Category:Needs Checking|zu überprüfende Seiten]].&lt;br /&gt;
* Schreibe Tutorials und hilf Neulingen.&lt;br /&gt;
* Übersetze Artikel im Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Internet-group-chat.png‎]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Community ===&lt;br /&gt;
* [http://forum.multitheftauto.com/ Forum]&lt;br /&gt;
* [[File:Usen.gif|Offizieller Englischer Kanal]] IRC: [irc://irc.multitheftauto.com/mta irc.multitheftauto.com #mta]&lt;br /&gt;
* [[File:De.gif|Inoffizieller Deutscher Kanal]] IRC: [irc://irc.multitheftauto.com/mta.german irc.multitheftauto.com #mta.german]&lt;br /&gt;
* [http://community.mtasa.com/ MTA Community] - Teile Deine Ressourcen mit anderen.&lt;br /&gt;
* [http://www.youtube.com/user/MTAQA Youtube Kanal]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:Accessories-text-editor.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/MTA Scripting Grundlagen|Scripting Grundlagen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Introduction to Scripting the GUI|GUI Scripting Grundlagen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Debugging|Debugging Tutorial]] - Wie man Fehler in seinem Skript findet&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Resources|Ressourcen Grundlagen]]&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[Resource Web Access|Webzugriff]] - Zugriff auf Ressourcen via HTTP&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]]&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[Meta.xml]] - Die Datei, die ein Verzeichnis zur Ressource macht&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[ACL]] - Access Control List (Zugriffskontrollliste): Wichtig für komplexere Ressourcen&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Writing_Gamemodes|Gamemodes erstellen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Useful_Functions|Nützliche Funktionen]] - von Skriptern für Skripter&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:start-here.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Allgemeine Hilfe zu Lua ===&lt;br /&gt;
Links und Artikel zur Sprache Lua&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Lua Tutorial|Lua Tutorial]] - für Menschen ohne Programmiererfahrung geeignet&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [http://lua.gts-stolberg.de „Lua für Anfänger“]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot;]&lt;br /&gt;
** [[File:Usen.gif|Englische Seite]] [http://www.lua.org/manual/5.1/#index Offizielle Lua Funktionsreferenz]&lt;br /&gt;
* [[File:Usen.gif|Englische Seite]] [http://lua-users.org/wiki/TutorialDirectory Lua Wiki]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Allgemeine Hilfe zu Lua von Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
=== Referenz ===&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[MTA Classes|MTA Klassen]] - Detaillierte Beschreibung aller MTA Datentypen&lt;br /&gt;
** [[File:Usen.gif|Englischer Artikel]] [[Element|MTA Elemente]] / [[File:Usen.gif|Englischer Artikel]] [[Element tree|Elementbaum]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width: 32px;&amp;quot;&amp;gt;[[File:System-file-manager.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=== [[Id|ID Listen]] ===&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Animations|Animationen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle IDs|Fahrzeuge]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle Colors|Fahrzeugfarben]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle variants|Fahrzeugvarianten]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Garage|Garagen]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Interior IDs|Interiors]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[CJ_Clothes|Kleidung]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Material IDs|Materials]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Projectiles|Projektile]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Radar Blips|Radaricons]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Character Skins|Skins]] ([[All Skins Page|alle]])&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Sounds]]&lt;br /&gt;
* [[File:Usen.gif|Englischer Artikel]] [[Vehicle Upgrades|Tuningteile]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Waffen|Waffen]]&lt;br /&gt;
* [[File:De.gif|Deutscher Artikel]] [[DE/Weather|Wetter]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:4px 8px 8px 8px; margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Osi symbol.png|75px|link=http://opensource.org/]]&lt;br /&gt;
'''Multi Theft Auto''' ist '''Open Source'''. &lt;br /&gt;
Das heißt, dass jeder zur Verbesserung von Multi Theft Auto beitragen kann!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[fr:Main Page‎]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:GetAlivePlayersInTeam&amp;diff=25885</id>
		<title>Talk:GetAlivePlayersInTeam</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:GetAlivePlayersInTeam&amp;diff=25885"/>
		<updated>2011-05-21T12:18:27Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: suggestions for improvement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Suggestions for Improvement ====&lt;br /&gt;
* don't use &amp;lt;tt&amp;gt;table&amp;lt;/tt&amp;gt; as variable name, since it holds a reference to Lua's standard table functions by default&lt;br /&gt;
* use &amp;lt;tt&amp;gt;table.insert&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;foo[#foo+1] = bar&amp;lt;/tt&amp;gt;&lt;br /&gt;
[ [[User:NeonBlack|NeonBlack]] 14:18, 21 May 2011 (CEST) ]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=25884</id>
		<title>User:NeonBlack</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=25884"/>
		<updated>2011-05-21T09:38:55Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just writing anything so that my name isn't red anymore :Þ&lt;br /&gt;
-- [[User:NeonBlack|NeonBlack]] 04:25, 3 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-decoration: line-through;&amp;quot;&amp;gt;'''NeonBlack is now known as Neon on this wiki since I wasn't able to log in using my old account (whyever).'''&lt;br /&gt;
-- [[User:Neon|Neon]] 14:56, 25 November 2010 (UTC)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blokker assigned my old NeonBlack account to my OpenID so that I can use it again. :D --[[User:NeonBlack|NeonBlack]] 11:38, 21 May 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
*Translate [[Resource:Editor]] --[[User:NeonBlack|NeonBlack]] 17:09, 31 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=25883</id>
		<title>User:NeonBlack</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=25883"/>
		<updated>2011-05-21T09:38:12Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just writing anything so that my name isn't red anymore :Þ&lt;br /&gt;
-- [[User:NeonBlack|NeonBlack]] 04:25, 3 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-decoration: line-through;&amp;quot;&amp;gt;'''NeonBlack is now known as Neon on this wiki since I wasn't able to log in using my old account (whyever).'''&lt;br /&gt;
-- [[User:Neon|Neon]] 14:56, 25 November 2010 (UTC)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blokker assigned my old NeonBlack account to my OpenID so that I can use it again. :D --~~&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
*Translate [[Resource:Editor]] --[[User:NeonBlack|NeonBlack]] 17:09, 31 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=25882</id>
		<title>User:NeonBlack</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=25882"/>
		<updated>2011-05-21T09:37:46Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just writing anything so that my name isn't red anymore :Þ&lt;br /&gt;
-- [[User:NeonBlack|NeonBlack]] 04:25, 3 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-decoration: line-through;&amp;quot;&amp;gt;'''NeonBlack is now known as Neon on this wiki since I wasn't able to log in using my old account (whyever).'''&lt;br /&gt;
-- [[User:Neon|Neon]] 14:56, 25 November 2010 (UTC)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blokker assigned my old NeonBlack account to my OpenID so that I can use it again. :D ---~&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
*Translate [[Resource:Editor]] --[[User:NeonBlack|NeonBlack]] 17:09, 31 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=24065</id>
		<title>Template:Useful Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=24065"/>
		<updated>2010-07-19T10:40:04Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[callClientFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any clientside function from the server's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[callServerFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any server-side function from the client's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[Check]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function checks if it's arguments are of the right types and calls the error-function if one isn't.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[doForAllElements]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function can be used to execute a specified function for all elements of a specified type.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[iterElements]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Returns an iterator for your for loops saving time typing ipairs( getElementsByType( type ) ), instead you type: iterElements( type ).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[findRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Takes two points and returns the direction from point A to point B.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[FormatDate]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Formats a date on the basis of a format string and returns it.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getAge]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia', sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function calculates the age of a birthday.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getPointFromDistanceRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds a point based on a starting point, direction and distance.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getTimestamp]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» With this function you can get the [http://en.wikipedia.org/wiki/Unix_time UNIX timestamp].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IfElse]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Returns one of two values based on a boolean expression.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[isLeapYear]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Checks if the given year is a leap year.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[math.round]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Rounds a number whereas the number of decimals to keep and the method may be set.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setTableProtected]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Protects a table and makes it read-only.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setVehicleGravityPoint]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This clientside function sets a vehicle's gravity in the direction of a 3 dimensional coordinate with the strength specified.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[string.explode]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function splits a string at a given separator pattern and returns a table with the pieces.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.copy]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function copies a whole table and all the tables in that table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.map]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function goes through a table and replaces every field with the return of the passed function, where the field's value is passed as first argument and optionally more arguments.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.size]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds the absolute size of a table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[var_dump]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;»This function outputs information about one or more variables using outputConsole(). &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Useful Functions]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsLeapYear&amp;diff=24064</id>
		<title>IsLeapYear</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsLeapYear&amp;diff=24064"/>
		<updated>2010-07-19T10:38:01Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: new version of IsYearALeapYear and updated example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function checks if a year is a leap year or not.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isLeapYear( [ int year=getRealTime().year+1900 ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
* '''year''': The year you want to check. Default is your local year.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if the year is a leap year, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function isLeapYear(year)&lt;br /&gt;
    if year then year = math.floor(year)&lt;br /&gt;
    else year = getRealTime().year + 1900 end&lt;br /&gt;
    return ((year % 4 == 0 and year % 100 ~= 0) or year % 400 == 0)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example tells the player if the given year is a leap year.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- define the command handler&lt;br /&gt;
addCommandHandler(&amp;quot;isYearALeapYear&amp;quot;, function (source, cmd, year)&lt;br /&gt;
    -- check if the player passed a year&lt;br /&gt;
    year = tonumber(year) or getRealTime().year + 1900&lt;br /&gt;
    -- check if the given year is a leap year&lt;br /&gt;
    local leapYear = IsYearALeapYear(year)&lt;br /&gt;
    --send an answer to the player&lt;br /&gt;
    if leapYear then&lt;br /&gt;
        outputChatBox(&amp;quot;The year &amp;quot;..year..&amp;quot; is a leap year.&amp;quot;, source)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;The year &amp;quot;..year..&amp;quot; isn't a leap year.&amp;quot;, source)&lt;br /&gt;
    end&lt;br /&gt;
end, false, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Useful_Function&amp;diff=24063</id>
		<title>Template:Useful Function</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Useful_Function&amp;diff=24063"/>
		<updated>2010-07-19T10:29:18Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: lowercasetitle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pageclass class=&amp;quot;#228B22&amp;quot; subcaption=&amp;quot;Useful Function&amp;quot;&amp;gt;&amp;lt;/pageclass&amp;gt;&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
[[Category:Useful Functions]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=GetTimestamp&amp;diff=24062</id>
		<title>GetTimestamp</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=GetTimestamp&amp;diff=24062"/>
		<updated>2010-07-19T10:24:53Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: completely new version with updated example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
With this function you can get the [http://en.wikipedia.org/wiki/Unix_time UNIX timestamp].&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int getTimestamp( [ int year = getRealTime().year + 1900, int month = getRealTime().month + 1, int day = getRealTime().day, int hour = getRealTime().hour, minute = getRealTime().minute, int second = getRealTime().second ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''year''': The year of the date you want to retrieve the UNIX timestamp of. Default is your local year. Must be greater than 1969.&lt;br /&gt;
* '''month''': The month of the date you want to retrieve the UNIX timestamp of. Default is your local month. (1-12)&lt;br /&gt;
* '''day''': The day of the date you want to retrieve the UNIX timestamp of. Default is your local day. (1-31)&lt;br /&gt;
* '''hour''': The hour of the date you want to retrieve the UNIX timestamp of. Default is your local hour. (0-23)&lt;br /&gt;
* '''minute''': The minute of the date you want to retrieve the UNIX timestamp of. Default is your local minute. (0-59)&lt;br /&gt;
* '''second''': The second of the date you want to retrieve the UNIX timestamp of. Default is your local second. (0-59)&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns an UNIX timestamp.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
{{RequiredFunctions|isLeapYear}}&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client- and/or serverside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function getTimestamp(year, month, day, hour, minute, second)&lt;br /&gt;
    -- initiate variables&lt;br /&gt;
    local monthseconds = { 2678400, 2419200, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000, 2678400 }&lt;br /&gt;
    local timestamp = 0&lt;br /&gt;
    local datetime = getRealTime()&lt;br /&gt;
    year, month, day = year or datetime.year + 1900, month or datetime.month + 1, day or datetime.monthday&lt;br /&gt;
    hour, minute, second = hour or datetime.hour, minute or datetime.minute, second or datetime.second&lt;br /&gt;
    &lt;br /&gt;
    -- calculate timestamp&lt;br /&gt;
    for i=1970, year-1 do timestamp = timestamp + (isLeapYear(i) and 31622400 or 31536000) end&lt;br /&gt;
    for i=1, month-1 do timestamp = timestamp + ((isLeapYear(year) and i == 2) and 2505600 or monthseconds[i]) end&lt;br /&gt;
    timestamp = timestamp + 86400 * (day - 1) + 3600 * hour + 60 * minute + second&lt;br /&gt;
    &lt;br /&gt;
    timestamp = timestamp - 3600 --GMT+1 compensation&lt;br /&gt;
    if datetime.isdst then timestamp = timestamp - 3600 end&lt;br /&gt;
    &lt;br /&gt;
    return timestamp&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example saves the time of the player's joining.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- define the event handler&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, root, function ()&lt;br /&gt;
    -- get the actual UNIX timestamp&lt;br /&gt;
    local datetime = getTimestamp()&lt;br /&gt;
    -- attach the time to the player's element&lt;br /&gt;
    setElementData(source, &amp;quot;joinTime&amp;quot;, datetime)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:SetAccountData&amp;diff=22836</id>
		<title>Talk:SetAccountData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:SetAccountData&amp;diff=22836"/>
		<updated>2010-04-06T18:36:32Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: answer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''On April 06 2010 - 7:22 GMT''' Cezar said:&amp;lt;br /&amp;gt;&lt;br /&gt;
How does this work? Does it save information on the client's computer? Isn't that prone to hacking?&lt;br /&gt;
----&lt;br /&gt;
Accounts are completely serverside so their data is probably serverside, too. But even if this data would be clientside MTA does save all data in a save xml format, which cannot be destroyed due to escaping and stuff, so no need to worry.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 18:36, 6 April 2010 (UTC)&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=GuiGridListSetItemData&amp;diff=22835</id>
		<title>GuiGridListSetItemData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=GuiGridListSetItemData&amp;diff=22835"/>
		<updated>2010-04-06T18:29:41Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: added note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client function}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This function sets a Item Data associated to a grid list item.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Note:''' This function will only work '''after''' you set the item's text using [[guiGridListSetItemText]]!&lt;br /&gt;
&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool guiGridListSetItemData ( element gridList, int rowIndex, int columnIndex, string data )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''gridList:''' A gridlist element of the data you wish to set to&lt;br /&gt;
*'''rowIndex:''' The row of the item you wish to set to&lt;br /&gt;
*'''columnIndex:''' The column of the item you wish to set to&lt;br /&gt;
*'''data:''' The data you wish to set to the item.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if the data was set successfully, false otherwise&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This page lacks an example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--Add an example here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{GUI functions}}&lt;br /&gt;
[[Category:Needs Example]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=GuiGridListGetItemData&amp;diff=22834</id>
		<title>GuiGridListGetItemData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=GuiGridListGetItemData&amp;diff=22834"/>
		<updated>2010-04-06T18:29:09Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: added note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
With this function you can retrieve the [[string]] data associated with an item in a [[Element/GUI/Gridlist|grid list]]. This is not the text that is displayed on the item, but an internal string that you can use to hold extra information about the item.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Note:''' This function will only work '''after''' you set the item's text using [[guiGridListSetItemText]]!&lt;br /&gt;
&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string guiGridListGetItemData ( element gridList, int rowIndex, int columnIndex )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''gridList:''' the grid list containing the item you're interested in&lt;br /&gt;
*'''rowIndex:''' the row index of the item&lt;br /&gt;
*'''columnIndex:''' the column index of the item&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns a [[string]] with the item data of the specified item if succesful, ''false'' if one of the arguments was invalid.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example displays a random item data from the gridlist.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientsideResourceStart ()&lt;br /&gt;
    local numberList = guiCreateGridList ( 0.80, 0.10, 0.15, 0.60, true )&lt;br /&gt;
    local column = guiGridListAddColumn ( numberList, &amp;quot;Column Title&amp;quot;, 0.85 )&lt;br /&gt;
    if ( column ) then&lt;br /&gt;
        local row = guiGridListAddRow ( numberList )&lt;br /&gt;
        local myItem = guiGridListSetItemText ( numberList, row, column, tostring( math.random(0, 10) ^ 100 ), false, false )&lt;br /&gt;
        local myItemData = guiGridListGetItemData ( numberList, row, column )&lt;br /&gt;
        outputChatBox ( &amp;quot;My gridlist item data: &amp;quot; .. myItemData )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler ( &amp;quot;onClientResourceStart&amp;quot;, getRootElement(), clientsideResourceStart )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{GUI functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:GuiGridListGetItemData&amp;diff=22833</id>
		<title>Talk:GuiGridListGetItemData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:GuiGridListGetItemData&amp;diff=22833"/>
		<updated>2010-04-06T18:27:24Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: Created page with 'Regarding this function: http://bugs.mtasa.com/view.php?id=4459&amp;lt;br/&amp;gt; ~~~~'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Regarding this function: http://bugs.mtasa.com/view.php?id=4459&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 18:27, 6 April 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:GuiGridListSetItemData&amp;diff=22832</id>
		<title>Talk:GuiGridListSetItemData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:GuiGridListSetItemData&amp;diff=22832"/>
		<updated>2010-04-06T18:26:43Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Regarding this function: http://bugs.mtasa.com/view.php?id=4459&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 18:26, 6 April 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:GuiGridListSetItemData&amp;diff=22831</id>
		<title>Talk:GuiGridListSetItemData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:GuiGridListSetItemData&amp;diff=22831"/>
		<updated>2010-04-06T18:26:20Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: Created page with 'Regarding this function: http://bugs.mtasa.com/view.php?id=4459 ~~~~'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Regarding this function: http://bugs.mtasa.com/view.php?id=4459&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 18:26, 6 April 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=SetTimer&amp;diff=22761</id>
		<title>SetTimer</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=SetTimer&amp;diff=22761"/>
		<updated>2010-03-31T15:44:34Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Syntax */  added information on tables and their metatables as arguments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
This function allows you to trigger a function after a number of milliseconds have elapsed. You can call one of your own functions or a built-in function. For example, you could set a timer to spawn a player after a number of seconds have elapsed.&lt;br /&gt;
&lt;br /&gt;
Once a timer has finished repeating, it no longer exists.&lt;br /&gt;
&lt;br /&gt;
The minimum accepted interval is 50ms.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server and Client&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
timer setTimer ( function theFunction, int timeInterval, int timesToExecute, [ var arguments... ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''theFunction:''' The function you wish the timer to call.&lt;br /&gt;
*'''timeInterval:''' The number of milliseconds that should elapse before the function is called. (the minimum is 50)(1000 milliseconds = 1 second)&lt;br /&gt;
*'''timesToExecute:''' The number of times you want the timer to execute, or 0 for infinite repetitions.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
{{OptionalArg}} &lt;br /&gt;
*'''arguments:''' Any arguments you wish to pass to the function can be listed after the ''timesToExecute'' argument. Note that any tables you want to pass will get cloned, whereas metatables will get lost. Also changes you make in the original table before the function gets called won't get transfered.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns a [[timer]] pointer if the timer was set succesfully, ''false'' if the arguments are invalid or the timer could not be set.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Example&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example will output some text after a small delay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- define function to be called&lt;br /&gt;
function delayedChat ( text )&lt;br /&gt;
	outputChatBox ( &amp;quot;Delayed text: &amp;quot; .. text )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- set a timer so the function is called after 1 second&lt;br /&gt;
setTimer ( delayedChat, 1000, 1, &amp;quot;Hello, World!&amp;quot; )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1 second after the line above has been executed, the text ''Delayed text: Hello, World!'' will be displayed in the chat box.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Utility functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=BindKey&amp;diff=22749</id>
		<title>BindKey</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=BindKey&amp;diff=22749"/>
		<updated>2010-03-27T17:29:28Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Optional Arguments */ arguments may not be functions !!?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Server client function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Binds a player's key to a handler function or command, which will be called when the key is pressed. &lt;br /&gt;
&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;section name=&amp;quot;Server - Syntax 1&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bindKey ( player thePlayer, string key, string keyState, function handlerFunction,  [ var arguments, ... ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''thePlayer:''' The player you wish to bind the key of.&lt;br /&gt;
*'''key:''' The key or control you wish to bind to the command. See [[key names]] for a list of possible keys and [[control names]] for a list of possible controls.&lt;br /&gt;
*'''keyState:''' A string that has one of the following values:&lt;br /&gt;
**'''&amp;quot;up&amp;quot;:''' If the bound key should trigger the function when the key is released&lt;br /&gt;
**'''&amp;quot;down&amp;quot;:''' If the bound key should trigger the function when the key is pressed&lt;br /&gt;
**'''&amp;quot;both&amp;quot;:''' If the bound key should trigger the function when the key is pressed or released&lt;br /&gt;
*'''handlerFunction:''' The function that will be triggered when the player's key is pressed. This function should have the form:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function functionName ( player keyPresser, string key, string keyState, [ var arguments, ... ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The values passed to this function are:&lt;br /&gt;
:*'''keyPresser:''' The player who pressed the key&lt;br /&gt;
:*'''key:''' The key that was pressed&lt;br /&gt;
:*'''keyState:''' The state of the key that was pressed, ''down'' if it was pressed, ''up'' if it was released.&lt;br /&gt;
:*'''arguments''' The optional arguments you specified when calling [[bindKey]] (see below).&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{New feature|3|1.0|&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server - Syntax 2&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
This alternative syntax allows you to bind a key with a command.  This will also allow users to customize the control in their Settings menu.  Use in conjunction with [[addCommandHandler]] to add handler functions to the keybind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bindKey ( player thePlayer, string key, string keyState, string commandName, string arguments )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''thePlayer:''' The player you wish to bind the key of.&lt;br /&gt;
*'''key:''' The key or control you wish to bind to the command. See [[key names]] for a list of possible keys.&lt;br /&gt;
*'''keyState:''' A string that has one of the following values:&lt;br /&gt;
**'''&amp;quot;up&amp;quot;:''' If the bound key should trigger the function when the key is released&lt;br /&gt;
**'''&amp;quot;down&amp;quot;:''' If the bound key should trigger the function when the key is pressed&lt;br /&gt;
**'''&amp;quot;both&amp;quot;:''' If the bound key should trigger the function when the key is pressed or released&lt;br /&gt;
*'''commandName:''' The name of the command that the key should be binded to.  &lt;br /&gt;
*'''arguments''' Space delimited arguments that are entered as if one was typing the command.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client - Syntax 1&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bindKey ( string key, string keyState, function handlerFunction,  [ var arguments, ... ] ) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''key:''' The key or control you wish to bind to the command. See [[key names]] for a list of possible keys and [[control names]] for a list of possible controls.&lt;br /&gt;
*'''keyState:''' A string that has one of the following values:&lt;br /&gt;
**'''&amp;quot;up&amp;quot;:''' If the bound key should trigger the function when the key is released&lt;br /&gt;
**'''&amp;quot;down&amp;quot;:''' If the bound key should trigger the function when the key is pressed&lt;br /&gt;
**'''&amp;quot;both&amp;quot;:''' If the bound key should trigger the function when the key is pressed or released&lt;br /&gt;
&amp;lt;!--*'''bindName:''' The name for this key bind when it appears in the client's settings dialog.--&amp;gt;&lt;br /&gt;
*'''handlerFunction:''' The function that will be triggered when the player's key is pressed. This function should have the form:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function functionName ( string key, string keyState, [ var arguments, ... ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The values passed to this function are:&lt;br /&gt;
:*'''key:''' The key that was pressed&lt;br /&gt;
:*'''keyState:''' The state of the key that was pressed, ''down'' if it was pressed, ''up'' if it was released.&lt;br /&gt;
:*'''arguments''' The optional arguments you specified when calling [[bindKey]] (see below).&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{New feature|3|1.0|&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client - Syntax 2&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
This alternative syntax allows you to bind a key with a command.  This will also allow users to customize the control in their Settings menu.  Use in conjunction with [[addCommandHandler]] to add handler functions to the keybind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bindKey ( string key, string keyState, string commandName, string arguments )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''key:''' The key or control you wish to bind to the command. See [[key names]] for a list of possible keys.&lt;br /&gt;
*'''keyState:''' A string that has one of the following values:&lt;br /&gt;
**'''&amp;quot;up&amp;quot;:''' If the bound key should trigger the function when the key is released&lt;br /&gt;
**'''&amp;quot;down&amp;quot;:''' If the bound key should trigger the function when the key is pressed&lt;br /&gt;
**'''&amp;quot;both&amp;quot;:''' If the bound key should trigger the function when the key is pressed or released&lt;br /&gt;
*'''commandName:''' The name of the command that the key should be binded to.  &lt;br /&gt;
*'''arguments''' Space delimited arguments that are entered as if one was typing the command.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
{{OptionalArg}} &lt;br /&gt;
*'''arguments:''' Any arguments you may want to pass to the function when the key is pressed by the user. Any number of arguments of  can be specified, each being passed to the designated function. You may not pass functions.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Example 1&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example will bind a player's 'F1' key and 'fire' control to 1 input function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function funcInput ( player, key, keyState )&lt;br /&gt;
  local state = &amp;quot;let go of&amp;quot;&lt;br /&gt;
  if ( keyState == &amp;quot;down&amp;quot; ) then&lt;br /&gt;
    state = &amp;quot;pressed&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  outputChatBox ( getPlayerName ( player) .. &amp;quot; &amp;quot; .. state .. &amp;quot; the &amp;quot; .. key .. &amp;quot; key!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function bindTheKeys ( player, commandName )&lt;br /&gt;
  bindKey ( player, &amp;quot;F1&amp;quot;, &amp;quot;down&amp;quot;, funcInput )   -- bind the player's F1 down key&lt;br /&gt;
  bindKey ( player, &amp;quot;F1&amp;quot;, &amp;quot;up&amp;quot;, funcInput )     -- bind the player's F1 up key&lt;br /&gt;
  bindKey ( player, &amp;quot;fire&amp;quot;, &amp;quot;both&amp;quot;, funcInput ) -- bind the player's fire down and up control&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;bindme&amp;quot;, bindTheKeys )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example will bind a player's 'F1' key and 'fire' control to 1 input function, clientside.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function funcInput ( key, keyState )&lt;br /&gt;
  local state = &amp;quot;let go of&amp;quot;&lt;br /&gt;
  if ( keyState == &amp;quot;down&amp;quot; ) then&lt;br /&gt;
    state = &amp;quot;pressed&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  outputChatBox ( &amp;quot;You &amp;quot; .. state .. &amp;quot; the &amp;quot; .. key .. &amp;quot; key!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function bindTheKeys ()&lt;br /&gt;
  bindKey ( &amp;quot;F1&amp;quot;, &amp;quot;down&amp;quot;, funcInput )   -- bind the player's F1 down key&lt;br /&gt;
  bindKey ( &amp;quot;F1&amp;quot;, &amp;quot;up&amp;quot;, funcInput )     -- bind the player's F1 up key&lt;br /&gt;
  bindKey ( &amp;quot;fire&amp;quot;, &amp;quot;both&amp;quot;, funcInput ) -- bind the player's fire down and up control&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;bindme&amp;quot;, bindTheKeys )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Input functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=XmlNodeGetAttribute&amp;diff=22733</id>
		<title>XmlNodeGetAttribute</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=XmlNodeGetAttribute&amp;diff=22733"/>
		<updated>2010-03-25T18:16:41Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Returns */  added default return value if attribute does not exist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
This function is used to return an attribute of a node in a configuration file.&lt;br /&gt;
&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string xmlNodeGetAttribute ( xmlnode node, string name )             &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''node:''' The node from which you wish to return the attribute&lt;br /&gt;
*'''name:''' The name of the attribute.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the attribute in string form or ''false'', if the attribute is not defined.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
Suppose we have a gametype where only one type of car is used, and this type should not depend on the map but rather be set in an external configuration file and be used in all maps. Here's an example where the configuration file is an XML document:&lt;br /&gt;
&lt;br /&gt;
settings.xml&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;car model=&amp;quot;528&amp;quot; posX=&amp;quot;123.4&amp;quot; posY=&amp;quot;456.7&amp;quot; posZ=&amp;quot;12.3&amp;quot; rot=&amp;quot;90.0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lua code&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local xml = getResourceConfig(&amp;quot;settings.xml&amp;quot;)      -- load XML file and get its root element&lt;br /&gt;
local carmodel = xmlNodeGetAttribute(xml, &amp;quot;model&amp;quot;)    -- get attribute of root element&lt;br /&gt;
local carX = xmlNodeGetAttribute(xml, &amp;quot;posX&amp;quot;)&lt;br /&gt;
local carY = xmlNodeGetAttribute(xml, &amp;quot;posY&amp;quot;)&lt;br /&gt;
local carZ = xmlNodeGetAttribute(xml, &amp;quot;posZ&amp;quot;)&lt;br /&gt;
local carA = xmlNodeGetAttribute(xml, &amp;quot;rot&amp;quot;)&lt;br /&gt;
createVehicle(carmodel, carX, carY, carZ, 0.0, 0.0, carA)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{XML_functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=22370</id>
		<title>Template:Useful Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=22370"/>
		<updated>2010-02-06T22:45:15Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: added a space&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[callClientFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any clientside function from the server's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[callServerFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any server-side function from the client's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[Check]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function checks if it's arguments are of the right types and calls the error-function if one isn't.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[doForAllElements]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function can be used to execute a specified function for all elements of a specified type.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[findRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Takes two points and returns the direction from point A to point B.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[FormatDate]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Formats a date on the basis of a format string and returns it.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getAge]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia', sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function calculates the age of a birthday.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getPointFromDistanceRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds a point based on a starting point, direction and distance.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[GetTimestamp]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» With this function you can get the [http://en.wikipedia.org/wiki/Unix_time UNIX timestamp].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IfElse]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Returns one of two values based on a boolean expression.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IsYearALeapYear]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Checks if the given year is a leap year.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[math.round]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Rounds a number whereas the number of decimals to keep and the method may be set.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setTableProtected]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Protects a table and makes it read-only.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setVehicleGravityPoint]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This clientside function sets a vehicle's gravity in the direction of a 3 dimensional coordinate with the strength specified.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[string.explode]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function splits a string at a given separator pattern and returns a table with the pieces.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.copy]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function copies a whole table and all the tables in that table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.map]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function goes through a table and replaces every field with the return of the passed function, where the field's value is passed as first argument and optionally more arguments.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.size]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds the absolute size of a table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[var_dump]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;»This function outputs information about one or more variables using outputConsole(). &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Useful Functions]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=22369</id>
		<title>Template:Useful Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=22369"/>
		<updated>2010-02-06T22:44:41Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: sorted alphabetically and added closing span at getAge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[callClientFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any clientside function from the server's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[callServerFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any server-side function from the client's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[Check]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function checks if it's arguments are of the right types and calls the error-function if one isn't.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[doForAllElements]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function can be used to execute a specified function for all elements of a specified type.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[findRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Takes two points and returns the direction from point A to point B.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[FormatDate]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Formats a date on the basis of a format string and returns it.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getAge]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia', sans-serif; font-size:smaller;&amp;quot;&amp;gt;»This function calculates the age of a birthday.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getPointFromDistanceRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds a point based on a starting point, direction and distance.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[GetTimestamp]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» With this function you can get the [http://en.wikipedia.org/wiki/Unix_time UNIX timestamp].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IfElse]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Returns one of two values based on a boolean expression.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IsYearALeapYear]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Checks if the given year is a leap year.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[math.round]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Rounds a number whereas the number of decimals to keep and the method may be set.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setTableProtected]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Protects a table and makes it read-only.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setVehicleGravityPoint]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This clientside function sets a vehicle's gravity in the direction of a 3 dimensional coordinate with the strength specified.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[string.explode]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function splits a string at a given separator pattern and returns a table with the pieces.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.copy]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function copies a whole table and all the tables in that table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.map]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function goes through a table and replaces every field with the return of the passed function, where the field's value is passed as first argument and optionally more arguments.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.size]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds the absolute size of a table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[var_dump]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;»This function outputs information about one or more variables using outputConsole(). &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Useful Functions]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=22353</id>
		<title>Math.round</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=22353"/>
		<updated>2010-02-03T14:51:21Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Example */  Again... Like always .__.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function is a full featured round function for Lua's math-library.&lt;br /&gt;
Bear in mind that both the floor and the ceil method may not work properly clientside when you pass something greater than 0 as second argument. This is because of some weird clientside number bug. It's fixed for the round method.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int/float math.round( float number, [ int decimals = 0, string method = &amp;quot;round&amp;quot; ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''number''': The number to round.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''decimals''': The number of decimals to keep.&lt;br /&gt;
* '''method''': The round method that should be used. Valid values are &amp;quot;round&amp;quot; (which is default), &amp;quot;floor&amp;quot; and &amp;quot;ceil&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the rounded number.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function math.round(number, decimals, method)&lt;br /&gt;
    decimals = decimals or 0&lt;br /&gt;
    local factor = 10 ^ decimals&lt;br /&gt;
    if (method == &amp;quot;ceil&amp;quot; or method == &amp;quot;floor&amp;quot;) then return math[method](number * factor) / factor&lt;br /&gt;
    else return tonumber((&amp;quot;%.&amp;quot;..decimals..&amp;quot;f&amp;quot;):format(number)) end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Serverside Example&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example adds a command that outputs the players current position approximated to three decimals.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addCommandHandler(&amp;quot;pos&amp;quot;, function ()&lt;br /&gt;
    local x, y, z = getElementPosition(getPedOccupiedVehicle(source) or source)&lt;br /&gt;
    outputChatBox(&amp;quot;Your current position: [&amp;quot;..math.round(x, 3)..&amp;quot;|&amp;quot;..math.round(y, 3)..&amp;quot;|&amp;quot;..math.round(z, 3)..&amp;quot;]&amp;quot;, source)&lt;br /&gt;
end, false, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=22352</id>
		<title>Math.round</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=22352"/>
		<updated>2010-02-03T14:50:53Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Example */  Typical mistake &amp;gt;.&amp;lt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function is a full featured round function for Lua's math-library.&lt;br /&gt;
Bear in mind that both the floor and the ceil method may not work properly clientside when you pass something greater than 0 as second argument. This is because of some weird clientside number bug. It's fixed for the round method.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int/float math.round( float number, [ int decimals = 0, string method = &amp;quot;round&amp;quot; ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''number''': The number to round.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''decimals''': The number of decimals to keep.&lt;br /&gt;
* '''method''': The round method that should be used. Valid values are &amp;quot;round&amp;quot; (which is default), &amp;quot;floor&amp;quot; and &amp;quot;ceil&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the rounded number.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function math.round(number, decimals, method)&lt;br /&gt;
    decimals = decimals or 0&lt;br /&gt;
    local factor = 10 ^ decimals&lt;br /&gt;
    if (method == &amp;quot;ceil&amp;quot; or method == &amp;quot;floor&amp;quot;) then return math[method](number * factor) / factor&lt;br /&gt;
    else return tonumber((&amp;quot;%.&amp;quot;..decimals..&amp;quot;f&amp;quot;):format(number)) end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Serverside Example&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example adds a command that outputs the players actual position approximated to three decimals.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addCommandHandler(&amp;quot;pos&amp;quot;, function ()&lt;br /&gt;
    local x, y, z = getElementPosition(getPedOccupiedVehicle(source) or source)&lt;br /&gt;
    outputChatBox(&amp;quot;Your current position: [&amp;quot;..math.round(x, 3)..&amp;quot;|&amp;quot;..math.round(y, 3)..&amp;quot;|&amp;quot;..math.round(z, 3)..&amp;quot;]&amp;quot;, source)&lt;br /&gt;
end, false, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=XmlNodeGetChildren&amp;diff=21989</id>
		<title>XmlNodeGetChildren</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=XmlNodeGetChildren&amp;diff=21989"/>
		<updated>2009-11-29T19:38:11Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Example */  fixed syntax highlighting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
&lt;br /&gt;
This function returns all children of a particular XML node, or a particular child node.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table/xmlnode xmlNodeGetChildren ( xmlnode parent, [ int index ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''parent:''' This is the [[xmlnode]] you want to retrieve one or all child nodes of. &lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
* '''index:''' If you only want to retrieve one particular child node, specify its (0-based) index here. For example if you only want the first node, specify 0; the fifth node has index 4, etc.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
If '''index''' isn't specified, returns a table containing all child nodes. If '''index''' is specified, returns the corresponding child node if it exists. Returns ''false'' in case of failure.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
Suppose you have an .xml file with random welcome messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;messages&amp;gt;&lt;br /&gt;
    &amp;lt;message&amp;gt;Welcome to the deathmatch server, enjoy your stay.&amp;lt;/message&amp;gt;&lt;br /&gt;
    &amp;lt;message&amp;gt;Welcome. Be sure to get your free pizza at Matt's!&amp;lt;/message&amp;gt;&lt;br /&gt;
    &amp;lt;message&amp;gt;Party going on at the LS beach, be there&amp;lt;/message&amp;gt;&lt;br /&gt;
&amp;lt;/messages&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To show a random message from this list to joining players, you could use the following code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onResourceStart&amp;quot;, getResourceRootElement(getThisResource()),&lt;br /&gt;
    function()&lt;br /&gt;
        local xml = xmlLoadFile(&amp;quot;welcome.xml&amp;quot;)             -- open the XML file&lt;br /&gt;
        local messageNodes = xmlNodeGetChildren(xml)       -- get all child nodes of the root node (&amp;lt;messages&amp;gt;)&lt;br /&gt;
        g_WelcomeMessages = {}                             -- create a new global variable to store the welcome messages&lt;br /&gt;
        for i,node in ipairs(messageNodes) do              -- loop over all the message nodes&lt;br /&gt;
            g_WelcomeMessages[i] = xmlNodeGetValue(node)   -- retrieve the text in each node&lt;br /&gt;
        end&lt;br /&gt;
        xmlUnloadFile(xml)                                 -- close the XML file&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(),&lt;br /&gt;
    function()&lt;br /&gt;
        local numMessages = #g_WelcomeMessages                        -- get the number of messages&lt;br /&gt;
        local message = g_WelcomeMessages[math.random(numMessages)]   -- pick a random message&lt;br /&gt;
        outputChatBox(message, source, 0, 255, 0)                     -- display it to the joining player&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{XML functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=GetVehicleEngineState&amp;diff=21820</id>
		<title>GetVehicleEngineState</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=GetVehicleEngineState&amp;diff=21820"/>
		<updated>2009-10-29T19:37:36Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Example */ fixed a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
This function returns a vehicle's engine state (on or off).&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server and Client&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool getVehicleEngineState ( vehicle theVehicle )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''theVehicle''': The [[vehicle]] you wish to change the engine state of.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns '''true''' if the vehicle's engine is started, '''false''' otherwise.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Serverside example&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example will switch the vehicle engine state with the command &amp;quot;/switchengine&amp;quot;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function switchEngine ( playerSource )&lt;br /&gt;
    local theVehicle = getPlayerOccupiedVehicle ( playerSource )&lt;br /&gt;
&lt;br /&gt;
    -- Check if the player is in any vehicle and if he is the driver&lt;br /&gt;
    if theVehicle and getVehicleController ( theVehicle ) == playerSource then&lt;br /&gt;
        local state = getVehicleEngineState ( theVehicle )&lt;br /&gt;
        setVehicleEngineState ( theVehicle, not state )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;switchengine&amp;quot;, switchEngine )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Vehicle functions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Changes_in_1.0]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Lua_Tutorial&amp;diff=21817</id>
		<title>DE/Lua Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Lua_Tutorial&amp;diff=21817"/>
		<updated>2009-10-28T16:57:14Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Eingebettetes Pseudo-if-Statement */ fixed a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
Da es bis auf einige knappe und teils unprofessionelle Tutorials kein deutsches Lua Tutorial gibt, habe ich beschlossen, nun ein eigenes zu schreiben, welches alle für MTA notwendigen Grundlagen einfach und übersichtlich erklärt.&lt;br /&gt;
Weiterführende Möglichkeiten und Funktionen können der [http://www.lua.org/manual/5.1/ Offiziellen Lua Dokumentation] entnommen werden, die es jedoch nicht auf Deutsch gibt.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Grund ist, dass ich schon von einigen gehört habe und auch so schon den Verdacht hatte, dass MTA einfach so wenige deutsche Spieler und vor allem Server hat (gibt es überhaupt '''einen''' deutschen?), weil die meisten Probleme mit den englischen Dokumentationen haben oder der Meinung sind, dass für MTA ja sowieso kein deutscher Support vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Soviel nun dazu, wie es zu der Idee des deutschen Lua Tutorials kam.&lt;br /&gt;
Fangen wir an mit dem Erlernen einer neuen Sprache!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlagen==&lt;br /&gt;
===Lua, eine Skriptsprache===&lt;br /&gt;
Lua (portugiesisch für Mond) ist eine Skriptsprache zum Einbinden in Programme, um diese leichter weiterentwickeln und warten zu können. Insbesondere die geringe Größe des Interpreters von 120 KB und die hohe Geschwindigkeit verglichen mit anderen Skriptsprachen überzeugen viele Entwickler davon, Lua einzusetzen.&lt;br /&gt;
&lt;br /&gt;
Die Syntax lehnt sich an die von Pascal an, was besonders Anfängern den Einstieg in Lua erleichtert. Im Gegensatz zu von Pascal abgeleiteten Sprachen nutzt Lua jedoch „==“ und nicht „=“ als Vergleichsoperator.&lt;br /&gt;
&lt;br /&gt;
(Quelle: [http://de.wikipedia.org/wiki/Lua Wikipedia])&lt;br /&gt;
&lt;br /&gt;
Einige werden sich bei dieser Einführung vielleicht gefragt haben, was der Unterschied zwischen Skript- und Programmiersprache ist und was ein Interpreter sein soll. Im folgenden will ich diese beiden Fragen so kurz und einfach wie möglich klären.&lt;br /&gt;
&lt;br /&gt;
Eine '''Programmiersprache''' (z.B. C, C++, Pascal, Delphi) wird - wie der Name schon sagt - verwendet, um Programme zu schreiben. Ein Programm liegt bekannterweise in Form einer Executable (*.exe) vor. Diese kann weitgehend unabhängig von irgendwelchen Betriebssystemen oder der Umgebung selbstständig ausgeführt werden (z.B. durch Doppelklick). Weitgehend deswegen, da einige Programme aufgrund von Speicherersparnissen sogenannte Programmbibliotheken (original Dynamic Link Library, kurz dll) benötigen, um zu funktionieren. Erklärungen dazu findet ihr [http://de.wikipedia.org/wiki/Dynamic_Link_Library hier].&amp;lt;br&amp;gt;&lt;br /&gt;
Um einen Programmquellcode, d.h. einen Text, der in einer Programmiersprache geschrieben wurde, aus dem Textdokumentformat in eine Anwendung (original Executable, kurz exe) umzuwandeln, benötigt man nun einen Compiler (zu Deutsch Kompilierer oder Übersetzer), der die Programmiersprache aus der menschenlesbaren Form in die maschinenlesbare Form umwandelt. Neben dieser Hauptaufgabe übernimmt der Compiler natürlich noch weitere Aufgaben, auf die ich jetzt aber nicht genauer eingehen werde. Infos dazu findet ihr [http://de.wikipedia.org/wiki/Compiler hier].&amp;lt;br&amp;gt;&lt;br /&gt;
Die maschinenlesbare Form ist für Menschen unlesbar.&lt;br /&gt;
&lt;br /&gt;
Eine '''Skriptsprache''' (z.B. JavaScript, DOS-Batch(Win) bzw. Shell-Scripts(UNIX)) hingegen liegt standardmäßig in der menschenlesbaren Form vor. Skriptsprachen werden - wie im ersten Satz bereits erwähnt - vor allem von Programmen benutzt, um benutzerdefinierte Abläufe verwenden zu können. Zur Ausführung von Scripts wird ein sogenannter Interpreter benötigt, der das Skript liest und es Schritt für Schritt in die Maschinensprache umwandelt und ausführt. Manche Skriptsprachen kann man mit einem Precompiler (zu Deutsch Vorkompilierer oder Vorübersetzer) vorkompilieren. Diesen könnte man auch den Vorkauer vom Interpreter nennen, da er das Script schon zum Teil in die Maschinensprache umwandelt, jedoch nicht so extrem wie der Compiler der Programmiersprachen. Das Ergebnis davon ist logischerweise die schnellere Ausführung des Skripts.&lt;br /&gt;
&lt;br /&gt;
Genug der langweiligen Definitionen. Klären wir lieber, was man denn alles braucht, um ein Lua Script zu schreiben.&lt;br /&gt;
&lt;br /&gt;
===Materialien===&lt;br /&gt;
Lua Skripte werden üblicherweise als Textdateien mit der Endung .lua gespeichert. Die Endung ist jedoch nicht von belang. Es kann jede beliebige Endung gewählt werden.&lt;br /&gt;
&lt;br /&gt;
Wie jede normale Textdatei kann man also auch Lua Skripte mit dem standard Texteditor des vorhandenen Betriebssystems schreiben, editieren und lesen. Ich persönlich empfehle jedoch das Programm Notepad++, welches [http://notepad-plus.sourceforge.net/de/site.htm hier] heruntergeladen werden kann. Das Programm ist Freeware und wird regelmäßig aktualisiert und erweitert. Der Vorteil daran ist, dass es ein professionelles Syntax-Highlighting eingebaut hat, welches Schlagwörter und Standardfunktionen farblich oder anderweitig hervorhebt und somit die Übersichtlichkeit erheblich verbessert.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardmäßig wird die Sprache Lua automatisch an der Dateiendung .lua erkannt, solltest Du eine andere Endung verwenden und trotzdem das Lua Syntax-Highlighting verwenden wollen, kannst Du es oben im Menü „Sprachen“ einstellen.&lt;br /&gt;
&lt;br /&gt;
Wer ohne MTA seine kleinen Lua Skripte testen oder ausführen möchte, kann sich [http://luabinaries.luaforge.net/download.html hier] einen kostenlosen standalone Interpreter herunterladen. Wenn Du Dir nicht sicher bist, welche Windows Edition Du hast, dann hast Du wahrscheinlich eine 32 Bit Version, welche auf dieser Seite der „Windows x86 Executables“ entspricht. Die aktuelle Version (Win 32 Bit) dafür gibt es bei einem Klick auf [http://luaforge.net/frs/download.php/3134/lua5_1_3_Win32_bin.zip lua5_1_3_Win32_bin.zip].&amp;lt;br&amp;gt;&lt;br /&gt;
Nach dem Download kann der Standalone Interpreter mit einem Doppelklick auf die „lua5.1.exe“ gestartet werden. Dort kann man dann direkt Lua Befehle eingeben oder ein Script laden. Dies geht wie folgt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;dofile(&amp;quot;dateiname.lua&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kommentare==&lt;br /&gt;
Um sein Skript übersichtlicher zu gestalten, kann man mit Kommentaren bestimmte Zeilen eräutern, Bereiche abgrenzen, alten Code deaktivieren, ohne ihn zu entfernen und generell das Skript übersichtlicher gestalten.&amp;lt;br&amp;gt;&lt;br /&gt;
Kommentare werden vom Interpreter vollkommen ignoriert und sind nur für den Menschen lesbar und von Belang.&lt;br /&gt;
&lt;br /&gt;
===Einzeilig===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;-- Dies ist ein einzeiliger Kommentar. Er gilt von -- bis zum Ende dieser Zeile.&lt;br /&gt;
-- Automatische Zeilenumbrüche, die eingefügt werden, wenn die Zeilenlänge überschritten wurde, zählen nicht.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mehrzeilig===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;--[[ Dieser Kommentar&lt;br /&gt;
     geht über beliebig viele Zeilen&lt;br /&gt;
     und endet mit ]]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variablen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Eine Variable kann man sich wie eine kleine Kiste vorstellen, auf der außen ein Bezeichner (oder Name) steht und die einen Wert enthält. Während der Bezeichner immer gleich ist, kann der Inhalt variieren.&lt;br /&gt;
Jede Variable hat einen Variablentypen, der bei Programmiersprachen normalerweise zu Beginn des Programmes fest definiert wird und sich nicht ändern kann. Da Lua aber ja keine Programmiersprache ist, muss der Variablentyp zu Beginn und auch sonst nie festgelegt werden und kann sich beliebig oft verändern. Der Interpreter erkennt Variablentypen automatisch und nimmt dem Skripter somit eine Menge Arbeit (vor allem bzgl. der Planung) ab.&lt;br /&gt;
&lt;br /&gt;
===Typen===&lt;br /&gt;
Im Folgenden will ich die wichtigsten Variablentypen auflisten und kurz beschreiben.&lt;br /&gt;
;Integer (ganze Zahlen)&lt;br /&gt;
:Umfasst alle Ganzzahlen, sowohl negative als auch positive.&lt;br /&gt;
:Beispiele: -8, 0, 12, 2&lt;br /&gt;
;Float (Komma- bzw. gebrochene Zahlen)&lt;br /&gt;
:Umfasst alle Fließkommazahlen, sowohl negative als auch positive. Wichtig dabei ist, dass anstelle des Kommas (,) ein Dezimalpunkt (.) zum Trennen des ganzen vom gebrochenen Teil verwendet werden muss.&lt;br /&gt;
:Beispiele: -77.2, 0.0, 3.14159, 9.81&lt;br /&gt;
;String (Zeichenkette)&lt;br /&gt;
:Kann jedes beliebige Zeichen enthalten. Eine maximale Länge ist mir nicht bekannt. Strings müssen immer in Anführungszeichen(&amp;quot; oder ') eingschlossen werden.&lt;br /&gt;
:Beispiele: &amp;quot;hallo&amp;quot;, 'Lua ist toll!', &amp;quot;&amp;quot;, &amp;quot; :D &amp;quot;&lt;br /&gt;
;Boolean (Schalter)&lt;br /&gt;
:Kann zwei verschiedene Werte enthalten: ''true'' (dt. wahr bzw. an) oder ''false'' (dt. falsch bzw. aus). ''true'' entspricht dabei nicht dem Wert 1 und ''false'' nicht dem Wert 0.&lt;br /&gt;
:Beispiele: ''true'', ''false''&lt;br /&gt;
;Nil (Leer oder Nichts)&lt;br /&gt;
:''nil'' ist sowohl ein Wert als auch ein Typ. Eine Variable vom Typ ''nil'' enthält automatisch den Wert ''nil''. ''nil'' bedeutet ganz einfach nichts. Wenn eine Variable ''nil'' ist, existiert sie nicht. ''nil'' entspricht weder dem Wert 0 noch dem Wert ''false'' noch dem Wert &amp;quot;&amp;quot;!&lt;br /&gt;
:Beispiele: ''nil''&lt;br /&gt;
Ich werde auf jeden Variablentypen noch detaillierter eingehen. Außerdem wurden hier die Variablentypen '''function''' und '''table''' nicht aufgeführt, da diese jeweils ein eigenes Kapitel bekommen. Zwei weitere Typen, die diese Liste vervollständigen, sind '''userdata''' und '''thread''', auf die ich jedoch in diesem Tutorial nicht weiter eingehen werde, da vor allem letzteres vollkommen irrelevant für MTA ist.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Eine Variable definieren bedeutet im Grunde genommen eine Variable anlegen. In Lua muss einer Variable bei der Definition ein Wert zugewiesen werden. ''nil'' ist dabei als Wert auch möglich, macht jedoch wenig Sinn, da jede beliebige Variablenbezeichnung automatisch den Wert ''nil'' enthält.&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen '''lokalen''' und '''globalen''' Variablen. Um eine Variable als lokal zu definieren muss das Schlüsselwort ''local'' davor geschrieben werden. Lokal bedeutet für uns im Moment noch ganz einfach, dass die Variable nur im aktuellen Script verfügbar ist. Sollten also z.B. von einem Programm zwei verschiedene Lua Skripte geladen sein und benutzt werden, können diese untereinander auf die globalen Variablen des jeweils anderen Skripts zugreifen, auf die lokalen jedoch nicht. Generell empfiehlt es sich, immer lokale Variablen zu nehmen, falls man nicht explizit eine globale benötigt, da so vermieden wird, dass mehrere parallel laufende Skripte aufgrund von gleichen Variablenbezeichnern durcheinander kommen.&lt;br /&gt;
&lt;br /&gt;
====Einzeln====&lt;br /&gt;
Definieren wir uns also nun unsere erste lokale Variable und geben ihr einen ganzzahligen Inhalt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 7 -- weist der lokalen Variable zahl den Wert 7 zu&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine globale Variable erhält man, indem man einfach das ''local'' weglässt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;gZahl = 13 -- weist der globalen Variable gZahl den Wert 13 zu&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das selbe geht natürlich nun auch mit allen anderen Variablentypen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local ganzzahl = -5&lt;br /&gt;
local kommazahl = 0.008&lt;br /&gt;
local zeichenkette = &amp;quot;Hello World&amp;quot;&lt;br /&gt;
local schalter = true&lt;br /&gt;
local nichts = nil -- diese Zeile kann man sich im Grunde genommen sparen, da jede nicht definierte Variable automatisch den Wert nil hat&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Längere Strings mit mehreren Zeilenumbrüchen können in einer vereinfachten Weise zugewiesen werden. Dies funktioniert so ähnlich wie bei Kommentaren. Anstelle von Anführungszeichen verwendet man &amp;lt;nowiki&amp;gt;[[ als Anfangs- und ]]&amp;lt;/nowiki&amp;gt; als Endmarkierung des Strings.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local text = [[Willkommen auf unserem Server.&lt;br /&gt;
Bitte halte Dich an die Regeln.&lt;br /&gt;
MfG die Administration]]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alternativ kann in einem String, der in doppelten Anführungszeichen (&amp;quot;) eingeschlossen ist, folgende Steuerzeichen enthalten:&lt;br /&gt;
;\n&lt;br /&gt;
:Entspricht einem Zeilenumbruch.&lt;br /&gt;
;\t&lt;br /&gt;
:Entspricht einem Tabulator.&lt;br /&gt;
;\&amp;quot;&lt;br /&gt;
:Wird verwendet, um doppelte Anführungszeichen in einem String, der von doppelten Anführungszeichen eingeschlossen ist, darzustellen, ohne dass der Interpreter diese fälschlicherweise als Stringende auffasst.&lt;br /&gt;
;\'&lt;br /&gt;
:Wie \&amp;quot;, nur gilt dies in Strings, die von einfachen Anführungszeichen eingeschlossen sind.&lt;br /&gt;
;\\&lt;br /&gt;
:Entspricht einem Backslash (\)&lt;br /&gt;
&lt;br /&gt;
====Mehrere====&lt;br /&gt;
Man kann in einer Zeile mehrere Variablen definieren, indem man sie mit Kommas voneinander trennt. Die Variablentypen können dabei alle unterschiedlich sein. Hier mal ein Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local frucht, anzahl, reif = &amp;quot;apfel&amp;quot;, 4, true&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''local'' darf dabei nur einmal am Zeilenanfang stehen und bewirkt, dass alle dahinter aufgelisteten Variablen lokal werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten links neben dem Gleichheitszeichen mehr Variablenbezeichner stehen als rechts Werte, so bleiben die überschüssigen Variablen ''nil''. Im umgekehrten Fall werden überschüssige Werte rechts einfach ignoriert.&lt;br /&gt;
&lt;br /&gt;
==Operatoren==&lt;br /&gt;
===Arithmetische===&lt;br /&gt;
Arithmetische Operatoren werden verwendet, um Berechnungen durchzuführen. Somit kann man entweder mit Variablen, festen Zahlen oder einer Mischung neue Werte berechnen oder verändern.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Berechnungen gilt stets: '''Punkt- vor Strichrechnung'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
;Plus (+)&lt;br /&gt;
:Addiert zwei Werte miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a + b -- a + b entspricht hier der Rechnung 3 + 8, c erhält nun also den Wert 11&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Minus (-)&lt;br /&gt;
:Subtrahiert den zweiten vom ersten Wert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a - b -- a - b entspricht hier der Rechnung 3 - 8, c erhält nun also den Wert -5&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Mal (*)&lt;br /&gt;
:Multipliziert zwei Werte miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a * b -- a * b entspricht hier der Rechnung 3 * 8, c erhält nun also den Wert 24&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Geteilt (/)&lt;br /&gt;
:Dividiert den ersten durch den zweiten Wert. Hierbei entsteht in den meisten Fällen eine Kommazahl!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a / b -- a / b entspricht hier der Rechnung 3 / 8, c erhält nun also den Wert 0.375&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;Modulo (%)&lt;br /&gt;
:Ermittelt den Rest, der übrig bleibt, wenn man die erste Zahl durch die zweite teilt.&lt;br /&gt;
:Der Modulo-Operator gehört zur Punktrechnung.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 14, 3&lt;br /&gt;
local c = a % b -- a % b entspricht hier der Rechnung 14 % 3, c erhält nun also den Wert 2, da 14 / 3 = 4 REST 2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Minus (-) (als Vorzeichen)&lt;br /&gt;
:Dient zur Darstellung einer negativen Zahl, also einer Zahl unter 0.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = -3 -- entspricht der Rechnung a = 0 - 3&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Hoch (^)&lt;br /&gt;
:Potenziert die erste Zahl mit der zweiten.&lt;br /&gt;
:Potenzen werden noch '''vor''' der Punktrechnung ausgerechnet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a ^ b -- a ^ b entspricht hier der Rechnung 3 ^ 8 (3&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;), c erhält nun also den Wert 6561&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logische===&lt;br /&gt;
Logische Operatoren werden Benutzt, um Werte miteinander zu vergleichen und mehrere Bedingungen zu verknüpfen. Wir werden genauer auf sie zurückkommen, wenn es um Bedingungen geht. Bis dahin reicht es, wenn man sich merkt, dass ein logischer Vergleich entweder ''true'' (wenn die Aussage wahr ist) oder ''false'' (wenn die Aussage falsch ist) ergibt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
;Gleich (==)&lt;br /&gt;
:Prüft, ob zwei Werte gleich sind.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 == 5) -- a ist true, da die Aussage wahr ist&lt;br /&gt;
local b = (5 == 8) -- b ist false, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Ungleich (~=)&lt;br /&gt;
:Prüft, ob zwei Werte ungleich sind.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 ~= 5) -- a ist false, da die Aussage falsch ist&lt;br /&gt;
local b = (5 ~= 8) -- b ist true, da die Aussage wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Größer als (&amp;gt;)&lt;br /&gt;
:Prüft, ob der erste Wert größer als der zweite ist.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;gt; 5) -- a ist false, da die Aussage falsch ist&lt;br /&gt;
local b = (5 &amp;gt; 8) -- b ist false, da die Aussage falsch ist&lt;br /&gt;
local c = (8 &amp;gt; 5) -- c ist true, da die Aussage wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Größer als oder gleich (&amp;gt;=)&lt;br /&gt;
:Prüft, ob der erste Wert größer als der zweite ist oder dem zweiten gleicht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;gt;= 5) -- a ist true, da die Aussage wahr ist&lt;br /&gt;
local b = (5 &amp;gt;= 8) -- b ist false, da die Aussage falsch ist&lt;br /&gt;
local c = (8 &amp;gt;= 5) -- c ist true, da die Aussage wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Kleiner als (&amp;lt;)&lt;br /&gt;
:Prüft, ob der erste Wert kleiner als der zweite ist.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;lt; 5) -- a ist false, da die Aussage falsch ist&lt;br /&gt;
local b = (5 &amp;lt; 8) -- b ist true, da die Aussage wahr ist&lt;br /&gt;
local c = (8 &amp;lt; 5) -- c ist false, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Kleiner als oder gleich (&amp;lt;=)&lt;br /&gt;
:Prüft, ob der erste Wert kleiner als der zweite ist oder dem zweiten gleicht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;lt;= 5) -- a ist true, da die Aussage wahr ist&lt;br /&gt;
local b = (5 &amp;lt;= 8) -- b ist true, da die Aussage wahr ist&lt;br /&gt;
local c = (8 &amp;lt;= 5) -- c ist false, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;Und (and)&lt;br /&gt;
:Verknüpft zwei Bedingungen miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (true and false) -- a ist false, da nicht beide Aussagen wahr sind&lt;br /&gt;
local b = (5 &amp;lt; 8) and (7 == 7) -- b ist true, da beide Aussagen wahr sind&lt;br /&gt;
local c = (8 &amp;gt; 5) and (1 ~= 2) and (0 &amp;lt;= -7) -- c ist false, da die dritte Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Oder (or)&lt;br /&gt;
:Verknüpft zwei Bedingungen miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (true or false) -- a ist true, da die erste Aussage wahr ist&lt;br /&gt;
local b = (5 &amp;lt; 8) or (7 == 7) -- b ist true, da mindestens eine der Aussagen wahr ist&lt;br /&gt;
local c = (8 &amp;gt; 5) or (1 ~= 2) or (0 &amp;lt;= -7) -- c ist true, da mindestens eine der Aussagen wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Nicht (not)&lt;br /&gt;
:Kehrt einen Booleanwert um.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = not true -- a ist false&lt;br /&gt;
local b = not false -- b ist true&lt;br /&gt;
local c = not (0 == 8) -- c ist true, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sonstige===&lt;br /&gt;
Lua hat noch zwei weitere Operatoren, die sich jedoch nicht in die oberen Gruppen eingliedern lassen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;Länge (#)&lt;br /&gt;
:Steht für die Länge eines Strings oder einer Table.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local sprache = &amp;quot;deutsch&amp;quot;&lt;br /&gt;
local laenge = #sprache -- laenge wird hier auf 7 gesetzt, da das Wort &amp;quot;deutsch&amp;quot; 7 Buchstaben hat&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Verknüpfung (..)&lt;br /&gt;
:Verknüpft zwei Strings miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local geschlecht, alter = &amp;quot;männlich&amp;quot;, &amp;quot;18&amp;quot;&lt;br /&gt;
local satz = &amp;quot;Ich bin &amp;quot;..geschlecht..&amp;quot; und &amp;quot;..alter..&amp;quot; Jahre alt.&amp;quot; -- weist satz den Wert &amp;quot;Ich bin männlich und 18 Jahre alt.&amp;quot; zu&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Natürlich können auch alle anderen Variablentypen mit- und untereinander verglichen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Längenoperator (#) sowie der Verknüpfungsoperator (..) sind nur für Strings gedacht, wobei der erste später noch bei Tables eine Rolle spielen wird und der zweite es nicht so genau nimmt mit den Variablentypen. Bei Booleans und ''nil'' jedoch führt er in jedem Fall zu einem Fehler. Wir kommen später noch darauf zu sprechen, wie man soetwas umgeht.&amp;lt;br&amp;gt;&lt;br /&gt;
Für Integer und Floats sind alle Vergleichsoperatoren und die arithmetischen verfügbar. Strings unterstützen nur die Vergleichsoperatoren, wobei man mit den größer/kleiner Operatoren zwei Strings nach dem Alphabet ordnen kann.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&amp;quot;a&amp;quot; &amp;lt; &amp;quot;b&amp;quot; -- ergibt true, da a vor b im Alphabet kommt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Strings, Booleans und ''nil'' kann man nur untereinander vergleichen, nicht miteinander. Miteinander führt in jedem Fall zu ''false''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bedingungen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Bedingungen sind dazu da, um bestimmte Anweisungen nur auszuführen, wenn ein bestimmter Sachverhalt gegeben ist.&lt;br /&gt;
Ein Beispiel wäre, wenn ein Spieler einem anderen Spieler eine private Nachricht senden möchte. Dann kann er das natürlich nur tun, wenn der adressierte Spieler auch online ist.&lt;br /&gt;
Also soll die Nachricht in einem solchen Fall gesendet werden, andernfalls dem Sender jedoch eine Fehlermeldung ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
Die Syntax einer Bedingung, die man übrigens auch „if-Statement“ (if = engl. für wenn) oder im Englischen „condition“ nennt, ist recht simpel.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if &amp;lt;bedingung&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung wahr (=true) ist&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Für &amp;lt;bedingung&amp;gt; darf hier jeder Audruck eingesetzt werden, der letztendlich irgendeinen Wert ergibt.&lt;br /&gt;
Sollte &amp;lt;bedingung&amp;gt; ''nil'' oder ''false'' sein, so wird die Anweisung zwischen then und end nicht ausgeführt, andernfalls wird sie ausgeführt.&lt;br /&gt;
&lt;br /&gt;
===Else-Statement===&lt;br /&gt;
Auf jedes if-Statement darf ein else-Statement (else = engl. für sonst) folgen. Dieses benötigt kein then und auch keine Bedingung, sondern wird ausgeführt, wenn die Bedingung des if-Statements ''nil'' oder ''false'' ist. Das else-Statement ist optional!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if &amp;lt;bedingung&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung erfüllt wird&lt;br /&gt;
else&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung nicht erfüllt wird&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elseif-Statement===&lt;br /&gt;
Das elseif-Statement ist ein spezielles Statement, was es erlaubt, einer unübersichtlichen Verschachtelung zu entgehen, indem es die Möglichkeit bietet, einem else-Statement auch eine Bedingung zu geben. Ein if-Statement darf beliebig viele elseif-Statements enthalten. Diese müssen jedoch zwischen dem if- und dem else-Statement (falls vorhanden) stehen. Für die Bedingung gilt hier das selbe, wie für das if-Statement. Wichtig ist, dass demnach auch hier ein then erforderlich ist. Genauso wie das else-Statement ist jedoch auch das elseif-Statement optional!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if &amp;lt;bedingung1&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung 1 erfüllt wird&lt;br /&gt;
elseif &amp;lt;bedingung2&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung 2 erfüllt wird&lt;br /&gt;
else&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn weder Bedingung 1 noch Bedingung 2 erfüllt werden&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bedingungen formulieren===&lt;br /&gt;
Bei der Bedingung eines if-Statements muss nicht zwangsläufig ein Boolean herauskommen. Wie bereits erwähnt, ist die Bedingung immer dann wahr, wenn sie weder ''nil'' noch ''false'' ist.&lt;br /&gt;
D.h., dass auch Werte wie 0, &amp;quot;Hallo&amp;quot; und 3.14159 als „wahr“ gelten. Natürlich ist das auch bei ''true'' der Fall.&lt;br /&gt;
&lt;br /&gt;
Um komplexere Bedingungen zu formulieren, werden auf jeden Fall die bereits aufgelisteten logischen Operatoren benötigt.&lt;br /&gt;
Mit diesen kann man für jeden nur erdenklichen Fall eine Bedingung formulieren.&lt;br /&gt;
&lt;br /&gt;
Wenn logische (Vergleichs-)Operatoren (==, ~=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=) angewandt werden, kommt dabei immer ein Boolean raus, wie man auch schon an den gegebenen Beispielen erkennen kann.&lt;br /&gt;
Verknüfungen (and, or) sind dazu gedacht, um z.B. zu überprüfen, ob mehrere oder wenigstens eine Bedingung von vielen erfüllt werden oder nicht. Der not-Operator ermöglicht es, zu überprüfen, ob eine Bedingung nicht erfüllt wird.&lt;br /&gt;
&lt;br /&gt;
Zu dem and- und dem or-Operator möchte ich an dieser Stelle noch etwas ergänzen. Der and-Operator wird zunächst einmal dazu verwendet, um herauszufinden, ob zwei Bedingungen gleichzeitig erfüllt sind. Der or-Operator wird dazu benutzt, um herauszufinden, ob eine von zweien oder beide Bedingungen erfüllt sind.&lt;br /&gt;
&lt;br /&gt;
Weder der and- noch der or-Operator geben aber zwangsläufig einen Boolean zurück.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1 and wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte wert1 ''nil'' oder ''false'' sein, so entspricht dieser Ausdruck dem folgenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ist wert1 weder ''nil'' noch ''false'', so entspricht der Ausdruck dem hier:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei or ist es ähnlich, nur umgekehrt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1 or wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte wert1 ''nil'' oder ''false'' sein, so entspricht dieser Ausdruck dem folgenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ist wert1 weder ''nil'' noch ''false'', so entspricht der Ausdruck dem hier:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
====50-50-Chance====&lt;br /&gt;
Dieses Beispiel simuliert einen Münzwurf. math.random() und print() sind standard Lua-Funktionen. Zum Thema Funktionen komme ich später. Für dieses Beispiel reicht es, wenn ihr wisst, dass math.random() eine Zufallszahl (float) zwischen 0 und 1 zurückgibt und print(&amp;quot;text&amp;quot;) den in den Klammern eingeschlossenen String in die Konsole ausgibt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zufall = math.random()&lt;br /&gt;
if (zufall &amp;lt; 0.5) then&lt;br /&gt;
    print(&amp;quot;Kopf&amp;quot;)&lt;br /&gt;
else&lt;br /&gt;
    print(&amp;quot;Zahl&amp;quot;)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
====Der Nutzen von elseif====&lt;br /&gt;
Im Folgenden wollen wir herausfinden, ob eine Zahl positiv, negativ oder 0 ist. Dazu möchte ich zuerst ein Beispiel ohne und danach eines mit elseif zeigen, um meine Aussage, dass elseif Verschachtelungen spart, zu verifizieren.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 14&lt;br /&gt;
&lt;br /&gt;
--ohne elseif&lt;br /&gt;
if (zahl &amp;lt; 0) then&lt;br /&gt;
    print(&amp;quot;Die Zahl ist negativ.&amp;quot;)&lt;br /&gt;
else&lt;br /&gt;
    if (zahl == 0) then&lt;br /&gt;
        print(&amp;quot;Die Zahl entspricht 0.&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        print(&amp;quot;Die Zahl ist positiv.&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--mit elseif&lt;br /&gt;
if (zahl &amp;lt; 0) then&lt;br /&gt;
    print(&amp;quot;Die Zahl ist negativ.&amp;quot;)&lt;br /&gt;
elseif (zahl == 0) then&lt;br /&gt;
    print(&amp;quot;Die Zahl entspricht 0.&amp;quot;)&lt;br /&gt;
else&lt;br /&gt;
    print(&amp;quot;Die Zahl ist positiv.&amp;quot;)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Je komplexer das ganze if-Statement, desto nützlicher wird elseif sein.&lt;br /&gt;
====Eingebettetes Pseudo-if-Statement====&lt;br /&gt;
In vielen Script- und Programmiersprachen gibt es ein gekürztes if-Statement. In Javascript z.B. geht das wie folgt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;var nachricht = &amp;quot;Du benutzt zurzeit &amp;quot; + (ie ? &amp;quot;den Internet Explorer&amp;quot; : &amp;quot;einen guten Browser&amp;quot;) + &amp;quot;.&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wir gehen dabei davon aus, dass in der Variable ie ein Boolean gespeichert ist, der ''true'' ist, wenn der Benutzer den Internet Explorer benutzt, ansonsten ''false''.&lt;br /&gt;
Diese Art von eingebetteten if-Statements gibt es noch in vielen anderen Sprachen, unter anderen in PHP, Java und C(++). In meinem Beispiel kann man sich das ? als then und den : als else vorstellen. Dann sollte es eigentlich nicht allzu schwer sein, diese Art von if-Statement zu verstehen.&lt;br /&gt;
&lt;br /&gt;
So direkt gibt es das bei Lua nicht, aber mit and und or kann man sich ein Konstrukt bauen, welches auf die gleiche Weise funktioniert. Dazu werde ich einfach mal das obere Beispiel in Lua umwandeln, auch, wenn Lua eigentlich nicht viel mit Browsern am Hut hat.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local nachricht = &amp;quot;Du benutzt zurzeit &amp;quot;..(ie and &amp;quot;den Internet Explorer&amp;quot; or &amp;quot;einen guten Browser&amp;quot;)..&amp;quot;.&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zuerst ist das and an der Reihe. Es schmeißt den String &amp;quot;den Internet Explorer&amp;quot; raus, wenn ie ''false'' (oder ''nil'') ist und zurück bleibt auf jeden Fall ''false'' (oder ''nil''). Das wird dann vom or rausgeschmissen und zurück bleibt &amp;quot;einen guten Browser&amp;quot;.&lt;br /&gt;
Wenn ie weder ''false'' noch ''nil'' ist, schmeißt and die Variable ie raus und zurück bleibt &amp;quot;den Internet Explorer&amp;quot;. Da dieser String weder ''false'' noch ''nil'' ist, wird er vom or beibelassen und &amp;quot;einen guten Browser&amp;quot; rausgeschmissen.&lt;br /&gt;
Entschuldigt meine Ausdrucksweise mit dem rausschmeißen, aber das schien mir die beste Möglichkeit, diese Methode verständlich zu erklären.&lt;br /&gt;
&lt;br /&gt;
==Tabellen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Tabellen sind spezielle Variablen, die mehrere Werte enthalten können.&lt;br /&gt;
Damit wir Tabellen verwenden können, führe ich nun erst einmal den Variablentyp „table“ ein. Mit einer table-Variable kann man ersteinmal kaum Operationen durchführen. Dazu benötigt man Funktionen, zu denen wir aber erst später kommen.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Um eine Variable als (leere) table zu definieren, benutzt man diesen Ausdruck:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Funktionen macht das noch recht wenig Sinn. Um einer Tabelle direkt mehrere Werte zuzuweisen, schreibt man diese einfach durch Kommata getrennt zwischen die geschweiften Klammern.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle1 = { &amp;quot;Apfel&amp;quot;, 14, 3.14159, true }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine table kann alle möglichen Typen von Variablen enthalten. So zum Beispiel auch andere Tabellen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle2 = { 1, { 1.25, 1.5, 1.75 }, 2, { 2.25, 2.5, 2.75 } }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun auf die Elemente einer table zugreifen zu können, benutzt man Indizes (Indizes ist der Plural von Index). Jedes Element in einer table hat einen Index. Wenn man die Tabellen so definiert, wie ich es gemacht habe, so wird jedem Element ein integer als Index zugewiesen, wobei das erste Element die 1 als Index bekommt, das zweite die 2 usw.&lt;br /&gt;
Der ungefähre Wert von Pi (3.14159) in der oberen Tabelle hat den Index 3. Um anhand eines Indizes ein Element einer Tabelle abzufragen, schreibt man den Index einfach in eckigen Klammern hinter den Tabellennamen.&lt;br /&gt;
tabelle1[3] entspricht also dem Wert 3.14159.&lt;br /&gt;
Wenn das Element der Tabelle selbst noch eine Tabelle ist, wie z.B. das Element mit dem index 2 aus tabelle2, dann setzt man die Indizes einfach hintereinander. Der Wert 2.25 ist demnach in tabelle2[4][1] gespeichert.&lt;br /&gt;
&lt;br /&gt;
===Ganzzahlige Indizes===&lt;br /&gt;
Um gezielt bestimmten Indizes einen Wert zuzuweisen, kann man folgende Schreibweise verwenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local auskunft = { [11] = &amp;quot;elf&amp;quot;, [88] = &amp;quot;achtundachtzig&amp;quot;, [0] = &amp;quot;null&amp;quot; }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei spielt es keine Rolle, in welcher Reihenfolge die Indizes einen Wert zugewiesen bekommen und es spiel auch keine Rolle, ob die Indizes positiv oder negativ sind.&lt;br /&gt;
Es muss jedoch beachtet werden, dass etwas wie { [1] = &amp;quot;eins&amp;quot;, &amp;quot;zwei&amp;quot; } dem Index 1 den Wert &amp;quot;zwei&amp;quot; zuweisen würde, da Lua immer bei 1 anfängt zu zählen, egal, ob der Scripter den Index 1 bereits definiert hat.&lt;br /&gt;
&lt;br /&gt;
===Zeichenketten als Indizes===&lt;br /&gt;
Ein Index kann auch ein String sein. Dazu verwendet man folgende Schreibweise:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;lua konstanten = { [&amp;quot;pi&amp;quot;] = 3.14159, [&amp;quot;e&amp;quot;] = 2.71828 }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ansprechen kann man diese Werte genauso wie bei integer-Indizes. konstanten[&amp;quot;pi&amp;quot;] ist also 3.14159.&lt;br /&gt;
&lt;br /&gt;
Eine Besonderheit bei Zeichenketten als Index ist, dass es eine vereinfachte Schreibweise gibt. Sowohl bei der Definition als auch bei der Abfrage der Elemente. Das obige Beispiel kann auch so realisiert werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;lua konstanten = { pi = 3.14159, e = 2.71828 }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zum Abfragen der Elemente kann man die Schreibweise konstanten.pi bzw. konstanten.e verwenden.&lt;br /&gt;
Man sollte aber bedenken, dass Schlüsselwörter wie z.B. if oder local als Indizes besser mit [&amp;quot;if&amp;quot;] und [&amp;quot;local&amp;quot;] definiert werden.&lt;br /&gt;
&lt;br /&gt;
===Beliebige Indizes===&lt;br /&gt;
Ein Index muss nicht unbedingt ein integer oder ein string sein. Genauer gesagt kann ein Index ein beliebiger Wert (außer ''nil'') sein.&lt;br /&gt;
Somit wäre z.B. auch das möglich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = { [true] = &amp;quot;wahr&amp;quot;, [3.14159] = &amp;quot;pi&amp;quot;, [0] = 1, 123 }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Zahl 123 hätte hier übrigens den Index 1.&lt;br /&gt;
&lt;br /&gt;
===Einzelzuweisungen===&lt;br /&gt;
Man muss nicht immer alle Werte einer table auf einmal definieren. Jedes Tabellenelement lässt sich wie eine normale Variable behandeln.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = {}&lt;br /&gt;
tabelle[true] = &amp;quot;wahr&amp;quot;&lt;br /&gt;
tabelle.pi = 3.14159&lt;br /&gt;
tabelle[2] = { 1, 2, 3 }&lt;br /&gt;
tabelle[2][0] = 0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jedes undefinierte Element hat - genauso wie jede undefinierte Variable - den Wert ''nil''.&lt;br /&gt;
&lt;br /&gt;
===Verlinkungen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle1 = { 1, 2, 3 }&lt;br /&gt;
local tabelle2 = tabelle1&lt;br /&gt;
tabelle1[1] = 4&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In der zweiten Zeile dieses Beispiels wird die tabelle1 nicht in die Variable tabelle2 kopiert, sondern tabelle2 verweist ab sofort auf tabelle1. Am Ende des Codes wäre also tabelle2[1] auch 4, obwohl es nicht explizit zugewiesen wurde.&lt;br /&gt;
&lt;br /&gt;
Um eine Tabelle zu kopieren, könnt ihr euch die Useful Function [[table.copy]] aus der Wiki kopieren und diese dazu verwenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schleifen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Schleifen verwendet man immer dann, wenn man eine oder mehrere Anweisungen mehr als einmal direkt hintereinander ausführen möchte oder wenn man eine oder mehrere Anweisungen für jedes Element einer table ausführen möchte.&lt;br /&gt;
Es gibt drei verschiedene Arten von Schleifen. Diese werde ich jetzt hier einzeln vorstellen.&lt;br /&gt;
&lt;br /&gt;
===While-Schleife===&lt;br /&gt;
Die while-Schleife wiederholt eine oder mehrere Anweisungen solange, bis eine bestimmte Bedingung nicht mehr erfüllt wird.&lt;br /&gt;
Die Syntax ist die folgende:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;while [bedingung] do&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 10&lt;br /&gt;
while (zahl &amp;gt;= 0) do&lt;br /&gt;
    print(zahl)&lt;br /&gt;
    zahl = zahl - 1&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Beispiel gibt nacheinander alle Zahlen von 10 bis 0 aus. Nach der Schleife hat zahl dann den Wert -1.&lt;br /&gt;
&lt;br /&gt;
===Repeat-Until-Schleife===&lt;br /&gt;
Die repeat-until-Schleife wiederholt eine oder mehrere Anweisungen solange, bis eine bestimmte Bedingung erfüllt ist. Sie führt diese Anweisung(en) aber in jedem Fall einmal aus.&lt;br /&gt;
Die Syntax lautet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;repeat&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
until [bedingung]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obere Beispiel lässt sich hiermit wie folgt realisieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 10&lt;br /&gt;
repeat&lt;br /&gt;
    print(zahl)&lt;br /&gt;
    zahl = zahl - 1&lt;br /&gt;
until (zahl &amp;lt; 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===For-Schleife===&lt;br /&gt;
Es gibt zwei verschiedene for-Schleifen. Einmal die einfache numerische for-Schleife und zum Anderen die generische for-Schleife, mit der man u.a. alle Elemente einer tabelle durchlaufen kann. Mit der generischen for-Schleife kann man noch ganz andere wesentlich komplexere Operationen durchführen, die ich hier aber nicht erklären werde, da sie auch - zumindest beim Scripten für MTA - nicht wirklich benötigt werden.&lt;br /&gt;
====Numerisch====&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for [laufvariable], [maximum], [schrittweite] do&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Laufvariable wird nach jedem Durchlauf der Schleife um die Schrittweite erhöht, bis sie größer oder gleich dem Maximum ist. Alle drei Werte müssen numerisch sein, d.h. ein integer oder ein float. Die Schrittweite kann auch weggelassen werden. Sie ist dann automatisch 1.&lt;br /&gt;
Unser Beispiel von oben sähe mit einer for-Schleife so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for i=10, 0, -1 do&lt;br /&gt;
    print(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Variable i ist nur innerhalb der Schleife verfügbar. Damit sie auch nach der Schleife noch verfügbar ist, muss man sie schon vor der Schleife deklarieren.&lt;br /&gt;
====Generisch====&lt;br /&gt;
Die generische for-Schleife wird hauptsächlich dazu verwendet, um tables zu durchlaufen. Ich werde sie daher auch nur in diesem Zusammenhang erläutern.&lt;br /&gt;
Die Syntax für den Fall, dass man eine table durchlaufen will, ist:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for [index], [wert] in pairs([tabelle]) do&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Diese Schleife geht durch alle Elemente der Tabelle und führt die Anweisungen somit für alle Elemente der Tabelle aus, wobei Index jedes Mal dem aktuellen Index des Tabellenelements und Wert jedes Mal dem aktuellen Wert des Tabellenelements entspricht.&lt;br /&gt;
Anstelle von pairs() kann man auch ipairs() nehmen, wenn man nur alle ganzzahligen Indizes durchlaufen möchte.&lt;br /&gt;
Hier mal ein Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = { eins = 1, &amp;quot;hallo&amp;quot;, pi = 3.14159 }&lt;br /&gt;
&lt;br /&gt;
-- mit pairs&lt;br /&gt;
for index, wert in pairs(tabelle) do&lt;br /&gt;
  print(tostring(index)..&amp;quot;=&amp;quot;..tostring(wert)..&amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
-- Ausgabe: &amp;quot;eins=1, 1=hallo, pi=3.14159, &amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- mit ipairs&lt;br /&gt;
for index, wert in ipairs(tabelle) do&lt;br /&gt;
  print(tostring(index)..&amp;quot;=&amp;quot;..tostring(wert)..&amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
-- Ausgabe: &amp;quot;1=hallo, &amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
tostring() ist übrigens eine Funktion, die eine beliebige Variable in einen string umwandelt. Wenn man Variablen mit einem string verknüpfen will und sich nicht sicher ist, ob diese Variablen string sind oder nicht, sollte man auf jeden Fall diese Funktion verwenden, da ansonsten Fehler auftreten können. (Lua gibt einen Error aus, wenn man z.B. soetwas versucht: &amp;quot;Hallo &amp;quot;..nil..&amp;quot;.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Schleifenabbruch===&lt;br /&gt;
Mit dem Schlüsselwort break kann man eine Schleife sofort abbrechen.&lt;br /&gt;
Hier ein kurzes Beispiel dazu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 10&lt;br /&gt;
while (true) do&lt;br /&gt;
    print(zahl)&lt;br /&gt;
    zahl = zahl - 1&lt;br /&gt;
    if (zahl &amp;lt; 0) then&lt;br /&gt;
        break&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Diese Schleife würde auch alle Zahlen von 10 bis 0 nacheinander ausgeben, nur dass der Abbruch manuell erfolgt, wenn zahl negativ wird. Ohne diese Bedingung würde die Schleife endlos laufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Funktionen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Funktionen sind im Grunde genommen Anweisungsblöcke, die - meist in Abhängigkeit von übergebenen Werten - mehrmals an unterschiedlichen Orten im Script bzw. zu unterschiedlichen Zeiten ausgeführt werden sollen.&lt;br /&gt;
Da eine Funktion - sofern sie mehr als einmal ausgeführt werden soll bzw. mehr als einmal benötigt wird - auch in einer Variable gespeichert werden kann, kann man den Variablentyp function einführen, der in Lua auch tatsächlich existiert.&lt;br /&gt;
Funktionen können Werte übergeben bekommen und auch Werte zurückgeben.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Die allgemeine Syntax für das Definieren einer Funktion ist die folgende:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function [funktionsname]([parameterliste])&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Funktion, die das Quadrat einer Zahl zurückgibt, wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function quadrat(zahl)&lt;br /&gt;
    return zahl * zahl&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ kann eine Funktion übrigens auch so einer Variable zugewiesen werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;quadrat = function (zahl) return zahl * zahl end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rückgabewerte===&lt;br /&gt;
return wird verwendet, um die Funktion einen Wert zurückgeben zu lassen. Nach einem return-Befehl bricht die Funktion alle Tätigkeiten ab und ist beendet.&lt;br /&gt;
Um einen Rückgabewert verwenden zu können, müssen wir aber ersteinmal wissen, wie man eine Funktion dazu bringt, die Anweisungen, die sie enthält, auszuführen.&lt;br /&gt;
Das geht allgemein mit funktionsname(parameterliste).&lt;br /&gt;
Als Beispiel für unsere quadrat-Funktion:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local vier = quadrat(2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir quadrat(2) ausführen, dann wird der obrige Code ausgeführt, wobei die Variable zahl den Wert 2 zugewiesen bekommt. zahl ist dabei jedoch nur innerhalb der Funktion definiert.&lt;br /&gt;
Die Variable vier bekommt nun den Wert 2 * 2, also 4 zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local vier = quadrat&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
würde die Funktion quadrat in die Variable vier kopieren. Man könnte nun also auch vier(2) aufrufen, um 4 zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Eine Funktion kann auch mehrere Funktionswerte zurückgeben. Das ist vor allem dann sinnvoll, wenn es sich um Positionen handelt, was bei MTA ja nicht selten vorkommt.&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function berechnungen(zahl1, zahl2)&lt;br /&gt;
    return zahl1 + zahl2, zahl1 - zahl2, zahl1 * zahl2, zahl1 / zahl2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local summe, differenz, produkt, quotient = berechnungen(5, 10)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird summe = 15, differenz = -5, produkt = 50 und quotient = 0.5.&lt;br /&gt;
&lt;br /&gt;
===Lua Standardfunktionen===&lt;br /&gt;
Funktionen wie tostring, print und math.random sind Standardfunktionen von Lua. Eine komplette Liste aller Lua Standardfunktionen bekommt ihr auf der [http://www.lua.org/manual/5.1/#index offiziellen Lua Webseite] (Englisch).&lt;br /&gt;
&lt;br /&gt;
Die Standard-string-Funktionen erlauben eine besondere Syntax, die ich hier kurz erläutern möchte, da sie von vielen erfahrenen Scriptern genutzt wird und es hilfreich ist, wenn man etwas damit anfangen kann.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local name = &amp;quot;Firzen Polas&amp;quot;&lt;br /&gt;
local laenge = string.len(name)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dieser Code weist der Variable laenge die Länge des strings &amp;quot;Firzen Polas&amp;quot;, also 12, zu.&lt;br /&gt;
Alternativ kann man auch den folgenden Code verwenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local name = &amp;quot;Firzen Polas&amp;quot;&lt;br /&gt;
local laenge = name:len()&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorraussetzung ist, dass die Variable vor dem Doppelpunkt ein string ist. Bei den math- und table-Funktionen funktioniert dies nicht.&lt;br /&gt;
&lt;br /&gt;
===Rekursive Funktionen===&lt;br /&gt;
Rekursive Funktionen sind eine effektive Alternative zu Schleifen - zumindest in manchen seltenen Fällen. Das berühmteste Beispiel ist das Berechnen einer Fakultät.&lt;br /&gt;
Zur Information: n! (sprich: n Fakultät) bezeichnet das Produkt aller Ganzzahlen von n bis 1, also quasi 1*2*3*4*...*n.&lt;br /&gt;
Beispiel: 3! = 1 * 2 * 3 = 6&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function fakultaet(zahl)&lt;br /&gt;
    if (zahl &amp;gt; 0) then&lt;br /&gt;
        return zahl * fakultaet(zahl - 1)&lt;br /&gt;
    else&lt;br /&gt;
        return 1&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit Schleife sähe das so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function fakultaet(zahl)&lt;br /&gt;
    if (zahl == 0) then&lt;br /&gt;
        return 1&lt;br /&gt;
    end&lt;br /&gt;
    for i=zahl-1, 1, -1 do&lt;br /&gt;
        zahl = zahl * i&lt;br /&gt;
    end&lt;br /&gt;
    return zahl&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Variable Parameterzahl===&lt;br /&gt;
Manchmal benötigt eine Funktion nicht zwingend eine bestimmte Anzahl von Parametern oder soll eine variable Anzahl an Parametern akzeptieren.&lt;br /&gt;
Dies lässt sich realisieren mit drei Punkten am Ende der Parameterliste.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function aufsummieren(...)&lt;br /&gt;
    local parameter = {...}&lt;br /&gt;
    local summe = 0&lt;br /&gt;
    for _, zahl in pairs(parameter)&lt;br /&gt;
        summe = summe + tonumber(zahl)&lt;br /&gt;
    end&lt;br /&gt;
    return summe&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
... entspricht dabei innerhalb der Funktion der Parameterliste als normale Liste.&lt;br /&gt;
D.h., wenn man aufsummieren(1, 2, 3, 4) aufruft, dann wird parameter = {1, 2, 3, 4}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fragen, Anregungen, Kritik==&lt;br /&gt;
Sollten noch irgendwelche Fragen offen sein, so könnt ihr jederzeit in unserem [irc://irc.gtanet.com/#mta.german IRC Channel] oder in unserem [http://sebihunter.de/wbb/ Forum] vorbeischauen und eure Fragen dort loswerden.&lt;br /&gt;
Außerdem haben wir in unserem IRC Channel einen Lua Bot, an dem ihr Funktionen, die auf den standard Lua Funktionen basieren, ausprobieren könnt.&lt;br /&gt;
&lt;br /&gt;
Anregungen und Kritik nehme ich dort auch entgegen. Alternativ könnt ihr diese hier in die Diskussion schreiben.&lt;br /&gt;
Falls ihr Fehler findet, behebt diese bitte oder gebt mir Bescheid.&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, das Tutorial konnte euch weiterhelfen. Wenn ihr nun Hilfe braucht bei eurem ersten Gamemode in MTA, dann solltet ihr euch die [[DE/MTA_Scripting_Grundlagen|MTA Scripting Grundlagen]] durchlesen. Viel Erfolg.&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21809</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21809"/>
		<updated>2009-10-27T18:17:55Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: fixed a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFEEAA; padding: 5px; float:right; width: 30%;&amp;quot;&amp;gt;Aktuelle stabile Version von '''Multi Theft Auto: San Andreas Deathmatch''' ist '''{{Current Version|full}}'''. Diese kann auf der [http://mtasa.com/ Hauptseite] heruntergeladen werden.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Du kannst dir auch die [http://nightly.mtasa.com/ neueste nightly Version] herunterladen, die die neuesten Updates beinhaltet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Willkommen im Multi Theft Auto: San Andreas Deathmatch Entwickler-Wiki. Du findest hier eine Fülle an Informationen zu der Entwicklung von Gamemodes und Maps für Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele [[How you can help|Dinge, die Du tun kannst, um zur Verbesserung MTAs beizutragen]] - erstelle eine Map, einen Gamemode, ein Hilfsdokument zu einer Scriptfunktion, einen Beispielcode für das Wiki, schreibe ein Tutorial oder spiele einfach nur MTA und poste die Bugs, die Du dabei findest, im [http://bugs.mtasa.com Mantis Bugtracker].&lt;br /&gt;
&lt;br /&gt;
Falls Du irgendwelche Fragen oder Probleme bezüglich Scripting hast, kannst Du uns gerne in unserem [[IRC Channel]] besuchen.&lt;br /&gt;
Mittlerweile haben sich auch einige deutsche MTA Scripter und Spieler zusammengetan und einen [irc://irc.gtanet.com/#mta.german deutschen MTA IRC Channel] sowie ein [http://sebihunter.de/wbb/ deutsches MTA Forum] gegründet. Dort könnt ihr auch jederzeit gerne vorbeischauen, wenn ihr Hilfe braucht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
====Einführung====&lt;br /&gt;
&lt;br /&gt;
* [[DE/MTA_SA_Installation_&amp;amp;_Benutzung|MTA:SA Installation &amp;amp; Benutzung]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[DE/MTA_DM_Server_Anleitung|MTA DM Server Anleitung]] [[Image:00%.png|7% fertiggestellt]]&lt;br /&gt;
* [[Known_Issues_-_FAQ|Bekannte Probleme]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[DE/MTA_Scripting_Grundlagen|Scripting Grundlagen]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[Introduction to Scripting the GUI|Einführung in's GUI Scripting]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Debugging|Debugging Tutorial]] [[Image:usen.gif|Nur in Englisch verfügbar]] - So findest Du Fehler in Deinem Script&lt;br /&gt;
* [[MTA Classes|MTA Klassen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Detaillierte Beschreibung aller MTA Klassen&lt;br /&gt;
** [[Element|MTA Elemente]] / [[Element tree|Elementbaum]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resources|Einführung in die Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Resource Web Access|Webzugriff über Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Meta.xml]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resource:Mapmanager|Map Manager]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Writing_Gamemodes|Erstellung von Gamemodes]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Useful_Functions|Nützliche Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - nützliche Funktionen von Scriptern für Scripter&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Datenbanken====&lt;br /&gt;
Diese Abteilung behandelt die Möglichkeiten von LUA mit MTA sowie die bereitgestellten Ressourcen.&lt;br /&gt;
* [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Grundlagen, um ein korrektes Script zu erstellen&lt;br /&gt;
* [[Client side scripts|Clientseitige Scripts]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generelle Hilfe zu Lua====&lt;br /&gt;
*[[DE/Lua_Tutorial|Ausführliches Lua Tutorial]] [[Image:De.gif|Deutscher Artikel]] - Neues Tutorial, in dem Lua sehr ausführlich erklärt wird&lt;br /&gt;
*[http://lua.lickert.net/ Deutsches LUA Tutorial]&lt;br /&gt;
*[http://lua.gts-stolberg.de/ Anderes deutsches LUA Tutorial] - Grundlagen verständlich vermittelt, jedoch lässt die Sprache insgesamt etwas zu wünschen übrig...&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Anleitung] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Anleitung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definitionsformat]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Referenz====&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ID-Listen====&lt;br /&gt;
* [[Animations|Animationen]]&lt;br /&gt;
* [[Vehicle IDs|Fahrzeuge]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Vehicle_colors|Fahrzeugfarben]]&lt;br /&gt;
* [[Vehicle_default_colors|Farbzuweisungen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Garage|Garagen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[CJ Clothes|Kleidung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Projectiles|Projektile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Blip_Icons|Radaricons]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Character Skins|Skins]] ([[All Skins Page|alle]]) [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Sounds|Sounds]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Vehicle Upgrades|Tuningteile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weapons|Waffen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weather|Wetter]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21808</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21808"/>
		<updated>2009-10-27T18:14:21Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: link update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFEEAA; padding: 5px; float:right; width: 30%;&amp;quot;&amp;gt;Aktuelle stabile Version von '''Multi Theft Auto: San Andreas Deathmatch''' ist '''{{Current Version|full}}'''. Diese kann auf der [http://mtasa.com/ Hauptseite] heruntergeladen werden.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Du kannst dir auch die [http://nightly.mtasa.com/ neueste nightly Version] herunterladen, die die neuesten Updates beinhaltet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Willkommen im Multi Theft Auto: San Andreas Deathmatch Entwickler-Wiki. Du findest hier eine Fülle an Informationen zu der Entwicklung von Gamemodes und Maps für Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele [[How you can help|Dinge, die Du tun kannst, um zur Verbesserung MTAs beizutragen]] - erstelle eine Map, einen Gamemode, ein Hilfsdokument zu einer Scriptfunktion, einen Beispielcode für das Wiki, schreibe ein Tutorial oder spiele einfach nur MTA und poste die Bugs, die Du dabei findest, im [http://bugs.mtasa.com Mantis Bugtracker].&lt;br /&gt;
&lt;br /&gt;
Falls Du irgendwelche Fragen oder Probleme bezüglich Scripting hast, kannst Du uns gerne in unserem [[IRC Channel]] besuchen.&lt;br /&gt;
Mittlerweile haben sich auch einige deutsche MTA Scripter und Spieler zusammengetan und einen [irc://irg.gtanet.com/#mta.german deutschen MTA IRC Channel] sowie ein [http://sebihunter.de/wbb/ deutsches MTA Forum] gegründet. Dort könnt ihr auch jederzeit gerne vorbeischauen, wenn ihr Hilfe braucht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
====Einführung====&lt;br /&gt;
&lt;br /&gt;
* [[DE/MTA_SA_Installation_&amp;amp;_Benutzung|MTA:SA Installation &amp;amp; Benutzung]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[DE/MTA_DM_Server_Anleitung|MTA DM Server Anleitung]] [[Image:00%.png|7% fertiggestellt]]&lt;br /&gt;
* [[Known_Issues_-_FAQ|Bekannte Probleme]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[DE/MTA_Scripting_Grundlagen|Scripting Grundlagen]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[Introduction to Scripting the GUI|Einführung in's GUI Scripting]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Debugging|Debugging Tutorial]] [[Image:usen.gif|Nur in Englisch verfügbar]] - So findest Du Fehler in Deinem Script&lt;br /&gt;
* [[MTA Classes|MTA Klassen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Detaillierte Beschreibung aller MTA Klassen&lt;br /&gt;
** [[Element|MTA Elemente]] / [[Element tree|Elementbaum]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resources|Einführung in die Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Resource Web Access|Webzugriff über Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Meta.xml]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resource:Mapmanager|Map Manager]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Writing_Gamemodes|Erstellung von Gamemodes]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Useful_Functions|Nützliche Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - nützliche Funktionen von Scriptern für Scripter&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Datenbanken====&lt;br /&gt;
Diese Abteilung behandelt die Möglichkeiten von LUA mit MTA sowie die bereitgestellten Ressourcen.&lt;br /&gt;
* [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Grundlagen, um ein korrektes Script zu erstellen&lt;br /&gt;
* [[Client side scripts|Clientseitige Scripts]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generelle Hilfe zu Lua====&lt;br /&gt;
*[[DE/Lua_Tutorial|Ausführliches Lua Tutorial]] [[Image:De.gif|Deutscher Artikel]] - Neues Tutorial, in dem Lua sehr ausführlich erklärt wird&lt;br /&gt;
*[http://lua.lickert.net/ Deutsches LUA Tutorial]&lt;br /&gt;
*[http://lua.gts-stolberg.de/ Anderes deutsches LUA Tutorial] - Grundlagen verständlich vermittelt, jedoch lässt die Sprache insgesamt etwas zu wünschen übrig...&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Anleitung] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Anleitung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definitionsformat]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Referenz====&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ID-Listen====&lt;br /&gt;
* [[Animations|Animationen]]&lt;br /&gt;
* [[Vehicle IDs|Fahrzeuge]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Vehicle_colors|Fahrzeugfarben]]&lt;br /&gt;
* [[Vehicle_default_colors|Farbzuweisungen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Garage|Garagen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[CJ Clothes|Kleidung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Projectiles|Projektile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Blip_Icons|Radaricons]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Character Skins|Skins]] ([[All Skins Page|alle]]) [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Sounds|Sounds]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Vehicle Upgrades|Tuningteile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weapons|Waffen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weather|Wetter]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:Modules/MTA-MySQL/mysql_connect&amp;diff=21665</id>
		<title>Talk:Modules/MTA-MySQL/mysql connect</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:Modules/MTA-MySQL/mysql_connect&amp;diff=21665"/>
		<updated>2009-10-05T11:46:23Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: wrong syntax?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''database''' seems to be a required argument. If ''nil'' is passed as '''database''' the following error message is output:&amp;lt;br/&amp;gt;&lt;br /&gt;
“ERROR: .../*.lua:*: Wrong parameter count for `mysql_connect'”&amp;lt;br/&amp;gt;&lt;br /&gt;
May someone test it and either validate or veto?&amp;lt;br/&amp;gt;&lt;br /&gt;
([[User:NeonBlack|NeonBlack]] 11:46, 5 October 2009 (UTC))&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/MTA_Scripting_Grundlagen&amp;diff=21562</id>
		<title>DE/MTA Scripting Grundlagen</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/MTA_Scripting_Grundlagen&amp;diff=21562"/>
		<updated>2009-09-21T08:17:53Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Beschreibung */ fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Vorwort==&lt;br /&gt;
Nachdem ich bereits vor kurzer Zeit mein [[DE/Lua_Tutorial|Lua Tutorial]] fertiggestellt habe, folgt nun eine Einführung in die Grundlagen des MTA Scriptings, in der diesmal direkter Bezug auf MTA genommen wird.&lt;br /&gt;
&lt;br /&gt;
In Kürze wird es hier im Wiki einen blank Gamemode geben, den man sich herunterladen kann und als Basis für seinen eigenen verwenden kann. Die soll vor allem Anfängern den Einstieg in's MTA Scripting erleichtern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlagen==&lt;br /&gt;
In diesem Tutorial wird häufig die Rede von Server und Client sein. Ein Client ist quasi ein Spieler, allgemein ist damit jedoch das Programm gemeint, was der Spieler auf dem Rechner installiert hat und mit dem er MTA spielen kann. Mit Server ist einfach der MTA Server gemeint.&lt;br /&gt;
Die Hauptaufgabe des Servers besteht darin, Daten von allen Clients bezüglich Position usw. einzusammeln und gleichzeitig an jeweils alle anderen Clients zu verteilen. Im Gegensatz zum Client ist der Server nicht in der Lage physikalische oder graphische Effekte zu berechnen, weswegen viele Funktionen von MTA, die eines dieser beiden Bereiche beeinflussen, clientseitig sind.&lt;br /&gt;
&lt;br /&gt;
MTA unterscheidet zwischen zwei verschiedenen Ausführungsorten. D.h., dass es Scripts gibt, die vom Server ausgeführt und mit allen Clients synchronisiert werden und welche, die von jedem Client selbst ausgeführt werden und '''nicht''' mit allen anderen Clients synchronisiert werden.&lt;br /&gt;
Clientseitig bedeutet, dass etwas nur vom Client ausgeführt wird/werden kann, serverseitig, dass es nur vom Server ausgeführt wird/werden kann. Die meisten Funktionen von MTA können jedoch auf beiden Seiten ausgeführt werden.&lt;br /&gt;
Ziel ist es, diese Gegebenheit zu nutzen und den Server somit so gut wie möglich zu entlasten, was nicht immer einfach ist.&lt;br /&gt;
&lt;br /&gt;
Bei MTA spricht man übrigens nicht von Scripts oder Gamemodes, sondern allgemein von Ressourcen. Eine Ressource ist ein Verzeichnis mit einem oder mehreren Scripts. &lt;br /&gt;
Beim Start des MTA Servers wird der ressources Ordner durchsucht und jedes Verzeichnis, dass eine gültige meta.xml enthält, der Liste der verfügbaren Ressourcen hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Meta.xml==&lt;br /&gt;
===Sinn und Zweck===&lt;br /&gt;
Die meta.xml ist eine wichtige Datei, die in jedem Ressourcenordner vorhanden sein muss, damit diese vom MTA Server erkannt wird und ausgeführt werden kann.&lt;br /&gt;
Sie definiert, aus welchen Dateien sich die Ressource zusammensetzt und unter anderem auch, welche dieser Dateien beim Connecten an den Client gesendet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Alle Daten in der meta.xml sind im XML-Format. Ein sogenannter XML-Tag ist ein Datenset, was in etwa so aussieht:&lt;br /&gt;
&amp;lt;tagname attribut=&amp;quot;wert&amp;quot;&amp;gt;inhalt&amp;lt;/tagname&amp;gt; oder &amp;lt;tagname attribut=&amp;quot;wert&amp;quot; /&amp;gt;, wenn der Inhalt entfällt.&lt;br /&gt;
Ein XML-Tag kann beliebig viele Attribute enthalten.&lt;br /&gt;
&lt;br /&gt;
Nähere Informationen zum Thema XML entnehmt ihr aber bitte dem [http://de.wikipedia.org/wiki/Xml Wikipedia-Artikel] darüber.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Mögliche Tags===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info author=&amp;quot;Autor&amp;quot; version=&amp;quot;Version&amp;quot; name=&amp;quot;Name&amp;quot; description=&amp;quot;Beschreibung&amp;quot; type=&amp;quot;Typ&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Jede Ressource sollte einen info-Tag in der meta.xml enthalten. Werte des info-Tags kann man übrigens mit [[getResourceInfo]] auslesen.&lt;br /&gt;
**'''author''': Das ist normalerweise der Name desjenigen, der die Ressource erstellt hat.&lt;br /&gt;
**'''version''': Die Version der vorliegenden Ressource. Für alle, die gerne mit wahllosen Versionsnummern um sich schmeißen.&lt;br /&gt;
**'''name''': Der Name der Ressource.&lt;br /&gt;
**'''description''': Eine kurze Beschreibung der Ressource.&lt;br /&gt;
**'''type''': Typ der Ressource. Kann den Wert &amp;quot;gamemode&amp;quot;, &amp;quot;script&amp;quot; oder &amp;quot;map&amp;quot; enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;script src=&amp;quot;Dateipfad und -name&amp;quot; type=&amp;quot;Typ&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Mit dem script-Tag werden Lua-Scriptdateien in die Ressource eingebunden. Das sind die wohl wichtigsten Dateien der meisten Ressourcen.&lt;br /&gt;
**'''src''': Der Pfad zur Scriptdatei relativ zum Odner der jeweiligen Ressource mit dem Dateinamen natürlich.&lt;br /&gt;
**'''type''': Typ des Scripts. Kann entweder &amp;quot;server&amp;quot; oder &amp;quot;client&amp;quot; sein. Bei ersterem wird das Script serverseitig ausgeführt, bei letzterem jedem Client beim Verbindungsaufbau gesendet und clientseitig ausgeführt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;map src=&amp;quot;Dateipfad und -name&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Mit dem map-Tag werden Mapdateien eingebunden, die automatisch beim Ressourcenstart geladen werden. Mit den [[Server_Scripting_Functions#Map_functions|Mapfunktionen]] kann man nachträglich noch Maps laden. Eine Map ist übrigens eine Karte, genauer ein Set von ObjektIDs mit Koordinaten und Rotationsangaben.&lt;br /&gt;
**'''src''': Der Pfad zur Mapdatei relativ zum Odner der jeweiligen Ressource mit dem Dateinamen natürlich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;file src=&amp;quot;Dateipfad und -name&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Der file-Tag zeichnet eine beliebige Datei als clientseitig aus. Während Scripts vom Typ &amp;quot;client&amp;quot; automatisch heruntergeladen werden, werden es die darin enthaltenen Bilder, Models oder Texturen nicht. Alle Dateien, die im clientseitigen Script verwendet werden, müssen mit dem file-Tag als clientseitig ausgezeichnet werden.&lt;br /&gt;
**'''src''': Der Pfad zur Datei relativ zum Odner der jeweiligen Ressource mit dem Dateinamen natürlich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;include ressource=&amp;quot;Ressourcenname&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Manchmal möchte man, dass eine Ressource beim Start automatisch andere Ressourcen mit startet. Dies kann man mit dem include-Tag erreichen.&lt;br /&gt;
**'''ressource''': Der Name der Ressource, d.h. der Name des Ordners, in dem die Ressource sich befindet. (Muss sich im resources-Ordner befinden.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;config src=&amp;quot;Dateipfad und -name&amp;quot; type=&amp;quot;Typ&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Konfigurationsdateien sind XML-Dateien, in denen bestimmte Einstellungen für einen Ressource vorgenommen werden können, auf die per Script zugegriffen werden kann. Unter den [[Server_Scripting_Functions#Resource_functions|Ressourcenfunktionen]] finden sich solche zum Auslesen und Ändern der Konfiguration.&lt;br /&gt;
**'''src''': Der Pfad zur Konfigurationsdatei relativ zum Odner der jeweiligen Ressource mit dem Dateinamen natürlich.&lt;br /&gt;
**'''type''': Typ der Konfiguration. Kann entweder &amp;quot;server&amp;quot; oder &amp;quot;client&amp;quot; sein. Bei ersterem wird die Konfigurationsdatei serverseitig eingebunden, bei letzterem jedem Client beim Verbindungsaufbau gesendet und clientseitig eingebunden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;export function=&amp;quot;Funktionsname&amp;quot; type=&amp;quot;Typ&amp;quot; http=&amp;quot;true/false&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Den export-Tag kann man benutzen, um eine Funktion aus der aktuellen Ressource in anderen laufenden Ressourcen verfügbar zu machen.&lt;br /&gt;
**'''function''': Der Name der Funktion.&lt;br /&gt;
**'''type''': Typ des Exports. Kann entweder &amp;quot;server&amp;quot; oder &amp;quot;client&amp;quot; sein. Bei ersterem wird die Funktion serverseitig exportiert, bei letzterem clientseitig.&lt;br /&gt;
**'''http''': Legt fest, ob die exportierte Funktion auch via HTTP aufgerufen werden kann. Kann demnach entweder &amp;quot;true&amp;quot; (ja) oder &amp;quot;false&amp;quot; (nein) sein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;html src=&amp;quot;Dateipfad und -name&amp;quot; default=&amp;quot;true/false&amp;quot; raw=&amp;quot;true/false&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Wenn über MTAs eingebauten HTTP-Server Zugang zu einer im Ressourcenordner liegenden Datei ermöglichen will, so muss man diese mit dem html-Tag in der meta.xml einbinden.&lt;br /&gt;
**'''src''': Der Pfad zur Datei relativ zum Odner der jeweiligen Ressource mit dem Dateinamen natürlich.&lt;br /&gt;
**'''default''': Wenn das HTML-Dokument standardmäßig angezeigt werden soll, wenn über den Browser auf den Ressourcenordner zugegriffen wird, dann muss default=&amp;quot;true&amp;quot; sein, ansonsten &amp;quot;false&amp;quot;.&lt;br /&gt;
**'''raw''': Wenn es sich um eine Datei im binären Format handelt, z.B. einem Bild, dann sollte raw auf &amp;quot;true&amp;quot; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;settings /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info author=&amp;quot;Slothman&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Stealth&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;config src=&amp;quot;help.xml&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;stealthmain_server.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;noiseblip.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;mission_timer.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;gadgets_server.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;gadgets_client.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;stealthmain_client.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;noisebar.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;spycam.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;file src=&amp;quot;riot_shield.txd&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;riot_shield.dff&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;riot_shield.col&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;armor.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;camera.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;cloak.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;goggles.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;mine.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;radar.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;shield.png&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;include resource=&amp;quot;scoreboard&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;include resource=&amp;quot;killmessages&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;include resource=&amp;quot;maplimits&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;settings&amp;gt;&lt;br /&gt;
     &amp;lt;setting name=&amp;quot;roundlimit&amp;quot; value=&amp;quot;[6]&amp;quot; /&amp;gt; &amp;lt;!-- round length in minutes --&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;teamdamage&amp;quot; value=&amp;quot;[1]&amp;quot; /&amp;gt; &amp;lt;!-- 0 for team protection off, 1 for team protection on --&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;teambalance&amp;quot; value=&amp;quot;[1]&amp;quot; /&amp;gt; &amp;lt;!--  difference limit of amount of players between teams --&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;spazammo&amp;quot; value=&amp;quot;[25]&amp;quot; /&amp;gt; &amp;lt;!-- ammo amounts --&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;m4ammo&amp;quot; value=&amp;quot;[100]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;shotgunammo&amp;quot; value=&amp;quot;[25]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;sniperammo&amp;quot; value=&amp;quot;[20]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;ak47ammo&amp;quot; value=&amp;quot;[120]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;rifleammo&amp;quot; value=&amp;quot;[40]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;deserteagleammo&amp;quot; value=&amp;quot;[45]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;pistolammo&amp;quot; value=&amp;quot;[132]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;uziammo&amp;quot; value=&amp;quot;[150]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;tec9ammo&amp;quot; value=&amp;quot;[150]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;silencedammo&amp;quot; value=&amp;quot;[65]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;grenadeammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;satchelammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;teargasammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
	 &amp;lt;setting name=&amp;quot;molatovammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Elemente==&lt;br /&gt;
===Was sind Elemente?===&lt;br /&gt;
Ein Element in MTA kann alles sein. Sei es ein Spieler, ein Fahrzeug, ein Objekt, ein Marker, ein GUI-Element oder aber auch eine Ressource. Und das waren nicht mal alle möglichen Elementtypen.&lt;br /&gt;
&lt;br /&gt;
Im Script sind Elemente durch Userdata-Pointer vertreten. Man kann mit ihnen eigentlich nichts anderes machen, als sie speichern oder an MTA-Funktionen übergeben und sie haben auch keinen darstellbaren Wert.&lt;br /&gt;
Wendet man tostring auf einen Userdata-Pointer an, so erhält man einen String in der Form &amp;quot;userdata: 0x090A34D&amp;quot;. Die type-Funktion gibt &amp;quot;userdata&amp;quot; zurück, wenn man ihr ein Element übergibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Der Elementbaum===&lt;br /&gt;
Den Elementbaum kann man sich wie einen Stammbaum vorstellen, nur dass der Ursprung bekannt ist.&lt;br /&gt;
Der Ursprung des Elementbaumes ist die sogenannte root (engl. für Wurzel). Aus ihr entspringen alle Elemente des ganzen Servers.&lt;br /&gt;
&lt;br /&gt;
Bevor ich nun versuche, ein Bild zu beschreiben, wie man sich das vorstellen soll, zeige ich lieber ein Beispiel für einen MTA Elementbaum im XML-Format. Dieser ist jedoch an einigen Stellen stark vereinfacht, da er sonst den Rahmen sprengen würde, jedoch verschlechtert das die Verbildlichung nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;root&amp;gt;&lt;br /&gt;
    &amp;lt;console/&amp;gt;&lt;br /&gt;
    &amp;lt;player dontRespawn=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;player dontRespawn=&amp;quot;false&amp;quot; lastSpawnarea=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;resourcebrowser&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;ajax&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;resourcemanager&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;spawnmanager&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;mapmanager&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;runcode&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;fr&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;map id=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;vehicle/&amp;gt;&lt;br /&gt;
        &amp;lt;/map&amp;gt;&lt;br /&gt;
    &amp;lt;/resource&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;elementbrowser&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;assault&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;map id=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;team/&amp;gt;&lt;br /&gt;
            &amp;lt;team/&amp;gt;&lt;br /&gt;
            &amp;lt;blip/&amp;gt;&lt;br /&gt;
            &amp;lt;marker/&amp;gt;&lt;br /&gt;
            &amp;lt;colshape/&amp;gt;&lt;br /&gt;
            &amp;lt;blip/&amp;gt;&lt;br /&gt;
            &amp;lt;blip/&amp;gt;&lt;br /&gt;
        &amp;lt;/map&amp;gt;&lt;br /&gt;
    &amp;lt;/resource&amp;gt;&lt;br /&gt;
    &amp;lt;resource id=&amp;quot;as-farm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;map id=&amp;quot;dynamic&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;map id=&amp;quot;as-farm.map&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;meta&amp;gt;&lt;br /&gt;
                &amp;lt;author/&amp;gt;&lt;br /&gt;
                &amp;lt;version/&amp;gt;&lt;br /&gt;
                &amp;lt;name/&amp;gt;&lt;br /&gt;
                &amp;lt;description/&amp;gt;&lt;br /&gt;
            &amp;lt;/meta&amp;gt;&lt;br /&gt;
            &amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;spawnarea posY=&amp;quot;-8.3976354598999&amp;quot; posX=&amp;quot;20.182683944702&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
            &amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
            &amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;spawnarea posY=&amp;quot;32.166355133057&amp;quot; posX=&amp;quot;-46.90763092041&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
            &amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
            &amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;spawnarea posY=&amp;quot;35.214984893799&amp;quot; posX=&amp;quot;-33.486911773682&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
            &amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
            &amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;spawnarea posY=&amp;quot;35.214984893799&amp;quot; posX=&amp;quot;-33.486911773682&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
            &amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
            &amp;lt;objective id=&amp;quot;first&amp;quot; type=&amp;quot;checkpoint&amp;quot; description=&amp;quot;Breach into the farm&amp;quot; ... /&amp;gt;&lt;br /&gt;
            &amp;lt;pickup type=&amp;quot;weapon&amp;quot; ... /&amp;gt;&lt;br /&gt;
        &amp;lt;/map&amp;gt;&lt;br /&gt;
    &amp;lt;/resource&amp;gt;&lt;br /&gt;
&amp;lt;/root&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man in diesem Beispiel sehr schön sehen kann, sind alle Spieler, Ressourcen und die Konsole (das schwarze Serverfenster) direkte Kindelemente vom root-Element. Letzteres könnt ihr im Script übrigens mit [[getRootElement]] bekommen.&lt;br /&gt;
Maps und Fahrzeuge wiederrum sind Kindelemente der jeweiligen Ressourcen und so weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elemente in MTA-Funktionen===&lt;br /&gt;
Die meisten MTA-Funktionen verlangen ein oder mehrere Elemente als Parameter oder geben eines zurück. Wenn man ein Element übergibt, was Kindelemente enthält, z.B. das root-Element, dann wendet MTA die Funktion auf alle Kindelemente des übergebenen Elements an, die dem Elementtypen entsprechen, der von der Funktion erwartet wird.&lt;br /&gt;
Der Typ eines Elements lässt sich mit [[getElementType]] herausfinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Ein Event ist ein Ereignis. Das kann z.B. der Tod eines Spielers sein, aber auch das Beenden einer Ressource oder das Klicken auf einen Button.&lt;br /&gt;
&lt;br /&gt;
Ein Eventhandler ist eine Funktion, in unserem Fall eine Lua-Funktion, die aufgerufen wird, wenn ein bestimmtes Event stattfindet. Generell ist alles in MTA eventgesteuert und was nicht eventgesteuert ist, ist zeitgesteuert.&lt;br /&gt;
&lt;br /&gt;
Mit der Funktion [[addEventHandler]] kann man in MTA eine Eventhandlerfunktion hinzufügen. Im Wiki finden sich Listen mit vorhandenen [[Server_Scripting_Events|serverseitigen Events]] und auch [[Client_Scripting_Events|clientseitigen Events]].&lt;br /&gt;
&lt;br /&gt;
Wenn ein Event eintritt, dann werden alle dazugehörigen Eventhandlerfunktionen in einer Umgebung aufgerufen, die die Variable source definiert als den Pointer zu dem Element, welches das Event hervorgerufen hat.&lt;br /&gt;
Das heißt im Klartext, dass in jeder Eventhandlerfunktion die Variable source das Element enthält, was das Ereignis herbeigeführt hat.&lt;br /&gt;
&lt;br /&gt;
Die Variablen root und resourceRoot sind in jeder Ressource vordefiniert, wobei root dem Rückgabewert von [[getRootElement]] und resourceRoot dem von [[getResourceRootElement]] entsprechen.&lt;br /&gt;
&lt;br /&gt;
===Serverseitiges Beispiel===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;local gSpawnPosition = { 0, 0, 3 } -- Spawnposition&lt;br /&gt;
&lt;br /&gt;
function onPlayerJoin()&lt;br /&gt;
    spawnPlayer(source, unpack(gSpawnPosition)) -- spawne den Spieler&lt;br /&gt;
    setCameraTarget(source) -- setze das Ziel seiner Kamera auf sich selbst&lt;br /&gt;
    fadeCamera(source, true) -- blende die Umgebung ein&lt;br /&gt;
    &lt;br /&gt;
    outputChatBox(getPlayerNametagText(source)..&amp;quot; hat den Server betreten.&amp;quot;) -- sende Nachricht an alle Spieler&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function onPlayerQuit(quitType)&lt;br /&gt;
    outputChatBox(getPlayerNametagText(source)..&amp;quot; hat den Server verlassen. (Grund: &amp;quot;..quitType..&amp;quot;)&amp;quot;) -- sende Nachricht an alle Spieler&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function onPlayerWasted()&lt;br /&gt;
    spawnPlayer(source, getElementPosition(source)) -- respawne den Spieler&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function onResourceStart()&lt;br /&gt;
    for _, player in next, getElementsByType(&amp;quot;player&amp;quot;) do -- für jedes Spielerelement...&lt;br /&gt;
        spawnPlayer(player, unpack(gSpawnPosition)) -- ...spawne den Spieler&lt;br /&gt;
        fadeCamera(player, true) -- ...blende die Umgebung ein&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function onResourceStop()&lt;br /&gt;
    for _, player in next, getElementsByType(&amp;quot;player&amp;quot;) do-- für jedes Spielerelement...&lt;br /&gt;
        fadeCamera(player, false) -- ...blende die Umgebung aus&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- füge die Eventhandler hinzu&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, root, onPlayerJoin)&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerQuit&amp;quot;, root, onPlayerQuit)&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;, root, onPlayerWasted)&lt;br /&gt;
addEventHandler(&amp;quot;onResourceStart&amp;quot;, resourceRoot, onResourceStart)&lt;br /&gt;
addEventHandler(&amp;quot;onResourceStop&amp;quot;, resourceRoot, onResourceStop)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Man sollte immer bedenken, dass Spielerelemente auf dem gleichen Level sind wie Ressourcenelemente, d.h., dass Spieler auch ohne dass Ressourcen laufen auf dem Server sein können, also auch schon, wenn eine Ressource startet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Commands sind Befehle, die der Spieler beginnend mit einem Schrägstrich (/) im Chat benutzen kann, um bestimmte Funktionen auszuführen.&lt;br /&gt;
Aufgrund der großen Bandbreite von alternativen Eingabemethoden wie Klicken auf Elemente in der Spielwelt oder GUI-Elemente zählen Commands eher zu den veralteten und unbequemen Eingabemethoden.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf ist ganz einfach: Der Spieler gibt einen Command ein, eventuell mit einem oder mehreren Parametern und MTA ruft eine Lua Funktion auf, der das Element des Spielers, der eingegebene Command sowie die übergebenen Parameter übermittelt werden.&lt;br /&gt;
Bei der Eingabe werden die Parameter einfach durch Leerzeichen getrennt. Beispiel: /command param1 param2 param3&lt;br /&gt;
&lt;br /&gt;
Commandhandlerfunktionen werden in MTA mit der Funktion [[addCommandHandler]] hinzugefügt. Dazu nun einfach mal ein Beispiel für ein einfaches PM-System.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serverseitiges Beispiel===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;function cmdPrivateMessage(source, cmd, targetname, ...)&lt;br /&gt;
    --[[ da auch die eigentliche Nachricht an den Leerzeichen gespalten und als einzelne Parameter übergeben wird,&lt;br /&gt;
         muss man mit dem ...-Parameter eine nicht festgelegte Anzahl Parameter (jeder in diesem Fall ein Wort)&lt;br /&gt;
         entgegennehmen und diese wieder zusammenfügen ]]&lt;br /&gt;
    local message = table.concat({...}, &amp;quot; &amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    if (message == &amp;quot;&amp;quot;) then -- wenn die Nachricht leer ist, wenn also kein Spielername und/oder keine Nachricht übergeben wurde&lt;br /&gt;
        outputChatBox(&amp;quot;Syntax: /pm [str:Spielername] [str:Nachricht]&amp;quot;, source, 240, 0, 0) -- Ausgabe der korrekten Syntax&lt;br /&gt;
        return -- Abbruch der Funktion&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local target = getPlayerFromNick(targetname) -- suche nach einem Spielerelement mit dem gegebenen Namen&lt;br /&gt;
    if (not target) then -- wenn kein Spielerelement gefunden wurde&lt;br /&gt;
        outputChatBox(targetname..&amp;quot; existiert nicht oder ist offline.&amp;quot;, source, 240, 0 , 0) -- Ausgabe einer Fehlermeldung&lt;br /&gt;
        return -- Abbruch der Funktion&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- ab hier ist gewährleistet, dass alle benötigten Daten vorhanden und gültig sind&lt;br /&gt;
    outputChatBox(&amp;quot;PM an &amp;quot;..targetname..&amp;quot;: &amp;quot;..message, source, 200, 60, 0) -- Ausgabe einer Nachricht an den Sender&lt;br /&gt;
    outputChatBox(&amp;quot;PM von &amp;quot;..getPlayerNametagText(source)..&amp;quot;: &amp;quot;..message, target, 240, 100, 0) -- Ausgabe einer Nachricht an den Empfänger&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Hinzufügen des Commandhandlers&lt;br /&gt;
addCommandHandler(&amp;quot;pm&amp;quot;, cmdPrivateMessage, false, false)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Commandparameter werden immer als strings übergeben.&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21417</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21417"/>
		<updated>2009-09-04T13:09:43Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Einführung */ added linkt o new mta:sa manual&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFEEAA; padding: 5px; float:right; width: 30%;&amp;quot;&amp;gt;Aktuelle stabile Version von '''Multi Theft Auto: San Andreas Deathmatch''' ist '''{{Current Version|full}}'''. Diese kann auf der [http://mtasa.com/ Hauptseite] heruntergeladen werden.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Du kannst dir auch die [http://code.google.com/p/multitheftauto/wiki/NightlyBuilds?tm=2 neueste nightly Version] herunterladen, die die neuesten Updates beinhaltet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Willkommen im Multi Theft Auto: San Andreas Deathmatch Entwickler-Wiki. Du findest hier eine Fülle an Informationen zu der Entwicklung von Gamemodes und Maps für Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele [[How you can help|Dinge, die Du tun kannst, um zur Verbesserung MTAs beizutragen]] - erstelle eine Map, einen Gamemode, ein Hilfsdokument zu einer Scriptfunktion, einen Beispielcode für das Wiki, schreibe ein Tutorial oder spiele einfach nur MTA und poste die Bugs, die Du dabei findest, im [http://bugs.mtasa.com Mantis Bugtracker].&lt;br /&gt;
&lt;br /&gt;
Falls Du irgendwelche Fragen oder Probleme bezüglich Scripting hast, kannst Du uns gerne in unserem [[IRC Channel]] besuchen.&lt;br /&gt;
Mittlerweile haben sich auch einige deutsche MTA Scripter und Spieler zusammengetan und einen [irc://irg.gtanet.com/#mta.german deutschen MTA IRC Channel] sowie ein [http://sebihunter.de/wbb/ deutsches MTA Forum] gegründet. Dort könnt ihr auch jederzeit gerne vorbeischauen, wenn ihr Hilfe braucht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
====Einführung====&lt;br /&gt;
&lt;br /&gt;
* [[DE/MTA_SA_Installation_&amp;amp;_Benutzung|MTA:SA Installation &amp;amp; Benutzung]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[DE/MTA_DM_Server_Anleitung|MTA DM Server Anleitung]] [[Image:00%.png|7% fertiggestellt]]&lt;br /&gt;
* [[Known_Issues_-_FAQ|Bekannte Probleme]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[DE/MTA_Scripting_Grundlagen|Scripting Grundlagen]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[Introduction to Scripting the GUI|Einführung in's GUI Scripting]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Debugging|Debugging Tutorial]] [[Image:usen.gif|Nur in Englisch verfügbar]] - So findest Du Fehler in Deinem Script&lt;br /&gt;
* [[MTA Classes|MTA Klassen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Detaillierte Beschreibung aller MTA Klassen&lt;br /&gt;
** [[Element|MTA Elemente]] / [[Element tree|Elementbaum]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resources|Einführung in die Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Resource Web Access|Webzugriff über Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Meta.xml]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resource:Mapmanager|Map Manager]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Writing_Gamemodes|Erstellung von Gamemodes]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Useful_Functions|Nützliche Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - nützliche Funktionen von Scriptern für Scripter&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Datenbanken====&lt;br /&gt;
Diese Abteilung behandelt die Möglichkeiten von LUA mit MTA sowie die bereitgestellten Ressourcen.&lt;br /&gt;
* [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Grundlagen, um ein korrektes Script zu erstellen&lt;br /&gt;
* [[Client side scripts|Clientseitige Scripts]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generelle Hilfe zu Lua====&lt;br /&gt;
*[[DE/Lua_Tutorial|Ausführliches Lua Tutorial]] [[Image:De.gif|Deutscher Artikel]] - Neues Tutorial, in dem Lua sehr ausführlich erklärt wird&lt;br /&gt;
*[http://lua.lickert.net/ Deutsches LUA Tutorial]&lt;br /&gt;
*[http://lua.gts-stolberg.de/ Anderes deutsches LUA Tutorial] - Grundlagen verständlich vermittelt, jedoch lässt die Sprache insgesamt etwas zu wünschen übrig...&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Anleitung] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Anleitung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definitionsformat]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Referenz====&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ID-Listen====&lt;br /&gt;
* [[Animations|Animationen]]&lt;br /&gt;
* [[Vehicle IDs|Fahrzeuge]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Vehicle_colors|Fahrzeugfarben]]&lt;br /&gt;
* [[Vehicle_default_colors|Farbzuweisungen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Garage|Garagen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[CJ Clothes|Kleidung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Projectiles|Projektile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Blip_Icons|Radaricons]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Character Skins|Skins]] ([[All Skins Page|alle]]) [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Sounds|Sounds]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Vehicle Upgrades|Tuningteile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weapons|Waffen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weather|Wetter]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21416</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21416"/>
		<updated>2009-09-04T13:08:13Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Generelle Hilfe zu Lua */ added german flag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFEEAA; padding: 5px; float:right; width: 30%;&amp;quot;&amp;gt;Aktuelle stabile Version von '''Multi Theft Auto: San Andreas Deathmatch''' ist '''{{Current Version|full}}'''. Diese kann auf der [http://mtasa.com/ Hauptseite] heruntergeladen werden.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Du kannst dir auch die [http://code.google.com/p/multitheftauto/wiki/NightlyBuilds?tm=2 neueste nightly Version] herunterladen, die die neuesten Updates beinhaltet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Willkommen im Multi Theft Auto: San Andreas Deathmatch Entwickler-Wiki. Du findest hier eine Fülle an Informationen zu der Entwicklung von Gamemodes und Maps für Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele [[How you can help|Dinge, die Du tun kannst, um zur Verbesserung MTAs beizutragen]] - erstelle eine Map, einen Gamemode, ein Hilfsdokument zu einer Scriptfunktion, einen Beispielcode für das Wiki, schreibe ein Tutorial oder spiele einfach nur MTA und poste die Bugs, die Du dabei findest, im [http://bugs.mtasa.com Mantis Bugtracker].&lt;br /&gt;
&lt;br /&gt;
Falls Du irgendwelche Fragen oder Probleme bezüglich Scripting hast, kannst Du uns gerne in unserem [[IRC Channel]] besuchen.&lt;br /&gt;
Mittlerweile haben sich auch einige deutsche MTA Scripter und Spieler zusammengetan und einen [irc://irg.gtanet.com/#mta.german deutschen MTA IRC Channel] sowie ein [http://sebihunter.de/wbb/ deutsches MTA Forum] gegründet. Dort könnt ihr auch jederzeit gerne vorbeischauen, wenn ihr Hilfe braucht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
====Einführung====&lt;br /&gt;
&lt;br /&gt;
* [[DE/MTA_DM_Client_Anleitung|MTA DM Client Anleitung]] [[Image:100%.png|100% übersetzt]]&lt;br /&gt;
* [[DE/MTA_DM_Server_Anleitung|MTA DM Server Anleitung]] [[Image:00%.png|7% fertiggestellt]]&lt;br /&gt;
* [[Known_Issues_-_FAQ|Bekannte Probleme]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[DE/MTA_Scripting_Grundlagen|Scripting Grundlagen]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[Introduction to Scripting the GUI|Einführung in's GUI Scripting]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Debugging|Debugging Tutorial]] [[Image:usen.gif|Nur in Englisch verfügbar]] - So findest Du Fehler in Deinem Script&lt;br /&gt;
* [[MTA Classes|MTA Klassen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Detaillierte Beschreibung aller MTA Klassen&lt;br /&gt;
** [[Element|MTA Elemente]] / [[Element tree|Elementbaum]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resources|Einführung in die Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Resource Web Access|Webzugriff über Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Meta.xml]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resource:Mapmanager|Map Manager]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Writing_Gamemodes|Erstellung von Gamemodes]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Useful_Functions|Nützliche Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - nützliche Funktionen von Scriptern für Scripter&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Datenbanken====&lt;br /&gt;
Diese Abteilung behandelt die Möglichkeiten von LUA mit MTA sowie die bereitgestellten Ressourcen.&lt;br /&gt;
* [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Grundlagen, um ein korrektes Script zu erstellen&lt;br /&gt;
* [[Client side scripts|Clientseitige Scripts]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generelle Hilfe zu Lua====&lt;br /&gt;
*[[DE/Lua_Tutorial|Ausführliches Lua Tutorial]] [[Image:De.gif|Deutscher Artikel]] - Neues Tutorial, in dem Lua sehr ausführlich erklärt wird&lt;br /&gt;
*[http://lua.lickert.net/ Deutsches LUA Tutorial]&lt;br /&gt;
*[http://lua.gts-stolberg.de/ Anderes deutsches LUA Tutorial] - Grundlagen verständlich vermittelt, jedoch lässt die Sprache insgesamt etwas zu wünschen übrig...&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Anleitung] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Anleitung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definitionsformat]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Referenz====&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ID-Listen====&lt;br /&gt;
* [[Animations|Animationen]]&lt;br /&gt;
* [[Vehicle IDs|Fahrzeuge]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Vehicle_colors|Fahrzeugfarben]]&lt;br /&gt;
* [[Vehicle_default_colors|Farbzuweisungen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Garage|Garagen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[CJ Clothes|Kleidung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Projectiles|Projektile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Blip_Icons|Radaricons]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Character Skins|Skins]] ([[All Skins Page|alle]]) [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Sounds|Sounds]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Vehicle Upgrades|Tuningteile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weapons|Waffen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weather|Wetter]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/MTA_SA_Installation_%26_Benutzung&amp;diff=21415</id>
		<title>DE/MTA SA Installation &amp; Benutzung</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/MTA_SA_Installation_%26_Benutzung&amp;diff=21415"/>
		<updated>2009-09-04T13:06:29Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: new german mta:sa 1.0 client manual&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einführung==&lt;br /&gt;
Multi Theft Auto: San Andreas ist eine von Fans programmierte OpenSource Multiplayer Modifikation für Rockstar Games' Spiel Grand Theft Auto San Andreas. Sie wurde von Rockstar Games weder genehmigt noch verboten.&lt;br /&gt;
Mit ihr ist es möglich, über das Internet oder ein Netzwerk mit anderen Spielern zusammen zu spielen. Dazu können eigene Maps und Gamemodes erstellt werden, die das Spiel individualisieren und dem Singleplayer gegenüber eine ganze Menge neuer Möglichkeiten bringen. Durch die hohe Zahl an Funktionen sind der Gestaltung eines eigenen MTA:SA Servers nahezu keine Grenzen mehr gesetzt. Außderdem wird an der Modifikation ständig weitergearbeitet.&lt;br /&gt;
Die aktuelle stabile Version ist MTA:SA 1.0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&amp;lt;!--===Systemvorraussetzungen===&lt;br /&gt;
Vor der Installation solltest Du sicherstellen, dass Dein Computer die Systemvorraussetzungen erfüllt. Durch die vielen Veränderungen und Erweiterungen, die MTA:SA an GTA SA vornimmt, benötigt es ein wenig mehr Leistung.&lt;br /&gt;
BEMERKUNG: Konnte die Systemanforderungen nicht herausfinden - sie entsprechen wahrscheinlich nicht genau denen von MTASA:DM --&amp;gt;&lt;br /&gt;
===Vorraussetzungen===&lt;br /&gt;
#Es wird Grand Theft Auto San Andreas 1.0 benötigt. Sollte das Spiel um 2006/2007 oder später erworben worden sein, so kann es bereits sein, dass eine neuere Version vorhanden ist. In einem solchen Fall muss der [http://grandtheftauto.filefront.com/file/GTA_SA_Downgrader_Patch;74661 Downgrade Patch] installiert werden.&lt;br /&gt;
#Grand Theft Auto San Andreas sollte ungemoddet sein. Das bedeutet: '''Keine''' Modifikationen, außer&lt;br /&gt;
#einer US exe. Am leichtesten zu bekommen als NoCD Crack. ([http://lmgtfy.com/?q=Grand+Theft+Auto+San+Andreas+NoCD+EXE Google!])&lt;br /&gt;
&lt;br /&gt;
===Herunterladen des Installers===&lt;br /&gt;
Um MTA:SA zu installieren, wird natürlich noch der neueste Installer benötigt. Dieser kann auf [http://www.mtasa.com/124.html der MTA San Andreas Downloadseite] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Windows===&lt;br /&gt;
Mit einem Doppelklick auf den Installer startet die Installation automatisch. Normalerweise braucht man einfach nur auf „Weiter“ zu klicken, da die richtigen Voreinstellungen bereits da sind. MTA:SA findet das Verzeichnis von GTA San Andreas normalerweise auch automatisch. Wenn nicht, muss es halt manuell angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
-- Fehlt noch! --&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Benutzung==&lt;br /&gt;
===Das MTA Menü===&lt;br /&gt;
[[Image:mta_menu.jpg|MTA:SA 1.0 Menu]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Nach einem Doppelklick auf die MTA:SA Verknüpfung, die vom Installer automatisch auf dem Desktop eingerichtet wurde, kommt man in's '''MTA Menü'''.&lt;br /&gt;
&lt;br /&gt;
===Quick Connect===&lt;br /&gt;
[[Image:mta_quick_connect.png|MTA:SA 1.0 Quick Connect]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Mit '''Quick Connect''' (dt. schnell verbinden) kann man anhand einer IP Adresse und eines Ports zu einem MTA:SA Server verbinden.&lt;br /&gt;
&lt;br /&gt;
===Browse Servers===&lt;br /&gt;
[[Image:mta_server_browser.png|MTA:SA 1.0 Server Browser]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Im '''Server Browser''' werden alle MTA:SA Server aufgelistet, die dies in ihren Einstellungen aktiviert haben.&lt;br /&gt;
Folgende Listen können durch Klick auf einen der Tabs oben angezeigt werden:&lt;br /&gt;
*'''Internet''': Alle Server, die in ihren Einstellungen die Anzeige im Server Browser aktiviert haben.&lt;br /&gt;
*'''LAN''': Server, die sich im lokalen Netzwerk befinden und die Anzeige in der Netzwerkserverliste aktiviert haben.&lt;br /&gt;
*'''Favourites''': Eine private Liste, die vom Spieler selbst gefüllt werden kann.&lt;br /&gt;
*'''Recently Played''': Eine Liste mit allen Servern, die in letzter Zeit vom Spieler besucht wurden.&lt;br /&gt;
&lt;br /&gt;
Unter den Tabs finden sich einige Filtereinstellungen, beginnend mit einem Suchfeld, in dem die Serverliste nach einem bestimmten Begriff durchsucht werden kann. Die anderen seien hier kurz erläutert:&lt;br /&gt;
*'''Include Empty''': Wenn aktiviert, werden auch Server angezeigt, auf denen zurzeit niemand spielt.&lt;br /&gt;
*'''Include Full''': Wenn aktiviert, werden auch Server angezeigt, deren Spielerlimit bereits erreicht ist.&lt;br /&gt;
*'''Include Locked''': Wenn aktiviert, werden auch Server angezeigt, die mit einem Passwort geschützt sind.&lt;br /&gt;
*'''Include Offline''': Diese Option ist nur in der Favoritenliste verfügbar. Wenn sie aktiviert ist, werden auch Server angezeigt, die momentan offline sind.&lt;br /&gt;
&lt;br /&gt;
Bei einem Klick auf einen Server in der Liste werden rechts die Spieler, die zurzeit auf diesem spielen, in der '''Player List''' angezeigt. Sollte der Server ein Passwort erwarten, so muss dieses in das '''Password'''-Eingabefeld rechts eingegeben werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
Mit dem '''Connect'''-Button rechts oben wird zu dem aktuell markierten Server eine Verbindung aufgebaut, sofern dieser noch nicht voll ist und das Passwort stimmt, falls vorhanden. Mit '''Refresh''' wird die gesamte Serverliste neu geladen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Unten findet sich außerdem noch ein Button '''Add to Favourites''', mit dem der ausgewählte Server zur Favoritenliste hinzugefügt werden kann. In der Favoritenliste ist das Gegenstück dazu, '''Remove from Favourites''', welches den ausgewählten Server wieder aus der Liste entfernt. Außerdem gibt es dort den Button '''Add by host/ip''', mit dem man einen Server anhand seiner IP Adresse und seines Ports zu den Favoriten hinzufügen kann.&lt;br /&gt;
&lt;br /&gt;
===Host Game===&lt;br /&gt;
[[Image:mta_host_game_general.png|MTA:SA 1.0 Host Game (General)]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Mit '''Host Game''' (dt. ein Spiel veranstalten) kann man einen eigenen Server eröffnen, auf dem man selbst und andere Spieler dann spielen können. (Wenn man mit dem Internet verbunden ist, die Firewall richtig konfiguriert ist, die Ports freigegeben sind, usw.)&lt;br /&gt;
&lt;br /&gt;
Die Felder und Einstellungen:&lt;br /&gt;
*'''Server Name''': Der Name des Servers, der in der Serverliste angezeigt werden soll.&lt;br /&gt;
*'''Password''': Das Passwort des Servers. Wenn leer gelassen, kann man den Server ohne Angabe eines Passworts betreten.&lt;br /&gt;
*'''Max Players''': Die maximale Anzahl an Spielern, die gleichzeitig auf dem Server sein können sollen.&lt;br /&gt;
*'''Broadcast''': Hier wird eingestellt, auf welchen Listen der Server angezeigt werden soll.&lt;br /&gt;
**'''LAN''': Der Server wird in der LAN-Liste für alle Spieler im Netzwerk angezeigt.&lt;br /&gt;
**'''Internet''': Der Server wird in der Internet-Liste für alle Spieler angezeigt.&lt;br /&gt;
&lt;br /&gt;
Im Tab '''Resources''' kann eingestellt erden, welche Ressourcen der Server starten soll. Dabei stehen links alle, die gestartet werden sollen und rechts alle, die verfügbar sind. Die Buttons mit den Pfeilen sind wohl selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
===Map Editor===&lt;br /&gt;
[[Image:mta_map_editor.jpg|MTA:SA 1.0 Map Editor Startbildschirm]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Der '''Map Editor''' (dt. Karteneditor) ist eine Ressource, mit der man einfach und professionell Fahrzeuge und Objekte in San Andreas platzieren kann. Er hat ein eingebautes Tutorial. Dennoch existiert ein ausführliches Tutorial im dazugehörigen [[Map editor|Wiki Artikel]] [[Image:Usen.gif|Nur in Englisch verfügbar]].&lt;br /&gt;
&lt;br /&gt;
===Settings===&lt;br /&gt;
In den '''Settings''' (dt. Einstellungen) werden alle möglichen Einstellungen für MTA:SA vorgenommen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Hier mal eine Übersicht der vorhandenen Tabs und den Bedeutungen derer Inhalte:&lt;br /&gt;
====Multiplayer====&lt;br /&gt;
*'''Nick''': Der Nickname, der im Spiel verwendet werden soll.&lt;br /&gt;
*'''Connection''': Der Typ der Internetverbindung.&lt;br /&gt;
*'''Save Server Passwords''': Wenn aktiviert, braucht man bei passwortgeschützten Servern nur einmal das Passwort einzugeben. Dieses wird dann gespeichert.&lt;br /&gt;
====Video====&lt;br /&gt;
*'''General'''&lt;br /&gt;
**'''Resolution''': Bildschirmauflösung im Format Breite x Höhe x Farbtiefe (in Bit)&lt;br /&gt;
***'''Windowed''': Fenstermodus&lt;br /&gt;
***'''Wide Screen''': Breitbild&lt;br /&gt;
*'''Map rendering Options'''&lt;br /&gt;
**'''Opacity''': Deckkraft der Karte, die mit F11 angezeigt werden kann&lt;br /&gt;
====Audio====&lt;br /&gt;
*'''Radio Volume''': Radiolautstärke&lt;br /&gt;
*'''SFX Volume''': Lautstärke der Audioeffekte und Geräusche&lt;br /&gt;
*'''MTA Volume''': Lautstärke der Sounds, die durch MTA erzeugt werden&lt;br /&gt;
====Binds====&lt;br /&gt;
Hier kann die Tastatursteuerung konfiguriert werden. Mit '''Load defaults''' wird die Steuerung auch Standardeinstellungen zurückgesetzt.&lt;br /&gt;
====Controls====&lt;br /&gt;
Hier können Mauseinstellungen vorgenommen und ein Joystick/Controller konfiguriert werden.&lt;br /&gt;
====Community====&lt;br /&gt;
Hier kann man seine Accountdaten von [http://community.mtasa.com/ community.mtasa.com] angeben, um sich als Community Mitglied auszuweisen.&lt;br /&gt;
====Chatbox====&lt;br /&gt;
Hier kann die Chatbox konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
===Quit===&lt;br /&gt;
Mit einem Klick auf '''Quit''' wird MTA:SA sofort beendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
Folgende Hotkeys können im Spiel verwendet werden:&lt;br /&gt;
*'''F8''' oder '''^''': Öffnet die Konsole, die ein Chatlog enthält und Copypaste-Funktionen bereitstellt. Befehle werden hier ohne / eingegeben&lt;br /&gt;
*'''F9''': Öffnet das Hilfefenster, wenn die ''helpmanager'' Ressource läuft.&lt;br /&gt;
*'''F11''': Zeigt eine Karte von San Andreas an, bei der folgende Steuerungen möglich sind:&lt;br /&gt;
**'''Num+''' bzw. '''Num-''': Rein- und rauszoomen&lt;br /&gt;
**'''Num8''', '''Num6''', '''Num4''' bzw. '''Num2''': Die Karte nach oben, rechts, links bzw. unten verschieben&lt;br /&gt;
**'''Num0''': (De-)Aktiviert, dass die Karte automatisch dem Spieler folgt&lt;br /&gt;
*'''F12''': Screenshot (wird in .../MTA San Andreas/screenshots als PNG abgespeichert)&lt;br /&gt;
*'''T''': Öffentlicher Chat&lt;br /&gt;
*'''Y''': Teamchat&lt;br /&gt;
*'''Tab''': Zeigt eine Spielerliste an, wenn die ''scoreboard'' Ressource läuft&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konsolenbefehle==&lt;br /&gt;
Im Folgenden sollen die wichtigsten Befehle, die in der F8-Konsole eingegeben werden können, erläutert werden:&lt;br /&gt;
*'''commands''': Zeigt serverspezifische Befehle an.&lt;br /&gt;
*'''disconnect''': Beendet Deine Verbindung zum Server.&lt;br /&gt;
*'''exit''': Beendet MTA:SA sofort. Alternativ geht auch '''quit'''.&lt;br /&gt;
*'''help''': Zeigt alle verfügbaren Konsolenbefehle an.&lt;br /&gt;
*'''ignore''' ''&amp;lt;name&amp;gt;'': Ignoriert alle Nachrichten von ''&amp;lt;name&amp;gt;''. Beim zweiten Mal wird ''&amp;lt;name&amp;gt;'' wieder von der Ignorierliste genommen.&lt;br /&gt;
*'''maps''': Zeigt eine Liste mit allen verfügbaren Maps auf dem Server an.&lt;br /&gt;
*'''msg''' ''&amp;lt;name&amp;gt; &amp;lt;nachricht&amp;gt;'': Sendet ''&amp;lt;nachricht&amp;gt;'' als private Nachricht an ''&amp;lt;name&amp;gt;''. Anstelle von '''msg''' geht auch '''pm'''.&lt;br /&gt;
*'''nick''' ''&amp;lt;name&amp;gt;'': Ändert den eigenen Nick zu ''&amp;lt;name&amp;gt;''.&lt;br /&gt;
*'''reconnect''': Beendet Deine Verbindung zum Server und baut sie direkt danach neu auf.&lt;br /&gt;
*'''say''' ''&amp;lt;nachricht&amp;gt;'': Sendet ''&amp;lt;nachricht&amp;gt;'' in den öffentlichen Chat.&lt;br /&gt;
*'''time''': Zeigt die aktuelle Zeit an.&lt;br /&gt;
*'''ver''': Zeigt die aktuelle Version und die Copyright Informationen zum eigenen Client an.&lt;br /&gt;
'''Tipp''': Diese Befehle können auch in die normale Chateingabezeile eingegeben werden, wenn ihnen ein Schrägstrich (/) vorgestellt wird.&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=File:Mta_map_editor.jpg&amp;diff=21414</id>
		<title>File:Mta map editor.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=File:Mta_map_editor.jpg&amp;diff=21414"/>
		<updated>2009-09-04T12:20:05Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: MTA:SA 1.0 Map Editor Start Screen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA:SA 1.0 Map Editor Start Screen&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=File:Mta_host_game_general.png&amp;diff=21413</id>
		<title>File:Mta host game general.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=File:Mta_host_game_general.png&amp;diff=21413"/>
		<updated>2009-09-04T11:59:59Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: MTA:SA 1.0 Host Game window (General Tab)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA:SA 1.0 Host Game window (General Tab)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=File:Mta_server_browser.png&amp;diff=21412</id>
		<title>File:Mta server browser.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=File:Mta_server_browser.png&amp;diff=21412"/>
		<updated>2009-09-04T11:38:16Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: MTA:SA 1.0 Server Browser window&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA:SA 1.0 Server Browser window&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=File:Mta_quick_connect.png&amp;diff=21411</id>
		<title>File:Mta quick connect.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=File:Mta_quick_connect.png&amp;diff=21411"/>
		<updated>2009-09-04T11:30:40Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: MTA:SA 1.0 Quick Connect window&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA:SA 1.0 Quick Connect window&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=File:Mta_menu.jpg&amp;diff=21410</id>
		<title>File:Mta menu.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=File:Mta_menu.jpg&amp;diff=21410"/>
		<updated>2009-09-04T11:16:12Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: uploaded a new version of &amp;quot;File:Mta menu.jpg&amp;quot;:&amp;amp;#32;MTA:SA 1.0 menu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=21391</id>
		<title>User:NeonBlack</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=21391"/>
		<updated>2009-08-31T17:09:55Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: ToDo List :D&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just writing anything so that my name isn't red anymore :Þ&lt;br /&gt;
--[[User:NeonBlack|NeonBlack]] 04:25, 3 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
*Translate [[Resource:Editor]] --[[User:NeonBlack|NeonBlack]] 17:09, 31 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=ToggleControl&amp;diff=21359</id>
		<title>ToggleControl</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=ToggleControl&amp;diff=21359"/>
		<updated>2009-08-28T16:48:21Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: Needs checking!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
{{Needs Checking|By enabling a control all bindings belonging to it seem to be deleted. (tested clientside) --[[User:NeonBlack|NeonBlack]] 16:48, 28 August 2009 (UTC)}}&lt;br /&gt;
Enables or disables the use of a GTA control for a specific player.&lt;br /&gt;
&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool toggleControl ( player thePlayer, string control, bool enabled ) &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''thePlayer:''' The player you wish to toggle the control ability of.&lt;br /&gt;
*'''control:''' The control that you want to toggle the ability of. See [[control names]] for a list of possible controls.&lt;br /&gt;
*'''enable:''' A boolean value representing whether or not the key will be usable or not.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool toggleControl ( string control, bool enabled ) &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''control:''' The control that you want to toggle the ability of. See [[control names]] for a list of possible controls.&lt;br /&gt;
*'''enable:''' A boolean value representing whether or not the key will be usable or not.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Returns==&lt;br /&gt;
This function ''true'' if the control was set successfully, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Example==  &lt;br /&gt;
&amp;lt;section name=&amp;quot;Example 1&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This function will disable the use of the vehicle secondary-fire key for anyone in a Hydra, consequently removing the ability to fire rockets.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function disableFireForHydra ( theVehicle, seat, jacked )&lt;br /&gt;
    if ( getVehicleID ( theVehicle ) == 520 ) then -- if they entered a hydra&lt;br /&gt;
        toggleControl ( source, &amp;quot;vehicle_secondary_fire&amp;quot;, false ) -- disable their fire key&lt;br /&gt;
    else -- if they entered another vehicle&lt;br /&gt;
        toggleControl ( source, &amp;quot;vehicle_secondary_fire&amp;quot;, true ) -- enable their fire key&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler ( &amp;quot;onPlayerVehicleEnter&amp;quot;, getRootElement(), disableFireForHydra )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: The same can be achieved by using [[setVehicleGunsEnabled]]''.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;section name=&amp;quot;Example 2&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
This function will disable the use of the vehicle secondary-fire key for anyone in a Hydra, consequently removing the ability to fire rockets.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function disableFireForHydra ( theVehicle, seat )&lt;br /&gt;
    if ( getVehicleID ( theVehicle ) == 520 ) then -- if they entered a hydra&lt;br /&gt;
        toggleControl ( &amp;quot;vehicle_secondary_fire&amp;quot;, false ) -- disable their fire key&lt;br /&gt;
    else -- if they entered another vehicle&lt;br /&gt;
        toggleControl ( &amp;quot;vehicle_secondary_fire&amp;quot;, true ) -- enable their fire key&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler ( &amp;quot;onClientPlayerEnterVehicle&amp;quot;, getLocalPlayer(), disableFireForHydra )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: The same can be achieved by using [[setVehicleGunsEnabled]]''.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Input functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21199</id>
		<title>DE/Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Hauptseite&amp;diff=21199"/>
		<updated>2009-08-23T10:49:43Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFEEAA; padding: 5px; float:right; width: 30%;&amp;quot;&amp;gt;Aktuelle stabile Version von '''Multi Theft Auto: San Andreas Deathmatch''' ist '''{{Current Version|full}}'''. Diese kann auf der [http://mtasa.com/ Hauptseite] heruntergeladen werden.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Du kannst dir auch die [http://code.google.com/p/multitheftauto/wiki/NightlyBuilds?tm=2 neueste nightly Version] herunterladen, die die neuesten Updates beinhaltet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Willkommen im Multi Theft Auto: San Andreas Deathmatch Entwickler-Wiki. Du findest hier eine Fülle an Informationen zu der Entwicklung von Gamemodes und Maps für Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele [[How you can help|Dinge, die Du tun kannst, um zur Verbesserung MTAs beizutragen]] - erstelle eine Map, einen Gamemode, ein Hilfsdokument zu einer Scriptfunktion, einen Beispielcode für das Wiki, schreibe ein Tutorial oder spiele einfach nur MTA und poste die Bugs, die Du dabei findest, im [http://bugs.mtasa.com Mantis Bugtracker].&lt;br /&gt;
&lt;br /&gt;
Falls Du irgendwelche Fragen oder Probleme bezüglich Scripting hast, kannst Du uns gerne in unserem [[IRC Channel]] besuchen.&lt;br /&gt;
Mittlerweile haben sich auch einige deutsche MTA Scripter und Spieler zusammengetan und einen [irc://irg.gtanet.com/#mta.german deutschen MTA IRC Channel] sowie ein [http://sebihunter.de/wbb/ deutsches MTA Forum] gegründet. Dort könnt ihr auch jederzeit gerne vorbeischauen, wenn ihr Hilfe braucht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
====Einführung====&lt;br /&gt;
&lt;br /&gt;
* [[DE/MTA_DM_Client_Anleitung|MTA DM Client Anleitung]] [[Image:100%.png|100% übersetzt]]&lt;br /&gt;
* [[DE/MTA_DM_Server_Anleitung|MTA DM Server Anleitung]] [[Image:00%.png|7% fertiggestellt]]&lt;br /&gt;
* [[Known_Issues_-_FAQ|Bekannte Probleme]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[DE/MTA_Scripting_Grundlagen|Scripting Grundlagen]] [[Image:De.gif|Deutscher Artikel]]&lt;br /&gt;
* [[Introduction to Scripting the GUI|Einführung in's GUI Scripting]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Debugging|Debugging Tutorial]] [[Image:usen.gif|Nur in Englisch verfügbar]] - So findest Du Fehler in Deinem Script&lt;br /&gt;
* [[MTA Classes|MTA Klassen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Detaillierte Beschreibung aller MTA Klassen&lt;br /&gt;
** [[Element|MTA Elemente]] / [[Element tree|Elementbaum]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resources|Einführung in die Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Resource Web Access|Webzugriff über Ressourcen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
** [[Meta.xml]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Resource:Mapmanager|Map Manager]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Writing_Gamemodes|Erstellung von Gamemodes]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Useful_Functions|Nützliche Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]] - nützliche Funktionen von Scriptern für Scripter&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Datenbanken====&lt;br /&gt;
Diese Abteilung behandelt die Möglichkeiten von LUA mit MTA sowie die bereitgestellten Ressourcen.&lt;br /&gt;
* [[:Category:Resource|Ressourcenkatalog]] [[Image:usen.gif|Nur in Englisch verfügbar]] - Grundlagen, um ein korrektes Script zu erstellen&lt;br /&gt;
* [[Client side scripts|Clientseitige Scripts]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generelle Hilfe zu Lua====&lt;br /&gt;
*[[DE/Lua_Tutorial|Ausführliches Lua Tutorial]] - Neues Tutorial, in dem Lua sehr ausführlich erklärt wird&lt;br /&gt;
*[http://lua.lickert.net/ Deutsches LUA Tutorial]&lt;br /&gt;
*[http://lua.gts-stolberg.de/ Anderes deutsches LUA Tutorial] - Grundlagen verständlich vermittelt, jedoch lässt die Sprache insgesamt etwas zu wünschen übrig...&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Anleitung] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Anleitung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definitionsformat]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Referenz====&lt;br /&gt;
* [[Client Scripting Functions|Clientseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Client Scripting Events|Clientseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Functions|Serverseitige Funktionen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Server Scripting Events|Serverseitige Events]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ID-Listen====&lt;br /&gt;
* [[Animations|Animationen]]&lt;br /&gt;
* [[Vehicle IDs|Fahrzeuge]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Vehicle_colors|Fahrzeugfarben]]&lt;br /&gt;
* [[Vehicle_default_colors|Farbzuweisungen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Garage|Garagen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[CJ Clothes|Kleidung]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Projectiles|Projektile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Blip_Icons|Radaricons]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Character Skins|Skins]] ([[All Skins Page|alle]]) [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Template:Sounds|Sounds]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Vehicle Upgrades|Tuningteile]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weapons|Waffen]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
* [[Weather|Wetter]] [[Image:usen.gif|Nur in Englisch verfügbar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:Table.size&amp;diff=21165</id>
		<title>Talk:Table.size</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:Table.size&amp;diff=21165"/>
		<updated>2009-08-18T22:18:10Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What about using the builtin lua function:&lt;br /&gt;
&lt;br /&gt;
table.getn(table)&lt;br /&gt;
&lt;br /&gt;
--[[User:Subenji99|Subenji99]] 06:54, 13 July 2009 (CEST)&lt;br /&gt;
----&lt;br /&gt;
table.getn was replaced by the #-operator, which returns the number of table elements with a numerical (!) index.&amp;lt;br/&amp;gt;&lt;br /&gt;
table.size counts all elements regardless of which type their index is.&amp;lt;br/&amp;gt;&lt;br /&gt;
Of course it's a bad idea to use this function for a table with only numerical indices.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 16:19, 13 July 2009 (CEST)&lt;br /&gt;
----&lt;br /&gt;
Indded, I actually just attempted it with non-numerical indices and found it didn't work.  I stand corrected. :D&lt;br /&gt;
&lt;br /&gt;
I shall leave my humiliation (lol) here so anyone else wondering what the point of this function would be can see that it is for non-numerical indices.&lt;br /&gt;
&lt;br /&gt;
Oh, reading up, I'd like to point out that if you structure your table, planning for this, you can still use the # operator.&lt;br /&gt;
you have to count the additions you make to your table then use table.setn like so:&lt;br /&gt;
&lt;br /&gt;
table.setn(table, &amp;lt;number of values&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
if you are using a loop to create your table, it would be a simple matter to add it after:&lt;br /&gt;
&lt;br /&gt;
    table = {}&lt;br /&gt;
    local count = 0&lt;br /&gt;
    for _,v in pairs(results) do&lt;br /&gt;
        table[v] = someFunction(v)&lt;br /&gt;
        count = count + 1&lt;br /&gt;
    end&lt;br /&gt;
    table.setn(table, count)&lt;br /&gt;
&lt;br /&gt;
[http://www.lua.org/pil/19.1.html Array Size]&lt;br /&gt;
&lt;br /&gt;
In my case though, this function was still required as the table I was checking against was a returned table from an exported function of mapmanager.&lt;br /&gt;
&lt;br /&gt;
--[[User:Subenji99|Subenji99]] 20:43, 13 July 2009 (CEST)&lt;br /&gt;
----&lt;br /&gt;
You should really update your Lua skills. table.setn is deprecated like table.getn is, too.&amp;lt;br/&amp;gt;&lt;br /&gt;
Of course setting the n of the table would be much more efficient than iterating through it to get the size, but it's as I already said deprecated.&amp;lt;br/&amp;gt;&lt;br /&gt;
Alternatively you could use a mostly unused index for storing the size like _ for example. But I don't think iterating through the table and just increasing one value each step isn't that expensive.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 20:50, 14 July 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Sebas ==&lt;br /&gt;
&lt;br /&gt;
Please keep using pairs instead of next for new people :)&lt;br /&gt;
----&lt;br /&gt;
I don't think that's useful. People should learn to use next instead of pairs. Apart from that it's no code for learning but more a code for copying.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:NeonBlack|NeonBlack]] 22:18, 18 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Table.size&amp;diff=21162</id>
		<title>Table.size</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Table.size&amp;diff=21162"/>
		<updated>2009-08-18T17:33:38Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Code */ pairs -&amp;gt; next!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function returns the total size of a table and not only the highest numerical index like table.maxn or the number of fields that have a numerical index like the #-operator.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int table.size( table tab )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''tab''': The table to retrieve the total size of.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the total number of fields the table contains.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function table.size(tab)&lt;br /&gt;
    local length = 0&lt;br /&gt;
    for _ in next, tab do length = length + 1 end&lt;br /&gt;
    return length&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local tab = { 1, 2, 3, [25] = 4, five = 5, foo = &amp;quot;bar&amp;quot; }&lt;br /&gt;
print(tostring(#tab)) --prints: 4 (because there are 4 fields with a numerical index)&lt;br /&gt;
print(tostring(table.maxn(tab))) --prints: 25 (because the highest numerical index is 25)&lt;br /&gt;
print(tostring(table.size(tab))) --prints: 6 (because the table has 6 fields in total)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=21106</id>
		<title>User:NeonBlack</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User:NeonBlack&amp;diff=21106"/>
		<updated>2009-08-16T08:20:11Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just writing anything so that my name isn't red anymore :Þ&lt;br /&gt;
--[[User:NeonBlack|NeonBlack]] 04:25, 3 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=21091</id>
		<title>Math.round</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=21091"/>
		<updated>2009-08-15T08:25:57Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Example */  &amp;lt;.&amp;lt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function is a full featured round function for Lua's math-library.&lt;br /&gt;
Bear in mind that both the floor and the ceil method may not work properly clientside when you pass something greater than 0 as second argument. This is because of some weird clientside number bug. It's fixed for the round method.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int/float math.round( float number, [ int decimals = 0, string method = &amp;quot;round&amp;quot; ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''number''': The number to round.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''decimals''': The number of decimals to keep.&lt;br /&gt;
* '''method''': The round method that should be used. Valid values are &amp;quot;round&amp;quot; (which is default), &amp;quot;floor&amp;quot; and &amp;quot;ceil&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the rounded number.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function math.round(number, decimals, method)&lt;br /&gt;
    decimals = decimals or 0&lt;br /&gt;
    local factor = 10 ^ decimals&lt;br /&gt;
    if (method == &amp;quot;ceil&amp;quot; or method == &amp;quot;floor&amp;quot;) then return math[method](number * factor) / factor&lt;br /&gt;
    else return tonumber((&amp;quot;%.&amp;quot;..decimals..&amp;quot;f&amp;quot;):format(number)) end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Serverside Example&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example adds a command that outputs the players actual position approximated to three decimals.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addCommandHandler(&amp;quot;pos&amp;quot;, function ()&lt;br /&gt;
    local x, y, z = getElementPosition(getPedOccupiedVehicle(source) or source)&lt;br /&gt;
    outputChatBox(&amp;quot;Your actual position: [&amp;quot;..math.round(x, 3)..&amp;quot;|&amp;quot;..math.round(y, 3)..&amp;quot;|&amp;quot;..math.round(z, 3)..&amp;quot;]&amp;quot;, source)&lt;br /&gt;
end, false, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=21090</id>
		<title>Template:Useful Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Useful_Functions&amp;diff=21090"/>
		<updated>2009-08-15T08:25:19Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: added math.round&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[callClientFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any clientside function from the server's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[callServerFunction]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function allows you to call any server-side function from the client's side.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[Check]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function checks if it's arguments are of the right types and calls the error-function if one isn't.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[doForAllElements]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function can be used to execute a specified function for all elements of a specified type.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[findRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Takes two points and returns the direction from point A to point B.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[FormatDate]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Formats a date on the basis of a format string and returns it.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[getPointFromDistanceRotation]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds a point based on a starting point, direction and distance.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[GetTimestamp]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» With this function you can get the [http://en.wikipedia.org/wiki/Unix_time UNIX timestamp].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IfElse]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Returns one of two values based on a boolean expression.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[IsYearALeapYear]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Checks if the given year is a leap year.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[math.round]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Rounds a number whereas the number of decimals to keep and the method may be set.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[setTableProtected]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Protects a table and makes it read-only.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[string.explode]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function splits a string at a given separator pattern and returns a table with the pieces.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.copy]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function copies a whole table and all the tables in that table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.map]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» This function goes through a table and replaces every field with the return of the passed function, where the field's value is passed as first argument and optionally more arguments.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[table.size]] &amp;lt;span style=&amp;quot;color:gray; font-family:'Georgia',sans-serif; font-size:smaller;&amp;quot;&amp;gt;» Finds the absolute size of a table.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Useful Functions]]&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=21089</id>
		<title>Math.round</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Math.round&amp;diff=21089"/>
		<updated>2009-08-15T08:22:44Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: new useful function: math.round&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function is a full featured round function for Lua's math-library.&lt;br /&gt;
Bear in mind that both the floor and the ceil method may not work properly clientside when you pass something greater than 0 as second argument. This is because of some weird clientside number bug. It's fixed for the round method.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int/float math.round( float number, [ int decimals = 0, string method = &amp;quot;round&amp;quot; ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''number''': The number to round.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''decimals''': The number of decimals to keep.&lt;br /&gt;
* '''method''': The round method that should be used. Valid values are &amp;quot;round&amp;quot; (which is default), &amp;quot;floor&amp;quot; and &amp;quot;ceil&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the rounded number.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function math.round(number, decimals, method)&lt;br /&gt;
    decimals = decimals or 0&lt;br /&gt;
    local factor = 10 ^ decimals&lt;br /&gt;
    if (method == &amp;quot;ceil&amp;quot; or method == &amp;quot;floor&amp;quot;) then return math[method](number * factor) / factor&lt;br /&gt;
    else return tonumber((&amp;quot;%.&amp;quot;..decimals..&amp;quot;f&amp;quot;):format(number)) end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Serverside Example&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example adds a command that outputs the players actual position approximated to three decimals.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addCommandHandler(&amp;quot;pos&amp;quot;, function ()&lt;br /&gt;
    local x, y, z = getElementPosition(getPedOccupiedVehicle(source) or source)&lt;br /&gt;
    outputChatBox(&amp;quot;Your actual position: [&amp;quot;..math.format(x, 3)..&amp;quot;|&amp;quot;..math.format(y, 3)..&amp;quot;|&amp;quot;..math.format(z, 3)..&amp;quot;]&amp;quot;, source)&lt;br /&gt;
end, false, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: NeonBlack&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DE/Lua_Tutorial&amp;diff=21025</id>
		<title>DE/Lua Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DE/Lua_Tutorial&amp;diff=21025"/>
		<updated>2009-08-09T09:43:41Z</updated>

		<summary type="html">&lt;p&gt;NeonBlack: /* Einzeln */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
Da es bis auf einige knappe und teils unprofessionelle Tutorials kein deutsches Lua Tutorial gibt, habe ich beschlossen, nun ein eigenes zu schreiben, welches alle für MTA notwendigen Grundlagen einfach und übersichtlich erklärt.&lt;br /&gt;
Weiterführende Möglichkeiten und Funktionen können der [http://www.lua.org/manual/5.1/ Offiziellen Lua Dokumentation] entnommen werden, die es jedoch nicht auf Deutsch gibt.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Grund ist, dass ich schon von einigen gehört habe und auch so schon den Verdacht hatte, dass MTA einfach so wenige deutsche Spieler und vor allem Server hat (gibt es überhaupt '''einen''' deutschen?), weil die meisten Probleme mit den englischen Dokumentationen haben oder der Meinung sind, dass für MTA ja sowieso kein deutscher Support vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Soviel nun dazu, wie es zu der Idee des deutschen Lua Tutorials kam.&lt;br /&gt;
Fangen wir an mit dem Erlernen einer neuen Sprache!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlagen==&lt;br /&gt;
===Lua, eine Skriptsprache===&lt;br /&gt;
Lua (portugiesisch für Mond) ist eine Skriptsprache zum Einbinden in Programme, um diese leichter weiterentwickeln und warten zu können. Insbesondere die geringe Größe des Interpreters von 120 KB und die hohe Geschwindigkeit verglichen mit anderen Skriptsprachen überzeugen viele Entwickler davon, Lua einzusetzen.&lt;br /&gt;
&lt;br /&gt;
Die Syntax lehnt sich an die von Pascal an, was besonders Anfängern den Einstieg in Lua erleichtert. Im Gegensatz zu von Pascal abgeleiteten Sprachen nutzt Lua jedoch „==“ und nicht „=“ als Vergleichsoperator.&lt;br /&gt;
&lt;br /&gt;
(Quelle: [http://de.wikipedia.org/wiki/Lua Wikipedia])&lt;br /&gt;
&lt;br /&gt;
Einige werden sich bei dieser Einführung vielleicht gefragt haben, was der Unterschied zwischen Skript- und Programmiersprache ist und was ein Interpreter sein soll. Im folgenden will ich diese beiden Fragen so kurz und einfach wie möglich klären.&lt;br /&gt;
&lt;br /&gt;
Eine '''Programmiersprache''' (z.B. C, C++, Pascal, Delphi) wird - wie der Name schon sagt - verwendet, um Programme zu schreiben. Ein Programm liegt bekannterweise in Form einer Executable (*.exe) vor. Diese kann weitgehend unabhängig von irgendwelchen Betriebssystemen oder der Umgebung selbstständig ausgeführt werden (z.B. durch Doppelklick). Weitgehend deswegen, da einige Programme aufgrund von Speicherersparnissen sogenannte Programmbibliotheken (original Dynamic Link Library, kurz dll) benötigen, um zu funktionieren. Erklärungen dazu findet ihr [http://de.wikipedia.org/wiki/Dynamic_Link_Library hier].&amp;lt;br&amp;gt;&lt;br /&gt;
Um einen Programmquellcode, d.h. einen Text, der in einer Programmiersprache geschrieben wurde, aus dem Textdokumentformat in eine Anwendung (original Executable, kurz exe) umzuwandeln, benötigt man nun einen Compiler (zu Deutsch Kompilierer oder Übersetzer), der die Programmiersprache aus der menschenlesbaren Form in die maschinenlesbare Form umwandelt. Neben dieser Hauptaufgabe übernimmt der Compiler natürlich noch weitere Aufgaben, auf die ich jetzt aber nicht genauer eingehen werde. Infos dazu findet ihr [http://de.wikipedia.org/wiki/Compiler hier].&amp;lt;br&amp;gt;&lt;br /&gt;
Die maschinenlesbare Form ist für Menschen unlesbar.&lt;br /&gt;
&lt;br /&gt;
Eine '''Skriptsprache''' (z.B. JavaScript, DOS-Batch(Win) bzw. Shell-Scripts(UNIX)) hingegen liegt standardmäßig in der menschenlesbaren Form vor. Skriptsprachen werden - wie im ersten Satz bereits erwähnt - vor allem von Programmen benutzt, um benutzerdefinierte Abläufe verwenden zu können. Zur Ausführung von Scripts wird ein sogenannter Interpreter benötigt, der das Skript liest und es Schritt für Schritt in die Maschinensprache umwandelt und ausführt. Manche Skriptsprachen kann man mit einem Precompiler (zu Deutsch Vorkompilierer oder Vorübersetzer) vorkompilieren. Diesen könnte man auch den Vorkauer vom Interpreter nennen, da er das Script schon zum Teil in die Maschinensprache umwandelt, jedoch nicht so extrem wie der Compiler der Programmiersprachen. Das Ergebnis davon ist logischerweise die schnellere Ausführung des Skripts.&lt;br /&gt;
&lt;br /&gt;
Genug der langweiligen Definitionen. Klären wir lieber, was man denn alles braucht, um ein Lua Script zu schreiben.&lt;br /&gt;
&lt;br /&gt;
===Materialien===&lt;br /&gt;
Lua Skripte werden üblicherweise als Textdateien mit der Endung .lua gespeichert. Die Endung ist jedoch nicht von belang. Es kann jede beliebige Endung gewählt werden.&lt;br /&gt;
&lt;br /&gt;
Wie jede normale Textdatei kann man also auch Lua Skripte mit dem standard Texteditor des vorhandenen Betriebssystems schreiben, editieren und lesen. Ich persönlich empfehle jedoch das Programm Notepad++, welches [http://notepad-plus.sourceforge.net/de/site.htm hier] heruntergeladen werden kann. Das Programm ist Freeware und wird regelmäßig aktualisiert und erweitert. Der Vorteil daran ist, dass es ein professionelles Syntax-Highlighting eingebaut hat, welches Schlagwörter und Standardfunktionen farblich oder anderweitig hervorhebt und somit die Übersichtlichkeit erheblich verbessert.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardmäßig wird die Sprache Lua automatisch an der Dateiendung .lua erkannt, solltest Du eine andere Endung verwenden und trotzdem das Lua Syntax-Highlighting verwenden wollen, kannst Du es oben im Menü „Sprachen“ einstellen.&lt;br /&gt;
&lt;br /&gt;
Wer ohne MTA seine kleinen Lua Skripte testen oder ausführen möchte, kann sich [http://luabinaries.luaforge.net/download.html hier] einen kostenlosen standalone Interpreter herunterladen. Wenn Du Dir nicht sicher bist, welche Windows Edition Du hast, dann hast Du wahrscheinlich eine 32 Bit Version, welche auf dieser Seite der „Windows x86 Executables“ entspricht. Die aktuelle Version (Win 32 Bit) dafür gibt es bei einem Klick auf [http://luaforge.net/frs/download.php/3134/lua5_1_3_Win32_bin.zip lua5_1_3_Win32_bin.zip].&amp;lt;br&amp;gt;&lt;br /&gt;
Nach dem Download kann der Standalone Interpreter mit einem Doppelklick auf die „lua5.1.exe“ gestartet werden. Dort kann man dann direkt Lua Befehle eingeben oder ein Script laden. Dies geht wie folgt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;dofile(&amp;quot;dateiname.lua&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kommentare==&lt;br /&gt;
Um sein Skript übersichtlicher zu gestalten, kann man mit Kommentaren bestimmte Zeilen eräutern, Bereiche abgrenzen, alten Code deaktivieren, ohne ihn zu entfernen und generell das Skript übersichtlicher gestalten.&amp;lt;br&amp;gt;&lt;br /&gt;
Kommentare werden vom Interpreter vollkommen ignoriert und sind nur für den Menschen lesbar und von Belang.&lt;br /&gt;
&lt;br /&gt;
===Einzeilig===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;-- Dies ist ein einzeiliger Kommentar. Er gilt von -- bis zum Ende dieser Zeile.&lt;br /&gt;
-- Automatische Zeilenumbrüche, die eingefügt werden, wenn die Zeilenlänge überschritten wurde, zählen nicht.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mehrzeilig===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;--[[ Dieser Kommentar&lt;br /&gt;
     geht über beliebig viele Zeilen&lt;br /&gt;
     und endet mit ]]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variablen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Eine Variable kann man sich wie eine kleine Kiste vorstellen, auf der außen ein Bezeichner (oder Name) steht und die einen Wert enthält. Während der Bezeichner immer gleich ist, kann der Inhalt variieren.&lt;br /&gt;
Jede Variable hat einen Variablentypen, der bei Programmiersprachen normalerweise zu Beginn des Programmes fest definiert wird und sich nicht ändern kann. Da Lua aber ja keine Programmiersprache ist, muss der Variablentyp zu Beginn und auch sonst nie festgelegt werden und kann sich beliebig oft verändern. Der Interpreter erkennt Variablentypen automatisch und nimmt dem Skripter somit eine Menge Arbeit (vor allem bzgl. der Planung) ab.&lt;br /&gt;
&lt;br /&gt;
===Typen===&lt;br /&gt;
Im Folgenden will ich die wichtigsten Variablentypen auflisten und kurz beschreiben.&lt;br /&gt;
;Integer (ganze Zahlen)&lt;br /&gt;
:Umfasst alle Ganzzahlen, sowohl negative als auch positive.&lt;br /&gt;
:Beispiele: -8, 0, 12, 2&lt;br /&gt;
;Float (Komma- bzw. gebrochene Zahlen)&lt;br /&gt;
:Umfasst alle Fließkommazahlen, sowohl negative als auch positive. Wichtig dabei ist, dass anstelle des Kommas (,) ein Dezimalpunkt (.) zum Trennen des ganzen vom gebrochenen Teil verwendet werden muss.&lt;br /&gt;
:Beispiele: -77.2, 0.0, 3.14159, 9.81&lt;br /&gt;
;String (Zeichenkette)&lt;br /&gt;
:Kann jedes beliebige Zeichen enthalten. Eine maximale Länge ist mir nicht bekannt. Strings müssen immer in Anführungszeichen(&amp;quot; oder ') eingschlossen werden.&lt;br /&gt;
:Beispiele: &amp;quot;hallo&amp;quot;, 'Lua ist toll!', &amp;quot;&amp;quot;, &amp;quot; :D &amp;quot;&lt;br /&gt;
;Boolean (Schalter)&lt;br /&gt;
:Kann zwei verschiedene Werte enthalten: ''true'' (dt. wahr bzw. an) oder ''false'' (dt. falsch bzw. aus). ''true'' entspricht dabei nicht dem Wert 1 und ''false'' nicht dem Wert 0.&lt;br /&gt;
:Beispiele: ''true'', ''false''&lt;br /&gt;
;Nil (Leer oder Nichts)&lt;br /&gt;
:''nil'' ist sowohl ein Wert als auch ein Typ. Eine Variable vom Typ ''nil'' enthält automatisch den Wert ''nil''. ''nil'' bedeutet ganz einfach nichts. Wenn eine Variable ''nil'' ist, existiert sie nicht. ''nil'' entspricht weder dem Wert 0 noch dem Wert ''false'' noch dem Wert &amp;quot;&amp;quot;!&lt;br /&gt;
:Beispiele: ''nil''&lt;br /&gt;
Ich werde auf jeden Variablentypen noch detaillierter eingehen. Außerdem wurden hier die Variablentypen '''function''' und '''table''' nicht aufgeführt, da diese jeweils ein eigenes Kapitel bekommen. Zwei weitere Typen, die diese Liste vervollständigen, sind '''userdata''' und '''thread''', auf die ich jedoch in diesem Tutorial nicht weiter eingehen werde, da vor allem letzteres vollkommen irrelevant für MTA ist.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Eine Variable definieren bedeutet im Grunde genommen eine Variable anlegen. In Lua muss einer Variable bei der Definition ein Wert zugewiesen werden. ''nil'' ist dabei als Wert auch möglich, macht jedoch wenig Sinn, da jede beliebige Variablenbezeichnung automatisch den Wert ''nil'' enthält.&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen '''lokalen''' und '''globalen''' Variablen. Um eine Variable als lokal zu definieren muss das Schlüsselwort ''local'' davor geschrieben werden. Lokal bedeutet für uns im Moment noch ganz einfach, dass die Variable nur im aktuellen Script verfügbar ist. Sollten also z.B. von einem Programm zwei verschiedene Lua Skripte geladen sein und benutzt werden, können diese untereinander auf die globalen Variablen des jeweils anderen Skripts zugreifen, auf die lokalen jedoch nicht. Generell empfiehlt es sich, immer lokale Variablen zu nehmen, falls man nicht explizit eine globale benötigt, da so vermieden wird, dass mehrere parallel laufende Skripte aufgrund von gleichen Variablenbezeichnern durcheinander kommen.&lt;br /&gt;
&lt;br /&gt;
====Einzeln====&lt;br /&gt;
Definieren wir uns also nun unsere erste lokale Variable und geben ihr einen ganzzahligen Inhalt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 7 -- weist der lokalen Variable zahl den Wert 7 zu&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine globale Variable erhält man, indem man einfach das ''local'' weglässt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;gZahl = 13 -- weist der globalen Variable gZahl den Wert 13 zu&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das selbe geht natürlich nun auch mit allen anderen Variablentypen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local ganzzahl = -5&lt;br /&gt;
local kommazahl = 0.008&lt;br /&gt;
local zeichenkette = &amp;quot;Hello World&amp;quot;&lt;br /&gt;
local schalter = true&lt;br /&gt;
local nichts = nil -- diese Zeile kann man sich im Grunde genommen sparen, da jede nicht definierte Variable automatisch den Wert nil hat&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Längere Strings mit mehreren Zeilenumbrüchen können in einer vereinfachten Weise zugewiesen werden. Dies funktioniert so ähnlich wie bei Kommentaren. Anstelle von Anführungszeichen verwendet man &amp;lt;nowiki&amp;gt;[[ als Anfangs- und ]]&amp;lt;/nowiki&amp;gt; als Endmarkierung des Strings.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local text = [[Willkommen auf unserem Server.&lt;br /&gt;
Bitte halte Dich an die Regeln.&lt;br /&gt;
MfG die Administration]]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alternativ kann in einem String, der in doppelten Anführungszeichen (&amp;quot;) eingeschlossen ist, folgende Steuerzeichen enthalten:&lt;br /&gt;
;\n&lt;br /&gt;
:Entspricht einem Zeilenumbruch.&lt;br /&gt;
;\t&lt;br /&gt;
:Entspricht einem Tabulator.&lt;br /&gt;
;\&amp;quot;&lt;br /&gt;
:Wird verwendet, um doppelte Anführungszeichen in einem String, der von doppelten Anführungszeichen eingeschlossen ist, darzustellen, ohne dass der Interpreter diese fälschlicherweise als Stringende auffasst.&lt;br /&gt;
;\'&lt;br /&gt;
:Wie \&amp;quot;, nur gilt dies in Strings, die von einfachen Anführungszeichen eingeschlossen sind.&lt;br /&gt;
;\\&lt;br /&gt;
:Entspricht einem Backslash (\)&lt;br /&gt;
&lt;br /&gt;
====Mehrere====&lt;br /&gt;
Man kann in einer Zeile mehrere Variablen definieren, indem man sie mit Kommas voneinander trennt. Die Variablentypen können dabei alle unterschiedlich sein. Hier mal ein Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local frucht, anzahl, reif = &amp;quot;apfel&amp;quot;, 4, true&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''local'' darf dabei nur einmal am Zeilenanfang stehen und bewirkt, dass alle dahinter aufgelisteten Variablen lokal werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten links neben dem Gleichheitszeichen mehr Variablenbezeichner stehen als rechts Werte, so bleiben die überschüssigen Variablen ''nil''. Im umgekehrten Fall werden überschüssige Werte rechts einfach ignoriert.&lt;br /&gt;
&lt;br /&gt;
==Operatoren==&lt;br /&gt;
===Arithmetische===&lt;br /&gt;
Arithmetische Operatoren werden verwendet, um Berechnungen durchzuführen. Somit kann man entweder mit Variablen, festen Zahlen oder einer Mischung neue Werte berechnen oder verändern.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Berechnungen gilt stets: '''Punkt- vor Strichrechnung'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
;Plus (+)&lt;br /&gt;
:Addiert zwei Werte miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a + b -- a + b entspricht hier der Rechnung 3 + 8, c erhält nun also den Wert 11&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Minus (-)&lt;br /&gt;
:Subtrahiert den zweiten vom ersten Wert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a - b -- a - b entspricht hier der Rechnung 3 - 8, c erhält nun also den Wert -5&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Mal (*)&lt;br /&gt;
:Multipliziert zwei Werte miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a * b -- a * b entspricht hier der Rechnung 3 * 8, c erhält nun also den Wert 24&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Geteilt (/)&lt;br /&gt;
:Dividiert den ersten durch den zweiten Wert. Hierbei entsteht in den meisten Fällen eine Kommazahl!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a / b -- a / b entspricht hier der Rechnung 3 / 8, c erhält nun also den Wert 0.375&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;Modulo (%)&lt;br /&gt;
:Ermittelt den Rest, der übrig bleibt, wenn man die erste Zahl durch die zweite teilt.&lt;br /&gt;
:Der Modulo-Operator gehört zur Punktrechnung.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 14, 3&lt;br /&gt;
local c = a % b -- a % b entspricht hier der Rechnung 14 % 3, c erhält nun also den Wert 2, da 14 / 3 = 4 REST 2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Minus (-) (als Vorzeichen)&lt;br /&gt;
:Dient zur Darstellung einer negativen Zahl, also einer Zahl unter 0.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = -3 -- entspricht der Rechnung a = 0 - 3&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Hoch (^)&lt;br /&gt;
:Potenziert die erste Zahl mit der zweiten.&lt;br /&gt;
:Potenzen werden noch '''vor''' der Punktrechnung ausgerechnet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a, b = 3, 8&lt;br /&gt;
local c = a ^ b -- a ^ b entspricht hier der Rechnung 3 ^ 8 (3&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;), c erhält nun also den Wert 6561&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logische===&lt;br /&gt;
Logische Operatoren werden Benutzt, um Werte miteinander zu vergleichen und mehrere Bedingungen zu verknüpfen. Wir werden genauer auf sie zurückkommen, wenn es um Bedingungen geht. Bis dahin reicht es, wenn man sich merkt, dass ein logischer Vergleich entweder ''true'' (wenn die Aussage wahr ist) oder ''false'' (wenn die Aussage falsch ist) ergibt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
;Gleich (==)&lt;br /&gt;
:Prüft, ob zwei Werte gleich sind.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 == 5) -- a ist true, da die Aussage wahr ist&lt;br /&gt;
local b = (5 == 8) -- b ist false, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Ungleich (~=)&lt;br /&gt;
:Prüft, ob zwei Werte ungleich sind.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 ~= 5) -- a ist false, da die Aussage falsch ist&lt;br /&gt;
local b = (5 ~= 8) -- b ist true, da die Aussage wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Größer als (&amp;gt;)&lt;br /&gt;
:Prüft, ob der erste Wert größer als der zweite ist.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;gt; 5) -- a ist false, da die Aussage falsch ist&lt;br /&gt;
local b = (5 &amp;gt; 8) -- b ist false, da die Aussage falsch ist&lt;br /&gt;
local c = (8 &amp;gt; 5) -- c ist true, da die Aussage wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Größer als oder gleich (&amp;gt;=)&lt;br /&gt;
:Prüft, ob der erste Wert größer als der zweite ist oder dem zweiten gleicht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;gt;= 5) -- a ist true, da die Aussage wahr ist&lt;br /&gt;
local b = (5 &amp;gt;= 8) -- b ist false, da die Aussage falsch ist&lt;br /&gt;
local c = (8 &amp;gt;= 5) -- c ist true, da die Aussage wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Kleiner als (&amp;lt;)&lt;br /&gt;
:Prüft, ob der erste Wert kleiner als der zweite ist.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;lt; 5) -- a ist false, da die Aussage falsch ist&lt;br /&gt;
local b = (5 &amp;lt; 8) -- b ist true, da die Aussage wahr ist&lt;br /&gt;
local c = (8 &amp;lt; 5) -- c ist false, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Kleiner als oder gleich (&amp;lt;=)&lt;br /&gt;
:Prüft, ob der erste Wert kleiner als der zweite ist oder dem zweiten gleicht.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (5 &amp;lt;= 5) -- a ist true, da die Aussage wahr ist&lt;br /&gt;
local b = (5 &amp;lt;= 8) -- b ist true, da die Aussage wahr ist&lt;br /&gt;
local c = (8 &amp;lt;= 5) -- c ist false, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;Und (and)&lt;br /&gt;
:Verknüpft zwei Bedingungen miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (true and false) -- a ist false, da nicht beide Aussagen wahr sind&lt;br /&gt;
local b = (5 &amp;lt; 8) and (7 == 7) -- b ist true, da beide Aussagen wahr sind&lt;br /&gt;
local c = (8 &amp;gt; 5) and (1 ~= 2) and (0 &amp;lt;= -7) -- c ist false, da die dritte Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Oder (or)&lt;br /&gt;
:Verknüpft zwei Bedingungen miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = (true or false) -- a ist true, da die erste Aussage wahr ist&lt;br /&gt;
local b = (5 &amp;lt; 8) or (7 == 7) -- b ist true, da mindestens eine der Aussagen wahr ist&lt;br /&gt;
local c = (8 &amp;gt; 5) or (1 ~= 2) or (0 &amp;lt;= -7) -- c ist true, da mindestens eine der Aussagen wahr ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Nicht (not)&lt;br /&gt;
:Kehrt einen Booleanwert um.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local a = not true -- a ist false&lt;br /&gt;
local b = not false -- b ist true&lt;br /&gt;
local c = not (0 == 8) -- c ist true, da die Aussage falsch ist&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sonstige===&lt;br /&gt;
Lua hat noch zwei weitere Operatoren, die sich jedoch nicht in die oberen Gruppen eingliedern lassen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;Länge (#)&lt;br /&gt;
:Steht für die Länge eines Strings oder einer Table.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local sprache = &amp;quot;deutsch&amp;quot;&lt;br /&gt;
local laenge = #sprache -- laenge wird hier auf 7 gesetzt, da das Wort &amp;quot;deutsch&amp;quot; 7 Buchstaben hat&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Verknüpfung (..)&lt;br /&gt;
:Verknüpft zwei Strings miteinander.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local geschlecht, alter = &amp;quot;männlich&amp;quot;, &amp;quot;18&amp;quot;&lt;br /&gt;
local satz = &amp;quot;Ich bin &amp;quot;..geschlecht..&amp;quot; und &amp;quot;..alter..&amp;quot; Jahre alt.&amp;quot; -- weist satz den Wert &amp;quot;Ich bin männlich und 18 Jahre alt.&amp;quot; zu&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Natürlich können auch alle anderen Variablentypen mit- und untereinander verglichen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Längenoperator (#) sowie der Verknüpfungsoperator (..) sind nur für Strings gedacht, wobei der erste später noch bei Tables eine Rolle spielen wird und der zweite es nicht so genau nimmt mit den Variablentypen. Bei Booleans und ''nil'' jedoch führt er in jedem Fall zu einem Fehler. Wir kommen später noch darauf zu sprechen, wie man soetwas umgeht.&amp;lt;br&amp;gt;&lt;br /&gt;
Für Integer und Floats sind alle Vergleichsoperatoren und die arithmetischen verfügbar. Strings unterstützen nur die Vergleichsoperatoren, wobei man mit den größer/kleiner Operatoren zwei Strings nach dem Alphabet ordnen kann.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&amp;quot;a&amp;quot; &amp;lt; &amp;quot;b&amp;quot; -- ergibt true, da a vor b im Alphabet kommt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Strings, Booleans und ''nil'' kann man nur untereinander vergleichen, nicht miteinander. Miteinander führt in jedem Fall zu ''false''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bedingungen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Bedingungen sind dazu da, um bestimmte Anweisungen nur auszuführen, wenn ein bestimmter Sachverhalt gegeben ist.&lt;br /&gt;
Ein Beispiel wäre, wenn ein Spieler einem anderen Spieler eine private Nachricht senden möchte. Dann kann er das natürlich nur tun, wenn der adressierte Spieler auch online ist.&lt;br /&gt;
Also soll die Nachricht in einem solchen Fall gesendet werden, andernfalls dem Sender jedoch eine Fehlermeldung ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
Die Syntax einer Bedingung, die man übrigens auch „if-Statement“ (if = engl. für wenn) oder im Englischen „condition“ nennt, ist recht simpel.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if &amp;lt;bedingung&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung wahr (=true) ist&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Für &amp;lt;bedingung&amp;gt; darf hier jeder Audruck eingesetzt werden, der letztendlich irgendeinen Wert ergibt.&lt;br /&gt;
Sollte &amp;lt;bedingung&amp;gt; ''nil'' oder ''false'' sein, so wird die Anweisung zwischen then und end nicht ausgeführt, andernfalls wird sie ausgeführt.&lt;br /&gt;
&lt;br /&gt;
===Else-Statement===&lt;br /&gt;
Auf jedes if-Statement darf ein else-Statement (else = engl. für sonst) folgen. Dieses benötigt kein then und auch keine Bedingung, sondern wird ausgeführt, wenn die Bedingung des if-Statements ''nil'' oder ''false'' ist. Das else-Statement ist optional!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if &amp;lt;bedingung&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung erfüllt wird&lt;br /&gt;
else&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung nicht erfüllt wird&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elseif-Statement===&lt;br /&gt;
Das elseif-Statement ist ein spezielles Statement, was es erlaubt, einer unübersichtlichen Verschachtelung zu entgehen, indem es die Möglichkeit bietet, einem else-Statement auch eine Bedingung zu geben. Ein if-Statement darf beliebig viele elseif-Statements enthalten. Diese müssen jedoch zwischen dem if- und dem else-Statement (falls vorhanden) stehen. Für die Bedingung gilt hier das selbe, wie für das if-Statement. Wichtig ist, dass demnach auch hier ein then erforderlich ist. Genauso wie das else-Statement ist jedoch auch das elseif-Statement optional!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if &amp;lt;bedingung1&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung 1 erfüllt wird&lt;br /&gt;
elseif &amp;lt;bedingung2&amp;gt; then&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn die Bedingung 2 erfüllt wird&lt;br /&gt;
else&lt;br /&gt;
    -- Anweisung(en), die ausgeführt werden soll(en), wenn weder Bedingung 1 noch Bedingung 2 erfüllt werden&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bedingungen formulieren===&lt;br /&gt;
Bei der Bedingung eines if-Statements muss nicht zwangsläufig ein Boolean herauskommen. Wie bereits erwähnt, ist die Bedingung immer dann wahr, wenn sie weder ''nil'' noch ''false'' ist.&lt;br /&gt;
D.h., dass auch Werte wie 0, &amp;quot;Hallo&amp;quot; und 3.14159 als „wahr“ gelten. Natürlich ist das auch bei ''true'' der Fall.&lt;br /&gt;
&lt;br /&gt;
Um komplexere Bedingungen zu formulieren, werden auf jeden Fall die bereits aufgelisteten logischen Operatoren benötigt.&lt;br /&gt;
Mit diesen kann man für jeden nur erdenklichen Fall eine Bedingung formulieren.&lt;br /&gt;
&lt;br /&gt;
Wenn logische (Vergleichs-)Operatoren (==, ~=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=) angewandt werden, kommt dabei immer ein Boolean raus, wie man auch schon an den gegebenen Beispielen erkennen kann.&lt;br /&gt;
Verknüfungen (and, or) sind dazu gedacht, um z.B. zu überprüfen, ob mehrere oder wenigstens eine Bedingung von vielen erfüllt werden oder nicht. Der not-Operator ermöglicht es, zu überprüfen, ob eine Bedingung nicht erfüllt wird.&lt;br /&gt;
&lt;br /&gt;
Zu dem and- und dem or-Operator möchte ich an dieser Stelle noch etwas ergänzen. Der and-Operator wird zunächst einmal dazu verwendet, um herauszufinden, ob zwei Bedingungen gleichzeitig erfüllt sind. Der or-Operator wird dazu benutzt, um herauszufinden, ob eine von zweien oder beide Bedingungen erfüllt sind.&lt;br /&gt;
&lt;br /&gt;
Weder der and- noch der or-Operator geben aber zwangsläufig einen Boolean zurück.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1 and wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte wert1 ''nil'' oder ''false'' sein, so entspricht dieser Ausdruck dem folgenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ist wert1 weder ''nil'' noch ''false'', so entspricht der Ausdruck dem hier:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei or ist es ähnlich, nur umgekehrt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1 or wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte wert1 ''nil'' oder ''false'' sein, so entspricht dieser Ausdruck dem folgenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert2&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ist wert1 weder ''nil'' noch ''false'', so entspricht der Ausdruck dem hier:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local foo = wert1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
====50-50-Chance====&lt;br /&gt;
Dieses Beispiel simuliert einen Münzwurf. math.random() und print() sind standard Lua-Funktionen. Zum Thema Funktionen komme ich später. Für dieses Beispiel reicht es, wenn ihr wisst, dass math.random() eine Zufallszahl (float) zwischen 0 und 1 zurückgibt und print(&amp;quot;text&amp;quot;) den in den Klammern eingeschlossenen String in die Konsole ausgibt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zufall = math.random()&lt;br /&gt;
if (zufall &amp;lt; 0.5) then&lt;br /&gt;
    print(&amp;quot;Kopf&amp;quot;)&lt;br /&gt;
else&lt;br /&gt;
    print(&amp;quot;Zahl&amp;quot;)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
====Der Nutzen von elseif====&lt;br /&gt;
Im Folgenden wollen wir herausfinden, ob eine Zahl positiv, negativ oder 0 ist. Dazu möchte ich zuerst ein Beispiel ohne und danach eines mit elseif zeigen, um meine Aussage, dass elseif Verschachtelungen spart, zu verifizieren.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 14&lt;br /&gt;
&lt;br /&gt;
--ohne elseif&lt;br /&gt;
if (zahl &amp;lt; 0) then&lt;br /&gt;
    print(&amp;quot;Die Zahl ist negativ.&amp;quot;)&lt;br /&gt;
else&lt;br /&gt;
    if (zahl == 0) then&lt;br /&gt;
        print(&amp;quot;Die Zahl entspricht 0.&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        print(&amp;quot;Die Zahl ist positiv.&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--mit elseif&lt;br /&gt;
if (zahl &amp;lt; 0) then&lt;br /&gt;
    print(&amp;quot;Die Zahl ist negativ.&amp;quot;)&lt;br /&gt;
elseif (zahl == 0) then&lt;br /&gt;
    print(&amp;quot;Die Zahl entspricht 0.&amp;quot;)&lt;br /&gt;
else&lt;br /&gt;
    print(&amp;quot;Die Zahl ist positiv.&amp;quot;)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Je komplexer das ganze if-Statement, desto nützlicher wird elseif sein.&lt;br /&gt;
====Eingebettetes Pseudo-if-Statement====&lt;br /&gt;
In vielen Script- und Programmiersprachen gibt es ein gekürztes if-Statement. In Javascript z.B. geht das wie folgt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;var nachricht = &amp;quot;Du benutzt zurzeit &amp;quot; + (ie ? &amp;quot;den Internet Explorer&amp;quot; : &amp;quot;einen guten Browser&amp;quot;) + &amp;quot;.&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wir gehen dabei davon aus, dass in der Variable ie ein Boolean gespeichert ist, der ''true'' ist, wenn der Benutzer den Internet Explorer benutzt, ansonsten ''false''.&lt;br /&gt;
Diese Art von eingebetteten if-Statements gibt es noch in vielen anderen Sprachen, unter anderen in PHP, Java und C(++). In meinem Beispiel kann man sich das ? als then und den : als else vorstellen. Dann sollte es eigentlich nicht allzu schwer sein, diese Art von if-Statement zu verstehen.&lt;br /&gt;
&lt;br /&gt;
So direkt gibt es das bei Lua nicht, aber mit and und or kann man sich ein Konstrukt bauen, welches auf die gleiche Weise funktioniert. Dazu werde ich einfach mal das obere Beispiel in Lua umwandeln, auch, wenn Lua eigentlich nicht viel mit Browsern am Hut hat.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local nachricht = &amp;quot;Du benutzt zurzeit &amp;quot;..(ie and &amp;quot;den Internet Explorer&amp;quot; or &amp;quot;einen guten Browser&amp;quot;)..&amp;quot;.&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zuerst ist das and an der Reihe. Es schmeißt den String &amp;quot;den Internet Explorer&amp;quot; raus, wenn ie ''false'' (oder ''nil'') ist und zurück bleibt auf jeden Fall ''false'' (oder ''nil''). Das wird dann vom or rausgeschmissen und zurück bleibt &amp;quot;einen guten Browser&amp;quot;.&lt;br /&gt;
Wenn ie weder ''false'' noch ''nil'' ist, schmeißt and die Vairable ie raus und zurück bleibt &amp;quot;den Internet Explorer&amp;quot;. Da dieser String weder ''false'' noch ''nil'' ist, wird er vom or beibelassen und &amp;quot;einen guten Browser&amp;quot; rausgeschmissen.&lt;br /&gt;
Entschuldigt meine Ausdrucksweise mit dem rausschmeißen, aber das schien mir die beste Möglichkeit, diese Methode verständlich zu erklären.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tabellen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Tabellen sind spezielle Variablen, die mehrere Werte enthalten können.&lt;br /&gt;
Damit wir Tabellen verwenden können, führe ich nun erst einmal den Variablentyp „table“ ein. Mit einer table-Variable kann man ersteinmal kaum Operationen durchführen. Dazu benötigt man Funktionen, zu denen wir aber erst später kommen.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Um eine Variable als (leere) table zu definieren, benutzt man diesen Ausdruck:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Funktionen macht das noch recht wenig Sinn. Um einer Tabelle direkt mehrere Werte zuzuweisen, schreibt man diese einfach durch Kommata getrennt zwischen die geschweiften Klammern.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle1 = { &amp;quot;Apfel&amp;quot;, 14, 3.14159, true }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine table kann alle möglichen Typen von Variablen enthalten. So zum Beispiel auch andere Tabellen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle2 = { 1, { 1.25, 1.5, 1.75 }, 2, { 2.25, 2.5, 2.75 } }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun auf die Elemente einer table zugreifen zu können, benutzt man Indizes (Indizes ist der Plural von Index). Jedes Element in einer table hat einen Index. Wenn man die Tabellen so definiert, wie ich es gemacht habe, so wird jedem Element ein integer als Index zugewiesen, wobei das erste Element die 1 als Index bekommt, das zweite die 2 usw.&lt;br /&gt;
Der ungefähre Wert von Pi (3.14159) in der oberen Tabelle hat den Index 3. Um anhand eines Indizes ein Element einer Tabelle abzufragen, schreibt man den Index einfach in eckigen Klammern hinter den Tabellennamen.&lt;br /&gt;
tabelle1[3] entspricht also dem Wert 3.14159.&lt;br /&gt;
Wenn das Element der Tabelle selbst noch eine Tabelle ist, wie z.B. das Element mit dem index 2 aus tabelle2, dann setzt man die Indizes einfach hintereinander. Der Wert 2.25 ist demnach in tabelle2[4][1] gespeichert.&lt;br /&gt;
&lt;br /&gt;
===Ganzzahlige Indizes===&lt;br /&gt;
Um gezielt bestimmten Indizes einen Wert zuzuweisen, kann man folgende Schreibweise verwenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local auskunft = { [11] = &amp;quot;elf&amp;quot;, [88] = &amp;quot;achtundachtzig&amp;quot;, [0] = &amp;quot;null&amp;quot; }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei spielt es keine Rolle, in welcher Reihenfolge die Indizes einen Wert zugewiesen bekommen und es spiel auch keine Rolle, ob die Indizes positiv oder negativ sind.&lt;br /&gt;
Es muss jedoch beachtet werden, dass etwas wie { [1] = &amp;quot;eins&amp;quot;, &amp;quot;zwei&amp;quot; } dem Index 1 den Wert &amp;quot;zwei&amp;quot; zuweisen würde, da Lua immer bei 1 anfängt zu zählen, egal, ob der Scripter den Index 1 bereits definiert hat.&lt;br /&gt;
&lt;br /&gt;
===Zeichenketten als Indizes===&lt;br /&gt;
Ein Index kann auch ein String sein. Dazu verwendet man folgende Schreibweise:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;lua konstanten = { [&amp;quot;pi&amp;quot;] = 3.14159, [&amp;quot;e&amp;quot;] = 2.71828 }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ansprechen kann man diese Werte genauso wie bei integer-Indizes. konstanten[&amp;quot;pi&amp;quot;] ist also 3.14159.&lt;br /&gt;
&lt;br /&gt;
Eine Besonderheit bei Zeichenketten als Index ist, dass es eine vereinfachte Schreibweise gibt. Sowohl bei der Definition als auch bei der Abfrage der Elemente. Das obige Beispiel kann auch so realisiert werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;lua konstanten = { pi = 3.14159, e = 2.71828 }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zum Abfragen der Elemente kann man die Schreibweise konstanten.pi bzw. konstanten.e verwenden.&lt;br /&gt;
Man sollte aber bedenken, dass Schlüsselwörter wie z.B. if oder local als Indizes besser mit [&amp;quot;if&amp;quot;] und [&amp;quot;local&amp;quot;] definiert werden.&lt;br /&gt;
&lt;br /&gt;
===Beliebige Indizes===&lt;br /&gt;
Ein Index muss nicht unbedingt ein integer oder ein string sein. Genauer gesagt kann ein Index ein beliebiger Wert (außer ''nil'') sein.&lt;br /&gt;
Somit wäre z.B. auch das möglich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = { [true] = &amp;quot;wahr&amp;quot;, [3.14159] = &amp;quot;pi&amp;quot;, [0] = 1, 123 }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Zahl 123 hätte hier übrigens den Index 1.&lt;br /&gt;
&lt;br /&gt;
===Einzelzuweisungen===&lt;br /&gt;
Man muss nicht immer alle Werte einer table auf einmal definieren. Jedes Tabellenelement lässt sich wie eine normale Variable behandeln.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = {}&lt;br /&gt;
tabelle[true] = &amp;quot;wahr&amp;quot;&lt;br /&gt;
tabelle.pi = 3.14159&lt;br /&gt;
tabelle[2] = { 1, 2, 3 }&lt;br /&gt;
tabelle[2][0] = 0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jedes undefinierte Element hat - genauso wie jede undefinierte Variable - den Wert ''nil''.&lt;br /&gt;
&lt;br /&gt;
===Verlinkungen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle1 = { 1, 2, 3 }&lt;br /&gt;
local tabelle2 = tabelle1&lt;br /&gt;
tabelle1[1] = 4&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In der zweiten Zeile dieses Beispiels wird die tabelle1 nicht in die Variable tabelle2 kopiert, sondern tabelle2 verweist ab sofort auf tabelle1. Am Ende des Codes wäre also tabelle2[1] auch 4, obwohl es nicht explizit zugewiesen wurde.&lt;br /&gt;
&lt;br /&gt;
Um eine Tabelle zu kopieren, könnt ihr euch die Useful Function [[table.copy]] aus der Wiki kopieren und diese dazu verwenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schleifen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Schleifen verwendet man immer dann, wenn man eine oder mehrere Anweisungen mehr als einmal direkt hintereinander ausführen möchte oder wenn man eine oder mehrere Anweisungen für jedes Element einer table ausführen möchte.&lt;br /&gt;
Es gibt drei verschiedene Arten von Schleifen. Diese werde ich jetzt hier einzeln vorstellen.&lt;br /&gt;
&lt;br /&gt;
===While-Schleife===&lt;br /&gt;
Die while-Schleife wiederholt eine oder mehrere Anweisungen solange, bis eine bestimmte Bedingung nicht mehr erfüllt wird.&lt;br /&gt;
Die Syntax ist die folgende:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;while [bedingung] do&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 10&lt;br /&gt;
while (zahl &amp;gt;= 0) do&lt;br /&gt;
    print(zahl)&lt;br /&gt;
    zahl = zahl - 1&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Beispiel gibt nacheinander alle Zahlen von 10 bis 0 aus. Nach der Schleife hat zahl dann den Wert -1.&lt;br /&gt;
&lt;br /&gt;
===Repeat-Until-Schleife===&lt;br /&gt;
Die repeat-until-Schleife wiederholt eine oder mehrere Anweisungen solange, bis eine bestimmte Bedingung erfüllt ist. Sie führt diese Anweisung(en) aber in jedem Fall einmal aus.&lt;br /&gt;
Die Syntax lautet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;repeat&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
until [bedingung]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obere Beispiel lässt sich hiermit wie folgt realisieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 10&lt;br /&gt;
repeat&lt;br /&gt;
    print(zahl)&lt;br /&gt;
    zahl = zahl - 1&lt;br /&gt;
until (zahl &amp;lt; 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===For-Schleife===&lt;br /&gt;
Es gibt zwei verschiedene for-Schleifen. Einmal die einfache numerische for-Schleife und zum Anderen die generische for-Schleife, mit der man u.a. alle Elemente einer tabelle durchlaufen kann. Mit der generischen for-Schleife kann man noch ganz andere wesentlich komplexere Operationen durchführen, die ich hier aber nicht erklären werde, da sie auch - zumindest beim Scripten für MTA - nicht wirklich benötigt werden.&lt;br /&gt;
====Numerisch====&lt;br /&gt;
Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for [laufvariable], [maximum], [schrittweite] do&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Laufvariable wird nach jedem Durchlauf der Schleife um die Schrittweite erhöht, bis sie größer oder gleich dem Maximum ist. Alle drei Werte müssen numerisch sein, d.h. ein integer oder ein float. Die Schrittweite kann auch weggelassen werden. Sie ist dann automatisch 1.&lt;br /&gt;
Unser Beispiel von oben sähe mit einer for-Schleife so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for i=10, 0, -1 do&lt;br /&gt;
    print(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Variable i ist nur innerhalb der Schleife verfügbar. Damit sie auch nach der Schleife noch verfügbar ist, muss man sie schon vor der Schleife deklarieren.&lt;br /&gt;
====Generisch====&lt;br /&gt;
Die generische for-Schleife wird hauptsächlich dazu verwendet, um tables zu durchlaufen. Ich werde sie daher auch nur in diesem Zusammenhang erläutern.&lt;br /&gt;
Die Syntax für den Fall, dass man eine table durchlaufen will, ist:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for [index], [wert] in pairs([tabelle]) do&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Diese Schleife geht durch alle Elemente der Tabelle und führt die Anweisungen somit für alle Elemente der Tabelle aus, wobei Index jedes Mal dem aktuellen Index des Tabellenelements und Wert jedes Mal dem aktuellen Wert des Tabellenelements entspricht.&lt;br /&gt;
Anstelle von pairs() kann man auch ipairs() nehmen, wenn man nur alle ganzzahligen Indizes durchlaufen möchte.&lt;br /&gt;
Hier mal ein Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local tabelle = { eins = 1, &amp;quot;hallo&amp;quot;, pi = 3.14159 }&lt;br /&gt;
&lt;br /&gt;
-- mit pairs&lt;br /&gt;
for index, wert in pairs(tabelle) do&lt;br /&gt;
  print(tostring(index)..&amp;quot;=&amp;quot;..tostring(wert)..&amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
-- Ausgabe: &amp;quot;eins=1, 1=hallo, pi=3.14159, &amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- mit ipairs&lt;br /&gt;
for index, wert in ipairs(tabelle) do&lt;br /&gt;
  print(tostring(index)..&amp;quot;=&amp;quot;..tostring(wert)..&amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
-- Ausgabe: &amp;quot;1=hallo, &amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
tostring() ist übrigens eine Funktion, die eine beliebige Variable in einen string umwandelt. Wenn man Variablen mit einem string verknüpfen will und sich nicht sicher ist, ob diese Variablen string sind oder nicht, sollte man auf jeden Fall diese Funktion verwenden, da ansonsten Fehler auftreten können. (Lua gibt einen Error aus, wenn man z.B. soetwas versucht: &amp;quot;Hallo &amp;quot;..nil..&amp;quot;.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Schleifenabbruch===&lt;br /&gt;
Mit dem Schlüsselwort break kann man eine Schleife sofort abbrechen.&lt;br /&gt;
Hier ein kurzes Beispiel dazu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local zahl = 10&lt;br /&gt;
while (true) do&lt;br /&gt;
    print(zahl)&lt;br /&gt;
    zahl = zahl - 1&lt;br /&gt;
    if (zahl &amp;lt; 0) then&lt;br /&gt;
        break&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Diese Schleife würde auch alle Zahlen von 10 bis 0 nacheinander ausgeben, nur dass der Abbruch manuell erfolgt, wenn zahl negativ wird. Ohne diese Bedingung würde die Schleife endlos laufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Funktionen==&lt;br /&gt;
===Einführung===&lt;br /&gt;
Funktionen sind im Grunde genommen Anweisungsblöcke, die - meist in Abhängigkeit von übergebenen Werten - mehrmals an unterschiedlichen Orten im Script bzw. zu unterschiedlichen Zeiten ausgeführt werden sollen.&lt;br /&gt;
Da eine Funktion - sofern sie mehr als einmal ausgeführt werden soll bzw. mehr als einmal benötigt wird - auch in einer Variable gespeichert werden kann, kann man den Variablentyp function einführen, der in Lua auch tatsächlich existiert.&lt;br /&gt;
Funktionen können Werte übergeben bekommen und auch Werte zurückgeben.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Die allgemeine Syntax für das Definieren einer Funktion ist die folgende:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function [funktionsname]([parameterliste])&lt;br /&gt;
    -- Anweisung(en)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Funktion, die das Quadrat einer Zahl zurückgibt, wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function quadrat(zahl)&lt;br /&gt;
    return zahl * zahl&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ kann eine Funktion übrigens auch so einer Variable zugewiesen werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;quadrat = function (zahl) return zahl * zahl end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rückgabewerte===&lt;br /&gt;
return wird verwendet, um die Funktion einen Wert zurückgeben zu lassen. Nach einem return-Befehl bricht die Funktion alle Tätigkeiten ab und ist beendet.&lt;br /&gt;
Um einen Rückgabewert verwenden zu können, müssen wir aber ersteinmal wissen, wie man eine Funktion dazu bringt, die Anweisungen, die sie enthält, auszuführen.&lt;br /&gt;
Das geht allgemein mit funktionsname(parameterliste).&lt;br /&gt;
Als Beispiel für unsere quadrat-Funktion:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local vier = quadrat(2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir quadrat(2) ausführen, dann wird der obrige Code ausgeführt, wobei die Variable zahl den Wert 2 zugewiesen bekommt. zahl ist dabei jedoch nur innerhalb der Funktion definiert.&lt;br /&gt;
Die Variable vier bekommt nun den Wert 2 * 2, also 4 zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local vier = quadrat&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
würde die Funktion quadrat in die Variable vier kopieren. Man könnte nun also auch vier(2) aufrufen, um 4 zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Eine Funktion kann auch mehrere Funktionswerte zurückgeben. Das ist vor allem dann sinnvoll, wenn es sich um Positionen handelt, was bei MTA ja nicht selten vorkommt.&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function berechnungen(zahl1, zahl2)&lt;br /&gt;
    return zahl1 + zahl2, zahl1 - zahl2, zahl1 * zahl2, zahl1 / zahl2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local summe, differenz, produkt, quotient = berechnungen(5, 10)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit wird summe = 15, differenz = -5, produkt = 50 und quotient = 0.5.&lt;br /&gt;
&lt;br /&gt;
===Lua Standardfunktionen===&lt;br /&gt;
Funktionen wie tostring, print und math.random sind Standardfunktionen von Lua. Eine komplette Liste aller Lua Standardfunktionen bekommt ihr auf der [http://www.lua.org/manual/5.1/#index offiziellen Lua Webseite] (Englisch).&lt;br /&gt;
&lt;br /&gt;
Die Standard-string-Funktionen erlauben eine besondere Syntax, die ich hier kurz erläutern möchte, da sie von vielen erfahrenen Scriptern genutzt wird und es hilfreich ist, wenn man etwas damit anfangen kann.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local name = &amp;quot;Firzen Polas&amp;quot;&lt;br /&gt;
local laenge = string.len(name)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dieser Code weist der Variable laenge die Länge des strings &amp;quot;Firzen Polas&amp;quot;, also 12, zu.&lt;br /&gt;
Alternativ kann man auch den folgenden Code verwenden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;local name = &amp;quot;Firzen Polas&amp;quot;&lt;br /&gt;
local laenge = name:len()&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorraussetzung ist, dass die Variable vor dem Doppelpunkt ein string ist. Bei den math- und table-Funktionen funktioniert dies nicht.&lt;br /&gt;
&lt;br /&gt;
===Rekursive Funktionen===&lt;br /&gt;
Rekursive Funktionen sind eine effektive Alternative zu Schleifen - zumindest in manchen seltenen Fällen. Das berühmteste Beispiel ist das Berechnen einer Fakultät.&lt;br /&gt;
Zur Information: n! (sprich: n Fakultät) bezeichnet das Produkt aller Ganzzahlen von n bis 1, also quasi 1*2*3*4*...*n.&lt;br /&gt;
Beispiel: 3! = 1 * 2 * 3 = 6&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function fakultaet(zahl)&lt;br /&gt;
    if (zahl &amp;gt; 0) then&lt;br /&gt;
        return zahl * fakultaet(zahl - 1)&lt;br /&gt;
    else&lt;br /&gt;
        return 1&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit Schleife sähe das so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function fakultaet(zahl)&lt;br /&gt;
    if (zahl == 0) then&lt;br /&gt;
        return 1&lt;br /&gt;
    end&lt;br /&gt;
    for i=zahl-1, 1, -1 do&lt;br /&gt;
        zahl = zahl * i&lt;br /&gt;
    end&lt;br /&gt;
    return zahl&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Variable Parameterzahl===&lt;br /&gt;
Manchmal benötigt eine Funktion nicht zwingend eine bestimmte Anzahl von Parametern oder soll eine variable Anzahl an Parametern akzeptieren.&lt;br /&gt;
Dies lässt sich realisieren mit drei Punkten am Ende der Parameterliste.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function aufsummieren(...)&lt;br /&gt;
    local parameter = {...}&lt;br /&gt;
    local summe = 0&lt;br /&gt;
    for _, zahl in pairs(parameter)&lt;br /&gt;
        summe = summe + tonumber(zahl)&lt;br /&gt;
    end&lt;br /&gt;
    return summe&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
... entspricht dabei innerhalb der Funktion der Parameterliste als normale Liste.&lt;br /&gt;
D.h., wenn man aufsummieren(1, 2, 3, 4) aufruft, dann wird parameter = {1, 2, 3, 4}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fragen, Anregungen, Kritik==&lt;br /&gt;
Sollten noch irgendwelche Fragen offen sein, so könnt ihr jederzeit in unserem [irc://irc.gtanet.com/#mta.german IRC Channel] oder in unserem [http://sebihunter.de/wbb/ Forum] vorbeischauen und eure Fragen dort loswerden.&lt;br /&gt;
Außerdem haben wir in unserem IRC Channel einen Lua Bot, an dem ihr Funktionen, die auf den standard Lua Funktionen basieren, ausprobieren könnt.&lt;br /&gt;
&lt;br /&gt;
Anregungen und Kritik nehme ich dort auch entgegen. Alternativ könnt ihr diese hier in die Diskussion schreiben.&lt;br /&gt;
Falls ihr Fehler findet, behebt diese bitte oder gebt mir Bescheid.&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, das Tutorial konnte euch weiterhelfen. Wenn ihr nun Hilfe braucht bei eurem ersten Gamemode in MTA, dann solltet ihr euch die [[DE/MTA_Scripting_Grundlagen|MTA Scripting Grundlagen]] durchlesen. Viel Erfolg.&lt;/div&gt;</summary>
		<author><name>NeonBlack</name></author>
	</entry>
</feed>