<?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=Citizen</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=Citizen"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/Citizen"/>
	<updated>2026-04-05T17:01:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsObjectInACLGroup&amp;diff=79323</id>
		<title>IsObjectInACLGroup</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsObjectInACLGroup&amp;diff=79323"/>
		<updated>2024-05-13T20:48:49Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Updated both examples to look nicer (didn't change what they do) and not display bad practices (like global variables) so new devs can learn with good code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
{{Server function}} &lt;br /&gt;
{{Important Note|You must '''NOT''' to use this function to limit features to users that belong to specific groups. Instead you '''MUST''' use [[hasObjectPermissionTo]]. Using this function forces the server owner to name their group a certain way, whereas using hasObjectPermissionTo allows the owner to give permission for whatever features you restrict to whatever groups they have set up in their ACL.}}&lt;br /&gt;
This function is used to determine if an object is in a group.&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 isObjectInACLGroup ( string theObjectName, aclgroup theGroup )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
{{New feature/item|3.0141|1.4.0|6994|{{OOP||[[aclgroup]]:doesContainObject||}}}}&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''theObjectName:''' the name of the object to check. Examples: &amp;quot;resource.ctf&amp;quot;, &amp;quot;user.Jim&amp;quot;.&lt;br /&gt;
*'''theGroup:''' the [[AclGroup|ACL group]] pointer of the group from which the object should be found.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if the object is in the specified group, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
''' Example 1:''' This example adds a ''jetpack'' command that is only available to admins.  When entering the command, it will toggle the player's jetpack.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addCommandHandler ( &amp;quot;jetpack&amp;quot;, function ( thePlayer )&lt;br /&gt;
    if doesPedHaveJetPack ( thePlayer ) then -- If the player have a jetpack already, remove it&lt;br /&gt;
        removePedJetPack ( thePlayer ) -- Remove the jetpack&lt;br /&gt;
        return -- And stop the function here&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Otherwise, give him one if he has access&lt;br /&gt;
&lt;br /&gt;
    local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) -- get his account name&lt;br /&gt;
    if isObjectInACLGroup (&amp;quot;user.&amp;quot;..accName, aclGetGroup ( &amp;quot;Admin&amp;quot; ) ) then -- Does he have access to Admin functions?&lt;br /&gt;
        if not doesPedHaveJetPack ( thePlayer ) then -- If the player doesn't have a jetpack give it.&lt;br /&gt;
            givePedJetPack ( thePlayer )  -- Give the jetpack&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example 2:''' This example displays a list of all the online admins in the chat box (assuming your administrator's group in your ACL is called 'Admin'):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local admins = &amp;quot;&amp;quot;&lt;br /&gt;
local players = getElementsByType(&amp;quot;player&amp;quot;)&lt;br /&gt;
for k, v in ipairs(players) do&lt;br /&gt;
   if not isGuestAccount(getPlayerAccount(v)) then&lt;br /&gt;
      local accountName = getAccountName(getPlayerAccount(v))&lt;br /&gt;
      if isObjectInACLGroup(&amp;quot;user.&amp;quot; .. accountName, aclGetGroup(&amp;quot;Admin&amp;quot;)) then&lt;br /&gt;
         if admins == &amp;quot;&amp;quot; then&lt;br /&gt;
            admins = getPlayerName(v)&lt;br /&gt;
         else&lt;br /&gt;
            admins = admins .. &amp;quot;, &amp;quot; .. getPlayerName(v)&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
outputChatBox(&amp;quot;Online Admins:&amp;quot;, getRootElement(), 255, 255, 0)&lt;br /&gt;
outputChatBox(&amp;quot; &amp;quot; .. admins, getRootElement(), 255, 255, 0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{ACL_functions}}&lt;br /&gt;
[[zh-cn:IsObjectInACLGroup]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FetchRemote&amp;diff=67751</id>
		<title>FetchRemote</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FetchRemote&amp;diff=67751"/>
		<updated>2020-11-18T15:30:23Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Fixed linked to mailgun's doc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
{{Server client function}}&lt;br /&gt;
This function allows you to post and receive data from HTTP servers. The calls are asynchronous so you do not get an immediate result from the call, instead a callback function you specify is called when the download completes.&lt;br /&gt;
&lt;br /&gt;
In the case when the call fails, a string containing &amp;quot;ERROR&amp;quot; followed by an integer containing the error reason will be passed to the callback function. The reason for failure will be similar to errors found with websites - file not found, server not found and timeouts.&lt;br /&gt;
&lt;br /&gt;
If you are using fetchRemote to connect to a PHP script, you can use ''file_get_contents(&amp;quot;php://input&amp;quot;)'' to read the '''postData''' sent from this function.&lt;br /&gt;
{{Note|Client side function only works with the server the player is connected to unless the domain has been accepted with [[requestBrowserDomains]]}}&lt;br /&gt;
{{ Warning| function won't trigger inside another fetchRemote function }}&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool fetchRemote ( string URL, [ string queueName = &amp;quot;default&amp;quot; ], [ int connectionAttempts = 10, int connectTimeout = 10000 ], function callbackFunction, [ string postData = &amp;quot;&amp;quot;,  bool postIsBinary = false ], [ arguments... ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''URL:''' A full URL in the format ''&amp;lt;nowiki&amp;gt;http://hostname/path/file.ext&amp;lt;/nowiki&amp;gt;''. A port can be specified with a colon followed by a port number appended to the hostname.&lt;br /&gt;
*'''callbackFunction:''' This is the function that should receive the data returned from the remote server. The callback argument list should be:&lt;br /&gt;
**'''''responseData''''' - A string containing the remote response or &amp;quot;ERROR&amp;quot; if there was a problem&lt;br /&gt;
**'''''error''''' - A number containing the error number or zero if there was no error. A list of possible error values are:&lt;br /&gt;
{{Error_codes_for_callRemote_and_fetchRemote}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left:19px;&amp;quot;&amp;gt;&lt;br /&gt;
*'''''arguments...''''' - The arguments that were passed into fetchRemote&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
{{New items|4.0153|1.5.3-9.11270|&lt;br /&gt;
*'''queueName:''' Name of the queue to use. Any name can be used. If not set, the queue name is &amp;quot;default&amp;quot;. Requests in the same queue are processed in order, one at a time.&lt;br /&gt;
}}&lt;br /&gt;
*'''connectionAttempts:''' Number of times to retry if the remote host does not respond. ''In the case of a non-responding remote server, each connection attempt will timeout after 10 seconds. Therefore, the default setting of 10 connection attempts means it will be 100 seconds before your script gets a callback about the error. Reducing this value to 2 for example, will decrease that period to 20 seconds''&lt;br /&gt;
*'''connectTimeout:''' Number of milliseconds each connection attempt will take before timing out&lt;br /&gt;
*'''postData:''' A string specifying any data you want to send to the remote HTTP server.&lt;br /&gt;
*'''postIsBinary :''' A boolean specifying if the data is text, or binary.&lt;br /&gt;
*'''arguments:''' Any arguments you may want to pass to the callback.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{New items|5.0154|1.5.4-9.11342|&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool fetchRemote ( string URL[, table options ], callback callbackFunction[, table callbackArguments ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''URL:''' A full URL in the format ''&amp;lt;nowiki&amp;gt;http://hostname/path/file.ext&amp;lt;/nowiki&amp;gt;''. A port can be specified with a colon followed by a port number appended to the hostname.&lt;br /&gt;
*'''callbackFunction:''' This is the function that should receive the data returned from the remote server. The callback argument list should be:&lt;br /&gt;
**'''''responseData''''' - A string containing the remote response&lt;br /&gt;
**'''''responseInfo''''' - A table containing:&lt;br /&gt;
***'''''success''''' - A boolean indicating if the request was successful.&lt;br /&gt;
***'''''statusCode''''' - An integer status/error code&lt;br /&gt;
***'''''headers''''' - A table containing the HTTP response headers&lt;br /&gt;
**'''''arguments...''''' - The arguments that were passed into fetchRemote&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
*'''options:''' A table containing any request options:&lt;br /&gt;
**'''queueName:''' Name of the queue to use. Any name can be used. If not set, the queue name is &amp;quot;default&amp;quot;. Requests in the same queue are processed in order, one at a time.&lt;br /&gt;
**'''connectionAttempts:''' Number of times to retry if the remote host does not respond. ''(Defaults to 10)''&lt;br /&gt;
**'''connectTimeout:''' Number of milliseconds each connection attempt will take before timing out. ''(Defaults to 10000)''&lt;br /&gt;
**'''postData:''' A string specifying any data you want to send to the remote HTTP server.&lt;br /&gt;
**'''postIsBinary :''' A boolean specifying if the data is text, or binary. ''(Defaults to false)''&lt;br /&gt;
**'''method:''' A string specifying the request method. ''(Defaults to GET or POST)''&lt;br /&gt;
**'''headers:''' A table containing HTTP request headers. ''e.g.{ Pragma&amp;amp;#61;&amp;quot;no-cache&amp;quot; }''&lt;br /&gt;
**'''maxRedirects:''' An integer limiting the number of HTTP redirections to automatically follow. ''(Defaults to 8)''&lt;br /&gt;
**'''username:''' A string specifying the username for protected pages.&lt;br /&gt;
**'''password:''' A string specifying the password for protected pages.&lt;br /&gt;
{{New items|5.0154|1.5.4-9.11413|&lt;br /&gt;
**'''formFields:''' A table containing form items to submit. (for POST method only)  ''e.g.{ name&amp;amp;#61;&amp;quot;bob&amp;quot;, email&amp;amp;#61;&amp;quot;bob@example.com&amp;quot; }''&lt;br /&gt;
}}&lt;br /&gt;
*'''arguments:''' A table containing arguments you may want to pass to the callback.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
{{New items|5.0154|1.5.7-9.20307|&lt;br /&gt;
Returns a '''''request''''' value which can be used with [[GetRemoteRequestInfo|getRemoteRequestInfo]] or [[AbortRemoteRequest|abortRemoteRequest]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example shows you how you can fetch an image from a web page, and transfer it to a particular client:&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;&lt;br /&gt;
&lt;br /&gt;
function startImageDownload( playerToReceive )&lt;br /&gt;
    fetchRemote ( &amp;quot;http://www.example.com/image.jpg&amp;quot;, myCallback, &amp;quot;&amp;quot;, false, playerToReceive )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function myCallback( responseData, error, playerToReceive )&lt;br /&gt;
    if error == 0 then&lt;br /&gt;
        triggerClientEvent( playerToReceive, &amp;quot;onClientGotImage&amp;quot;, resourceRoot, responseData )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&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;&lt;br /&gt;
addEvent( &amp;quot;onClientGotImage&amp;quot;, true )&lt;br /&gt;
addEventHandler( &amp;quot;onClientGotImage&amp;quot;, resourceRoot,&lt;br /&gt;
    function( pixels )&lt;br /&gt;
        if myTexture then&lt;br /&gt;
            destroyElement( myTexture )&lt;br /&gt;
        end&lt;br /&gt;
        myTexture = dxCreateTexture( pixels )&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onClientRender&amp;quot;, root,&lt;br /&gt;
    function()&lt;br /&gt;
        if myTexture then&lt;br /&gt;
            local w,h = dxGetMaterialSize( myTexture )&lt;br /&gt;
            dxDrawImage( 200, 100, w, h, myTexture )&lt;br /&gt;
        end&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{New items|5.0154|1.5.4-9.11413|&lt;br /&gt;
Example sending email via a web service (adopted from examples on https://documentation.mailgun.com/en/latest/user_manual.html)&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;&lt;br /&gt;
sendOptions = {&lt;br /&gt;
    queueName = &amp;quot;My Mailgun queue&amp;quot;,&lt;br /&gt;
    connectionAttempts = 3,&lt;br /&gt;
    connectTimeout = 5000,&lt;br /&gt;
    formFields = {&lt;br /&gt;
        from=&amp;quot;Excited User &amp;lt;excited@samples.mailgun.org&amp;gt;&amp;quot;,&lt;br /&gt;
        to=&amp;quot;devs@mailgun.net&amp;quot;,&lt;br /&gt;
        subject=&amp;quot;Hello&amp;quot;,&lt;br /&gt;
        text=&amp;quot;Testing some Mailgun awesomness!&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    username=&amp;quot;api&amp;quot;,&lt;br /&gt;
    password=&amp;quot;key-3ax6xnjp29jd6fds4gc373sgvjxteol0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
fetchRemote( &amp;quot;https://api.mailgun.net/v3/samples.mailgun.org/messages&amp;quot;, sendOptions, mailgunCompleteCallback )&lt;br /&gt;
&lt;br /&gt;
function mailgunCompleteCallback(data, info)&lt;br /&gt;
    outputDebugString( &amp;quot;mailgunComplete&amp;quot;&lt;br /&gt;
            .. &amp;quot; success:&amp;quot; .. tostring(info.success)&lt;br /&gt;
            .. &amp;quot; statusCode:&amp;quot; .. tostring(info.statusCode)&lt;br /&gt;
            .. &amp;quot; data:&amp;quot; .. tostring(data)&lt;br /&gt;
            )&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;
Changing post content on IPS forum.&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;&lt;br /&gt;
local apiKey = &amp;quot;12345678123456781234567812345678&amp;quot; -- key from ips admin panel&lt;br /&gt;
local forumAddress = &amp;quot;https://yourForum.com&amp;quot;&lt;br /&gt;
function setPostContent(postID,content)&lt;br /&gt;
  local sendOptions = {&lt;br /&gt;
    queueName = &amp;quot;updatePost&amp;quot;,&lt;br /&gt;
    connectionAttempts = 1,&lt;br /&gt;
    connectTimeout = 50,&lt;br /&gt;
    formFields = {&lt;br /&gt;
      post = content,&lt;br /&gt;
    },&lt;br /&gt;
  }&lt;br /&gt;
  fetchRemote( forumAddress..&amp;quot;/api/forums/posts/&amp;quot;..postID..&amp;quot;?key=&amp;quot;..apiKey, sendOptions, function()end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
setPostContent(1, &amp;quot;this is a first post on this forum&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
{{Requirements|1.3.0-9.03739|1.3.2|}}&lt;br /&gt;
&lt;br /&gt;
==Changelog==&lt;br /&gt;
{{ChangelogHeader}}&lt;br /&gt;
{{ChangelogItem|1.3.1-9.04605|Added connectionAttempts argument}}&lt;br /&gt;
{{ChangelogItem|1.3.2|Added client side}}&lt;br /&gt;
{{ChangelogItem|1.5.3-9.11270|Added queueName argument}}&lt;br /&gt;
{{ChangelogItem|1.5.4-9.11342|Added alternative syntax}}&lt;br /&gt;
{{ChangelogItem|1.5.4-9.11413|Added formFields}}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Resource_functions}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Changes_in_1.5.8&amp;diff=67524</id>
		<title>Changes in 1.5.8</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Changes_in_1.5.8&amp;diff=67524"/>
		<updated>2020-10-11T20:11:33Z</updated>

		<summary type="html">&lt;p&gt;Citizen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pageclass class=&amp;quot;#39dd57&amp;quot; subcaption=&amp;quot;Current release&amp;quot;&amp;gt;&amp;lt;/pageclass&amp;gt;&lt;br /&gt;
{{Changelogs}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
* GitHub commit log: https://github.com/multitheftauto/mtasa-blue/compare/1.5.7...master&lt;br /&gt;
* GitHub milestone: https://github.com/multitheftauto/mtasa-blue/milestone/2&lt;br /&gt;
* So far https://github.com/multitheftauto/mtasa-blue/compare/6941e0b...master&lt;br /&gt;
&lt;br /&gt;
'''This changelog is partial and needs updating.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Main Additions / Changes ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
* Add [[dxDrawPrimitive3D]] and [[dxDrawMaterialPrimitive3D]] ([https://github.com/multitheftauto/mtasa-blue/pull/760 #760] by '''CrosRoad95''')&lt;br /&gt;
* Add functions to modify dynamic objects' behaviour ([https://github.com/multitheftauto/mtasa-blue/pull/784 #784] by '''forkerer''')&lt;br /&gt;
* Add dynamic ped ID allocating using [[engineRequestModel]] and [[engineFreeModel]] ([https://github.com/multitheftauto/mtasa-blue/commit/475544f1753ce1af24c4cdff7f0d0be48ede709b #349] by '''lopezloo''' + '''Neproify''' + '''Arran''' + '''qaisjp''')&lt;br /&gt;
* Add functions to manipulate colshapes parameters ([https://github.com/multitheftauto/mtasa-blue/pull/1215 #1215] by '''StrixG''')&lt;br /&gt;
* Add element data subscription functionality ([https://github.com/multitheftauto/mtasa-blue/pull/1055 #1055] by '''tederis''') &lt;br /&gt;
* Add [[engineGetModelTextures]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1058 #1058] by '''Lpsd''')&lt;br /&gt;
* Improve trailer sync ([https://github.com/multitheftauto/mtasa-blue/pull/1247 #1247] by '''tederis''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
* Added wheel scaling functions ([https://github.com/multitheftauto/mtasa-blue/pull/1641 #1641], [https://github.com/multitheftauto/mtasa-blue/pull/1644 #1644], and [https://github.com/multitheftauto/mtasa-blue/pull/1648 #1648] by '''AlexTMjugador''')&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
These are some statistics since the [[Changes in 1.5.7|previous release]].&lt;br /&gt;
* This is the '''25&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt;''' 1.x.x release&lt;br /&gt;
* '''{{date difference|2019|8|31}}''' days&lt;br /&gt;
* '''1''' deprecation&lt;br /&gt;
* '''5''' announced backwards incompatible changes&lt;br /&gt;
* '''37''' new functions&lt;br /&gt;
* '''61+''' bug fixes and changes&lt;br /&gt;
* '''463''' commits ([https://github.com/multitheftauto/mtasa-blue/compare/1.5.7...master see comparison])&lt;br /&gt;
* '''196''' new open GitHub issues ([https://github.com/multitheftauto/mtasa-blue/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aopen+is%3Aissue+created%3A%3E%3D2019-08-31 see list])&lt;br /&gt;
* '''102''' resolved GitHub issues ([https://github.com/multitheftauto/mtasa-blue/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aclosed+is%3Aissue+milestone%3A1.5.8 see list])&lt;br /&gt;
* '''108''' closed GitHub issues ([https://github.com/multitheftauto/mtasa-blue/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aclosed+is%3Aissue+closed%3A%3E%3D2019-08-31+no%3Amilestone see list])&lt;br /&gt;
* '''47''' new open GitHub pull requests ([https://github.com/multitheftauto/mtasa-blue/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Aopen+is%3Apr+created%3A%3E%3D2019-08-31 see list])&lt;br /&gt;
* '''192''' merged GitHub pull requests ([https://github.com/multitheftauto/mtasa-blue/pulls?q=is%3Apr+milestone%3A1.5.8+is%3Amerged see list])&lt;br /&gt;
* '''36''' closed GitHub pull requests ([https://github.com/multitheftauto/mtasa-blue/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr+is%3Aunmerged+closed%3A%3E%3D2019-08-31 see list])&lt;br /&gt;
* '''37''' contributors of which '''27''' are new ([https://github.com/multitheftauto/mtasa-blue/graphs/contributors?from=2019-08-31&amp;amp;to=2020-08-31&amp;amp;type=c see list])&lt;br /&gt;
* '''98+''' total contributors ([https://github.com/multitheftauto/mtasa-blue/graphs/contributors see list])&lt;br /&gt;
* '''4''' vendor updates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
  We don't have the https://www.mediawiki.org/wiki/Extension:Variables extension installed,&lt;br /&gt;
  so remember to update the date in all parts below.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;sub&amp;gt;'''Note:''' Last update to these statistics was made&lt;br /&gt;
{{#ifeq: {{date difference|2020|8|8}} | 0 | today |&lt;br /&gt;
  {{#ifeq: {{date difference|2020|8|8}} | 1 | yesterday |&lt;br /&gt;
    {{date difference|2020|8|8}} days ago&lt;br /&gt;
  }}&lt;br /&gt;
}}.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 5 Backwards Incompatible Changes ===&lt;br /&gt;
These changes will take effect in 1.6:&lt;br /&gt;
* [[callRemote]] callbacks currently set the error code to '''nil''' when there is no error. In 1.6, to be consistent with [[fetchRemote]], the error code reported will be '''0'''. See [https://github.com/multitheftauto/mtasa-blue/issues/294 GitHub #294].&lt;br /&gt;
* Since July 2016 if you provide an invalid string like '''&amp;quot;randomstring&amp;quot;''' when a function expects a number, the string will be treated as '''0''' and raise a script warning. In 1.6 this will be an error. You will still be able to provide strings containing numbers (e.g. '''&amp;quot;100&amp;quot;''' and '''&amp;quot;12.34&amp;quot;'''), this change only affects invalid strings. See [https://github.com/multitheftauto/mtasa-blue/issues/1043 GitHub #1043].&lt;br /&gt;
* When providing a width and height of (0, 0) to [[createBrowser]] or [[guiCreateBrowser]] you will encounter a script error instead of a warning. The warning was introduced Feb 2019. See [https://github.com/multitheftauto/mtasa-blue/issues/1069 GitHub #1069].&lt;br /&gt;
* Some functions expect only unsigned integers (positive numbers), and since Jan 2016 providing negative numbers would be a warning. This will now be an error. See [https://github.com/multitheftauto/mtasa-blue/issues/1070 GitHub #1070].&lt;br /&gt;
* Since Aug 2015, we replaced the custom '''mtalocal://''' URL scheme with '''http://mta/resourceName/blah.html'''. This '''mtalocal://''' URL scheme will now be removed. See [https://github.com/multitheftauto/mtasa-blue/issues/1071 GitHub #1071].&lt;br /&gt;
&lt;br /&gt;
This list is inconclusive and we may introduce more changes later.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Client ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 21 New Functions ===&lt;br /&gt;
* Add [[setPedFightingStyle]] (previously available server-side only) ([https://github.com/multitheftauto/mtasa-blue/pull/810 #810] by '''StrixG''')&lt;br /&gt;
* Add [[setPedArmor]] (previously available server-side only) ([https://github.com/multitheftauto/mtasa-blue/pull/811 #811] by '''StrixG''')&lt;br /&gt;
* Add [[areVehicleLightsOn]] ([https://github.com/multitheftauto/mtasa-blue/pull/938 #938] by '''StrixG''')&lt;br /&gt;
* Add [[dxDrawPrimitive3D]] and [[dxDrawMaterialPrimitive3D]] ([https://github.com/multitheftauto/mtasa-blue/pull/760 #760] by '''CrosRoad95''')&lt;br /&gt;
* Add functions to modify dynamic objects' behaviour ([https://github.com/multitheftauto/mtasa-blue/pull/784 #784] by '''forkerer''')&lt;br /&gt;
** [[engineGetModelPhysicalPropertiesGroup]]&lt;br /&gt;
** [[engineRestoreModelPhysicalPropertiesGroup]]&lt;br /&gt;
** [[engineSetModelPhysicalPropertiesGroup]]&lt;br /&gt;
** [[engineGetObjectGroupPhysicalProperty]]&lt;br /&gt;
** [[engineRestoreObjectGroupPhysicalProperties]]&lt;br /&gt;
** [[engineSetObjectGroupPhysicalProperty]]&lt;br /&gt;
* Add dynamic ped ID allocating using [[engineRequestModel]] and [[engineFreeModel]] ([https://github.com/multitheftauto/mtasa-blue/commit/475544f1753ce1af24c4cdff7f0d0be48ede709b #349] by '''lopezloo''' + '''Neproify''' + '''Arran''' + '''qaisjp''')&lt;br /&gt;
* Add [[engineResetModelLODDistance]] function ([https://github.com/multitheftauto/mtasa-blue/pull/971 #971] by '''Lpsd''')&lt;br /&gt;
* Add [[engineGetModelTextures]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1058 #1058] by '''Lpsd''')&lt;br /&gt;
* Add [[resetBlurLevel]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1266 #1266] by '''Luxy.c''')&lt;br /&gt;
* Add [[dxGetTextSize]] function ([https://github.com/multitheftauto/mtasa-blue/pull/935 #935] by '''StrixG''')&lt;br /&gt;
* Add functions to modify vehicle wheels, visibly and in collision by ([https://github.com/multitheftauto/mtasa-blue/pull/1641 #1641], [https://github.com/multitheftauto/mtasa-blue/pull/1644 #1644], and [https://github.com/multitheftauto/mtasa-blue/pull/1648 #1648] by '''AlexTMjugador''')&lt;br /&gt;
** [[getVehicleWheelScale]]&lt;br /&gt;
** [[getVehicleModelWheelSize]]&lt;br /&gt;
** [[setVehicleWheelScale]]&lt;br /&gt;
** [[setVehicleModelWheelSize]]&lt;br /&gt;
&lt;br /&gt;
=== 45 Bug Fixes &amp;amp; Changes ===&lt;br /&gt;
* Add new client setting to toggle external sounds ([https://github.com/multitheftauto/mtasa-blue/pull/834 #834] by '''patrikjuvonen''')&lt;br /&gt;
* Fix crash when attempting to stream out a sound that's not streamed in (See commit [https://github.com/multitheftauto/mtasa-blue/commit/e1b7c730448d12a5eeb452239e8053e86924294f e1b7c73] by '''sbx320''')&lt;br /&gt;
* Fix [[dxDrawCircle]] ''segments'' argument being wrongly offset by one ([https://github.com/multitheftauto/mtasa-blue/pull/1079 #1079] by '''ApeLsiN4eG''')&lt;br /&gt;
* Fix potential crash when moving objects (See commit [https://github.com/multitheftauto/mtasa-blue/commit/90895c221549893501f5f717af3ca56878e29b5d 90895c2] by '''botder''')&lt;br /&gt;
* Update credits (See commit [https://github.com/multitheftauto/mtasa-blue/commit/39227d795efafe940dc6c317c20b0162b1bd0bb3 39227d7] by '''qaisjp''')&lt;br /&gt;
* Don't apply damage to peds without a game entity (See commit [https://github.com/multitheftauto/mtasa-blue/commit/632130e36a96071290593fc3c677a536f7b19e1f 632130e] by '''botder''')&lt;br /&gt;
* Fix doors state with setElementModel ([https://github.com/multitheftauto/mtasa-blue/pull/599 #599] by '''FileEX''')&lt;br /&gt;
* Add CVAR _beta_qc_rightclick_command allowing you to reconnect by right clicking the &amp;quot;Quick Connect&amp;quot; button on the main menu (See commit [https://github.com/multitheftauto/mtasa-blue/commit/d1c60675fc0f0f62b69707ae81a82e6bbdf36042 d1c60675] by '''qaisjp''')&lt;br /&gt;
* Add more data to [[getPedAnimation]] ([https://github.com/multitheftauto/mtasa-blue/pull/892 #892] by '''Dezash''')&lt;br /&gt;
* Add missing destroy method to DxFont ([https://github.com/multitheftauto/mtasa-blue/pull/1259 #1259] by '''MegadreamsBE''')&lt;br /&gt;
* Increase [[setPedAnimationSpeed]] limit (See commit [https://github.com/multitheftauto/mtasa-blue/commit/4c36d37056d2a1496904f394bf96303dd0f2b4c5 4c36d37] by '''qaisjp''')&lt;br /&gt;
* Fix &amp;quot;ancient&amp;quot; weapon fire crash ([https://github.com/multitheftauto/mtasa-blue/pull/1109 #1109] by '''saml1er''')&lt;br /&gt;
* Fix [[bitExtract]] (See commit [https://github.com/multitheftauto/mtasa-blue/commit/aa2df39d3e40e5b446ffea376ef96df89916a9d0 aa2df39d] by '''ccw808''')&lt;br /&gt;
* Fix texture blending ([https://github.com/multitheftauto/mtasa-blue/pull/1098 #1098] by '''StrixG''')&lt;br /&gt;
* Add client setting to toggle internet sound streams ([https://github.com/multitheftauto/mtasa-blue/pull/834 #834] by '''patrikjuvonen''')&lt;br /&gt;
* Implement &amp;quot;remember this option&amp;quot; checkbox to NVidia Optimus dialog ([https://github.com/multitheftauto/mtasa-blue/pull/1177 #1177] by '''Lpsd''')&lt;br /&gt;
* Fix inability to crouch when player has 1 HP ([https://github.com/multitheftauto/mtasa-blue/pull/1138 #1138] by '''CrosRoad95''')&lt;br /&gt;
* Improve trailer sync ([https://github.com/multitheftauto/mtasa-blue/pull/1247 #1247] by '''tederis''')&lt;br /&gt;
* Fix driveby for peds ([https://github.com/multitheftauto/mtasa-blue/pull/1290 #1290] by '''Zangomangu''')&lt;br /&gt;
* Add &amp;quot;SettingHighDetailPeds&amp;quot; to [[dxGetStatus]] ([https://github.com/multitheftauto/mtasa-blue/pull/1384 #1384] by '''Patrick''')&lt;br /&gt;
* Add feature to remove server from the &amp;quot;Recent&amp;quot; tab in server browser ([https://github.com/multitheftauto/mtasa-blue/pull/1381 #1381] by '''ecastro98''')&lt;br /&gt;
* Fix [[warpPedIntoVehicle]] failure when there are too many vehicles streamed in ([https://github.com/multitheftauto/mtasa-blue/pull/1431 #1431] by '''saml1er''')&lt;br /&gt;
* Fix issue with [[engineReplaceModel]] kicking the player out of the vehicle ([https://github.com/multitheftauto/mtasa-blue/pull/1433 #1433] by '''saml1er''')&lt;br /&gt;
* Moved exe patching to loader ([https://github.com/multitheftauto/mtasa-blue/pull/1520 #1520] by '''ccw808''')&lt;br /&gt;
* Fix various return values when using OOP (e.g: [https://github.com/multitheftauto/mtasa-blue/commit/5110559b7a7f2d258f01be1dce18fe63d8bca400 5110559b], [https://github.com/multitheftauto/mtasa-blue/commit/88379b8ded766b2d35e171b6d11ef33cb2663b96 88379b8d] by '''qaisjp''')&lt;br /&gt;
* Fixed incorrect VRAM detection ([https://github.com/multitheftauto/mtasa-blue/pull/1589 #1589] by '''TheNormalnij''')&lt;br /&gt;
* Add ability to play sounds from raw data to playSound(3D) ([https://github.com/multitheftauto/mtasa-blue/pull/1234 #1234] by '''Dezash''')&lt;br /&gt;
* Allow downloading of files from other resources ([https://github.com/multitheftauto/mtasa-blue/pull/945 #945] by '''TheNormalnij''') - this affects:&lt;br /&gt;
** [[downloadFile]]&lt;br /&gt;
** [[onClientFileDownloadComplete]]&lt;br /&gt;
* Add ability to get raw controller analog value ([https://github.com/multitheftauto/mtasa-blue/pull/1165 #1165] by '''Addlibs''')&lt;br /&gt;
* Add user agent workaround for YouTube TV ([https://github.com/multitheftauto/mtasa-blue/pull/1243 #1243] by '''qaisjp''')&lt;br /&gt;
* Add missing destroy method to DxFont ([https://github.com/multitheftauto/mtasa-blue/pull/1259 #1259] by '''MegadreamsBE''')&lt;br /&gt;
* Fix engineReplaceModel memory leak ([https://github.com/multitheftauto/mtasa-blue/pull/1265 #1265] by '''saml1er''')&lt;br /&gt;
* Fix vehicle model memory leaks (See commit [https://github.com/multitheftauto/mtasa-blue/commit/46dbbe7dd2c4621d7564cf272e8a432cf9f57300 46dbbe7] by '''saml1er''')&lt;br /&gt;
* Fix texture memory leak (See commit [https://github.com/multitheftauto/mtasa-blue/commit/d5722d5ac5c0ed0210849bf03c263ec88ea98c2a d5722d5] by '''saml1er''')&lt;br /&gt;
* Enable enter_exit for peds to fix alternative attack ([https://github.com/multitheftauto/mtasa-blue/pull/1295 #1295] by '''Zangomangu''')&lt;br /&gt;
* Fix &amp;quot;Select device&amp;quot; hides under other program without MTA icon on a taskbar (See commit [https://github.com/multitheftauto/mtasa-blue/commit/2c5251a42a640ccc9ffa928cb2844c9295f47c6c 2c5251a] by '''ccw808''')&lt;br /&gt;
* Fix primitive colors are always white ([https://github.com/multitheftauto/mtasa-blue/pull/1312 #1312] by '''StrixG''')&lt;br /&gt;
* Add analog control sync for accelerate and brake_reverse ([https://github.com/multitheftauto/mtasa-blue/pull/1164 #1164] by '''Addlibs''')&lt;br /&gt;
* Fix resetting dummies in vehicles with replaced models ([https://github.com/multitheftauto/mtasa-blue/pull/1059 #1059] by '''forkerer''' and '''saml1er''')&lt;br /&gt;
* Return vector3 instead of number at ped's target ([https://github.com/multitheftauto/mtasa-blue/pull/1379 #1379] by '''ecastro98''')&lt;br /&gt;
* Fix replaced weapon_crouch anim does not play if retainPedState is true ([https://github.com/multitheftauto/mtasa-blue/pull/1414 #1414] by '''saml1er''')&lt;br /&gt;
* Fix nametags are interiorless ([https://github.com/multitheftauto/mtasa-blue/commit/3df58bd435b3c4052fa5e7fe57d534bdca7e0d2b 3df58bd] by '''qaisjp''')&lt;br /&gt;
* Remove amx from the installer (See commit [https://github.com/multitheftauto/mtasa-blue/commit/7d4091fac6e41e6d9e199cd0a03c927dc48aac79 7d4091f] by '''qaisjp''')&lt;br /&gt;
* Potential fix for vehicle dummies crash ([https://github.com/multitheftauto/mtasa-blue/pull/1524 #1524] by '''saml1er''')&lt;br /&gt;
* Add projectiles support for [[getElementModel]] ([https://github.com/multitheftauto/mtasa-blue/pull/1550 #1550] by '''StrixG''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2 Vendor Updates ===&lt;br /&gt;
* Update BASS libraries ([https://github.com/multitheftauto/mtasa-blue/pull/1551 #1551] by '''Dutchman101''')&lt;br /&gt;
* Update CEF from 76.1.13+gf19c584 (Chromium 76.0.3809.132) to 81.3.10+gb223419 ([https://chromereleases.googleblog.com/2020/05/stable-channel-update-for-desktop.html Chromium 81.0.4044.138]) (See commit [https://github.com/multitheftauto/mtasa-blue/commit/8d2d0fb20fb094119e86e348340f5cb90e30dc16 8d2d0fb] by '''qaisjp''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 3 New Functions ===&lt;br /&gt;
* Add [[setPlayerScriptDebugLevel]] and [[getPlayerScriptDebugLevel]] ([https://github.com/multitheftauto/mtasa-blue/pull/826 #826] by '''knitz12''')&lt;br /&gt;
* Add [[isResourceProtected]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1254 #1254] by '''StrixG''')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==== New Events ====&lt;br /&gt;
* Placeholder&lt;br /&gt;
&lt;br /&gt;
==== Deprecations ====&lt;br /&gt;
* Placeholder&lt;br /&gt;
&lt;br /&gt;
==== New Arguments &amp;amp; Parameters ====&lt;br /&gt;
* Placeholder&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9 Bug Fixes &amp;amp; Changes ===&lt;br /&gt;
* Fix [[iprint]] to be able to read and output nil arguments properly ([https://github.com/multitheftauto/mtasa-blue/pull/1064 #1064] by '''TheNormalnij''')&lt;br /&gt;
* Accept team &amp;amp; table of players in [[outputChatBox]] ([https://github.com/multitheftauto/mtasa-blue/pull/1213 #1213] by '''StrixG''')&lt;br /&gt;
* Fix /msg command duplicating when sent by Server Console ([https://github.com/multitheftauto/mtasa-blue/pull/1411 #1411] by '''Dezash''')&lt;br /&gt;
* Make colshapes cloneable ([https://github.com/multitheftauto/mtasa-blue/pull/1214 #1214] by '''StrixG''')&lt;br /&gt;
* Fix double chat messages if player is in team ([https://github.com/multitheftauto/mtasa-blue/pull/1241 #1241] by '''StrixG''' and '''Luxy.c''')&lt;br /&gt;
* Don't queue a resource restart if resource is stopping ([https://github.com/multitheftauto/mtasa-blue/pull/960 #960] by '''StrixG''')&lt;br /&gt;
* Add support for more map attributes ([https://github.com/multitheftauto/mtasa-blue/pull/263 #263] by '''patrikjuvonen''')&lt;br /&gt;
* Fix server-client inconsistency for isElementAttached failure return ([https://github.com/multitheftauto/mtasa-blue/commit/866506d3f6ebe4a0d4d39664cc4e7d7c0cef1a7c 866506d] by '''qaisjp''')&lt;br /&gt;
* Make [[kickPlayer]] accept the Console element as responsiblePlayer ([https://github.com/multitheftauto/mtasa-blue/pull/1427 #1427] by '''qaisjp''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1 Vendor Update ===&lt;br /&gt;
* Update sqlite from 3.31.1 to 3.32.3 ([https://github.com/multitheftauto/mtasa-blue/pull/1561 #1561] by '''patrikjuvonen''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Shared (''Client &amp;amp; Server side'') ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 17 New Functions ===&lt;br /&gt;
* Add [[xmlLoadString]] ([https://github.com/multitheftauto/mtasa-blue/pull/809 #809] by '''Lpsd''')&lt;br /&gt;
* Add request info &amp;amp; abort functions for [[fetchRemote]]/[[callRemote]] ([https://github.com/multitheftauto/mtasa-blue/pull/660 #660] by '''Luxy.c''')&lt;br /&gt;
** [[getRemoteRequests]]&lt;br /&gt;
** [[getRemoteRequestInfo]]&lt;br /&gt;
** [[abortRemoteRequest]]&lt;br /&gt;
* Add functions to manipulate colshapes parameters ([https://github.com/multitheftauto/mtasa-blue/pull/1215 #1215] by '''StrixG''')&lt;br /&gt;
** [[getColShapeRadius]]&lt;br /&gt;
** [[setColShapeRadius]]&lt;br /&gt;
** [[getColShapeSize]]&lt;br /&gt;
** [[setColShapeSize]]&lt;br /&gt;
** [[getColPolygonPoints]]&lt;br /&gt;
** [[getColPolygonPointPosition]]&lt;br /&gt;
** [[setColPolygonPointPosition]]&lt;br /&gt;
** [[addColPolygonPoint]]&lt;br /&gt;
** [[removeColPolygonPoint]]&lt;br /&gt;
* Add [[hasElementData]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1163 #1163] by '''Simi2''')&lt;br /&gt;
* Add element data subscription functionality ([https://github.com/multitheftauto/mtasa-blue/pull/1055 #1055] by '''tederis''') - includes 3 new functions:&lt;br /&gt;
** [[addElementDataSubscriber]]&lt;br /&gt;
** [[removeElementDataSubscriber]]&lt;br /&gt;
** [[hasElementDataSubscriber]]&lt;br /&gt;
** Adds 1 additional parameter to [[setElementData]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1 Deprecation ===&lt;br /&gt;
* Add deprecation message to [[passwordHash]] when using custom salts ([https://github.com/multitheftauto/mtasa-blue/pull/1208 #1208] by '''Luxy.c''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 7 Bug Fixes &amp;amp; Changes ===&lt;br /&gt;
* Add async [[encodeString]]/[[decodeString]] ([https://github.com/multitheftauto/mtasa-blue/pull/1226 #1226] by '''StrixG''')&lt;br /&gt;
* Fix colshape and marker hit detection when attaching ([https://github.com/multitheftauto/mtasa-blue/pull/1327 #1327] by '''Lpsd''')&lt;br /&gt;
* Fix driveby aiming being inverted in some cases ([https://github.com/multitheftauto/mtasa-blue/pull/1442 #1442] by '''Zangomangu''')&lt;br /&gt;
* Add bIncludeWorldSeaLevel and bIncludeOutsideWorldLevel parameters to [[setWaterLevel]] ([https://github.com/multitheftauto/mtasa-blue/pull/1342 #1342] by '''TheNormalnij''')&lt;br /&gt;
* Add [[outputDebugString]] level 4 to omit certain debug info ([https://github.com/multitheftauto/mtasa-blue/pull/1167 #1167] by '''Addlibs''')&lt;br /&gt;
* Fix incorrect hash capitalisation ([https://github.com/multitheftauto/mtasa-blue/pull/1527 #1527] by '''qaisjp''')&lt;br /&gt;
* Trim [[teaEncode]] trailing zeroes ([https://github.com/multitheftauto/mtasa-blue/pull/1534 #1534] by '''Pirulax''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1 Vendor Update ===&lt;br /&gt;
* Update curl from 7.68.0 to 7.69.1 ([https://github.com/multitheftauto/mtasa-blue/pull/1302 #1302] by '''patrikjuvonen''' and '''qaisjp''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
== Extra information ==&lt;br /&gt;
''More detailed information available on our GitHub repositories:&lt;br /&gt;
:* [https://github.com/multitheftauto/mtasa-blue MTA:SA Blue]&lt;br /&gt;
:* [https://github.com/multitheftauto/mtasa-resources MTA:SA Official Resources]&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Changelog]]&lt;br /&gt;
[[Category:Incomplete]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Changes_in_1.5.8&amp;diff=67523</id>
		<title>Changes in 1.5.8</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Changes_in_1.5.8&amp;diff=67523"/>
		<updated>2020-10-11T20:10:54Z</updated>

		<summary type="html">&lt;p&gt;Citizen: making the kickPlayer update info less ambiguous&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pageclass class=&amp;quot;#39dd57&amp;quot; subcaption=&amp;quot;Current release&amp;quot;&amp;gt;&amp;lt;/pageclass&amp;gt;&lt;br /&gt;
{{Changelogs}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
* GitHub commit log: https://github.com/multitheftauto/mtasa-blue/compare/1.5.7...master&lt;br /&gt;
* GitHub milestone: https://github.com/multitheftauto/mtasa-blue/milestone/2&lt;br /&gt;
* So far https://github.com/multitheftauto/mtasa-blue/compare/6941e0b...master&lt;br /&gt;
&lt;br /&gt;
'''This changelog is partial and needs updating.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Main Additions / Changes ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
* Add [[dxDrawPrimitive3D]] and [[dxDrawMaterialPrimitive3D]] ([https://github.com/multitheftauto/mtasa-blue/pull/760 #760] by '''CrosRoad95''')&lt;br /&gt;
* Add functions to modify dynamic objects' behaviour ([https://github.com/multitheftauto/mtasa-blue/pull/784 #784] by '''forkerer''')&lt;br /&gt;
* Add dynamic ped ID allocating using [[engineRequestModel]] and [[engineFreeModel]] ([https://github.com/multitheftauto/mtasa-blue/commit/475544f1753ce1af24c4cdff7f0d0be48ede709b #349] by '''lopezloo''' + '''Neproify''' + '''Arran''' + '''qaisjp''')&lt;br /&gt;
* Add functions to manipulate colshapes parameters ([https://github.com/multitheftauto/mtasa-blue/pull/1215 #1215] by '''StrixG''')&lt;br /&gt;
* Add element data subscription functionality ([https://github.com/multitheftauto/mtasa-blue/pull/1055 #1055] by '''tederis''') &lt;br /&gt;
* Add [[engineGetModelTextures]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1058 #1058] by '''Lpsd''')&lt;br /&gt;
* Improve trailer sync ([https://github.com/multitheftauto/mtasa-blue/pull/1247 #1247] by '''tederis''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
* Added wheel scaling functions ([https://github.com/multitheftauto/mtasa-blue/pull/1641 #1641], [https://github.com/multitheftauto/mtasa-blue/pull/1644 #1644], and [https://github.com/multitheftauto/mtasa-blue/pull/1648 #1648] by '''AlexTMjugador''')&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
These are some statistics since the [[Changes in 1.5.7|previous release]].&lt;br /&gt;
* This is the '''25&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt;''' 1.x.x release&lt;br /&gt;
* '''{{date difference|2019|8|31}}''' days&lt;br /&gt;
* '''1''' deprecation&lt;br /&gt;
* '''5''' announced backwards incompatible changes&lt;br /&gt;
* '''37''' new functions&lt;br /&gt;
* '''61+''' bug fixes and changes&lt;br /&gt;
* '''463''' commits ([https://github.com/multitheftauto/mtasa-blue/compare/1.5.7...master see comparison])&lt;br /&gt;
* '''196''' new open GitHub issues ([https://github.com/multitheftauto/mtasa-blue/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aopen+is%3Aissue+created%3A%3E%3D2019-08-31 see list])&lt;br /&gt;
* '''102''' resolved GitHub issues ([https://github.com/multitheftauto/mtasa-blue/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aclosed+is%3Aissue+milestone%3A1.5.8 see list])&lt;br /&gt;
* '''108''' closed GitHub issues ([https://github.com/multitheftauto/mtasa-blue/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aclosed+is%3Aissue+closed%3A%3E%3D2019-08-31+no%3Amilestone see list])&lt;br /&gt;
* '''47''' new open GitHub pull requests ([https://github.com/multitheftauto/mtasa-blue/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Aopen+is%3Apr+created%3A%3E%3D2019-08-31 see list])&lt;br /&gt;
* '''192''' merged GitHub pull requests ([https://github.com/multitheftauto/mtasa-blue/pulls?q=is%3Apr+milestone%3A1.5.8+is%3Amerged see list])&lt;br /&gt;
* '''36''' closed GitHub pull requests ([https://github.com/multitheftauto/mtasa-blue/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr+is%3Aunmerged+closed%3A%3E%3D2019-08-31 see list])&lt;br /&gt;
* '''37''' contributors of which '''27''' are new ([https://github.com/multitheftauto/mtasa-blue/graphs/contributors?from=2019-08-31&amp;amp;to=2020-08-31&amp;amp;type=c see list])&lt;br /&gt;
* '''98+''' total contributors ([https://github.com/multitheftauto/mtasa-blue/graphs/contributors see list])&lt;br /&gt;
* '''4''' vendor updates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
  We don't have the https://www.mediawiki.org/wiki/Extension:Variables extension installed,&lt;br /&gt;
  so remember to update the date in all parts below.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;sub&amp;gt;'''Note:''' Last update to these statistics was made&lt;br /&gt;
{{#ifeq: {{date difference|2020|8|8}} | 0 | today |&lt;br /&gt;
  {{#ifeq: {{date difference|2020|8|8}} | 1 | yesterday |&lt;br /&gt;
    {{date difference|2020|8|8}} days ago&lt;br /&gt;
  }}&lt;br /&gt;
}}.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 5 Backwards Incompatible Changes ===&lt;br /&gt;
These changes will take effect in 1.6:&lt;br /&gt;
* [[callRemote]] callbacks currently set the error code to '''nil''' when there is no error. In 1.6, to be consistent with [[fetchRemote]], the error code reported will be '''0'''. See [https://github.com/multitheftauto/mtasa-blue/issues/294 GitHub #294].&lt;br /&gt;
* Since July 2016 if you provide an invalid string like '''&amp;quot;randomstring&amp;quot;''' when a function expects a number, the string will be treated as '''0''' and raise a script warning. In 1.6 this will be an error. You will still be able to provide strings containing numbers (e.g. '''&amp;quot;100&amp;quot;''' and '''&amp;quot;12.34&amp;quot;'''), this change only affects invalid strings. See [https://github.com/multitheftauto/mtasa-blue/issues/1043 GitHub #1043].&lt;br /&gt;
* When providing a width and height of (0, 0) to [[createBrowser]] or [[guiCreateBrowser]] you will encounter a script error instead of a warning. The warning was introduced Feb 2019. See [https://github.com/multitheftauto/mtasa-blue/issues/1069 GitHub #1069].&lt;br /&gt;
* Some functions expect only unsigned integers (positive numbers), and since Jan 2016 providing negative numbers would be a warning. This will now be an error. See [https://github.com/multitheftauto/mtasa-blue/issues/1070 GitHub #1070].&lt;br /&gt;
* Since Aug 2015, we replaced the custom '''mtalocal://''' URL scheme with '''http://mta/resourceName/blah.html'''. This '''mtalocal://''' URL scheme will now be removed. See [https://github.com/multitheftauto/mtasa-blue/issues/1071 GitHub #1071].&lt;br /&gt;
&lt;br /&gt;
This list is inconclusive and we may introduce more changes later.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Client ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 21 New Functions ===&lt;br /&gt;
* Add [[setPedFightingStyle]] (previously available server-side only) ([https://github.com/multitheftauto/mtasa-blue/pull/810 #810] by '''StrixG''')&lt;br /&gt;
* Add [[setPedArmor]] (previously available server-side only) ([https://github.com/multitheftauto/mtasa-blue/pull/811 #811] by '''StrixG''')&lt;br /&gt;
* Add [[areVehicleLightsOn]] ([https://github.com/multitheftauto/mtasa-blue/pull/938 #938] by '''StrixG''')&lt;br /&gt;
* Add [[dxDrawPrimitive3D]] and [[dxDrawMaterialPrimitive3D]] ([https://github.com/multitheftauto/mtasa-blue/pull/760 #760] by '''CrosRoad95''')&lt;br /&gt;
* Add functions to modify dynamic objects' behaviour ([https://github.com/multitheftauto/mtasa-blue/pull/784 #784] by '''forkerer''')&lt;br /&gt;
** [[engineGetModelPhysicalPropertiesGroup]]&lt;br /&gt;
** [[engineRestoreModelPhysicalPropertiesGroup]]&lt;br /&gt;
** [[engineSetModelPhysicalPropertiesGroup]]&lt;br /&gt;
** [[engineGetObjectGroupPhysicalProperty]]&lt;br /&gt;
** [[engineRestoreObjectGroupPhysicalProperties]]&lt;br /&gt;
** [[engineSetObjectGroupPhysicalProperty]]&lt;br /&gt;
* Add dynamic ped ID allocating using [[engineRequestModel]] and [[engineFreeModel]] ([https://github.com/multitheftauto/mtasa-blue/commit/475544f1753ce1af24c4cdff7f0d0be48ede709b #349] by '''lopezloo''' + '''Neproify''' + '''Arran''' + '''qaisjp''')&lt;br /&gt;
* Add [[engineResetModelLODDistance]] function ([https://github.com/multitheftauto/mtasa-blue/pull/971 #971] by '''Lpsd''')&lt;br /&gt;
* Add [[engineGetModelTextures]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1058 #1058] by '''Lpsd''')&lt;br /&gt;
* Add [[resetBlurLevel]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1266 #1266] by '''Luxy.c''')&lt;br /&gt;
* Add [[dxGetTextSize]] function ([https://github.com/multitheftauto/mtasa-blue/pull/935 #935] by '''StrixG''')&lt;br /&gt;
* Add functions to modify vehicle wheels, visibly and in collision by ([https://github.com/multitheftauto/mtasa-blue/pull/1641 #1641], [https://github.com/multitheftauto/mtasa-blue/pull/1644 #1644], and [https://github.com/multitheftauto/mtasa-blue/pull/1648 #1648] by '''AlexTMjugador''')&lt;br /&gt;
** [[getVehicleWheelScale]]&lt;br /&gt;
** [[getVehicleModelWheelSize]]&lt;br /&gt;
** [[setVehicleWheelScale]]&lt;br /&gt;
** [[setVehicleModelWheelSize]]&lt;br /&gt;
&lt;br /&gt;
=== 45 Bug Fixes &amp;amp; Changes ===&lt;br /&gt;
* Add new client setting to toggle external sounds ([https://github.com/multitheftauto/mtasa-blue/pull/834 #834] by '''patrikjuvonen''')&lt;br /&gt;
* Fix crash when attempting to stream out a sound that's not streamed in (See commit [https://github.com/multitheftauto/mtasa-blue/commit/e1b7c730448d12a5eeb452239e8053e86924294f e1b7c73] by '''sbx320''')&lt;br /&gt;
* Fix [[dxDrawCircle]] ''segments'' argument being wrongly offset by one ([https://github.com/multitheftauto/mtasa-blue/pull/1079 #1079] by '''ApeLsiN4eG''')&lt;br /&gt;
* Fix potential crash when moving objects (See commit [https://github.com/multitheftauto/mtasa-blue/commit/90895c221549893501f5f717af3ca56878e29b5d 90895c2] by '''botder''')&lt;br /&gt;
* Update credits (See commit [https://github.com/multitheftauto/mtasa-blue/commit/39227d795efafe940dc6c317c20b0162b1bd0bb3 39227d7] by '''qaisjp''')&lt;br /&gt;
* Don't apply damage to peds without a game entity (See commit [https://github.com/multitheftauto/mtasa-blue/commit/632130e36a96071290593fc3c677a536f7b19e1f 632130e] by '''botder''')&lt;br /&gt;
* Fix doors state with setElementModel ([https://github.com/multitheftauto/mtasa-blue/pull/599 #599] by '''FileEX''')&lt;br /&gt;
* Add CVAR _beta_qc_rightclick_command allowing you to reconnect by right clicking the &amp;quot;Quick Connect&amp;quot; button on the main menu (See commit [https://github.com/multitheftauto/mtasa-blue/commit/d1c60675fc0f0f62b69707ae81a82e6bbdf36042 d1c60675] by '''qaisjp''')&lt;br /&gt;
* Add more data to [[getPedAnimation]] ([https://github.com/multitheftauto/mtasa-blue/pull/892 #892] by '''Dezash''')&lt;br /&gt;
* Add missing destroy method to DxFont ([https://github.com/multitheftauto/mtasa-blue/pull/1259 #1259] by '''MegadreamsBE''')&lt;br /&gt;
* Increase [[setPedAnimationSpeed]] limit (See commit [https://github.com/multitheftauto/mtasa-blue/commit/4c36d37056d2a1496904f394bf96303dd0f2b4c5 4c36d37] by '''qaisjp''')&lt;br /&gt;
* Fix &amp;quot;ancient&amp;quot; weapon fire crash ([https://github.com/multitheftauto/mtasa-blue/pull/1109 #1109] by '''saml1er''')&lt;br /&gt;
* Fix [[bitExtract]] (See commit [https://github.com/multitheftauto/mtasa-blue/commit/aa2df39d3e40e5b446ffea376ef96df89916a9d0 aa2df39d] by '''ccw808''')&lt;br /&gt;
* Fix texture blending ([https://github.com/multitheftauto/mtasa-blue/pull/1098 #1098] by '''StrixG''')&lt;br /&gt;
* Add client setting to toggle internet sound streams ([https://github.com/multitheftauto/mtasa-blue/pull/834 #834] by '''patrikjuvonen''')&lt;br /&gt;
* Implement &amp;quot;remember this option&amp;quot; checkbox to NVidia Optimus dialog ([https://github.com/multitheftauto/mtasa-blue/pull/1177 #1177] by '''Lpsd''')&lt;br /&gt;
* Fix inability to crouch when player has 1 HP ([https://github.com/multitheftauto/mtasa-blue/pull/1138 #1138] by '''CrosRoad95''')&lt;br /&gt;
* Improve trailer sync ([https://github.com/multitheftauto/mtasa-blue/pull/1247 #1247] by '''tederis''')&lt;br /&gt;
* Fix driveby for peds ([https://github.com/multitheftauto/mtasa-blue/pull/1290 #1290] by '''Zangomangu''')&lt;br /&gt;
* Add &amp;quot;SettingHighDetailPeds&amp;quot; to [[dxGetStatus]] ([https://github.com/multitheftauto/mtasa-blue/pull/1384 #1384] by '''Patrick''')&lt;br /&gt;
* Add feature to remove server from the &amp;quot;Recent&amp;quot; tab in server browser ([https://github.com/multitheftauto/mtasa-blue/pull/1381 #1381] by '''ecastro98''')&lt;br /&gt;
* Fix [[warpPedIntoVehicle]] failure when there are too many vehicles streamed in ([https://github.com/multitheftauto/mtasa-blue/pull/1431 #1431] by '''saml1er''')&lt;br /&gt;
* Fix issue with [[engineReplaceModel]] kicking the player out of the vehicle ([https://github.com/multitheftauto/mtasa-blue/pull/1433 #1433] by '''saml1er''')&lt;br /&gt;
* Moved exe patching to loader ([https://github.com/multitheftauto/mtasa-blue/pull/1520 #1520] by '''ccw808''')&lt;br /&gt;
* Fix various return values when using OOP (e.g: [https://github.com/multitheftauto/mtasa-blue/commit/5110559b7a7f2d258f01be1dce18fe63d8bca400 5110559b], [https://github.com/multitheftauto/mtasa-blue/commit/88379b8ded766b2d35e171b6d11ef33cb2663b96 88379b8d] by '''qaisjp''')&lt;br /&gt;
* Fixed incorrect VRAM detection ([https://github.com/multitheftauto/mtasa-blue/pull/1589 #1589] by '''TheNormalnij''')&lt;br /&gt;
* Add ability to play sounds from raw data to playSound(3D) ([https://github.com/multitheftauto/mtasa-blue/pull/1234 #1234] by '''Dezash''')&lt;br /&gt;
* Allow downloading of files from other resources ([https://github.com/multitheftauto/mtasa-blue/pull/945 #945] by '''TheNormalnij''') - this affects:&lt;br /&gt;
** [[downloadFile]]&lt;br /&gt;
** [[onClientFileDownloadComplete]]&lt;br /&gt;
* Add ability to get raw controller analog value ([https://github.com/multitheftauto/mtasa-blue/pull/1165 #1165] by '''Addlibs''')&lt;br /&gt;
* Add user agent workaround for YouTube TV ([https://github.com/multitheftauto/mtasa-blue/pull/1243 #1243] by '''qaisjp''')&lt;br /&gt;
* Add missing destroy method to DxFont ([https://github.com/multitheftauto/mtasa-blue/pull/1259 #1259] by '''MegadreamsBE''')&lt;br /&gt;
* Fix engineReplaceModel memory leak ([https://github.com/multitheftauto/mtasa-blue/pull/1265 #1265] by '''saml1er''')&lt;br /&gt;
* Fix vehicle model memory leaks (See commit [https://github.com/multitheftauto/mtasa-blue/commit/46dbbe7dd2c4621d7564cf272e8a432cf9f57300 46dbbe7] by '''saml1er''')&lt;br /&gt;
* Fix texture memory leak (See commit [https://github.com/multitheftauto/mtasa-blue/commit/d5722d5ac5c0ed0210849bf03c263ec88ea98c2a d5722d5] by '''saml1er''')&lt;br /&gt;
* Enable enter_exit for peds to fix alternative attack ([https://github.com/multitheftauto/mtasa-blue/pull/1295 #1295] by '''Zangomangu''')&lt;br /&gt;
* Fix &amp;quot;Select device&amp;quot; hides under other program without MTA icon on a taskbar (See commit [https://github.com/multitheftauto/mtasa-blue/commit/2c5251a42a640ccc9ffa928cb2844c9295f47c6c 2c5251a] by '''ccw808''')&lt;br /&gt;
* Fix primitive colors are always white ([https://github.com/multitheftauto/mtasa-blue/pull/1312 #1312] by '''StrixG''')&lt;br /&gt;
* Add analog control sync for accelerate and brake_reverse ([https://github.com/multitheftauto/mtasa-blue/pull/1164 #1164] by '''Addlibs''')&lt;br /&gt;
* Fix resetting dummies in vehicles with replaced models ([https://github.com/multitheftauto/mtasa-blue/pull/1059 #1059] by '''forkerer''' and '''saml1er''')&lt;br /&gt;
* Return vector3 instead of number at ped's target ([https://github.com/multitheftauto/mtasa-blue/pull/1379 #1379] by '''ecastro98''')&lt;br /&gt;
* Fix replaced weapon_crouch anim does not play if retainPedState is true ([https://github.com/multitheftauto/mtasa-blue/pull/1414 #1414] by '''saml1er''')&lt;br /&gt;
* Fix nametags are interiorless ([https://github.com/multitheftauto/mtasa-blue/commit/3df58bd435b3c4052fa5e7fe57d534bdca7e0d2b 3df58bd] by '''qaisjp''')&lt;br /&gt;
* Remove amx from the installer (See commit [https://github.com/multitheftauto/mtasa-blue/commit/7d4091fac6e41e6d9e199cd0a03c927dc48aac79 7d4091f] by '''qaisjp''')&lt;br /&gt;
* Potential fix for vehicle dummies crash ([https://github.com/multitheftauto/mtasa-blue/pull/1524 #1524] by '''saml1er''')&lt;br /&gt;
* Add projectiles support for [[getElementModel]] ([https://github.com/multitheftauto/mtasa-blue/pull/1550 #1550] by '''StrixG''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2 Vendor Updates ===&lt;br /&gt;
* Update BASS libraries ([https://github.com/multitheftauto/mtasa-blue/pull/1551 #1551] by '''Dutchman101''')&lt;br /&gt;
* Update CEF from 76.1.13+gf19c584 (Chromium 76.0.3809.132) to 81.3.10+gb223419 ([https://chromereleases.googleblog.com/2020/05/stable-channel-update-for-desktop.html Chromium 81.0.4044.138]) (See commit [https://github.com/multitheftauto/mtasa-blue/commit/8d2d0fb20fb094119e86e348340f5cb90e30dc16 8d2d0fb] by '''qaisjp''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 3 New Functions ===&lt;br /&gt;
* Add [[setPlayerScriptDebugLevel]] and [[getPlayerScriptDebugLevel]] ([https://github.com/multitheftauto/mtasa-blue/pull/826 #826] by '''knitz12''')&lt;br /&gt;
* Add [[isResourceProtected]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1254 #1254] by '''StrixG''')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==== New Events ====&lt;br /&gt;
* Placeholder&lt;br /&gt;
&lt;br /&gt;
==== Deprecations ====&lt;br /&gt;
* Placeholder&lt;br /&gt;
&lt;br /&gt;
==== New Arguments &amp;amp; Parameters ====&lt;br /&gt;
* Placeholder&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9 Bug Fixes &amp;amp; Changes ===&lt;br /&gt;
* Fix [[iprint]] to be able to read and output nil arguments properly ([https://github.com/multitheftauto/mtasa-blue/pull/1064 #1064] by '''TheNormalnij''')&lt;br /&gt;
* Accept team &amp;amp; table of players in [[outputChatBox]] ([https://github.com/multitheftauto/mtasa-blue/pull/1213 #1213] by '''StrixG''')&lt;br /&gt;
* Fix /msg command duplicating when sent by Server Console ([https://github.com/multitheftauto/mtasa-blue/pull/1411 #1411] by '''Dezash''')&lt;br /&gt;
* Make colshapes cloneable ([https://github.com/multitheftauto/mtasa-blue/pull/1214 #1214] by '''StrixG''')&lt;br /&gt;
* Fix double chat messages if player is in team ([https://github.com/multitheftauto/mtasa-blue/pull/1241 #1241] by '''StrixG''' and '''Luxy.c''')&lt;br /&gt;
* Don't queue a resource restart if resource is stopping ([https://github.com/multitheftauto/mtasa-blue/pull/960 #960] by '''StrixG''')&lt;br /&gt;
* Add support for more map attributes ([https://github.com/multitheftauto/mtasa-blue/pull/263 #263] by '''patrikjuvonen''')&lt;br /&gt;
* Fix server-client inconsistency for isElementAttached failure return ([https://github.com/multitheftauto/mtasa-blue/commit/866506d3f6ebe4a0d4d39664cc4e7d7c0cef1a7c 866506d] by '''qaisjp''')&lt;br /&gt;
* Make [[kickPlayer]] accept the Console element as responsiblePlayer([https://github.com/multitheftauto/mtasa-blue/pull/1427 #1427] by '''qaisjp''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1 Vendor Update ===&lt;br /&gt;
* Update sqlite from 3.31.1 to 3.32.3 ([https://github.com/multitheftauto/mtasa-blue/pull/1561 #1561] by '''patrikjuvonen''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Shared (''Client &amp;amp; Server side'') ==&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
=== 17 New Functions ===&lt;br /&gt;
* Add [[xmlLoadString]] ([https://github.com/multitheftauto/mtasa-blue/pull/809 #809] by '''Lpsd''')&lt;br /&gt;
* Add request info &amp;amp; abort functions for [[fetchRemote]]/[[callRemote]] ([https://github.com/multitheftauto/mtasa-blue/pull/660 #660] by '''Luxy.c''')&lt;br /&gt;
** [[getRemoteRequests]]&lt;br /&gt;
** [[getRemoteRequestInfo]]&lt;br /&gt;
** [[abortRemoteRequest]]&lt;br /&gt;
* Add functions to manipulate colshapes parameters ([https://github.com/multitheftauto/mtasa-blue/pull/1215 #1215] by '''StrixG''')&lt;br /&gt;
** [[getColShapeRadius]]&lt;br /&gt;
** [[setColShapeRadius]]&lt;br /&gt;
** [[getColShapeSize]]&lt;br /&gt;
** [[setColShapeSize]]&lt;br /&gt;
** [[getColPolygonPoints]]&lt;br /&gt;
** [[getColPolygonPointPosition]]&lt;br /&gt;
** [[setColPolygonPointPosition]]&lt;br /&gt;
** [[addColPolygonPoint]]&lt;br /&gt;
** [[removeColPolygonPoint]]&lt;br /&gt;
* Add [[hasElementData]] function ([https://github.com/multitheftauto/mtasa-blue/pull/1163 #1163] by '''Simi2''')&lt;br /&gt;
* Add element data subscription functionality ([https://github.com/multitheftauto/mtasa-blue/pull/1055 #1055] by '''tederis''') - includes 3 new functions:&lt;br /&gt;
** [[addElementDataSubscriber]]&lt;br /&gt;
** [[removeElementDataSubscriber]]&lt;br /&gt;
** [[hasElementDataSubscriber]]&lt;br /&gt;
** Adds 1 additional parameter to [[setElementData]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1 Deprecation ===&lt;br /&gt;
* Add deprecation message to [[passwordHash]] when using custom salts ([https://github.com/multitheftauto/mtasa-blue/pull/1208 #1208] by '''Luxy.c''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 7 Bug Fixes &amp;amp; Changes ===&lt;br /&gt;
* Add async [[encodeString]]/[[decodeString]] ([https://github.com/multitheftauto/mtasa-blue/pull/1226 #1226] by '''StrixG''')&lt;br /&gt;
* Fix colshape and marker hit detection when attaching ([https://github.com/multitheftauto/mtasa-blue/pull/1327 #1327] by '''Lpsd''')&lt;br /&gt;
* Fix driveby aiming being inverted in some cases ([https://github.com/multitheftauto/mtasa-blue/pull/1442 #1442] by '''Zangomangu''')&lt;br /&gt;
* Add bIncludeWorldSeaLevel and bIncludeOutsideWorldLevel parameters to [[setWaterLevel]] ([https://github.com/multitheftauto/mtasa-blue/pull/1342 #1342] by '''TheNormalnij''')&lt;br /&gt;
* Add [[outputDebugString]] level 4 to omit certain debug info ([https://github.com/multitheftauto/mtasa-blue/pull/1167 #1167] by '''Addlibs''')&lt;br /&gt;
* Fix incorrect hash capitalisation ([https://github.com/multitheftauto/mtasa-blue/pull/1527 #1527] by '''qaisjp''')&lt;br /&gt;
* Trim [[teaEncode]] trailing zeroes ([https://github.com/multitheftauto/mtasa-blue/pull/1534 #1534] by '''Pirulax''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1 Vendor Update ===&lt;br /&gt;
* Update curl from 7.68.0 to 7.69.1 ([https://github.com/multitheftauto/mtasa-blue/pull/1302 #1302] by '''patrikjuvonen''' and '''qaisjp''')&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
== Extra information ==&lt;br /&gt;
''More detailed information available on our GitHub repositories:&lt;br /&gt;
:* [https://github.com/multitheftauto/mtasa-blue MTA:SA Blue]&lt;br /&gt;
:* [https://github.com/multitheftauto/mtasa-resources MTA:SA Official Resources]&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Changelog]]&lt;br /&gt;
[[Category:Incomplete]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=DxGetTextWidth&amp;diff=65687</id>
		<title>DxGetTextWidth</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=DxGetTextWidth&amp;diff=65687"/>
		<updated>2020-04-05T14:27:19Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Preventing scripters to think it returns the width in relative because of the Note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
{{Client function}} &lt;br /&gt;
This function retrieves the theoretical width (in pixels) of a certain piece of text, if it were to be drawn using [[dxDrawText]].&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' This function already takes the client's screen resolution into account.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float dxGetTextWidth ( string text, [float scale=1, mixed font=&amp;quot;default&amp;quot;, bool bColorCoded=false] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{New feature/item|3.0141|1.4.1|6942|{{OOP|This syntax requires you to ignore the font argument above| [[Element/DX font|font]]:getTextWidth}}}}&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
* '''text:''' A string representing the text for which you wish to retrieve with width for.&lt;br /&gt;
&lt;br /&gt;
==Optional Arguments==&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''scale:''' The size of the text.&lt;br /&gt;
* '''font:''' Either a custom [[DX font]] element or the name of a built-in dx font:&lt;br /&gt;
{{DxFonts}}&lt;br /&gt;
* '''bColorCoded:''' Should we exclude color codes from the width? (false will include the hex in the length)&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the float of the width of the text (in pixels). &lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
&amp;lt;section name=&amp;quot;Example&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This will show you the width of a message in a normal chatbox sent by a player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function dxwidth(msg)&lt;br /&gt;
    chatbox = getChatboxLayout()&lt;br /&gt;
    local length = dxGetTextWidth(msg,chatbox[&amp;quot;chat_scale&amp;quot;][1])&lt;br /&gt;
    outputChatBox(tostring(length))&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onClientChatMessage&amp;quot;,root,dxwidth)&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;
{{Drawing_functions}}&lt;br /&gt;
&lt;br /&gt;
[[hu:dxGetTextWidth]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=SetTimer&amp;diff=65680</id>
		<title>SetTimer</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=SetTimer&amp;diff=65680"/>
		<updated>2020-04-04T23:15:02Z</updated>

		<summary type="html">&lt;p&gt;Citizen: We expect the wiki to say &amp;quot;performance issues&amp;quot; instead of death. Added onClientPreRender to recommended event.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server client function}}{{Important Note|The speed at which a client side timer runs can be completely unreliable if a client is maliciously modifying their operating system speed, timers could run much faster or slower.}}&lt;br /&gt;
{{Important Note|Writing the following code can cause performance issues. Use [[onClientRender]] or [[onClientPreRender]] instead. &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;setTimer(theFunction, 0, 0)&amp;lt;/syntaxhighlight&amp;gt;}}&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 0ms.&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]]}}&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''theFunction:''' The function you wish the timer to call.&lt;br /&gt;
{{Note|The hidden global variable '''sourceTimer''' contains the currently executing timer userdata}}&lt;br /&gt;
*'''timeInterval:''' The number of milliseconds that should elapse before the function is called. (the minimum is 50 (0 on 1.5.6 r16715); 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;
==Examples==&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;
This example outputs some random text to the chat every 300000 milliseconds (5 minutes).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
setTimer(function()&lt;br /&gt;
    outputChatBox(&amp;quot;Text &amp;quot; .. math.random(1,4))&lt;br /&gt;
end, 300000, 0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Yet another example&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
This example should send a global message about the death of a player on a random time. I used [https://wiki.multitheftauto.com/wiki/Math.round math.round] in this example to give a nicer output.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function math.round(number, decimals, method) -- math.round, useful function taken from the wiki: https://wiki.multitheftauto.com/wiki/Math.round&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;
&lt;br /&gt;
function onWasted()&lt;br /&gt;
	local delay = math.random(500, 5000) -- 0.5s to 5s of delay&lt;br /&gt;
	setTimer(function(thePlayer) -- Starts the Timer&lt;br /&gt;
		local whoDied = &amp;quot;Someone&amp;quot; -- In case the name can't be read, Someone will appear&lt;br /&gt;
		if isElement(thePlayer) then -- This checks if thePlayer's element still exists (which means thePlayer hasnt disconnected yet)&lt;br /&gt;
			whoDied = getPlayerName(thePlayer) -- Changes Someone to thePlayer's name&lt;br /&gt;
		end&lt;br /&gt;
		outputChatBox(whoDied..&amp;quot; #FFFFFFhas #FF0000died #FFFFFF&amp;quot;..math.round(delay/1000, 1)..&amp;quot; seconds ago.&amp;quot;, root, 255, 175, 0, true) -- This will output to everyone on the server that thePlayer (or Someone) died X seconds ago.&lt;br /&gt;
	end&lt;br /&gt;
	delay, 1, source) -- The source at the end is an argument for the function we made before, you can't use the source directly because it won't be readed&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;, root, onWasted) -- Executed every time someone dies&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;
{{Utility functions}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OOP_client&amp;diff=61774</id>
		<title>OOP client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OOP_client&amp;diff=61774"/>
		<updated>2018-12-28T21:54:22Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Updated Element section with getPosition, setRotation and getRotation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needs Checking|This page is partially outdated.}}&lt;br /&gt;
The new OOP in MTA allows for better code organization and readability. This is a list of [[Client_Scripting_Functions|client-side functions]].&lt;br /&gt;
&lt;br /&gt;
''See also: [[OOP]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Element==&lt;br /&gt;
 &lt;br /&gt;
 areCollisionsEnabled (function: [[getElementCollisionsEnabled]])&lt;br /&gt;
 attach (function: [[attachElements]])&lt;br /&gt;
 clearVisibleTo (function: [[clearElementVisibleTo]])&lt;br /&gt;
 clone (function: [[cloneElement]])&lt;br /&gt;
 create (function: [[createElement]])&lt;br /&gt;
 destroy (function: [[destroyElement]])&lt;br /&gt;
 detach (function: [[detachElements]])&lt;br /&gt;
 getAllByType (function: [[getElementsByType]])&lt;br /&gt;
 getAlpha (function: [[getElementAlpha]])&lt;br /&gt;
 getAttachedElements (function: [[getAttachedElements]])&lt;br /&gt;
 getAttachedOffsets (function: [[getElementAttachedOffsets]])&lt;br /&gt;
 getAttachedTo (function: [[getElementAttachedTo]])&lt;br /&gt;
 getBoundingBox (function: [[getElementBoundingBox]])&lt;br /&gt;
 getByID (function: [[getElementByID]])&lt;br /&gt;
 getByType (function: [[getElementsByType]])&lt;br /&gt;
 getChild (function: [[getElementChild]])&lt;br /&gt;
 getChildren (function: [[getElementChildren]])&lt;br /&gt;
 getChildrenCount (function: [[getElementChildrenCount]])&lt;br /&gt;
 getColShape (function: [[getElementColShape]])&lt;br /&gt;
 getData (function: [[getElementData]])&lt;br /&gt;
 getDimension (function: [[getElementDimension]])&lt;br /&gt;
 getDistanceFromCentreOfMassToBaseOfModel (function: [[GetElementDistanceFromCentreOfMassToBaseOfModel]])&lt;br /&gt;
 getHealth (function: [[getElementHealth]])&lt;br /&gt;
 getID (function: [[getElementID]])&lt;br /&gt;
 getInterior (function: [[getElementInterior]])&lt;br /&gt;
 getLowLOD (function: [[getLowLODElement]])&lt;br /&gt;
 getModel (function: [[getElementModel]])&lt;br /&gt;
 getParent (function: [[getElementParent]])&lt;br /&gt;
 getPosition (function: [[getElementPosition]], variable: position)&lt;br /&gt;
 getRotation (function: [[getElementRotation]], variable: rotation)&lt;br /&gt;
 getSyncer (function: [[getElementSyncer]])&lt;br /&gt;
 getType (function: [[getElementType]])&lt;br /&gt;
 getVelocity (function: [[getElementVelocity]])&lt;br /&gt;
 getWithinColShape (function: [[getElementsWithinColShape]])&lt;br /&gt;
 getZoneName (function: [[getElementZoneName]])&lt;br /&gt;
 isAttached (function: [[isElementAttached]])&lt;br /&gt;
 isCallPropagationEnabled (function: [[isElementCallPropagationEnabled]])&lt;br /&gt;
 isDoubleSided (function: [[isElementDoubleSided]])&lt;br /&gt;
 isFrozen (function: [[isElementFrozen]])&lt;br /&gt;
 isInWater (function: [[isElementInWater]])&lt;br /&gt;
 isLowLOD (function: [[isElementLowLOD]])&lt;br /&gt;
 isVisibleTo (function: [[isElementVisibleTo]])&lt;br /&gt;
 isWithinColShape (function: [[isElementWithinColShape]])&lt;br /&gt;
 isWithinMarker (function: [[isElementWithinMarker]])&lt;br /&gt;
 removeData (function: [[removeElementData]])&lt;br /&gt;
 setAlpha (function: [[setElementAlpha]])&lt;br /&gt;
 setAttachedOffsets (function: [[setElementAttachedOffsets]])&lt;br /&gt;
 setCallPropagationEnabled (function: [[setElementCallPropagationEnabled]])&lt;br /&gt;
 setCollisionsEnabled (function: [[setElementCollisionsEnabled]])&lt;br /&gt;
 setData (function: [[setElementData]])&lt;br /&gt;
 setDimension (function: [[setElementDimension]])&lt;br /&gt;
 setDoubleSided (function: [[setElementDoubleSided]])&lt;br /&gt;
 setFrozen (function: [[setElementFrozen]])&lt;br /&gt;
 setHealth (function: [[setElementHealth]])&lt;br /&gt;
 setID (function: [[setElementID]])&lt;br /&gt;
 setInterior (function: [[setElementInterior]])&lt;br /&gt;
 setLowLOD (function: [[setLowLODElement]])&lt;br /&gt;
 setMatrix (function: [[setElementMatrix]])&lt;br /&gt;
 setModel (function: [[setElementModel]])&lt;br /&gt;
 setParent (function: [[setElementParent]])&lt;br /&gt;
 setPosition (function: [[setElementPosition]])&lt;br /&gt;
 setRotation (function: [[setElementRotation]])&lt;br /&gt;
 setVelocity (function: [[setElementVelocity]])&lt;br /&gt;
 setVisibleTo (function: [[setElementVisibleTo]])&lt;br /&gt;
&lt;br /&gt;
==Vehicle==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 addUpgrade (function: [[addVehicleUpgrade]])&lt;br /&gt;
 attachTrailer (function: [[attachTrailerToVehicle]])&lt;br /&gt;
 blow (function: [[blowVehicle]])&lt;br /&gt;
 create (function: [[createVehicle]])&lt;br /&gt;
 detachTrailer (function: [[detachTrailerFromVehicle]])&lt;br /&gt;
 fix (function: [[fixVehicle]])&lt;br /&gt;
 getAdjustableProperty (function: [[getVehicleAdjustableProperty]])&lt;br /&gt;
 getColor (function: [[getVehicleColor]])&lt;br /&gt;
 getCompatibleUpgrades (function: [[getVehicleCompatibleUpgrades]])&lt;br /&gt;
 getComponentPosition (function: [[getVehicleComponentPosition]])&lt;br /&gt;
 getComponentRotation (function: [[getVehicleComponentRotation]])&lt;br /&gt;
 getComponents (function: [[getVehicleComponents]])&lt;br /&gt;
 getComponentVisible (function: [[getVehicleComponentVisible]])&lt;br /&gt;
 getController (function: [[getVehicleController]])&lt;br /&gt;
 getDoorOpenRatio (function: [[getVehicleDoorOpenRatio]])&lt;br /&gt;
 getDoorState (function: [[getVehicleDoorState]])&lt;br /&gt;
 getEngineState (function: [[getVehicleEngineState]])&lt;br /&gt;
 getGear (function: [[getVehicleCurrentGear]])&lt;br /&gt;
 getGravity (function: [[getVehicleGravity]])&lt;br /&gt;
 getHandling (function: [[getVehicleHandling]])&lt;br /&gt;
 getHeadLightColor (function: [[getVehicleHeadLightColor]])&lt;br /&gt;
 getHelicopterRotorSpeed (function: [[getHelicopterRotorSpeed]])&lt;br /&gt;
 getLandingGearDown (function: [[getVehicleLandingGearDown]])&lt;br /&gt;
 getLightState (function: [[getVehicleLightState]])&lt;br /&gt;
 getMaxPassengers (function: [[getVehicleMaxPassengers]])&lt;br /&gt;
 getName (function: [[getVehicleName]])&lt;br /&gt;
 getNitroCount (function: [[getVehicleNitroCount]])&lt;br /&gt;
 getNitroLevel (function: [[getVehicleNitroLevel]])&lt;br /&gt;
 getOccupant (function: [[getVehicleOccupant]])&lt;br /&gt;
 getOccupants (function: [[getVehicleOccupants]])&lt;br /&gt;
 getOverrideLights (function: [[getVehicleOverrideLights]])&lt;br /&gt;
 getPaintjob (function: [[getVehiclePaintjob]])&lt;br /&gt;
 getPanelState (function: [[getVehiclePanelState]])&lt;br /&gt;
 getPlateText (function: [[getVehiclePlateText]])&lt;br /&gt;
 getSirens (function: [[getVehicleSirens]])&lt;br /&gt;
 getSirensOn (function: [[getVehicleSirensOn]])&lt;br /&gt;
 getTowedByVehicle (function: [[getVehicleTowedByVehicle]])&lt;br /&gt;
 getTowingVehicle (function: [[getVehicleTowingVehicle]])&lt;br /&gt;
 getTrainDirection (function: [[getTrainDirection]])&lt;br /&gt;
 getTrainSpeed (function: [[getTrainSpeed]])&lt;br /&gt;
 getTurnVelocity (function: [[getVehicleTurnVelocity]])&lt;br /&gt;
 getTurretPosition (function: [[getVehicleTurretPosition]])&lt;br /&gt;
 getUpgrades (function: [[getVehicleUpgrades]])&lt;br /&gt;
 getUpgradeSlotName (function: [[getVehicleUpgradeSlotName]])&lt;br /&gt;
 getVariant (function: [[getVehicleVariant]])&lt;br /&gt;
 getVehicleType (function: [[getVehicleType]])&lt;br /&gt;
 getWheelStates (function: [[getVehicleWheelStates]])&lt;br /&gt;
 isBlown (function: [[isVehicleBlown]])&lt;br /&gt;
 isDamageProof (function: [[isVehicleDamageProof]])&lt;br /&gt;
 isFuelTankExplodable (function: [[isVehicleFuelTankExplodable]])&lt;br /&gt;
 isLocked (function: [[isVehicleLocked]])&lt;br /&gt;
 isNitroActivated (function: [[isVehicleNitroActivated]])&lt;br /&gt;
 isNitroRecharging (function: [[isVehicleNitroRecharging]])&lt;br /&gt;
 isOnGround (function: [[isVehicleOnGround]])&lt;br /&gt;
 isTaxiLightOn (function: [[isVehicleTaxiLightOn]])&lt;br /&gt;
 isTrainDerailable (function: [[setTrainDerailable]])&lt;br /&gt;
 isTrainDerailed (function: [[isTrainDerailed]])&lt;br /&gt;
 isWheelCollided (function: [[isVehicleWheelCollided]])&lt;br /&gt;
 removeUpgrade (function: [[removeVehicleUpgrade]])&lt;br /&gt;
 resetComponentPosition (function: [[resetVehicleComponentPosition]])&lt;br /&gt;
 resetComponentRotation (function: [[resetVehicleComponentRotation]])&lt;br /&gt;
 setAdjustableProperty (function: [[setVehicleAdjustableProperty]])&lt;br /&gt;
 setColor (function: [[setVehicleColor]])&lt;br /&gt;
 setComponentPosition (function: [[setVehicleComponentPosition]])&lt;br /&gt;
 setComponentRotation (function: [[setVehicleComponentRotation]])&lt;br /&gt;
 setComponentVisible (function: [[setVehicleComponentVisible]])&lt;br /&gt;
 setDamageProof (function: [[setVehicleDamageProof]])&lt;br /&gt;
 setDirtLevel (function: [[setVehicleDirtLevel]])&lt;br /&gt;
 setDoorOpenRatio (function: [[setVehicleDoorOpenRatio]])&lt;br /&gt;
 setDoorState (function: [[setVehicleDoorState]])&lt;br /&gt;
 setDoorsUndamageable (function: [[setVehicleDoorsUndamageable]])&lt;br /&gt;
 setEngineState (function: [[setVehicleEngineState]])&lt;br /&gt;
 setFuelTankExplodable (function: [[setVehicleFuelTankExplodable]])&lt;br /&gt;
 setGravity (function: [[setVehicleGravity]])&lt;br /&gt;
 setHeadLightColor (function: [[setVehicleHeadLightColor]])&lt;br /&gt;
 setHelicopterRotorSpeed (function: [[setHelicopterRotorSpeed]])&lt;br /&gt;
 setLandingGearDown (function: [[setVehicleLandingGearDown]])&lt;br /&gt;
 setLightState (function: [[setVehicleLightState]])&lt;br /&gt;
 setLocked (function: [[setVehicleLocked]])&lt;br /&gt;
 setNitroActivated (function: [[setVehicleNitroActivated]])&lt;br /&gt;
 setNitroCount (function: [[setVehicleNitroCount]])&lt;br /&gt;
 setNitroLevel (function: [[setVehicleNitroLevel]])&lt;br /&gt;
 setOverrideLights (function: [[setVehicleOverrideLights]])&lt;br /&gt;
 setPaintjob (function: [[setVehiclePaintjob]])&lt;br /&gt;
 setPanelState (function: [[setVehiclePanelState]])&lt;br /&gt;
 setSirens (function: [[setVehicleSirens]])&lt;br /&gt;
 setSirensOn (function: [[setVehicleSirensOn]])&lt;br /&gt;
 setTaxiLightOn (function: [[setVehicleTaxiLightOn]])&lt;br /&gt;
 setTrainDerailable (function: [[setTrainDerailable]])&lt;br /&gt;
 setTrainDerailed (function: [[setTrainDerailed]])&lt;br /&gt;
 setTrainDirection (function: [[setTrainDirection]])&lt;br /&gt;
 setTrainSpeed (function: [[setTrainSpeed]])&lt;br /&gt;
 setTurnVelocity (function: [[setVehicleTurnVelocity]])&lt;br /&gt;
 setTurretPosition (function: [[setVehicleTurretPosition]])&lt;br /&gt;
 setVariant (function: [[setVehicleVariant]])&lt;br /&gt;
 setWheelStates (function: [[setVehicleWheelStates]])&lt;br /&gt;
&lt;br /&gt;
==Ped==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 addClothes (function: [[addPedClothes]])&lt;br /&gt;
 canBeKnockedOffBike (function: [[canPedBeKnockedOffBike]])&lt;br /&gt;
 create (function: [[createPed]])&lt;br /&gt;
 doesHaveJetPack (function: [[doesPedHaveJetPack]])&lt;br /&gt;
 getAmmoInClip (function: [[getPedAmmoInClip]])&lt;br /&gt;
 getAnalogControlState (function: [[getPedAnalogControlState]])&lt;br /&gt;
 getAnimation (function: [[getPedAnimation]])&lt;br /&gt;
 getAnimationData (function: [[getPedAnimationData]])&lt;br /&gt;
 getArmor (function: [[getPedArmor]])&lt;br /&gt;
 getBodyPartName (function: [[getBodyPartName]])&lt;br /&gt;
 getBonePosition (function: [[getPedBonePosition]])&lt;br /&gt;
 getCameraRotation (function: [[getPedCameraRotation]])&lt;br /&gt;
 getClothes (function: [[getPedClothes]])&lt;br /&gt;
 getClothesByTypeIndex (function: [[getClothesByTypeIndex]])&lt;br /&gt;
 getClothesTypeName (function: [[getClothesTypeName]])&lt;br /&gt;
 getContactElement (function: [[getPedContactElement]])&lt;br /&gt;
 getControlState (function: [[getPedControlState]])&lt;br /&gt;
 getMoveState (function: [[getPedMoveState]])&lt;br /&gt;
 getOccupiedVehicle (function: [[GetPedOccupiedVehicle]])&lt;br /&gt;
 getOxygenLevel (function: [[getPedOxygenLevel]])&lt;br /&gt;
 getSimplestTask (function: [[getPedSimplestTask]])&lt;br /&gt;
 getStat (function: [[getPedStat]])&lt;br /&gt;
 getTarget (function: [[getPedTarget]])&lt;br /&gt;
 getTargetCollision (function: [[getPedTargetCollision]])&lt;br /&gt;
 getTargetEnd (function: [[getPedTargetEnd]])&lt;br /&gt;
 getTargetStart (function: [[getPedTargetStart]])&lt;br /&gt;
 getTask (function: [[getPedTask]])&lt;br /&gt;
 getTotalAmmo (function: [[getPedTotalAmmo]])&lt;br /&gt;
 getTypeIndexFromClothes (function: [[getTypeIndexFromClothes]])&lt;br /&gt;
 getValidModels (function: [[getValidPedModels]])&lt;br /&gt;
 getVoice (function: [[getPedVoice]])&lt;br /&gt;
 getWalkingStyle (function: [[getPedWalkingStyle]])&lt;br /&gt;
 getWeapon (function: [[getPedWeapon]])&lt;br /&gt;
 getWeaponMuzzlePosition (function: [[getPedWeaponMuzzlePosition]])&lt;br /&gt;
 isChocking (function: [[isPedChoking]])&lt;br /&gt;
 isDoingGangDriveby (function: [[isPedDoingGangDriveby]])&lt;br /&gt;
 isDoingTask (function: [[isPedDoingTask]])&lt;br /&gt;
 isDucked (function: [[isPedDucked]])&lt;br /&gt;
 isHeadless (function: [[isPedHeadless]])&lt;br /&gt;
 isInVehicle (function: [[isPedInVehicle]])&lt;br /&gt;
 isOnFire (function: [[isPedOnFire]])&lt;br /&gt;
 isOnGround (function: [[isPedOnGround]])&lt;br /&gt;
 isReloadingWeapon (function: [[isPedReloadingWeapon]])&lt;br /&gt;
 isTargetingMarkerEnabled (function: [[isPedTargetingMarkerEnabled]])&lt;br /&gt;
 removeClothes (function: [[removePedClothes]])&lt;br /&gt;
 removeFromVehicle (function: [[removePedFromVehicle]])&lt;br /&gt;
 setAimTarget (function: [[setPedAimTarget]])&lt;br /&gt;
 setAnalogControlState (function: [[setPedAnalogControlState]])&lt;br /&gt;
 setAnimation (function: [[setPedAnimation]])&lt;br /&gt;
 setAnimationProgress (function: [[setPedAnimationProgress]])&lt;br /&gt;
 setCameraRotation (function: [[setPedCameraRotation]])&lt;br /&gt;
 setCanBeKnockedOffBike (function: [[setPedCanBeKnockedOffBike]])&lt;br /&gt;
 setControlState (function: [[setPedControlState]])&lt;br /&gt;
 setDoingGangDriveby (function: [[setPedDoingGangDriveby]])&lt;br /&gt;
 setFootBloodEnabled (function: [[setPedFootBloodEnabled]])&lt;br /&gt;
 setHeadless (function: [[setPedHeadless]])&lt;br /&gt;
 setLookAt (function: [[setPedLookAt]])&lt;br /&gt;
 setOnFire (function: [[setPedOnFire]])&lt;br /&gt;
 setOxygenLevel (function: [[setPedOxygenLevel]])&lt;br /&gt;
 setTargetingMarkerEnabled (function: [[setPedTargetingMarkerEnabled]])&lt;br /&gt;
 setVoice (function: [[setPedVoice]])&lt;br /&gt;
 setWalkingStyle (function: [[setPedWalkingStyle]])&lt;br /&gt;
 setWeaponSlot (function: [[setPedWeaponSlot]])&lt;br /&gt;
 warpIntoVehicle (function: [[warpPedIntoVehicle]])&lt;br /&gt;
&lt;br /&gt;
==Player==&lt;br /&gt;
''Inherited from [[#Ped|Ped]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[getPlayerFromName]])&lt;br /&gt;
 getBlurLevel (function: [[getPlayerBlurLevel]])&lt;br /&gt;
 getMapBoundingBox (function: [[getPlayerMapBoundingBox]])&lt;br /&gt;
 getMoney (function: [[getPlayerMoney]])&lt;br /&gt;
 getName (function: [[getPlayerName]])&lt;br /&gt;
 getNametagColor (function: [[getPlayerNametagColor]])&lt;br /&gt;
 getNametagText (function: [[getPlayerNametagText]])&lt;br /&gt;
 getPing (function: [[getPlayerPing]])&lt;br /&gt;
 getSerial (function: [[getPlayerSerial]])&lt;br /&gt;
 getTeam (function: [[getPlayerTeam]])&lt;br /&gt;
 getWantedLevel (function: [[getPlayerWantedLevel]])&lt;br /&gt;
 giveMoney (function: [[givePlayerMoney]])&lt;br /&gt;
 isHudComponentVisible (function: [[isPlayerHudComponentVisible]])&lt;br /&gt;
 isMapForced (function: [[isPlayerMapForced]])&lt;br /&gt;
 isMapVisible (function: [[isPlayerMapVisible]])&lt;br /&gt;
 isNametagShowing (function: [[isPlayerNametagShowing]])&lt;br /&gt;
 setBlurLevel (function: [[setPlayerBlurLevel]])&lt;br /&gt;
 setMoney (function: [[setPlayerMoney]])&lt;br /&gt;
 setNametagColor (function: [[setPlayerNametagColor]])&lt;br /&gt;
 setNametagShowing (function: [[setPlayerNametagShowing]])&lt;br /&gt;
 setNametagText (function: [[setPlayerNametagText]])&lt;br /&gt;
 showHudComponent (function: [[showPlayerHudComponent]])&lt;br /&gt;
 takeMoney (function: [[takePlayerMoney]])&lt;br /&gt;
&lt;br /&gt;
==Object==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 break (function: [[breakObject]])&lt;br /&gt;
 create (function: [[createObject]])&lt;br /&gt;
 getMass (function: [[getObjectMass]])&lt;br /&gt;
 getScale (function: [[getObjectScale]])&lt;br /&gt;
 isBreakable (function: [[isObjectBreakable]])&lt;br /&gt;
 move (function: [[moveObject]])&lt;br /&gt;
 respawn (function: [[respawnObject]])&lt;br /&gt;
 setBreakable (function: [[setObjectBreakable]])&lt;br /&gt;
 setMass (function: [[setObjectMass]])&lt;br /&gt;
 setScale (function: [[setObjectScale]])&lt;br /&gt;
 stop (function: [[stopObject]])&lt;br /&gt;
 toggleObjectRespawn (function: [[toggleObjectRespawn]])&lt;br /&gt;
&lt;br /&gt;
==Marker==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createMarker]])&lt;br /&gt;
 getColor (function: [[getMarkerColor]])&lt;br /&gt;
 getCount (function: [[getMarkerCount]])&lt;br /&gt;
 getIcon (function: [[getMarkerIcon]])&lt;br /&gt;
 getSize (function: [[getMarkerSize]])&lt;br /&gt;
 getTarget (function: [[getMarkerTarget]])&lt;br /&gt;
 getType (function: [[getMarkerType]])&lt;br /&gt;
 setColor (function: [[setMarkerColor]])&lt;br /&gt;
 setIcon (function: [[setMarkerIcon]])&lt;br /&gt;
 setSize (function: [[setMarkerSize]])&lt;br /&gt;
 setTarget (function: [[setMarkerTarget]])&lt;br /&gt;
 setType (function: [[setMarkerType]])&lt;br /&gt;
&lt;br /&gt;
==Blip==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createBlip]])&lt;br /&gt;
 createAttachedTo (function: [[createBlipAttachedTo]])&lt;br /&gt;
 getColor (function: [[getBlipColor]])&lt;br /&gt;
 getIcon (function: [[getBlipIcon]])&lt;br /&gt;
 getOrdering (function: [[getBlipOrdering]])&lt;br /&gt;
 getSize (function: [[getBlipSize]])&lt;br /&gt;
 getVisibleDistance (function: [[getBlipVisibleDistance]])&lt;br /&gt;
 setColor (function: [[setBlipColor]])&lt;br /&gt;
 setIcon (function: [[setBlipIcon]])&lt;br /&gt;
 setOrdering (function: [[setBlipOrdering]])&lt;br /&gt;
 setSize (function: [[setBlipSize]])&lt;br /&gt;
 setVisibleDistance (function: [[setBlipVisibleDistance]])&lt;br /&gt;
&lt;br /&gt;
==Pickup==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createPickup]])&lt;br /&gt;
 getAmmo (function: [[getPickupAmmo]])&lt;br /&gt;
 getAmount (function: [[getPickupAmount]])&lt;br /&gt;
 getType (function: [[getPickupType]])&lt;br /&gt;
 getWeapon (function: [[getPickupWeapon]])&lt;br /&gt;
 setType (function: [[setPickupType]])&lt;br /&gt;
&lt;br /&gt;
==ColShape==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 Circle (function: [[createColCircle]])&lt;br /&gt;
 Cuboid (function: [[createColCuboid]])&lt;br /&gt;
 getElementsWithin (function: [[getElementsWithinColShape]])&lt;br /&gt;
 getShapeType (function: [[getColShapeType]])&lt;br /&gt;
 isElementWithin (function: [[isElementWithinColShape]])&lt;br /&gt;
 Polygon (function: [[createColPolygon]])&lt;br /&gt;
 Rectangle (function: [[createColRectangle]])&lt;br /&gt;
 Sphere (function: [[createColSphere]])&lt;br /&gt;
 Tube (function: [[createColTube]])&lt;br /&gt;
&lt;br /&gt;
==Projectile==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createProjectile]])&lt;br /&gt;
 getCounter (function: [[getProjectileCounter]])&lt;br /&gt;
 getCreator (function: [[getProjectileCreator]])&lt;br /&gt;
 getForce (function: [[getProjectileForce]])&lt;br /&gt;
 getTarget (function: [[getProjectileTarget]])&lt;br /&gt;
 getType (function: [[getProjectileType]])&lt;br /&gt;
 setCounter (function: [[setProjectileCounter]])&lt;br /&gt;
&lt;br /&gt;
==RadarArea==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createRadarArea]])&lt;br /&gt;
 getColor (function: [[getRadarAreaColor]])&lt;br /&gt;
 getSize (function: [[getRadarAreaSize]])&lt;br /&gt;
 isFlashing (function: [[isRadarAreaFlashing]])&lt;br /&gt;
 isInside (function: [[isInsideRadarArea]])&lt;br /&gt;
 setColor (function: [[setRadarAreaColor]])&lt;br /&gt;
 setFlashing (function: [[setRadarAreaFlashing]])&lt;br /&gt;
 setSize (function: [[setRadarAreaSize]])&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 countPlayers (function: [[countPlayersInTeam]])&lt;br /&gt;
 create (function: [[getTeamFromName]])&lt;br /&gt;
 getColor (function: [[getTeamColor]])&lt;br /&gt;
 getFriendlyFire (function: [[getTeamFriendlyFire]])&lt;br /&gt;
 getFromName (function: [[getTeamFromName]])&lt;br /&gt;
 getName (function: [[getTeamName]])&lt;br /&gt;
&lt;br /&gt;
==Water==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createWater]])&lt;br /&gt;
 getColor (function: [[getWaterColor]])&lt;br /&gt;
 getLevel (function: [[getWaterLevel]])&lt;br /&gt;
 getVertexPosition (function: [[getWaterVertexPosition]])&lt;br /&gt;
 getWaveHeight (function: [[getWaveHeight]])&lt;br /&gt;
 isDrawnLast (function: [[isWaterDrawnLast]])&lt;br /&gt;
 resetColor (function: [[resetWaterColor]])&lt;br /&gt;
 resetLevel (function: [[resetWaterLevel]])&lt;br /&gt;
 setColor (function: [[setWaterColor]])&lt;br /&gt;
 setDrawnLast (function: [[setWaterDrawnLast]])&lt;br /&gt;
 setLevel (function: [[setWaterLevel]])&lt;br /&gt;
 setVertexPosition (function: [[setWaterVertexPosition]])&lt;br /&gt;
 setWaveHeight (function: [[setWaveHeight]])&lt;br /&gt;
 testLineAgainst (function: [[testLineAgainstWater]])&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[playSound]])&lt;br /&gt;
 getBPM (function: [[getSoundBPM]])&lt;br /&gt;
 getEffects (function: [[getSoundEffects]])&lt;br /&gt;
 getFFTData (function: [[getSoundFFTData]])&lt;br /&gt;
 getLength (function: [[getSoundLength]])&lt;br /&gt;
 getLevelData (function: [[getSoundLevelData]])&lt;br /&gt;
 getMetaTags (function: [[getSoundMetaTags]])&lt;br /&gt;
 getPan (function: [[getSoundPan]])&lt;br /&gt;
 getPlaybackPosition (function: [[getSoundPosition]])&lt;br /&gt;
 getProperties (function: [[getSoundProperties]])&lt;br /&gt;
 getSpeed (function: [[getSoundSpeed]])&lt;br /&gt;
 getVolume (function: [[getSoundVolume]])&lt;br /&gt;
 getWaveData (function: [[getSoundWaveData]])&lt;br /&gt;
 isPaused (function: [[isSoundPaused]])&lt;br /&gt;
 setEffectEnabled (function: [[setSoundEffectEnabled]])&lt;br /&gt;
 setPan (function: [[setSoundPan]])&lt;br /&gt;
 setPaused (function: [[setSoundPaused]])&lt;br /&gt;
 setPlaybackPosition (function: [[setSoundPosition]])&lt;br /&gt;
 setProperties (function: [[setSoundProperties]])&lt;br /&gt;
 setSpeed (function: [[setSoundSpeed]])&lt;br /&gt;
 setVolume (function: [[setSoundVolume]])&lt;br /&gt;
 stop (function: [[stopSound]])&lt;br /&gt;
&lt;br /&gt;
==Sound3D==&lt;br /&gt;
''Inherited from [[#Sound|Sound]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[playSound3D]])&lt;br /&gt;
 getMaxDistance (function: [[getSoundMaxDistance]])&lt;br /&gt;
 getMinDistance (function: [[getSoundMinDistance]])&lt;br /&gt;
 setMaxDistance (function: [[setSoundMaxDistance]])&lt;br /&gt;
 setMinDistance (function: [[setSoundMinDistance]])&lt;br /&gt;
&lt;br /&gt;
==Weapon==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 create (function: [[createWeapon]])&lt;br /&gt;
 fire (function: [[fireWeapon]])&lt;br /&gt;
 getAmmo (function: [[getWeaponAmmo]])&lt;br /&gt;
 getClipAmmo (function: [[getWeaponClipAmmo]])&lt;br /&gt;
 getFiringRate (function: [[getWeaponFiringRate]])&lt;br /&gt;
 getFlags (function: [[getWeaponFlags]])&lt;br /&gt;
 getOwner (function: [[getWeaponOwner]])&lt;br /&gt;
 getProperty (function: [[setWeaponProperty]])&lt;br /&gt;
 getState (function: [[getWeaponState]])&lt;br /&gt;
 getTarget (function: [[getWeaponTarget]])&lt;br /&gt;
 resetFiringRate (function: [[resetWeaponFiringRate]])&lt;br /&gt;
 setAmmo (function: [[setWeaponAmmo]])&lt;br /&gt;
 setClipAmmo (function: [[setWeaponClipAmmo]])&lt;br /&gt;
 setFiringRate (function: [[setWeaponFiringRate]])&lt;br /&gt;
 setFlags (function: [[setWeaponFlags]])&lt;br /&gt;
 setOwner (function: [[setWeaponOwner]])&lt;br /&gt;
 setProperty (function: [[setWeaponProperty]])&lt;br /&gt;
 setState (function: [[setWeaponState]])&lt;br /&gt;
 setTarget (function: [[setWeaponTarget]])&lt;br /&gt;
&lt;br /&gt;
==Effect==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
 &lt;br /&gt;
 addBlood (function: [[fxAddBlood]])&lt;br /&gt;
 addBulletImpact (function: [[fxAddBulletImpact]])&lt;br /&gt;
 addBulletSplash (function: [[fxAddBulletSplash]])&lt;br /&gt;
 addDebris (function: [[fxAddDebris]])&lt;br /&gt;
 addFootSplash (function: [[fxAddFootSplash]])&lt;br /&gt;
 addGlass (function: [[fxAddGlass]])&lt;br /&gt;
 addGunshot (function: [[fxAddGunshot]])&lt;br /&gt;
 addPunchImpact (function: [[fxAddPunchImpact]])&lt;br /&gt;
 addSparks (function: [[fxAddSparks]])&lt;br /&gt;
 addTankFire (function: [[fxAddTankFire]])&lt;br /&gt;
 addTyreBurst (function: [[fxAddTyreBurst]])&lt;br /&gt;
 addWaterHydrant (function: [[fxAddWaterHydrant]])&lt;br /&gt;
 addWaterSplash (function: [[fxAddWaterSplash]])&lt;br /&gt;
 addWood (function: [[fxAddWood]])&lt;br /&gt;
 create (function: [[createEffect]])&lt;br /&gt;
 getDensity (function: [[getEffectDensity]])&lt;br /&gt;
 getSpeed (function: [[getEffectSpeed]])&lt;br /&gt;
 setDensity (function: [[setEffectDensity]])&lt;br /&gt;
 setSpeed (function: [[setEffectSpeed]])&lt;br /&gt;
&lt;br /&gt;
==GuiElement==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
&lt;br /&gt;
 bringToFront (function: [[guiBringToFront]])&lt;br /&gt;
 moveToBack (function: [[guiMoveToBack]])&lt;br /&gt;
 isChatBoxInputActive (function: [[isChatBoxInputActive]])&lt;br /&gt;
 isConsoleActive (function: [[isConsoleActive]])&lt;br /&gt;
 isDebugViewActive (function: [[isDebugViewActive]])&lt;br /&gt;
 isMainMenuActive (function: [[isMainMenuActive]])&lt;br /&gt;
 isMTAWindowActive (function: [[isMTAWindowActive]])&lt;br /&gt;
 isTransferBoxActive (function: [[isTransferBoxActive]])&lt;br /&gt;
 isInputEnabled (function: [[guiGetInputEnabled]])&lt;br /&gt;
 getInputMode (function: [[guiGetInputMode]])&lt;br /&gt;
 getScreenSize (function: [[guiGetScreenSize]])&lt;br /&gt;
 getProperties (function: [[guiGetProperties]])&lt;br /&gt;
 getAlpha (function: [[guiGetAlpha]])&lt;br /&gt;
 getFont (function: [[guiGetFont]])&lt;br /&gt;
 getEnabled (function: [[guiGetEnabled]])&lt;br /&gt;
 getVisible (function: [[guiGetVisible]])&lt;br /&gt;
 getText (function: [[guiGetText]])&lt;br /&gt;
 getPosition (function: [[guiGetPosition]])&lt;br /&gt;
 getSize (function: [[guiGetSize]])&lt;br /&gt;
 getProperty (function: [[guiGetProperty]])&lt;br /&gt;
 setInputEnabled (function: [[guiSetInputEnabled]])&lt;br /&gt;
 setAlpha (function: [[guiSetAlpha]])&lt;br /&gt;
 setEnabled (function: [[guiSetEnabled]])&lt;br /&gt;
 setFont (function: [[guiSetFont]])&lt;br /&gt;
 setVisible (function: [[guiSetVisible]])&lt;br /&gt;
 setText (function: [[guiSetText]])&lt;br /&gt;
 setInputMode (function: [[guiSetInputMode]])&lt;br /&gt;
 setProperty (function: [[guiSetProperty]])&lt;br /&gt;
 setPosition (function: [[guiSetPosition]])&lt;br /&gt;
 setSize (function: [[guiSetSize]])&lt;br /&gt;
==GuiWindow==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateWindow]])&lt;br /&gt;
 setMovable (function: [[guiWindowSetMovable]])&lt;br /&gt;
 setSizable (function: [[guiWindowSetSizable]])&lt;br /&gt;
==GuiButton==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateButton]])&lt;br /&gt;
==GuiEdit==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateEdit]])&lt;br /&gt;
 getCaretIndex (function: [[guiEditGetCaretIndex]])&lt;br /&gt;
 setCaretIndex (function: [[guiEditSetCaretIndex]])&lt;br /&gt;
 setReadOnly (function: [[guiEditSetReadOnly]])&lt;br /&gt;
 setMasked (function: [[guiEditSetMasked]])&lt;br /&gt;
 setMaxLength (function: [[guiEditSetMaxLength]])&lt;br /&gt;
==GuiLabel==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateLabel]])&lt;br /&gt;
 getFontHeight (function: [[guiLabelGetFontHeight]])&lt;br /&gt;
 getTextExtent (function: [[guiLabelGetTextExtent]])&lt;br /&gt;
 getColor (function: [[guiLabelGetColor]])&lt;br /&gt;
 setColor (function: [[guiLabelSetColor]])&lt;br /&gt;
 setHorizontalAlign (function: [[guiLabelSetHorizontalAlign]])&lt;br /&gt;
 setVerticalAlign (function: [[guiLabelSetVerticalAlign]])&lt;br /&gt;
==GuiMemo==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateMemo]])&lt;br /&gt;
 getCaretIndex (function: [[guiMemoGetCaretIndex]])&lt;br /&gt;
 setCaretIndex (function: [[guiMemoSetCaretIndex]])&lt;br /&gt;
 setReadOnly (function: [[guiMemoSetReadOnly]])&lt;br /&gt;
==GuiStaticImage==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateStaticImage]])&lt;br /&gt;
 loadImage (function: [[guiStaticImageLoadImage]])&lt;br /&gt;
==GuiComboBox==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateComboBox]])&lt;br /&gt;
 addItem (function: [[guiComboBoxAddItem]])&lt;br /&gt;
 clear (function: [[guiComboBoxClear]])&lt;br /&gt;
 removeItem (function: [[guiComboBoxRemoveItem]])&lt;br /&gt;
 getSelected (function: [[guiComboBoxGetSelected]])&lt;br /&gt;
 getItemText (function: [[guiComboBoxGetItemText]])&lt;br /&gt;
 setItemText (function: [[guiComboBoxSetItemText]])&lt;br /&gt;
 setSelected (function: [[guiComboBoxSetSelected]])&lt;br /&gt;
==GuiCheckBox==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateCheckBox]])&lt;br /&gt;
 getSelected (function: [[guiCheckBoxGetSelected]])&lt;br /&gt;
 setSelected (function: [[guiCheckBoxSetSelected]])&lt;br /&gt;
==GuiRadioButton==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateRadioButton]])&lt;br /&gt;
 getSelected (function: [[guiRadioButtonGetSelected]])&lt;br /&gt;
 setSelected (function: [[guiRadioButtonSetSelected]])&lt;br /&gt;
==GuiScrollPane==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateScrollPane]])&lt;br /&gt;
 getHorizontalScrollPosition (function: [[guiScrollPaneGetHorizontalScrollPosition]])&lt;br /&gt;
 getVerticalScrollPosition (function: [[guiScrollPaneGetVerticalScrollPosition]])&lt;br /&gt;
 setHorizontalScrollPosition (function: [[guiScrollPaneSetHorizontalScrollPosition]])&lt;br /&gt;
 setScrollBars (function: [[guiScrollPaneSetScrollBars]])&lt;br /&gt;
 setVerticalScrollPosition (function: [[guiScrollPaneSetVerticalScrollPosition]])&lt;br /&gt;
==GuiScrollBar==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateScrollBar]])&lt;br /&gt;
 getScrollPosition (function: [[guiScrollBarGetScrollPosition]])&lt;br /&gt;
 setScrollPosition (function: [[guiScrollBarSetScrollPosition]])&lt;br /&gt;
==GuiProgressBar==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateProgressBar]])&lt;br /&gt;
 getProgress (function: [[guiProgressBarGetProgress]])&lt;br /&gt;
 setProgress (function: [[guiProgressBarSetProgress]])&lt;br /&gt;
==GuiGridList==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateGridList]])&lt;br /&gt;
 addColumn (function: [[guiGridListAddColumn]])&lt;br /&gt;
 addRow (function: [[guiGridListAddRow]])&lt;br /&gt;
 autoSizeColumn (function: [[guiGridListAutoSizeColumn]])&lt;br /&gt;
 clear (function: [[guiGridListClear]])&lt;br /&gt;
 insertRowAfter (function: [[guiGridListInsertRowAfter]])&lt;br /&gt;
 removeColumn (function: [[guiGridListRemoveColumn]])&lt;br /&gt;
 removeRow (function: [[guiGridListRemoveRow]])&lt;br /&gt;
 getItemData (function: [[guiGridListGetItemData]])&lt;br /&gt;
 getItemText (function: [[guiGridListGetItemText]])&lt;br /&gt;
 getRowCount (function: [[guiGridListGetRowCount]])&lt;br /&gt;
 getSelectedItem (function: [[guiGridListGetSelectedItem]])&lt;br /&gt;
 getItemColor (function: [[guiGridListGetItemColor]])&lt;br /&gt;
 getColumnTitle (function: [[guiGridListGetColumnTitle]])&lt;br /&gt;
 getHorizontalScrollPosition (function: [[guiGridListGetHorizontalScrollPosition]])&lt;br /&gt;
 getVerticalScrollPosition (function: [[guiGridListGetVerticalScrollPosition]])&lt;br /&gt;
 getSelectedCount (function: [[guiGridListGetSelectedCount]])&lt;br /&gt;
 getSelectedItems (function: [[guiGridListGetSelectedItems]])&lt;br /&gt;
 getColumnCount (function: [[guiGridListGetColumnCount]])&lt;br /&gt;
 setItemData (function: [[guiGridListSetItemData]])&lt;br /&gt;
 setItemText (function: [[guiGridListSetItemText]])&lt;br /&gt;
 setScrollBars (function: [[guiGridListSetScrollBars]])&lt;br /&gt;
 setSelectedItem (function: [[guiGridListSetSelectedItem]])&lt;br /&gt;
 setSelectionMode (function: [[guiGridListSetSelectionMode]])&lt;br /&gt;
 setSortingEnabled (function: [[guiGridListSetSortingEnabled]])&lt;br /&gt;
 setColumnWidth (function: [[guiGridListSetColumnWidth]])&lt;br /&gt;
 setItemColor (function: [[guiGridListSetItemColor]])&lt;br /&gt;
 setColumnTitle (function: [[guiGridListSetColumnTitle]])&lt;br /&gt;
 setHorizontalScrollPosition (function: [[guiGridListSetHorizontalScrollPosition]])&lt;br /&gt;
 setVerticalScrollPosition (function: [[guiGridListSetVerticalScrollPosition]])&lt;br /&gt;
&lt;br /&gt;
==GuiTabPanel==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateTabPanel]])&lt;br /&gt;
 getSelectedTab (function: [[guiGetSelectedTab]])&lt;br /&gt;
 setSelectedTab (function: [[guiSetSelectedTab]])&lt;br /&gt;
==GuiTab==&lt;br /&gt;
''Inherited from [[#GuiElement|GuiElement]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateTab]])&lt;br /&gt;
 delete (function: [[guiDeleteTab]])&lt;br /&gt;
==GuiFont==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[guiCreateFont]])&lt;br /&gt;
==Resource==&lt;br /&gt;
 create (function: [[getResourceFromName]])&lt;br /&gt;
 fromName (function: [[getResourceFromName]])&lt;br /&gt;
 getGuiElement (function: [[getResourceGUIElement]])&lt;br /&gt;
 getRootElement (function: [[getResourceRootElement]])&lt;br /&gt;
 getName (function: [[getResourceName]])&lt;br /&gt;
 getThis (function: [[getThisResource]])&lt;br /&gt;
 getConfig (function: [[getResourceConfig]])&lt;br /&gt;
 getConfig (function: [[getResourceConfig]])&lt;br /&gt;
 getDynamicElementRoot (function: [[getResourceDynamicElementRoot]])&lt;br /&gt;
 getExportedFunctions (function: [[getResourceExportedFunctions]])&lt;br /&gt;
 getState (function: [[getResourceState]])&lt;br /&gt;
==Timer==&lt;br /&gt;
 create (function: [[setTimer]])&lt;br /&gt;
 destroy (function: [[killTimer]])&lt;br /&gt;
 reset (function: [[resetTimer]])&lt;br /&gt;
 isValid (function: [[isTimer]])&lt;br /&gt;
 getDetails (function: [[getTimerDetails]])&lt;br /&gt;
==File==&lt;br /&gt;
 create (function: [[fileOpen]])&lt;br /&gt;
 destroy (function: [[fileClose]])&lt;br /&gt;
 close (function: [[fileClose]])&lt;br /&gt;
 new (function: [[fileCreate]])&lt;br /&gt;
 delete (function: [[fileDelete]])&lt;br /&gt;
 exists (function: [[fileExists]])&lt;br /&gt;
 flush (function: [[fileFlush]])&lt;br /&gt;
 getPos (function: [[fileGetPos]])&lt;br /&gt;
 getSize (function: [[fileGetSize]])&lt;br /&gt;
 isEOF (function: [[fileIsEOF]])&lt;br /&gt;
 read (function: [[fileRead]])&lt;br /&gt;
 rename (function: [[fileRename]])&lt;br /&gt;
 setPos (function: [[fileSetPos]])&lt;br /&gt;
 write (function: [[fileWrite]])&lt;br /&gt;
 copy (function: [[fileCopy]])&lt;br /&gt;
==XML==&lt;br /&gt;
 load (function: [[xmlLoadFile]])&lt;br /&gt;
 unload (function: [[xmlUnloadFile]])&lt;br /&gt;
 copy (function: [[xmlCopyFile]])&lt;br /&gt;
 create (function: [[xmlCreateFile]])&lt;br /&gt;
 destroy (function: [[xmlDestroyNode]])&lt;br /&gt;
 setValue (function: [[xmlNodeGetValue]])&lt;br /&gt;
 setAttribute (function: [[xmlNodeSetAttribute]])&lt;br /&gt;
 setValue (function: [[xmlNodeSetValue]])&lt;br /&gt;
 saveFile (function: [[xmlSaveFile]])&lt;br /&gt;
 createChild (function: [[xmlCreateChild]])&lt;br /&gt;
 findChild (function: [[xmlFindChild]])&lt;br /&gt;
 getAttributes (function: [[xmlNodeGetAttributes]])&lt;br /&gt;
 getChildren (function: [[xmlNodeGetChildren]])&lt;br /&gt;
 getName (function: [[xmlNodeGetName]])&lt;br /&gt;
 getParent (function: [[xmlNodeGetParent]])&lt;br /&gt;
 getAttribute (function: [[xmlNodeGetAttribute]])&lt;br /&gt;
 setName (function: [[xmlNodeSetName]])&lt;br /&gt;
==Camera==&lt;br /&gt;
 fade (function: [[fadeCamera]])&lt;br /&gt;
 getTarget (function: [[getCameraTarget]])&lt;br /&gt;
 getInterior (function: [[getCameraInterior]])&lt;br /&gt;
 getViewMode (function: [[getCameraViewMode]])&lt;br /&gt;
 getGoggleEffect (function: [[getCameraGoggleEffect]])&lt;br /&gt;
 setInterior (function: [[setCameraInterior]])&lt;br /&gt;
 setTarget (function: [[setCameraTarget]])&lt;br /&gt;
 setViewMode (function: [[setCameraViewMode]])&lt;br /&gt;
 setGoggleEffect (function: [[setCameraGoggleEffect]])&lt;br /&gt;
 setClip (function: [[setCameraClip]])&lt;br /&gt;
==Engine==&lt;br /&gt;
 restoreCOL (function: [[engineRestoreCOL]])&lt;br /&gt;
 restoreModel (function: [[engineRestoreModel]])&lt;br /&gt;
 setAsynchronousLoading (function: [[engineSetAsynchronousLoading]])&lt;br /&gt;
 setModelLODDistance (function: [[engineSetModelLODDistance]])&lt;br /&gt;
 getVisibleTextureName (function: [[engineGetVisibleTextureNames]])&lt;br /&gt;
 getModelLODDistance (function: [[engineGetModelLODDistance]])&lt;br /&gt;
 getModelTextureNames (function: [[engineGetModelTextureNames]])&lt;br /&gt;
 getModelIDFromName (function: [[engineGetModelIDFromName]])&lt;br /&gt;
 getModelNameFromID (function: [[engineGetModelNameFromID]])&lt;br /&gt;
==EngineCOL==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[engineLoadCOL]])&lt;br /&gt;
 replace (function: [[engineReplaceCOL]])&lt;br /&gt;
==EngineTXD==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[engineLoadTXD]])&lt;br /&gt;
 import (function: [[engineImportTXD]])&lt;br /&gt;
==EngineDFF==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[engineLoadDFF]])&lt;br /&gt;
 replace (function: [[engineReplaceModel]])&lt;br /&gt;
==DxMaterial==&lt;br /&gt;
''Inherited from [[#Element|Element]]''&lt;br /&gt;
&lt;br /&gt;
 getSize (function: [[dxGetMaterialSize]])&lt;br /&gt;
==DxTexture==&lt;br /&gt;
''Inherited from [[#DxMaterial|DxMaterial]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[dxCreateTexture]])&lt;br /&gt;
 setEdge (function: [[dxSetTextureEdge]])&lt;br /&gt;
 setPixels (function: [[dxSetTexturePixels]])&lt;br /&gt;
 getPixels (function: [[dxGetTexturePixels]])&lt;br /&gt;
==DxFont==&lt;br /&gt;
 create (function: [[dxCreateFont]])&lt;br /&gt;
 getHeight (function: [[dxGetFontHeight]])&lt;br /&gt;
 getTextWidth (function: [[dxGetTextWidth]])&lt;br /&gt;
==DxShader==&lt;br /&gt;
''Inherited from [[#DxMaterial|DxMaterial]]''&lt;br /&gt;
&lt;br /&gt;
 create (function: [[dxCreateShader]])&lt;br /&gt;
 setValue (function: [[dxSetShaderValue]])&lt;br /&gt;
 setTessellation (function: [[dxSetShaderTessellation]])&lt;br /&gt;
 setTransform (function: [[dxSetShaderTransform]])&lt;br /&gt;
 value (function: [[dxGetFontHeight]])&lt;br /&gt;
==DxScreenSource==&lt;br /&gt;
 create (function: [[dxCreateScreenSource]])&lt;br /&gt;
 update (function: [[dxUpdateScreenSource]])&lt;br /&gt;
==DxRenderTarget==&lt;br /&gt;
 create (function: [[dxCreateRenderTarget]])&lt;br /&gt;
 setAsTarget (function: [[dxSetRenderTarget]])&lt;br /&gt;
&lt;br /&gt;
[[Category:OOP]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=SetPlayerName&amp;diff=56505</id>
		<title>SetPlayerName</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=SetPlayerName&amp;diff=56505"/>
		<updated>2018-07-22T01:02:08Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Making it clear spaces aren't allowed. Can not hurt and saves time.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Server function}} &lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This function changes the specified [[player]]'s name. Note that any change made to a players name with this function is not saved in their settings so the name change only lasts till they disconnect.&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 setPlayerName ( player thePlayer, string newName )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{OOP||[[player]]:setName|name|getPlayerName}}&lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''thePlayer:''' the [[player]] that will have its name set.&lt;br /&gt;
*'''newName:''' the new name to set for the player.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if the player name was changed succesfully, ''false'' if invalid arguments are specified.&lt;br /&gt;
&lt;br /&gt;
===Limits===&lt;br /&gt;
* Only ASCII characters between 33 and 126 are allowed (basic latin, no spaces):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;!&amp;quot;#$%&amp;amp;'()*+,-./0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Minimal player name length is 1 character. &lt;br /&gt;
* Maximum player name length is 22 characters.&lt;br /&gt;
* Player names are case-insensitive. It is not possible to have two clients with same name but different character case.&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 adds a tag before a player's nickname via a /changetag command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Define the function for this command (/changetag, as defined below)&lt;br /&gt;
-- source = the player that triggered this command&lt;br /&gt;
-- command = the command passed into the function (changetag)&lt;br /&gt;
-- thePlayer = the player that you wish to add a tag to&lt;br /&gt;
-- tag = the tag to add to the players nickname&lt;br /&gt;
function tagPlayer ( source, command, thePlayer, tag )&lt;br /&gt;
	-- Attempt to grab the element id for the player from the parsed name.&lt;br /&gt;
	local sPlayerElement = getPlayerFromName ( thePlayer )&lt;br /&gt;
	-- Check to see if the player were changing the tag for exists.&lt;br /&gt;
	if ( sPlayerElement ) then&lt;br /&gt;
		-- make sure that the element type of thePlayer is acctually pointing to a player element&lt;br /&gt;
		if getElementType ( sPlayerElement ) == &amp;quot;player&amp;quot; then&lt;br /&gt;
			-- we store the player's current name,&lt;br /&gt;
			local oldName = getPlayerName ( sPlayerElement )&lt;br /&gt;
			-- append the tag passed to this function before it&lt;br /&gt;
			local taggedName = tag .. oldName&lt;br /&gt;
			-- then set it as his new name&lt;br /&gt;
			setPlayerName ( sPlayerElement, taggedName )&lt;br /&gt;
			-- Tell the player who triggerd the command that the tag has been applied&lt;br /&gt;
			outputChatBox ( &amp;quot;Player &amp;quot; .. thePlayer .. &amp;quot;'s tag changed to &amp;quot; .. taggedName, source )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Tell the player who triggerd the command that the player could not be found&lt;br /&gt;
		outputChatBox ( &amp;quot;Unable to change player tag: Player &amp;quot; .. thePlayer .. &amp;quot; not found&amp;quot;, source )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-- Add a command handler for either the console or / chat commands&lt;br /&gt;
-- Example: /changetag &amp;lt;playername&amp;gt; &amp;lt;tag&amp;gt;&lt;br /&gt;
addCommandHandler ( &amp;quot;changetag&amp;quot;, tagPlayer )&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;
{{Player functions}}&lt;br /&gt;
[[ru:setPlayerName]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=56176</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=56176"/>
		<updated>2018-07-19T18:37:39Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Typos again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelque chose d'autre. MTA s'installe avec des ressources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en Lua, c'est de se procurer un éditeur de texte qui supporte le Lua. Il vous sera beaucoup plus facile que de le faire avec le bloc-note de Windows. Nous vous recommandons donc [https://code.visualstudio.com/ Visual Studio Code] ou [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] (malheureusement l'auteur ne travail plus dessus) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
Pour '''Visual Studio Code''', il est également recommandé d'installer [https://marketplace.visualstudio.com/items?itemName=subtixx.mtasa-lua ce plugin] qui permettra à l'éditeur de reconnaître les fonctions MTA, proposer de l'auto-complétion ainsi que la documentation associée.&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permettra aux joueurs de se déplacer dans la ville. Dans ce tutoriel, on utilisera notepad++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s’organise une ressource. Allez dans votre dossier '''MTA San Andreas''' et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verrez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippées par le serveur afin de pouvoir les exécuter (les .zip ne sont pas obligatoires, vous pouvez aussi laissez votre ressource en tant que dossier). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez (Ne pas utiliser d'espace, utilisez plutôt un _) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemin devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/server/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, écrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparaître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il verra une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoins le serveur, vous utiliserez cette variable pour voir qui à rejoins le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouvez voir 3 choses: 'onPlayerJoin', qui indique quand exécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à exécuter (ici joinHandler). Pour les autres détails, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San Andreas &amp;gt; server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserveur&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et écrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparaître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/exécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire apparaître une Sanchez, la fonction addCommandHandler va appeler notre fonction '''createVehicleForPlayer''', comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l’élément joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, il fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRÈS la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaîtra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparaître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparaître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou afficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois '''float''' devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l’élément dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionnels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nommée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Du coups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle que l'on vient de faire) ou d'autres fonctions, mais aussi les scripts exécute par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télécharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====Premier exemple - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en bannissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second exemple - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, celui-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaître, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire exploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manœuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux objets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démarrée par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoir comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
MTA utilise les événements pour signaler aux scripts que des choses s'est passé dans le jeu. Par exemple quand un joueur meurt, l’événement [[onPlayerWasted]] est déclenché. Pour exécuter n'importe quelle action quand un joueur meurt, votre script doit donner le nom de sa fonction à exécuter lorsque cet événement est déclenché par MTA grâce à la fonction [[addEventHandler]]. C'est très similaire à la fonction qui permet de déclencher une fonction via une commande.&lt;br /&gt;
&lt;br /&gt;
Cet exemple produira un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;, getRootElement(), playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de lister les arguments qui sont nécessaires, la page de documentation pour un événement indique quels paramètres sont passés à la fonction que vous attachez à cet événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les fonction d’événement. Il ne doit pas être ajoutés à la liste des paramètres de la fonction, mais elle existe quand même à l'intérieur de votre fonction. Cette variable a une valeur différente d'un événement à l'autre, pour les événements de joueurs (comme dans l'exemple au-dessus) c'est le joueur responsable de son déclenchement. Comme autre exemple, vous pouvez jeter un coup d'œil au script qui permet de faire apparaître le joueur dans la première section pour avoir une idée de comment utiliser cette variable &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familier avec les aspects les plus fondamentaux du scripting sur MTA et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, tutoriels et Références qui permettent de se plonger plus profondément dans les thèmes que vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire les tutos sur le [[debugging]]. Les bonnes pratiques pour débuguer vos scripts sont une nécessité absolue quand vous faites des scripts.&lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=56175</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=56175"/>
		<updated>2018-07-19T18:36:20Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Added Visual Studio Code as recommended IDE and removed Lua Edit. Fixed a lot of typos too.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelque chose d'autre. MTA s'installe avec des ressources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en Lua, c'est de se procurer un éditeur de texte qui supporte le Lua. Il vous sera beaucoup plus facile que de le faire avec le bloc-note de Windows. Nous vous recommandons donc [https://code.visualstudio.com/ Visual Studio Code] ou [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] (malheureusement l'auteur ne travail plus dessus) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
Pour '''Visual Studio Code''', il est également recommandé d'installer [https://marketplace.visualstudio.com/items?itemName=subtixx.mtasa-lua ce plugin] qui permettra à l'éditeur de reconnaître les fonctions MTA, proposer de l'auto-complétion ainsi que la documentation associée.&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permettra aux joueurs de se déplacer dans la ville. Dans ce tutoriel, on utilisera notepad++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s’organise une ressource. Allez dans votre dossier '''MTA San Andreas''' et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verrez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippées par le serveur afin de pouvoir les exécuter (les .zip ne sont pas obligatoires, vous pouvez aussi laissez votre ressource en tant que dossier). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez (Ne pas utiliser d'espace, utilisez plutôt un _) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemin devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/server/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, écrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparaître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il verra une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoins le serveur, vous utiliserez cette variable pour voir qui à rejoins le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouvez voir 3 choses: 'onPlayerJoin', qui indique quand exécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à exécuter (ici joinHandler). Pour les autres détails, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San Andreas &amp;gt; server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserveur&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et écrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparaître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/exécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire apparaître une Sanchez, la fonction addCommandHandler va appeler notre fonction '''createVehicleForPlayer''', comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l’élément joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, il fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRÈS la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaîtra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparaître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparaître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou afficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois '''float''' devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l’élément dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionnels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nommée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Du coups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle que l'on vient de faire) ou d'autres fonctions, mais aussi les scripts exécute par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télécharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====Premier example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en bannissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, celui-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaître, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire exploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manœuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux objets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démarrée par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoir comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
MTA utilise les événements pour signaler aux scripts que des choses s'est passé dans le jeu. Par exemple quand un joueur meurt, l’événement [[onPlayerWasted]] est déclenché. Pour exécuter n'importe quelle action quand un joueur meurt, votre script doit donner le nom de sa fonction à exécuter lorsque cet événement est déclenché par MTA grâce à la fonction [[addEventHandler]]. C'est très similaire à la fonction qui permet de déclencher une fonction via une commande.&lt;br /&gt;
&lt;br /&gt;
Cet exemple produira un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;, getRootElement(), playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de lister les arguments qui sont nécessaires, la page de documentation pour un événement indique quels paramètres sont passés à la fonction que vous attachez à cet événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les fonction d’événement. Il ne doit pas être ajoutés à la liste des paramètres de la fonction, mais elle existe quand même à l'intérieur de votre fonction. Cette variable a une valeur différente d'un événement à l'autre, pour les événements de joueurs (comme dans l'exemple au-dessus) c'est le joueur responsable de son déclenchement. Comme autre exemple, vous pouvez jeter un coup d'œil au script qui permet de faire apparaître le joueur dans la première section pour avoir une idée de comment utiliser cette variable &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familier avec les aspects les plus fondamentaux du scripting sur MTA et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, tutoriels et Références qui permettent de se plonger plus profondément dans les thèmes que vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire les tutos sur le [[debugging]]. Les bonnes pratiques pour débuguer vos scripts sont une nécessité absolue quand vous faites des scripts.&lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Database&amp;diff=51593</id>
		<title>Database</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Database&amp;diff=51593"/>
		<updated>2017-07-09T17:12:49Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA uses a database system based on files. This system is sqlite, an embedded relational database management system.&lt;br /&gt;
==Files==&lt;br /&gt;
There are two main database files for storing data:&lt;br /&gt;
*'''internal.db:''' this contains user account data (usernames, passwords and account data stored by using the [[setAccountData]] and [[getAccountData]] functions.&lt;br /&gt;
*'''registry.db:''' this is the main database file, all the executeSQL* scripting functions work with this file.&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
{{SQL_functions}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=TeaEncode&amp;diff=50556</id>
		<title>TeaEncode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=TeaEncode&amp;diff=50556"/>
		<updated>2017-03-15T15:59:17Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Fixed syntaxhighlight tags for script examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server_client function}}&lt;br /&gt;
&lt;br /&gt;
{{New feature/item|3.0135|1.3.5|6056|&lt;br /&gt;
This functions performs the [https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm Tiny Encryption Algorithm] on the given string and returns the [https://en.wikipedia.org/wiki/Base64 base64] representation of the encrypted string.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;string teaEncode ( string text , string key )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''text:''' The string you want to encrypt. (See second example if you want to encode binary data)&lt;br /&gt;
*'''key:''' The key that should be used for encryption (Only first 16 characters are used)&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the [https://en.wikipedia.org/wiki/Base64 base64] representation of the encrypted string if the encryption process was successfully completed, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Example==&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 creates a /teaencrypt command, which performs the TEA on a given string with the specified key, if any.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function encryptString( cmd, theString, theKey )&lt;br /&gt;
    if ( theString ) then&lt;br /&gt;
        if ( not theKey ) then&lt;br /&gt;
            theKey = string.rep( string.char( math.random( string.byte( &amp;quot;a&amp;quot; ), string.byte( &amp;quot;Z&amp;quot; ) ) ), 10 ) -- Generate a random key of 10 characters if no key was passed in as an argument&lt;br /&gt;
        end&lt;br /&gt;
        local encodedString = teaEncode( theString, theKey ) -- Encode the string with the key&lt;br /&gt;
        outputChatBox( &amp;quot;The encoded string is: &amp;quot; .. tostring( encodedString ) .. &amp;quot; (used key: &amp;quot; .. theKey .. &amp;quot;)&amp;quot; )&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox( &amp;quot;Syntax: /&amp;quot; .. cmd .. &amp;quot; [string] &amp;lt;[key]&amp;gt;&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler( &amp;quot;teaencrypt&amp;quot;, encryptString )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This shows how to use teaEncode/teaDecode with binary data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function teaEncodeBinary( data, key )&lt;br /&gt;
    return teaEncode( base64Encode( data ), key )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function teaDecodeBinary( data, key )&lt;br /&gt;
    return base64Decode( teaDecode( data, key ) )&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;
==See Also==&lt;br /&gt;
{{Utility functions}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User_talk:JHXP&amp;diff=50229</id>
		<title>User talk:JHXP</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User_talk:JHXP&amp;diff=50229"/>
		<updated>2017-01-01T19:35:50Z</updated>

		<summary type="html">&lt;p&gt;Citizen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanks, got a notification about the vandalism on the french sub-wiki I follow. Just came home to see you already reverted it. Thanks for the fast reaction. Best, regards, --[[User:Citizen|Citizen]] ([[User talk:Citizen|talk]]) (French Forum Moderator) 20:35, 1 January 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thanks for banning those a$$holes. --[[User:GabWas|GabWas]] ([[User talk:GabWas|talk]]) 18:58, 1 January 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=49974</id>
		<title>FR/A propos des Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=49974"/>
		<updated>2016-12-30T13:54:08Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Removed &amp;quot;Needs Checking&amp;quot; flag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le &amp;quot;Map manager&amp;quot; est une ressource inclue dans la suite serveur de MTA DM. Elle offre des commandes, fonctions et événements pour les modes de jeu afin de dynamiser vos maps. Par exemple, quand un serveur doit charger plusieurs routes pour plusieurs maps, au lieu d'avoir le tout dans un seul script principal, ces routes peuvent êtres stockée dans plusieurs ressources et chargée simplement grâce à la fonction &amp;quot;changeGamemodeMap&amp;quot; quand une map démarre.&lt;br /&gt;
&lt;br /&gt;
Plus spécifiquement, le &amp;quot;Map manager&amp;quot; liste les modes de jeux et maps chargés sur le serveur. Il inclut un listing sur l'interface web, il rafraîchit cette liste fréquemment et met en gras les ressources et/ou maps actuellement entrain d'être utilisées. &lt;br /&gt;
&lt;br /&gt;
== Un Simple Tutoriel ==&lt;br /&gt;
Dans cette section nous allons poursuivre le travail commencé dans [[FR/Introduction_Programmation|Introduction to Scripting]]. Nous allons ajouter une ressource qui enregistre l'endroit de spawn des joueurs sur la map, le chargement de ce script se fera depuis le script principal.&lt;br /&gt;
&lt;br /&gt;
Premièrement, créez un dossier dans /Your MTA Server/mods/deathmatch/resources/, nommez-le &amp;quot;mymap&amp;quot;. Ensuite dans ce dossier, créez un fichier texte et nommez-le &amp;quot;meta.xml&amp;quot;, ce fichier est présent dans chaque scripts.&lt;br /&gt;
&lt;br /&gt;
Ecrivez les lignes suivantes dans le fichier ''meta.xml'' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
   &amp;lt;info type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;myserver&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;map src=&amp;quot;mymap.map&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Prenez garde car ce fichier est &amp;quot;lié&amp;quot; avec le ''gamemodes=&amp;quot;&amp;quot;'' choisit, qui contient le nom de la ressource principale qu'utilise ce mode. le paramètre ''map'', indique le nom de la map qui sera afficher sur le serveur.&lt;br /&gt;
&lt;br /&gt;
Maintenant créez un nouveau fichier texte dans /mymap/ et nommez le &amp;quot;mymap.map&amp;quot;, écrivez y les lignes suivantes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map&amp;gt;&lt;br /&gt;
   &amp;lt;spawnpoint id=&amp;quot;spawnpoint1&amp;quot; posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;18&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Notez que &amp;quot;spawnpoint&amp;quot; est le type de l'élément utilisé dans la fonction [[getElementsByType]], &amp;quot;id&amp;quot; est utilisée dans la fonction [[getElementByID]]&lt;br /&gt;
&lt;br /&gt;
Pour charger la map, le script principal doit pouvoir accéder aux maps par lui même. Quelques modifications sont à apportées dans script.lua situé dans &amp;quot;myserver&amp;quot;. Entrez les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function loadMap(startedMap)&lt;br /&gt;
	mapRoot = getResourceRootElement(startedMap)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), loadMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par défaut, l'evênement &amp;quot;onGamemodeMapStart&amp;quot; nous donne le &amp;quot;handle&amp;quot;(?) de la map (&amp;quot;startedMap&amp;quot;), lequel nous avons utilisé pour le &amp;quot;handle&amp;quot;(?) de la ressource contenant la map (&amp;quot;mapRoot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Avec la ressource &amp;quot;handle&amp;quot;(?), nous pouvons extraire les informations relatives au spawnpoint. Jetez un œil à la fonction joinHandler() dans script.lua, à la place de x, y and z, nous pouvons utiliser les informations de la map comme suit :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local spawn = getElementsByType(&amp;quot;spawnpoint&amp;quot;, mapRoot)&lt;br /&gt;
	local x,y,z,r&lt;br /&gt;
	for key, value in pairs(spawn) do&lt;br /&gt;
		x = getElementData(value, &amp;quot;posX&amp;quot;)&lt;br /&gt;
		y = getElementData(value, &amp;quot;posY&amp;quot;)&lt;br /&gt;
		z = getElementData(value, &amp;quot;posZ&amp;quot;)&lt;br /&gt;
		r = getElementData(value, &amp;quot;rot&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Lancez maintenant votre gamemode avec la commande suivante via la console:&lt;br /&gt;
&lt;br /&gt;
'''gamemode myserver mymap'''&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Pour utiliser le map manager, vos ressources doivent d'abord être reconnues en tant que gamemodes ou maps.&lt;br /&gt;
&lt;br /&gt;
Vous devez remplir quelques informations pour votre fichier de configuration du '''gamemode resource''' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;Votre Gamemode&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Map resources''' Les maps ont aussi besoin d'information dans le meta.xml, ''type=&amp;quot;map&amp;quot;'' et un ou plusieurs ''gamemodes''. Une map peut en effet être compatible avec plusieurs mode de jeu pour se faire il faudra séparer les modes par une virgule ''sans espaces''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;A gamemode map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;ctv,koth&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne peut y avoir qu’un mode de jeu 'Gamemode' Actif ou une map chargée à la fois.&lt;br /&gt;
&lt;br /&gt;
==Paramètres Supplémentaires==&lt;br /&gt;
Ces paramètres sont aussi à ajouter dans meta.xml.&lt;br /&gt;
&lt;br /&gt;
'''name:''' Entrez ici un message sympa qui sera afficher lors du démarrage de la ressource. C'est en quelques sorte un alias au cas ou le nom de votre ressource ne vous correspond pas.&lt;br /&gt;
&lt;br /&gt;
==Commandes==&lt;br /&gt;
'''changemap newmap [gamemode]''' (changer le 'Gamemode' d'une map)&lt;br /&gt;
&lt;br /&gt;
'''changemode newgamemode [map]''' (lancer un mode de jeu 'Gamemode' et démarrez une map)&lt;br /&gt;
&lt;br /&gt;
'''gamemode newgamemode [map]''' (idem que la précédente)&lt;br /&gt;
&lt;br /&gt;
'''stopmode''' (Arrête le mode de jeu et la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''stopmap''' (Arrête la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''maps [gamemode]''' (liste toutes les maps sur le serveurs, ajoutez en option le mode pour lequel vous voulez connaître les maps)&lt;br /&gt;
&lt;br /&gt;
'''gamemodes''' (Liste tout les mode de jeu)&lt;br /&gt;
&lt;br /&gt;
==Paramètres==&lt;br /&gt;
'''*mapmanager.color''' [string couleur hex] (change la couleur de sortie des message du mapmanager) (Par défaut : #E1AA5A)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.messages''' [boolean] (si les changements de map/gm sont activés) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.ASE''' [boolean] (si le manager doit charger en mode ASE) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
==Autres fonctions==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Changement de mode de jeu, on peut aussi lui donner une map initial à charger.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change le mode de jeu d'une map pour un nouveau, on peut choisir un mode de jeu à charger une fois cette map rechargée.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodes ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Renvoie une table des tout les modes de jeu et leur pointeurs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodesCompatibleWithMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Retourne une table de tout les modes de jeu compatibles.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMaps ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Reourne une table de toutes les ressources en rapport avec la map.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Retourne une table de tout les modes de jeu compatibles. Si l'argument &amp;quot;theGamemode&amp;quot; est inexistant, ça retourne toutes les maps qui n'ont aucun mode de jeu compatible..&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Renvoie le mode de jeu actif.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Renvoie le mode de jeu de la map en cours.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemode ( resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Déterminie si une ressources est un mode de jeu ou pas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Déterminie si une map est compatible avec un mode de jeu ou pas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Détermine si ressources est une map ou pas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Déterminie si une map est compatible avec un gamemode ou pas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Arrêter le mode de jeux actif ainsi que la map chargée.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Arrêter la map active.&lt;br /&gt;
&lt;br /&gt;
==Evênement Appelés==&lt;br /&gt;
''(Pour tous ces évênements, &amp;quot;source&amp;quot; est la ressource racine des élément.)''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStart ( resource startedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Appelé lors du démarrage d'un mode de jeu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStop ( resource stoppedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Appelé quand on arrête un mode de jeu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStart ( resource startedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Appelé quand la map d'un mode de jeu démarre.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStop ( resource stoppedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Appelé quand la map de mode de jeu est stoppée.&lt;br /&gt;
&lt;br /&gt;
==Paramètres d'une Map==&lt;br /&gt;
Les paramètres suivants [[settings system|registry]] sont appliqué par le &amp;quot;Map Manager&amp;quot; quand une map est démarée :&lt;br /&gt;
&amp;lt;br&amp;gt;'''gamespeed''' [nombre]: la vitesse du jeu sur la map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''gravity''' [nombre]: la gravité de la map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''time''' [Sous la forme suivante '''hh:mm''']: l'heure du jeu avec cette map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''weather''' [nombre]: la météo de la map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''waveheight''' [nombre]: la hauteur de l'eau pour cette map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''locked_time''' [boolean]: décide si le temps est verouillé ou non.&lt;br /&gt;
&amp;lt;br&amp;gt;'''minplayers''' [nombre]: décide du nombre minimum de joueurs pour démarrer la map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''maxplayers''' [nombre]: décide du nombre maximum de joueurs que peut accepter la map.&lt;br /&gt;
&lt;br /&gt;
[[it:Map manager]]&lt;br /&gt;
[[ru:Resource:Mapmanager]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=48790</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=48790"/>
		<updated>2016-08-07T23:10:38Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Real french instead of gogol translate ;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouvez voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====Premier example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire éxploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux ojets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démaré par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoit comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
MTA utilise les événements pour signaler aux scripts que des choses s'est passé dans le jeu. Par exemple quand un joueur meurt, l'évènement [[onPlayerWasted]] est déclenché. Pour exécuter n'importe quelle action quand un joueur meurt, votre script doit donner le nom de sa fonction à exécuter lorsque cet événement est déclenché par MTA grâce à la fonction [[addEventHandler]]. C'est très similaire à la fonction qui permet de déclencher une fonction via une commande.&lt;br /&gt;
&lt;br /&gt;
Cet exemple produira un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;, getRootElement(), playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de lister les arguments qui sont nécessaires, la page de documentation pour un événement indique quels paramètres sont passés à la fonction que vous attachez à cet événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les fonction d'évènement. Il ne doit pas être ajoutés à la liste des paramètres de la fonction, mais elle existe quand même à l'intérieur de votre fonction. Cette variable a une valeur différente d'un événement à l'autre, pour les événements de joueurs (comme dans l'exemple au-dessus) c'est le joueur responsable de son déclenchement. Comme autre exemple, vous pouvez jeter un coup d'œil au script qui permet de faire apparaître le joueur dans la première section pour avoir une idée de comment utiliser cette variable &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familier avec les aspects les plus fondamentaux du scripting sur MTA et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, tutoriels et Références qui permettent de se plonger plus profondément dans les thèmes que vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire les tutos sur le [[debugging]]. Les bonnes pratiques pour débuguer vos scripts sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=48789</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=48789"/>
		<updated>2016-08-07T22:19:30Z</updated>

		<summary type="html">&lt;p&gt;Citizen: From google trad to real french&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouvez voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====Premier example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire éxploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux ojets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démaré par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoit comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
MTA utilise les événements pour signaler aux scripts que des choses s'est passé dans le jeu. Par exemple quand un joueur meurt, l'évènement [[onPlayerWasted]] est déclenché. Pour exécuter n'importe quelle action quand un joueur meurt, votre script doit donner le nom de sa fonction à exécuter lorsque cet événement est déclenché par MTA grâce à la fonction [[addEventHandler]]. C'est très similaire à la fonction qui permet de déclencher une fonction via une commande.&lt;br /&gt;
&lt;br /&gt;
Cet exemple produira un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;, getRootElement(), playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de lister les arguments qui sont nécessaires, la page de documentation pour un événement indique quels paramètres sont passés à la fonction que vous attachez à cet événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les fonction d'évènement. Il ne doit pas être ajoutés à la liste des paramètres de la fonction, mais elle existe quand même à l'intérieur de votre fonction. Cette variable a une valeur différente d'un événement à l'autre, pour les événements de joueurs (comme dans l'exemple au-dessus) c'est le joueur responsable de son déclenchement. Comme autre exemple, vous pouvez jeter un coup d'œil au script qui permet de faire apparaître le joueur dans la première section pour avoir une idée de comment utiliser cette variable &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:Page_d%27accueil&amp;diff=41669</id>
		<title>Talk:Page d'accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:Page_d%27accueil&amp;diff=41669"/>
		<updated>2014-08-28T07:48:25Z</updated>

		<summary type="html">&lt;p&gt;Citizen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Splinter.Hopkins:'''&lt;br /&gt;
'''@Citizen''' Je suis en train de créer toutes les pages du wiki fr pour qu'il ne reste plus qu'à traduire.&lt;br /&gt;
I'm creating all the pages for the french wiki, then the contributors will just click on Edit to translate that page.&lt;br /&gt;
&lt;br /&gt;
'''Citizen:'''&lt;br /&gt;
'''@Splinter.Hopkins''' Pas de soucis, je l'avais déjà fait y a un bon moment, mais des liens se sont pétés apparemment.&lt;br /&gt;
Par contre j'avais laissé les lien vers les pages anglaises pour tout ce qui était '''ID Listes''', '''Références''', '''Développer Multi Theft Auto''' et '''Wiki - Comment aider'''. Merci bien en tout cas. Faudrait également que je relance les personnes qui avaient commencés des traductions et qui ne les ont pas terminées.&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/ACL&amp;diff=40648</id>
		<title>FR/ACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/ACL&amp;diff=40648"/>
		<updated>2014-07-09T22:12:12Z</updated>

		<summary type="html">&lt;p&gt;Citizen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA inclut une Liste de Contrôle d'Accès (ACL) qui vous permet de sécuriser et limiter l'accès aux fonctionnalités et commandes du serveur.&lt;br /&gt;
&lt;br /&gt;
La clé du concept de l'ACL de MTA(et des ACLs en générale) est que l'on donne à un objet spécifique une liste de droits. Dans le cas de MTA, il y a deux types d'objets: des ressources or et des utilisateurs. Il y a de nombreux ''droits'' disponible dans MTA.&lt;br /&gt;
&lt;br /&gt;
En bref, l'ACL définit quels fonctions une ressource ou un utilisateur peut effectuer. Cela peut évidemment être très utile pour par exemple empêcher tous les joueurs de votre serveur d'être en mesure de se bannir entre eux, ou d'empêcher vos nouvelles ressources non testées de faire de même.&lt;br /&gt;
&lt;br /&gt;
Bien sûr, ''plus de pouvoir implique plus de responsabilité'' et il est très facile de faire buguer totalement une ressource - par exemple, désactiver la fonction '''[[spawnPlayer]]''' pour toutes les ressource serai une très mauvaise idée :). Evidemment vous pouvez vous retrouver dans un cas ou ce genre de manipulation est nécessaire - si vous voulez forcer toutes les ressources à utiliser une ressource spéciale pour faire spawn un joueur par exemple - mais c'est quand même un peu draconien.&lt;br /&gt;
&lt;br /&gt;
==Comprendre l'ACL==&lt;br /&gt;
Il y a deux composants dans l'ACL: les groupes et les droits. Ils sont représentés comme ceci '''&amp;lt;group name=&amp;quot; &amp;quot;&amp;gt;''' et '''&amp;lt;acl name=&amp;quot; &amp;quot; /&amp;gt;''' respectivement. Leurs rôles sont:&amp;lt;br \&amp;gt;&lt;br /&gt;
'''1.''' Donner des permissions à des joueurs pour contrôler le serveur et utiliser les commandes des ressources. Exemples:''&amp;lt;br \&amp;gt;&lt;br /&gt;
*N'autoriser que les admins à utiliser la fonction '''[[giveWeapon]]''' de la ressource freeroam.&lt;br /&gt;
*Autoriser tous les joueurs à démarrer une ressource.&lt;br /&gt;
'''2.''' Donner des permissions à des ressources pour avoir le droit d'utiliser des fonctions en interne et des fonctions d'autres ressources. Exemples:&amp;lt;br \&amp;gt;&lt;br /&gt;
*Autoriser une ressource à utiliser la fonction '''[[restartResource]]'''.&lt;br /&gt;
*Autoriser une ressource d'utiliser la fonction '''[[call]]''' pour utiliser les fonctions exportées d'autres ressources.&lt;br /&gt;
&lt;br /&gt;
===Groupes par défaut===&lt;br /&gt;
MTA possède déjà des groupes avec des permissions de plus en plus élevées:&lt;br /&gt;
*'''Everyone''' - Groupe qui concerne tout le monde&lt;br /&gt;
*'''Moderator''' - Le groupe des Modérateurs&lt;br /&gt;
*'''SuperModerator''' - Le groupe des Super Modérateurs&lt;br /&gt;
*'''Admin''' - Le groupe des Admins&lt;br /&gt;
*'''Console''' - Contrôle les droits pour les personnes qui utiliseront la console du serveur via '''&amp;lt;object name=&amp;quot;user.Console&amp;quot; /&amp;gt;'''&lt;br /&gt;
*'''RPC''' - Remote Procedure Call. Accorde seulement l'accès à la fonction '''[[callRemote]]''' et désactive les commandes des ressources par défaut.&lt;br /&gt;
&lt;br /&gt;
To explain further, I will use the Everyone group as an example. By default it looks like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;    &amp;lt;group name=&amp;quot;Everyone&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;Default&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;user.*&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.*&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br \&amp;gt;&lt;br /&gt;
You will first notice the acl name inside the group. It defines what permissions the group has. Users and resources in this group will have the permissions specified on the &amp;quot;Default&amp;quot; acl name list. ''Note: You will notice this group is special, in that it includes every user and resource by using a '''wildcard (*)''' where the user or resource name would be.''&lt;br /&gt;
&lt;br /&gt;
Now, scroll further down the ACL and you will see the '''&amp;lt;acl name=&amp;quot;Default&amp;quot; /&amp;gt;''' listing. Note I have trimmed this list dramatically due to its length.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;    &amp;lt;acl name=&amp;quot;Default&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.start&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.stop&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.stopall&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.executeCommandHandler&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.setPlayerMuted&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.restartResource&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.adminpanel&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.tab_players&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.tab_resources&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.freeze&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.shout&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.spectate&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
    &amp;lt;/acl&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br \&amp;gt;&lt;br /&gt;
*'''Function''' entries are MTA scripting functions. For example, if a resource needed to use restartResource and was only in the 'Everyone' group (with the 'Default' list), it would be denied access to restartResource and fail to work correctly.&lt;br /&gt;
*'''Commands''' are created when a resource uses [[addCommandHandler]]. An example would be typing '''/createvehicle [vehicle]''' in the chatbox for the freeroam resource. This controls whether users in the group using this ACL can use the command. ''Note: commands have no effect on resources within the group. Commands are only related to users.''&lt;br /&gt;
**''General is a custom right name group created by the admin resource but it works on the same principles. The script works with them by using [[hasObjectPermissionTo]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will notice some groups such as admin have multiple '''&amp;lt;acl name=&amp;quot;&amp;quot; /&amp;gt;''' nodes. An example is the admin group:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;group name=&amp;quot;Admin&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;Moderator&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;SuperModerator&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;Admin&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;RPC&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.admin&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.webadmin&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;user.Ransom&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This gives all the permissions defined in each '''&amp;lt;acl name=&amp;quot;&amp;quot; /&amp;gt;''' node in order of listing. So for example, the admin group makes sure all the permissions are given to admins by using all the lists. If there are any conflicts, the lowest entry wins. For example, pretend these 2 acls were in a group in the following order:&lt;br /&gt;
&lt;br /&gt;
'''1.''' '''&amp;lt;acl name=&amp;quot;Default&amp;quot;&amp;gt;''' sets &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt; &amp;lt;br\&amp;gt;&lt;br /&gt;
'''2.''' '''&amp;lt;acl name=&amp;quot;Admin&amp;quot;&amp;gt;''' sets &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt; &amp;lt;br\&amp;gt;&lt;br /&gt;
'''3.''' For all users and resources in group admin: &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resource Groups and ACLs ===&lt;br /&gt;
You will notice there are some other groups that came with MTA. These were defined by resources that came with MTA. If a resource wants to designate specific ACL rights not provided by the default MTA groups, it can create its own ACL name and a group to use it. I will show AMX's entry as an example. AMX is designed to emulate SA-MP scripts and it needs a certain set of permissions that doesn't fit the default groups well. It is shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;group name=&amp;quot;AMX&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;AMX&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.amx&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;acl name=&amp;quot;AMX&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.startResource&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.stopResource&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.adminpanel&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.kick&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.freeze&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.mute&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
    &amp;lt;/acl&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modifying the ACL==&lt;br /&gt;
There are three ways you can modify the ACL - how you do it depends who you are.&lt;br /&gt;
&lt;br /&gt;
===HTTP Interface===&lt;br /&gt;
You can use the [[Resource/webadmin|webadmin]] http interface to modify the ACL in your web browser. This is by far the easiest way to do so. Just make sure the ''webadmin'' resource is started on your server and visit ''&amp;lt;nowiki&amp;gt;http://ServerIP:HttpPort/&amp;lt;/nowiki&amp;gt;''. You can then use the two sections - ACLs and Groups. ACLs allows you to create your Access Control Lists - lists of rights. Groups allow you to group together collections of users and assign ACLs to them. For example, the ACLs section allows you to specify that the Admin ACL has access to the ''start'' console command. You can the go to the Groups section and create an Admin ''group'' that has access to your Admin ''acl''. You can then add users to your Admin ''group''.&lt;br /&gt;
&lt;br /&gt;
===XML file===&lt;br /&gt;
You can modify the ACL.xml file manually. This has a fairly straightforward syntax, but it can get a bit confusing at times. If you do it while the server is running, don't forget to call the scripting function [[aclReload]] (&amp;quot;start runcode&amp;quot;, &amp;quot;run aclReload()&amp;quot;) so the new ACL is loaded, or otherwise stop your server before modifying. This also prevents your changes from being accidentally overwritten by the server.&lt;br /&gt;
&lt;br /&gt;
===Scripting functions===&lt;br /&gt;
You can use a large number of ACL scripting functions to modify the ACL on the fly. Of course, you can (and really should!) limit access to the ACL functions with the ACL. Note that the '''admin resource''' that comes with MTA can be used to manage the ACL from the resources tab. You must be setup as admin to use the admin panel. [http://wiki.multitheftauto.com/wiki/Admin Click here for admin setup instructions].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{ACL functions}}&lt;br /&gt;
[[Category:Scripting Concepts]]&lt;br /&gt;
[[ru:Access Control List]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/ACL&amp;diff=40647</id>
		<title>FR/ACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/ACL&amp;diff=40647"/>
		<updated>2014-07-09T21:07:48Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Clean copy from english version, need to be translated.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MTA includes a complete Access Control List (ACL) that allows you to secure and limit access to the server, its functions and resources in any number of ways.&lt;br /&gt;
&lt;br /&gt;
The key concept of MTA's ACL (and ACLs in general) is that you're giving a specific object a set of rights. In MTA's case objects are one of two things - resources or users. There are numerous ''rights'' available in MTA - these mainly focus on server-side scripting functions. &lt;br /&gt;
&lt;br /&gt;
What this essentially means is that the ACL allows you to choose exactly what functions a resource or user can perform. This can obviously be invaluable - for example preventing all your server's players from being able to ban each other, or preventing your new untested resources from doing the same. &lt;br /&gt;
&lt;br /&gt;
Of course, ''with great power comes great responsibility'' and it is very easily possible to completely break resources - for example, disabling [[spawnPlayer]] for all resources would be a Bad Thing. Of course, there are situations when you might want to do this - if you want to force all your resources to use a spawn manager resource for example, but even this is somewhat draconian.&lt;br /&gt;
&lt;br /&gt;
==Understanding the ACL==&lt;br /&gt;
There are two major components to the ACL: groups and ACL lists. They appear as '''&amp;lt;group name=&amp;quot;&amp;quot;&amp;gt;''' nodes and '''&amp;lt;acl name=&amp;quot;&amp;quot; /&amp;gt;''' nodes. Their purpose is to:&amp;lt;br \&amp;gt;&lt;br /&gt;
'''1.''' Grant users permission to control the server and use resource commands. Examples:''&amp;lt;br \&amp;gt;&lt;br /&gt;
*Allowing only admins to use the giveweapon function of freeroam&lt;br /&gt;
*Allowing all users to start a resource&lt;br /&gt;
'''2.''' Grant resources permission to use script functions and functions of other resources. Examples:&amp;lt;br \&amp;gt;&lt;br /&gt;
*Allowing a resource to use the restartResource function&lt;br /&gt;
*Allowing a resource to use the call function to use exported functions from another script&lt;br /&gt;
&lt;br /&gt;
===Default Groups===&lt;br /&gt;
MTA has provided some default groups with increasing permissions. These groups are:&lt;br /&gt;
*'''Everyone'''&lt;br /&gt;
*'''Moderator'''&lt;br /&gt;
*'''SuperModerator'''&lt;br /&gt;
*'''Admin'''&lt;br /&gt;
*'''Console''' - This controls permissions of people who are using the console through '''&amp;lt;object name=&amp;quot;user.Console&amp;quot; /&amp;gt;'''&lt;br /&gt;
*'''RPC''' - Remote Procedure Call. Specifically grants access to [[callRemote]] only and disables commands of default resources. Check the function for details.&lt;br /&gt;
&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To explain further, I will use the Everyone group as an example. By default it looks like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;    &amp;lt;group name=&amp;quot;Everyone&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;Default&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;user.*&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.*&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br \&amp;gt;&lt;br /&gt;
You will first notice the acl name inside the group. It defines what permissions the group has. Users and resources in this group will have the permissions specified on the &amp;quot;Default&amp;quot; acl name list. ''Note: You will notice this group is special, in that it includes every user and resource by using a '''wildcard (*)''' where the user or resource name would be.''&lt;br /&gt;
&lt;br /&gt;
Now, scroll further down the ACL and you will see the '''&amp;lt;acl name=&amp;quot;Default&amp;quot; /&amp;gt;''' listing. Note I have trimmed this list dramatically due to its length.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;    &amp;lt;acl name=&amp;quot;Default&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.start&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.stop&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.stopall&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.executeCommandHandler&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.setPlayerMuted&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.restartResource&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.adminpanel&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.tab_players&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.tab_resources&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.freeze&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.shout&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.spectate&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
    &amp;lt;/acl&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br \&amp;gt;&lt;br /&gt;
*'''Function''' entries are MTA scripting functions. For example, if a resource needed to use restartResource and was only in the 'Everyone' group (with the 'Default' list), it would be denied access to restartResource and fail to work correctly.&lt;br /&gt;
*'''Commands''' are created when a resource uses [[addCommandHandler]]. An example would be typing '''/createvehicle [vehicle]''' in the chatbox for the freeroam resource. This controls whether users in the group using this ACL can use the command. ''Note: commands have no effect on resources within the group. Commands are only related to users.''&lt;br /&gt;
**''General is a custom right name group created by the admin resource but it works on the same principles. The script works with them by using [[hasObjectPermissionTo]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will notice some groups such as admin have multiple '''&amp;lt;acl name=&amp;quot;&amp;quot; /&amp;gt;''' nodes. An example is the admin group:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;group name=&amp;quot;Admin&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;Moderator&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;SuperModerator&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;Admin&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;RPC&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.admin&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.webadmin&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;user.Ransom&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This gives all the permissions defined in each '''&amp;lt;acl name=&amp;quot;&amp;quot; /&amp;gt;''' node in order of listing. So for example, the admin group makes sure all the permissions are given to admins by using all the lists. If there are any conflicts, the lowest entry wins. For example, pretend these 2 acls were in a group in the following order:&lt;br /&gt;
&lt;br /&gt;
'''1.''' '''&amp;lt;acl name=&amp;quot;Default&amp;quot;&amp;gt;''' sets &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt; &amp;lt;br\&amp;gt;&lt;br /&gt;
'''2.''' '''&amp;lt;acl name=&amp;quot;Admin&amp;quot;&amp;gt;''' sets &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt; &amp;lt;br\&amp;gt;&lt;br /&gt;
'''3.''' For all users and resources in group admin: &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resource Groups and ACLs ===&lt;br /&gt;
You will notice there are some other groups that came with MTA. These were defined by resources that came with MTA. If a resource wants to designate specific ACL rights not provided by the default MTA groups, it can create its own ACL name and a group to use it. I will show AMX's entry as an example. AMX is designed to emulate SA-MP scripts and it needs a certain set of permissions that doesn't fit the default groups well. It is shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;group name=&amp;quot;AMX&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;acl name=&amp;quot;AMX&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;object name=&amp;quot;resource.amx&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;acl name=&amp;quot;AMX&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.ModifyOtherObjects&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.startResource&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.stopResource&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;general.adminpanel&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.kick&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.freeze&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;command.mute&amp;quot; access=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        ...etc etc...&lt;br /&gt;
    &amp;lt;/acl&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modifying the ACL==&lt;br /&gt;
There are three ways you can modify the ACL - how you do it depends who you are.&lt;br /&gt;
&lt;br /&gt;
===HTTP Interface===&lt;br /&gt;
You can use the [[Resource/webadmin|webadmin]] http interface to modify the ACL in your web browser. This is by far the easiest way to do so. Just make sure the ''webadmin'' resource is started on your server and visit ''&amp;lt;nowiki&amp;gt;http://ServerIP:HttpPort/&amp;lt;/nowiki&amp;gt;''. You can then use the two sections - ACLs and Groups. ACLs allows you to create your Access Control Lists - lists of rights. Groups allow you to group together collections of users and assign ACLs to them. For example, the ACLs section allows you to specify that the Admin ACL has access to the ''start'' console command. You can the go to the Groups section and create an Admin ''group'' that has access to your Admin ''acl''. You can then add users to your Admin ''group''.&lt;br /&gt;
&lt;br /&gt;
===XML file===&lt;br /&gt;
You can modify the ACL.xml file manually. This has a fairly straightforward syntax, but it can get a bit confusing at times. If you do it while the server is running, don't forget to call the scripting function [[aclReload]] (&amp;quot;start runcode&amp;quot;, &amp;quot;run aclReload()&amp;quot;) so the new ACL is loaded, or otherwise stop your server before modifying. This also prevents your changes from being accidentally overwritten by the server.&lt;br /&gt;
&lt;br /&gt;
===Scripting functions===&lt;br /&gt;
You can use a large number of ACL scripting functions to modify the ACL on the fly. Of course, you can (and really should!) limit access to the ACL functions with the ACL. Note that the '''admin resource''' that comes with MTA can be used to manage the ACL from the resources tab. You must be setup as admin to use the admin panel. [http://wiki.multitheftauto.com/wiki/Admin Click here for admin setup instructions].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{ACL functions}}&lt;br /&gt;
[[Category:Scripting Concepts]]&lt;br /&gt;
[[ru:Access Control List]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=40646</id>
		<title>Page d'accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=40646"/>
		<updated>2014-07-09T21:04:52Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Typo + Links&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;Dernière version stable de '''Multi Theft Auto: San Andreas''' est '''{{Current Version|full}}'''. Rendez-vous sur la [http://mtasa.com/ page principale] pour la télécharger.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Vous pouvez aussi télécharger une [http://nightly.mtasa.com/ beta] pour avoir la dernière version ( non stable ).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Bienvenue sur le wiki de Multi Theft Auto. Sur ce wiki, vous trouverez toutes les informations sur Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Il y a [[How you can help|différents moyens de nous aider]]: créer une map, un gamemode, rediger des articles sur des fonctions, écrire un exemple, écrire un tutorial ou juste jouer à MTA et nous rapportez les bugs trouvés.&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;
====Pour commencer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Manuel_Client|Manuel Client]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:DrawKiie DrawKiie] )&lt;br /&gt;
* [[FR/Manuel_Serveur|Manuel Serveur]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Problemes_connus|Problèmes connus]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Migrer_de_MTARace_a_MTASA_1.0.x|Migrer de MTA:Race à MTA:SA 1.0.x]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/A propos des Map|A propos des Map]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&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;
====Programmer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Introduction_Programmation|Introduction: La programmation]]&lt;br /&gt;
* [[FR/Introduction_GUI|Introduction: Le GUI]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:FatalTeror FatalTerror] )&lt;br /&gt;
* [[FR/Debugage|Tutoriel: Le débugage]] - Comment trouver les erreurs dans son script&lt;br /&gt;
* [[FR/Ressources|Introduction: Les ressources]] (Traduction : [http://wiki.multitheftauto.com/wiki/User:Myk3L Myk3L])&lt;br /&gt;
** [[FR/Ressource_Acces_Web|Accès depuis le web]] - Comment créer un site à partir d'une ressource (Traduction : [http://wiki.multitheftauto.com/wiki/User:Myk3L Myk3L])&lt;br /&gt;
** [[:Category:Resource|Catalogue des ressources]] &lt;br /&gt;
** [[FR/Meta.xml|Meta.xml]] - Derrière chaque ressource se trouve une meta pour la définir&lt;br /&gt;
** [[FR/ACL|ACL]] - Access Control List, pour définir les autorisations&lt;br /&gt;
* [[FR/Ecrire_Gamemode|Créer un gamemode]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche])&lt;br /&gt;
* [[FR/Fonctions_Utiles|Fonctions utiles]]&lt;br /&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;
====Bases de données====&lt;br /&gt;
Cette section décrit toutes les capacités fournies par le LUA/MTA ou par les ressources.&lt;br /&gt;
* [[:Category:Resource|Catalogue des ressources]] - Vous devriez le lire pour réaliser un script approprié.&lt;br /&gt;
* [[FR/Les_scripts_clients| Les scripts clients]]&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;
====Aide générale du LUA====&lt;br /&gt;
Des pages conçues pour aider votre compréhension du Lua&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot;]&lt;br /&gt;
**[http://www.lua.org/manual/5.1/#index Les fonctions Lua]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory wiki Lua]&lt;br /&gt;
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Un guide général au Lua de Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Manuel]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definition Format]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]]&lt;br /&gt;
*[[Resource:Editor#FAQ|Questions Fréquentes]]&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;
====Développer Multi Theft Auto====&lt;br /&gt;
* [[FR/Compiler_MTASA|Compiler MTASA sur Windows]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_Mac_OS_X|Compiler MTASA sur Mac OS X]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_GNU_Linux|Compiler MTASA sur GNU/Linux]]&lt;br /&gt;
* [[FR/Directives_de_codage|Directives de codage]]&lt;br /&gt;
* [http://code.google.com/p/mtasa-blue Google Code SVN]&lt;br /&gt;
* [[FR/Roadmap|Roadmap]]&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;
====Références====&lt;br /&gt;
* [[FR/Fonctions_Clients|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Clients|Events Clients]]&lt;br /&gt;
* [[FR/Fonctions_Serveurs|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Serveurs|Events Clients]]&lt;br /&gt;
&amp;lt;!-- Incomplet * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[FR/MTA Classes|MTA Classes]] - Les descriptions détaillées de tous les types personnalisés MTA&lt;br /&gt;
** [[FR/Element|MTA Elements]] / [[Element tree]]&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|ID Listes]]====&lt;br /&gt;
*[[FR/Animations|Animations]]&lt;br /&gt;
*[[FR/Skins_Personnages|Skins Personnages]]&lt;br /&gt;
*[[FR/Vetements_CJ|Vêtements CJ]]&lt;br /&gt;
*[[FR/Garage|Garage IDs]]&lt;br /&gt;
*[[FR/Interieurs_IDs|Intérieurs IDs]]&lt;br /&gt;
*[[FR/Materiel_IDs|Matériel IDs]]&lt;br /&gt;
*[[FR/Projectiles|Projectiles]]&lt;br /&gt;
*[[FR/Radar Blips|Radar Blips]]&lt;br /&gt;
*[[FR/Sons|Sons]]&lt;br /&gt;
*[[FR/Vehicule_IDs|ID des véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Couleurs|Couleurs véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Upgrades|Tuning IDs]]&lt;br /&gt;
*[[FR/Armes|Armes]]&lt;br /&gt;
*[[FR/Meteos|Météos]]&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;
{{Languages list|fr}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Skins_Personnages&amp;diff=40645</id>
		<title>FR/Skins Personnages</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Skins_Personnages&amp;diff=40645"/>
		<updated>2014-07-09T20:54:49Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Translated in french&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les skins utilisable en jeu.&lt;br /&gt;
&lt;br /&gt;
*[[All Skins Page | Page de tous les skins]] - Non recommandé pour les connexions lentes&lt;br /&gt;
*[[Special Skins Page | Pages des skins spéciaux]] - Les nouveaux skins depuis MTA 1.1&lt;br /&gt;
&lt;br /&gt;
'''Les pages des skins sectionnés:'''&lt;br /&gt;
----&lt;br /&gt;
*[[Skins Page 1]]: 7, 9-29&lt;br /&gt;
*[[Skins Page 2]]: 30-41, 43-52&lt;br /&gt;
*[[Skins Page 3]]: 53-64, 66-73, 75-76&lt;br /&gt;
*[[Skins Page 4]]: 77-85, 87-99&lt;br /&gt;
*[[Skins Page 5]]: 100-118, 120-122&lt;br /&gt;
*[[Skins Page 6]]: 123-144&lt;br /&gt;
*[[Skins Page 7]]: 145-148, 150-167&lt;br /&gt;
*[[Skins Page 8]]: 168-189&lt;br /&gt;
*[[Skins Page 9]]: 190-207, 209-212&lt;br /&gt;
*[[Skins Page 10]]: 213-234&lt;br /&gt;
*[[Skins Page 11]]: 235-238, 240-257&lt;br /&gt;
*[[Skins Page 12]]: 258-264, 274-288&lt;br /&gt;
&lt;br /&gt;
==Notes:==&lt;br /&gt;
*12 pages: 266 total.&lt;br /&gt;
&lt;br /&gt;
*Les id de 1 à 8 (sauf le 7) ne fonctionnent pas.&lt;br /&gt;
&lt;br /&gt;
*Les paires d'ids suivants donnent le même skins (le 1er est utilisé dans les listes, le 2ème est désactivé).&lt;br /&gt;
**118:119 &lt;br /&gt;
**148:149&lt;br /&gt;
&lt;br /&gt;
*Les ids qui ne fonctionnent pas:&lt;br /&gt;
1-6&lt;br /&gt;
8&lt;br /&gt;
42&lt;br /&gt;
65&lt;br /&gt;
74&lt;br /&gt;
86&lt;br /&gt;
119&lt;br /&gt;
149&lt;br /&gt;
208&lt;br /&gt;
239&lt;br /&gt;
265-273&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
[[id|Liste des ids]]&lt;br /&gt;
&lt;br /&gt;
[[it:Skin Personaggi]]&lt;br /&gt;
[[ru:Character Skins]]&lt;br /&gt;
[[es:Skins de Personajes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ID Lists]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40644</id>
		<title>FR/Manuel Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40644"/>
		<updated>2014-07-09T20:39:08Z</updated>

		<summary type="html">&lt;p&gt;Citizen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Avant de commencer==&lt;br /&gt;
&lt;br /&gt;
Avant d'installer Multi Theft Auto: San Andreas, assurez-vous en premier que le jeu GTA:SA est bien installé. Dans le cas échéant, MTA:SA ne pourra démarrer. Si vous voulez garder vos mods spécifiques à la version solo du jeu (ces mods étant généralement interdits sur la plupart des serveurs MTA:SA), réinstallez GTA:SA dans un autre fichier sur votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous aussi d'être sur '''Windows XP''', '''Windows Vista''' (32 bits ou 64 bits), '''Windows 7''' (32 bits ou 64 bits) or '''Windows 8''' (32 bits ou 64 bits) et que vous  êtes capable de lancer le jeu solo. Sachez que si vous arrivez à jouer au solo sur un pc dont ses caractéristiques sont vraiment au minimum requis, vous aurez sûrement du mal à faire fonctionner MTA:SA correctement.&lt;br /&gt;
{{Note| &lt;br /&gt;
* MTA:SA ne fonctionne que sur GTA:SA '''v1.0'''. Si vous venez d'acheter le jeu, il est plus que probable que vous ayez la dernière version.''' [[Known_Issues_-_FAQ#Does_MTASA_work_with_v1.01_or_v2.00_of_GTA_San_Andreas.3F| (Plus d'info)]]&lt;br /&gt;
* Si vous avez la version Steam de GTA: San Andreas vous devez [[Known_Issues_-_FAQ#I_have_the_Steam_version_of_GTA_San_Andreas._How_can_I_play_MTASA.3F|lire ceci d'abord]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Exigences du système===&lt;br /&gt;
Les exigences du système pour faire fonctionner MTA:SA sont à peine plus élevées que celles nécessaires pour GTA:SA.&lt;br /&gt;
* Intel Pentium 4 ou AMD Athlon XP.&lt;br /&gt;
* 512MB DDR RAM.&lt;br /&gt;
* Une installation sans modifications du jeu GTA:SA v1.0 (Américain ou Européen).&lt;br /&gt;
* 3.7GB d'espace disponible sur votre disque dur (3.6GB sont minimum pour l'installation de GTA:SA).&lt;br /&gt;
* nVidia GeForce 4 series ou ATI Radeon 8xxx series (64MB RAM et DirectX 9.0 compatible).&lt;br /&gt;
* DirectX 9.0 carte son compatible.&lt;br /&gt;
* Clavier et souris.&lt;br /&gt;
* Une connexion internet haut-débit (pour faciliter les chargements).&lt;br /&gt;
&lt;br /&gt;
Pour de meilleurs graphismes, une carte graphique compatible avec Pixel Shader 2.0 (nVidia GeForce FX series ou plus, ATI Radeon 9xxx series ou plus) est recommandée.&lt;br /&gt;
&lt;br /&gt;
Pour une meilleure performance de chargement, une plus grande RAM est recommandée.&lt;br /&gt;
&lt;br /&gt;
==Installer MTA:SA==&lt;br /&gt;
# Si ce n'est pas déjà fait, téléchargez MTA:SA depuis la page du site [http://mtasa.com mtasa.com].&lt;br /&gt;
# Lancer l'installeur, pour Windows Vista et Windows 7 il faut le lancer en tant qu'administrateur. (L'installeur le demandera.)&lt;br /&gt;
# Vous devez accepter la licence de MTA:SA (GPLv3).&lt;br /&gt;
# Une page vous permettra de sélectionner les composants désirés:&lt;br /&gt;
#* '''Game Client''' s'interface avec le jeu et est nécessaire.&lt;br /&gt;
#* '''Dedicated Server''' vous permet de créer votre propre serveur.&lt;br /&gt;
#** '''Core components''' et '''Game module''' sont requis par le serveur dédié.&lt;br /&gt;
#** '''Core resources''' comprends toutes les ressources requises par le serveur dédié.&lt;br /&gt;
#** '''Optional resources''' comprends des ressources additionnels (des gamemodes et des maps).&lt;br /&gt;
#** '''Editor''' vous permet de créer des maps (optionnel).&lt;br /&gt;
#* '''Development''' comprends des outils de développement.&lt;br /&gt;
#** '''Module SDK''' le SDK permettant de créer des modules (connaissances en C++ requises).&lt;br /&gt;
#* '''Start menu group''' crée un group dans le menu démarrer pour les composants précédents.&lt;br /&gt;
#* '''Desktop icon''' crée un raccourcis sur le bureau pour lancer MTA:SA.&lt;br /&gt;
# Ensuite l'istalleur vous demandera dans quel dossier installer MTA:SA. Choisissez l'emplacement que vous voulez, il n'est pas obligatoire de l'installer dans le dossier de GTA San Andreas.&lt;br /&gt;
# Ensuite, il vous demandera dans quel dossier ce trouve le dossier de GTA San Andreas. Par défaut il se trouve dans: '''C:\Program Files\Rockstar Games\GTA San Andreas\'''.&lt;br /&gt;
# Lorsque l'installation se termine, vous aurez la possibilité de démarrer MTA:SA directement. Cliquez ensuite sur '''Finish'''.&lt;br /&gt;
# Plus tard, vous pourrez lancer ''MTA San Andreas'' depuis le menu démarrer.&lt;br /&gt;
&lt;br /&gt;
==Lancer le jeu==&lt;br /&gt;
# Démarrez Multi Theft Auto: San Andreas en (double-)cliquant sur son icône situé dans le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
# GTA:San Andreas va alors démarrer. Une fois le chargement effectué, vous allez vous retrouver face à l'interface du menu MTA:SA. Vous avez alors le choix entre plusieurs options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:MENU_QuickConnect.jpg]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quick connect''' – Ceci vous permet de vous connecter rapidement à un serveur dont vous connaissez l'IP ainsi que le Port, et, si nécessaire, le Pass (Mot de passe).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Server_Browser.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Browse servers''' – Ceci vous permet d'afficher la liste des serveurs en ligne.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Host_Game.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Host game''' – Ceci vous permet de démarrer un serveur local (LAN et/ou Internet).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Menu_Settings.JPG|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Settings '''– Ceci vous permet de changer votre pseudo, les contrôles, les options graphiques, audios, etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:About_Menu.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''About '''– Ceci vous permet de voir la liste des personnes ayant contribué au projet MTA:SA.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Map_Editor.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Map editor '''– Ceci vous permet de créer vos propres maps (cartes) complètes. Elles peuvent par la suite être chargées sur un serveur afin d'améliorer l'expérience de jeu.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quit '''– Ceci permet de quitter MTA:SA et de revenir à votre précédente application.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le moyen le plus simple et rapide de jouer à MTA:SA est d'utiliser '''Browse servers'''. Si les serveurs n’apparaissent pas au bout de quelques secondes d'attente, appuyez sur le bouton '''Refresh''' afin que MTA:SA recharge la liste des serveurs.&lt;br /&gt;
&lt;br /&gt;
* Dans la case '''Name''' apparait le nom du serveur.&lt;br /&gt;
* Dans la case '''Players''' apparait le nombre de joueurs connectés actuellement ainsi que le nombre de joueurs maximum, inscrits dans le format de '''[Slots Utilisés] / [Slots Maximum]'''.&lt;br /&gt;
* Dans la case '''Ping''' apparait votre ping (ou [http://fr.wikipedia.org/wiki/Lag_%28informatique%29 lag, latence]), entre vous et le serveur. Afin d'obtenir plus d'informations sur les lags, rendez-vous sur le lien situé auparavant.&lt;br /&gt;
* Dans la case '''Host''' apparait l'adresse IP du serveur. C'est grâce à celle-ci que vous pourrez, dans le futur, utiliser dans la case '''Quick connect''' du menu principal de MTA:SA afin de vous connecter rapidement à un serveur.&lt;br /&gt;
&lt;br /&gt;
Cache case peut être cliqué afin de les arranger dans l'ordre croissant ou décroissant.&lt;br /&gt;
&lt;br /&gt;
Pour une performance optimale, cherchez le meilleur équilibre entre joueurs et ping.&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez choisi un serveur, sélectionnez-le en cliquant dessus, puis en cliquant sur le bouton '''Connect''' dans le coin en haut à droite. Si tout se passe bien, vous allez être connecté automatiquement au serveur.&lt;br /&gt;
&lt;br /&gt;
==Comment jouer ?==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un système complet de script qui permet aux créateurs de cartes de modifier plusieurs éléments de jeu afin qu'ils puissent créer leurs propres modes de jeu. MTA:SA intègre autant d'éléments que possible qu'en solo, mais certains aspects sont différents.&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas de piétons ou de conducteurs dans les rues. Il n'y a que les joueurs actuellement connecté sur le serveur. Vous pouvez parler aux autres joueurs du serveur (par défaut si le script n'a pas modifié ceci) en appuyant sur la touche '''T''', puis en insérant votre texte. Si le serveur le propose, vous pouvez parler exclusivement à votre équipe en appuyant cette fois sur '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Le créateur de cartes de MTA:SA permet d'ajouter plusieurs objets sur une même carte, d'une route à un casino en passant par une planche à bois, etc. Et ceci peut-être combiné au script afin de faire bouger certains objets via une commande, une touche... Les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi, en appuyant sur la touche '''Tabulation''', afficher le tableau des scores. Par défaut, seuls les pseudos des joueurs ainsi que leur ping s'affichent, mais ceci peut-être modifié via le script. Par exemple, pour un mode de jeu tourné vers le deathmatch (combat à mort en Français), les scripteurs peuvent afficher une colonne référençant le nombre de meurtres et/ou morts. Encore une fois, ici, les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
==Contrôles==&lt;br /&gt;
&lt;br /&gt;
===Touches dans le jeu===&lt;br /&gt;
&lt;br /&gt;
* F8 : Affiche la console.&lt;br /&gt;
* F9 : Affiche l'aide.&lt;br /&gt;
* F11 : Affiche la carte de San Andreas, ainsi que votre position. Les touches suivantes ne fonctionnent que sur cette carte et se situent sur le pavé numérique:&lt;br /&gt;
**/ ou - : Zoom avant ou arrière.&lt;br /&gt;
**4, 8, 6, 2 : Déplace la carte respectivement vers la gauche, le haut, la droite, le bas.&lt;br /&gt;
**0 : Basculer entre attacher la vue sur le joueur (la carte suit l'icône du joueur) et mouvement libre (la carte reste stationnaire).&lt;br /&gt;
* F12 : Réaliser une capture d'écran.&lt;br /&gt;
* T : Chat général.&lt;br /&gt;
* Y : Chat de l'équipe.&lt;br /&gt;
* TAB : Liste des joueurs (si le serveur le permet).&lt;br /&gt;
&lt;br /&gt;
==Commandes de la console==&lt;br /&gt;
&lt;br /&gt;
Appuyez sur '''~ (tilde)''' ou '''F8''' pour accéder à la console, tapez ensuite la commande souhaitée avec les paramètres nécessaires (si possible) puis appuyez sur '''Entrée'''.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Affiche la liste de toutes les cartes disponibles sur le serveur. &lt;br /&gt;
&lt;br /&gt;
;'''nick [pseudo]''' :Change votre pseudo en jeu par celui que vous avez entré comme paramètre.&lt;br /&gt;
&lt;br /&gt;
;'''msg [pseudo] [message]''' ''ou'' '''pm [pseudo] [message]''' :Envoie un message privé à la personne dont le pseudo est spécifié en paramètre. Seule la personne à laquelle vous avez envoyé le message le verra. '''msg''' et '''pm''' ont la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' ''ou'' '''exit''' :Vous déconnecte du serveur tout en vous ramenant vers votre dernière application. Le bouton '''Quit''' du menu principal a la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Ceci affiche la dernière version et les informations sur le copyright du logiciel.&lt;br /&gt;
&lt;br /&gt;
;'''sver''' :Ceci affiche la version du serveur sur lequel vous êtes actuellement connecté.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Ceci affiche l'heure actuelle.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ceci vous déconnecte du serveur et vous ramène au menu principal.&lt;br /&gt;
&lt;br /&gt;
;'''say [texte]''' :Ceci vous permet de parler aux joueurs du serveur avec la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [pseudo]''' :Ceci vous permettra de ne plus voir le texte qu'écrit le joueur dont vous avez entré le pseudo en paramètre. Pour arrêter d'ignorer un joueur, retapez '''ignore [pseudo]'''.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Vous pouvez utiliser ces commandes en ajoutant un / (slash) devant le nom de ces commandes.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous pouvez retrouver cette liste en jeu en tapant '''help''' dans la console puis en appuyant sur '''Entrée'''. Le serveur sur lequel vous jouez peut aussi avoir des commandes supplémentaires qui peuvent être consultées en tapant '''commands''' dans la console.&lt;br /&gt;
&lt;br /&gt;
==Codes d'erreurs et leurs significations==&lt;br /&gt;
'''Erreurs de téléchargement'''&amp;lt;br&amp;gt;&lt;br /&gt;
0: UNKNOWN_ERROR&amp;lt;br&amp;gt;&lt;br /&gt;
1: INVALID_FILE_DESCRIPTORS&amp;lt;br&amp;gt;&lt;br /&gt;
2: INVALID_MAX_FILE_DESCRIPTOR&amp;lt;br&amp;gt;&lt;br /&gt;
3: INVALID_SELECT_RETURN&amp;lt;br&amp;gt;&lt;br /&gt;
4: INVALID_INITIAL_MULTI_PERFORM&amp;lt;br&amp;gt;&lt;br /&gt;
5: INVALID_MULTI_PERFORM_CODE&amp;lt;br&amp;gt;&lt;br /&gt;
6: INVALID_MULTI_PERFORM_CODE_NEW_DOWNLOADS&amp;lt;br&amp;gt;&lt;br /&gt;
7: UNEXPECTED_CURL_MESSAGE&amp;lt;br&amp;gt;&lt;br /&gt;
8: UNABLE_TO_CONNECT&amp;lt;br&amp;gt;&lt;br /&gt;
9: UNABLE_TO_DOWNLOAD_FILE&amp;lt;br&amp;gt;&lt;br /&gt;
10: FAILED_TO_INITIALIZE_DOWNLOAD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Erreurs fatales'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: no local player model on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
2: no local player on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
3: server downloads disabled&amp;lt;br&amp;gt;&lt;br /&gt;
4: no local player model on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
5: no local player on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
6: invalid custom data length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
7: invalid bitstream data on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
8: system entity on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
9: failed to create object on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
10: failed to create pickup on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
11: failed to create vehicle on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
12: invalid team-name length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
13: invalid lua-event name length in lua-event packet&amp;lt;br&amp;gt;&lt;br /&gt;
14: invalid resource name length in resource-start packet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Erreurs pour entrer dans un véhicule'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: script cancelled&amp;lt;br&amp;gt;&lt;br /&gt;
2: script cancelled (jack)&amp;lt;br&amp;gt;&lt;br /&gt;
3: current occupier is entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
4: invalid seat&amp;lt;br&amp;gt;&lt;br /&gt;
5: not close enough&amp;lt;br&amp;gt;&lt;br /&gt;
6: already in a vehicle&amp;lt;br&amp;gt;&lt;br /&gt;
7: already entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
8: invalid vehicle (trailer)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spécial: Jouer à MTA:SA sur Linux ?==&lt;br /&gt;
Si vous êtes l'un des joueurs qui ont Linux comme OS, et qui veulent pouvoir jouer à MTA:SA dessus, veuillez lire le  [[Manuel_du_Client_sur_Linux|Manuel du Client sur Linux]].&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40643</id>
		<title>FR/Manuel Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40643"/>
		<updated>2014-07-09T20:38:07Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Updated to match english version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Multi Theft Auto: San Andreas est le dernier mod en série de modifications multijoueurs pour les jeux Grand Theft Auto (sur PC exclusivement). Pour les versions sur GTA III et GTA:VC, s'exécutant tous deux sur l'ancien système, visitez [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Cette modification n'est en aucun cas approuvé et affilié à Rockstar Games ou Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
==Avant de commencer==&lt;br /&gt;
&lt;br /&gt;
Avant d'installer Multi Theft Auto: San Andreas, assurez-vous en premier que le jeu GTA:SA est bien installé. Dans le cas échéant, MTA:SA ne pourra démarrer. Si vous voulez garder vos mods spécifiques à la version solo du jeu (ces mods étant généralement interdits sur la plupart des serveurs MTA:SA), réinstallez GTA:SA dans un autre fichier sur votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous aussi d'être sur '''Windows XP''', '''Windows Vista''' (32 bits ou 64 bits), '''Windows 7''' (32 bits ou 64 bits) or '''Windows 8''' (32 bits ou 64 bits) et que vous  êtes capable de lancer le jeu solo. Sachez que si vous arrivez à jouer au solo sur un pc dont ses caractéristiques sont vraiment au minimum requis, vous aurez sûrement du mal à faire fonctionner MTA:SA correctement.&lt;br /&gt;
{{Note| &lt;br /&gt;
* MTA:SA ne fonctionne que sur GTA:SA '''v1.0'''. Si vous venez d'acheter le jeu, il est plus que probable que vous ayez la dernière version.''' [[Known_Issues_-_FAQ#Does_MTASA_work_with_v1.01_or_v2.00_of_GTA_San_Andreas.3F| (Plus d'info)]]&lt;br /&gt;
* Si vous avez la version Steam de GTA: San Andreas vous devez [[Known_Issues_-_FAQ#I_have_the_Steam_version_of_GTA_San_Andreas._How_can_I_play_MTASA.3F|lire ceci d'abord]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Exigences du système===&lt;br /&gt;
Les exigences du système pour faire fonctionner MTA:SA sont à peine plus élevées que celles nécessaires pour GTA:SA.&lt;br /&gt;
* Intel Pentium 4 ou AMD Athlon XP.&lt;br /&gt;
* 512MB DDR RAM.&lt;br /&gt;
* Une installation sans modifications du jeu GTA:SA v1.0 (Américain ou Européen).&lt;br /&gt;
* 3.7GB d'espace disponible sur votre disque dur (3.6GB sont minimum pour l'installation de GTA:SA).&lt;br /&gt;
* nVidia GeForce 4 series ou ATI Radeon 8xxx series (64MB RAM et DirectX 9.0 compatible).&lt;br /&gt;
* DirectX 9.0 carte son compatible.&lt;br /&gt;
* Clavier et souris.&lt;br /&gt;
* Une connexion internet haut-débit (pour faciliter les chargements).&lt;br /&gt;
&lt;br /&gt;
Pour de meilleurs graphismes, une carte graphique compatible avec Pixel Shader 2.0 (nVidia GeForce FX series ou plus, ATI Radeon 9xxx series ou plus) est recommandée.&lt;br /&gt;
&lt;br /&gt;
Pour une meilleure performance de chargement, une plus grande RAM est recommandée.&lt;br /&gt;
&lt;br /&gt;
==Installer MTA:SA==&lt;br /&gt;
# Si ce n'est pas déjà fait, téléchargez MTA:SA depuis la page du site [http://mtasa.com mtasa.com].&lt;br /&gt;
# Lancer l'installeur, pour Windows Vista et Windows 7 il faut le lancer en tant qu'administrateur. (L'installeur le demandera.)&lt;br /&gt;
# Vous devez accepter la licence de MTA:SA (GPLv3).&lt;br /&gt;
# Une page vous permettra de sélectionner les composants désirés:&lt;br /&gt;
#* '''Game Client''' s'interface avec le jeu et est nécessaire.&lt;br /&gt;
#* '''Dedicated Server''' vous permet de créer votre propre serveur.&lt;br /&gt;
#** '''Core components''' et '''Game module''' sont requis par le serveur dédié.&lt;br /&gt;
#** '''Core resources''' comprends toutes les ressources requises par le serveur dédié.&lt;br /&gt;
#** '''Optional resources''' comprends des ressources additionnels (des gamemodes et des maps).&lt;br /&gt;
#** '''Editor''' vous permet de créer des maps (optionnel).&lt;br /&gt;
#* '''Development''' comprends des outils de développement.&lt;br /&gt;
#** '''Module SDK''' le SDK permettant de créer des modules (connaissances en C++ requises).&lt;br /&gt;
#* '''Start menu group''' crée un group dans le menu démarrer pour les composants précédents.&lt;br /&gt;
#* '''Desktop icon''' crée un raccourcis sur le bureau pour lancer MTA:SA.&lt;br /&gt;
# Ensuite l'istalleur vous demandera dans quel dossier installer MTA:SA. Choisissez l'emplacement que vous voulez, il n'est pas obligatoire de l'installer dans le dossier de GTA San Andreas.&lt;br /&gt;
# Ensuite, il vous demandera dans quel dossier ce trouve le dossier de GTA San Andreas. Par défaut il se trouve dans: '''C:\Program Files\Rockstar Games\GTA San Andreas\'''.&lt;br /&gt;
# Lorsque l'installation se termine, vous aurez la possibilité de démarrer MTA:SA directement. Cliquez ensuite sur '''Finish'''.&lt;br /&gt;
# Plus tard, vous pourrez lancer ''MTA San Andreas'' depuis le menu démarrer.&lt;br /&gt;
&lt;br /&gt;
==Lancer le jeu==&lt;br /&gt;
# Démarrez Multi Theft Auto: San Andreas en (double-)cliquant sur son icône situé dans le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
# GTA:San Andreas va alors démarrer. Une fois le chargement effectué, vous allez vous retrouver face à l'interface du menu MTA:SA. Vous avez alors le choix entre plusieurs options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:MENU_QuickConnect.jpg]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quick connect''' – Ceci vous permet de vous connecter rapidement à un serveur dont vous connaissez l'IP ainsi que le Port, et, si nécessaire, le Pass (Mot de passe).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Server_Browser.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Browse servers''' – Ceci vous permet d'afficher la liste des serveurs en ligne.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Host_Game.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Host game''' – Ceci vous permet de démarrer un serveur local (LAN et/ou Internet).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Menu_Settings.JPG|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Settings '''– Ceci vous permet de changer votre pseudo, les contrôles, les options graphiques, audios, etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:About_Menu.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''About '''– Ceci vous permet de voir la liste des personnes ayant contribué au projet MTA:SA.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Map_Editor.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Map editor '''– Ceci vous permet de créer vos propres maps (cartes) complètes. Elles peuvent par la suite être chargées sur un serveur afin d'améliorer l'expérience de jeu.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quit '''– Ceci permet de quitter MTA:SA et de revenir à votre précédente application.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le moyen le plus simple et rapide de jouer à MTA:SA est d'utiliser '''Browse servers'''. Si les serveurs n’apparaissent pas au bout de quelques secondes d'attente, appuyez sur le bouton '''Refresh''' afin que MTA:SA recharge la liste des serveurs.&lt;br /&gt;
&lt;br /&gt;
* Dans la case '''Name''' apparait le nom du serveur.&lt;br /&gt;
* Dans la case '''Players''' apparait le nombre de joueurs connectés actuellement ainsi que le nombre de joueurs maximum, inscrits dans le format de '''[Slots Utilisés] / [Slots Maximum]'''.&lt;br /&gt;
* Dans la case '''Ping''' apparait votre ping (ou [http://fr.wikipedia.org/wiki/Lag_%28informatique%29 lag, latence]), entre vous et le serveur. Afin d'obtenir plus d'informations sur les lags, rendez-vous sur le lien situé auparavant.&lt;br /&gt;
* Dans la case '''Host''' apparait l'adresse IP du serveur. C'est grâce à celle-ci que vous pourrez, dans le futur, utiliser dans la case '''Quick connect''' du menu principal de MTA:SA afin de vous connecter rapidement à un serveur.&lt;br /&gt;
&lt;br /&gt;
Cache case peut être cliqué afin de les arranger dans l'ordre croissant ou décroissant.&lt;br /&gt;
&lt;br /&gt;
Pour une performance optimale, cherchez le meilleur équilibre entre joueurs et ping.&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez choisi un serveur, sélectionnez-le en cliquant dessus, puis en cliquant sur le bouton '''Connect''' dans le coin en haut à droite. Si tout se passe bien, vous allez être connecté automatiquement au serveur.&lt;br /&gt;
&lt;br /&gt;
==Comment jouer ?==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un système complet de script qui permet aux créateurs de cartes de modifier plusieurs éléments de jeu afin qu'ils puissent créer leurs propres modes de jeu. MTA:SA intègre autant d'éléments que possible qu'en solo, mais certains aspects sont différents.&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas de piétons ou de conducteurs dans les rues. Il n'y a que les joueurs actuellement connecté sur le serveur. Vous pouvez parler aux autres joueurs du serveur (par défaut si le script n'a pas modifié ceci) en appuyant sur la touche '''T''', puis en insérant votre texte. Si le serveur le propose, vous pouvez parler exclusivement à votre équipe en appuyant cette fois sur '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Le créateur de cartes de MTA:SA permet d'ajouter plusieurs objets sur une même carte, d'une route à un casino en passant par une planche à bois, etc. Et ceci peut-être combiné au script afin de faire bouger certains objets via une commande, une touche... Les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi, en appuyant sur la touche '''Tabulation''', afficher le tableau des scores. Par défaut, seuls les pseudos des joueurs ainsi que leur ping s'affichent, mais ceci peut-être modifié via le script. Par exemple, pour un mode de jeu tourné vers le deathmatch (combat à mort en Français), les scripteurs peuvent afficher une colonne référençant le nombre de meurtres et/ou morts. Encore une fois, ici, les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
==Contrôles==&lt;br /&gt;
&lt;br /&gt;
===Touches dans le jeu===&lt;br /&gt;
&lt;br /&gt;
* F8 : Affiche la console.&lt;br /&gt;
* F9 : Affiche l'aide.&lt;br /&gt;
* F11 : Affiche la carte de San Andreas, ainsi que votre position. Les touches suivantes ne fonctionnent que sur cette carte et se situent sur le pavé numérique:&lt;br /&gt;
**/ ou - : Zoom avant ou arrière.&lt;br /&gt;
**4, 8, 6, 2 : Déplace la carte respectivement vers la gauche, le haut, la droite, le bas.&lt;br /&gt;
**0 : Basculer entre attacher la vue sur le joueur (la carte suit l'icône du joueur) et mouvement libre (la carte reste stationnaire).&lt;br /&gt;
* F12 : Réaliser une capture d'écran.&lt;br /&gt;
* T : Chat général.&lt;br /&gt;
* Y : Chat de l'équipe.&lt;br /&gt;
* TAB : Liste des joueurs (si le serveur le permet).&lt;br /&gt;
&lt;br /&gt;
==Commandes de la console==&lt;br /&gt;
&lt;br /&gt;
Appuyez sur '''~ (tilde)''' ou '''F8''' pour accéder à la console, tapez ensuite la commande souhaitée avec les paramètres nécessaires (si possible) puis appuyez sur '''Entrée'''.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Affiche la liste de toutes les cartes disponibles sur le serveur. &lt;br /&gt;
&lt;br /&gt;
;'''nick [pseudo]''' :Change votre pseudo en jeu par celui que vous avez entré comme paramètre.&lt;br /&gt;
&lt;br /&gt;
;'''msg [pseudo] [message]''' ''ou'' '''pm [pseudo] [message]''' :Envoie un message privé à la personne dont le pseudo est spécifié en paramètre. Seule la personne à laquelle vous avez envoyé le message le verra. '''msg''' et '''pm''' ont la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' ''ou'' '''exit''' :Vous déconnecte du serveur tout en vous ramenant vers votre dernière application. Le bouton '''Quit''' du menu principal a la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Ceci affiche la dernière version et les informations sur le copyright du logiciel.&lt;br /&gt;
&lt;br /&gt;
;'''sver''' :Ceci affiche la version du serveur sur lequel vous êtes actuellement connecté.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Ceci affiche l'heure actuelle.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ceci vous déconnecte du serveur et vous ramène au menu principal.&lt;br /&gt;
&lt;br /&gt;
;'''say [texte]''' :Ceci vous permet de parler aux joueurs du serveur avec la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [pseudo]''' :Ceci vous permettra de ne plus voir le texte qu'écrit le joueur dont vous avez entré le pseudo en paramètre. Pour arrêter d'ignorer un joueur, retapez '''ignore [pseudo]'''.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Vous pouvez utiliser ces commandes en ajoutant un / (slash) devant le nom de ces commandes.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous pouvez retrouver cette liste en jeu en tapant '''help''' dans la console puis en appuyant sur '''Entrée'''. Le serveur sur lequel vous jouez peut aussi avoir des commandes supplémentaires qui peuvent être consultées en tapant '''commands''' dans la console.&lt;br /&gt;
&lt;br /&gt;
==Codes d'erreurs et leurs significations==&lt;br /&gt;
'''Erreurs de téléchargement'''&amp;lt;br&amp;gt;&lt;br /&gt;
0: UNKNOWN_ERROR&amp;lt;br&amp;gt;&lt;br /&gt;
1: INVALID_FILE_DESCRIPTORS&amp;lt;br&amp;gt;&lt;br /&gt;
2: INVALID_MAX_FILE_DESCRIPTOR&amp;lt;br&amp;gt;&lt;br /&gt;
3: INVALID_SELECT_RETURN&amp;lt;br&amp;gt;&lt;br /&gt;
4: INVALID_INITIAL_MULTI_PERFORM&amp;lt;br&amp;gt;&lt;br /&gt;
5: INVALID_MULTI_PERFORM_CODE&amp;lt;br&amp;gt;&lt;br /&gt;
6: INVALID_MULTI_PERFORM_CODE_NEW_DOWNLOADS&amp;lt;br&amp;gt;&lt;br /&gt;
7: UNEXPECTED_CURL_MESSAGE&amp;lt;br&amp;gt;&lt;br /&gt;
8: UNABLE_TO_CONNECT&amp;lt;br&amp;gt;&lt;br /&gt;
9: UNABLE_TO_DOWNLOAD_FILE&amp;lt;br&amp;gt;&lt;br /&gt;
10: FAILED_TO_INITIALIZE_DOWNLOAD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Erreurs fatales'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: no local player model on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
2: no local player on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
3: server downloads disabled&amp;lt;br&amp;gt;&lt;br /&gt;
4: no local player model on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
5: no local player on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
6: invalid custom data length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
7: invalid bitstream data on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
8: system entity on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
9: failed to create object on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
10: failed to create pickup on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
11: failed to create vehicle on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
12: invalid team-name length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
13: invalid lua-event name length in lua-event packet&amp;lt;br&amp;gt;&lt;br /&gt;
14: invalid resource name length in resource-start packet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Erreurs pour entrer dans un véhicule'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: script cancelled&amp;lt;br&amp;gt;&lt;br /&gt;
2: script cancelled (jack)&amp;lt;br&amp;gt;&lt;br /&gt;
3: current occupier is entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
4: invalid seat&amp;lt;br&amp;gt;&lt;br /&gt;
5: not close enough&amp;lt;br&amp;gt;&lt;br /&gt;
6: already in a vehicle&amp;lt;br&amp;gt;&lt;br /&gt;
7: already entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
8: invalid vehicle (trailer)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spécial: Jouer à MTA:SA sur Linux ?==&lt;br /&gt;
Si vous êtes l'un des joueurs qui ont Linux comme OS, et qui veulent pouvoir jouer à MTA:SA dessus, veuillez lire le  [[Manuel_du_Client_sur_Linux|Manuel du Client sur Linux]].&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40642</id>
		<title>FR/Manuel Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40642"/>
		<updated>2014-07-09T20:36:45Z</updated>

		<summary type="html">&lt;p&gt;Citizen: /* Commandes de la console */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Multi Theft Auto: San Andreas est le dernier mod en série de modifications multijoueurs pour les jeux Grand Theft Auto (sur PC exclusivement). Pour les versions sur GTA III et GTA:VC, s'exécutant tous deux sur l'ancien système, visitez [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Cette modification n'est en aucun cas approuvé et affilié à Rockstar Games ou Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
==Avant de commencer==&lt;br /&gt;
&lt;br /&gt;
Avant d'installer Multi Theft Auto: San Andreas, assurez-vous en premier que le jeu GTA:SA est bien installé. Dans le cas échéant, MTA:SA ne pourra démarrer. Si vous voulez garder vos mods spécifiques à la version solo du jeu (ces mods étant généralement interdits sur la plupart des serveurs MTA:SA), réinstallez GTA:SA dans un autre fichier sur votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous aussi d'être sur '''Windows XP''', '''Windows Vista''' (32 bits ou 64 bits), '''Windows 7''' (32 bits ou 64 bits) or '''Windows 8''' (32 bits ou 64 bits) et que vous  êtes capable de lancer le jeu solo. Sachez que si vous arrivez à jouer au solo sur un pc dont ses caractéristiques sont vraiment au minimum requis, vous aurez sûrement du mal à faire fonctionner MTA:SA correctement.&lt;br /&gt;
{{Note| &lt;br /&gt;
* MTA:SA ne fonctionne que sur GTA:SA '''v1.0'''. Si vous venez d'acheter le jeu, il est plus que probable que vous ayez la dernière version.''' [[Known_Issues_-_FAQ#Does_MTASA_work_with_v1.01_or_v2.00_of_GTA_San_Andreas.3F| (Plus d'info)]]&lt;br /&gt;
* Si vous avez la version Steam de GTA: San Andreas vous devez [[Known_Issues_-_FAQ#I_have_the_Steam_version_of_GTA_San_Andreas._How_can_I_play_MTASA.3F|lire ceci d'abord]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Exigences du système===&lt;br /&gt;
Les exigences du système pour faire fonctionner MTA:SA sont à peine plus élevées que celles nécessaires pour GTA:SA.&lt;br /&gt;
* Intel Pentium 4 ou AMD Athlon XP.&lt;br /&gt;
* 512MB DDR RAM.&lt;br /&gt;
* Une installation sans modifications du jeu GTA:SA v1.0 (Américain ou Européen).&lt;br /&gt;
* 3.7GB d'espace disponible sur votre disque dur (3.6GB sont minimum pour l'installation de GTA:SA).&lt;br /&gt;
* nVidia GeForce 4 series ou ATI Radeon 8xxx series (64MB RAM et DirectX 9.0 compatible).&lt;br /&gt;
* DirectX 9.0 carte son compatible.&lt;br /&gt;
* Clavier et souris.&lt;br /&gt;
* Une connexion internet haut-débit (pour faciliter les chargements).&lt;br /&gt;
&lt;br /&gt;
Pour de meilleurs graphismes, une carte graphique compatible avec Pixel Shader 2.0 (nVidia GeForce FX series ou plus, ATI Radeon 9xxx series ou plus) est recommandée.&lt;br /&gt;
&lt;br /&gt;
Pour une meilleure performance de chargement, une plus grande RAM est recommandée.&lt;br /&gt;
&lt;br /&gt;
==Installer MTA:SA==&lt;br /&gt;
# Si ce n'est pas déjà fait, téléchargez MTA:SA depuis la page du site [http://mtasa.com mtasa.com].&lt;br /&gt;
# Lancer l'installeur, pour Windows Vista et Windows 7 il faut le lancer en tant qu'administrateur. (L'installeur le demandera.)&lt;br /&gt;
# Vous devez accepter la licence de MTA:SA (GPLv3).&lt;br /&gt;
# Une page vous permettra de sélectionner les composants désirés:&lt;br /&gt;
#* '''Game Client''' s'interface avec le jeu et est nécessaire.&lt;br /&gt;
#* '''Dedicated Server''' vous permet de créer votre propre serveur.&lt;br /&gt;
#** '''Core components''' et '''Game module''' sont requis par le serveur dédié.&lt;br /&gt;
#** '''Core resources''' comprends toutes les ressources requises par le serveur dédié.&lt;br /&gt;
#** '''Optional resources''' comprends des ressources additionnels (des gamemodes et des maps).&lt;br /&gt;
#** '''Editor''' vous permet de créer des maps (optionnel).&lt;br /&gt;
#* '''Development''' comprends des outils de développement.&lt;br /&gt;
#** '''Module SDK''' le SDK permettant de créer des modules (connaissances en C++ requises).&lt;br /&gt;
#* '''Start menu group''' crée un group dans le menu démarrer pour les composants précédents.&lt;br /&gt;
#* '''Desktop icon''' crée un raccourcis sur le bureau pour lancer MTA:SA.&lt;br /&gt;
# Ensuite l'istalleur vous demandera dans quel dossier installer MTA:SA. Choisissez l'emplacement que vous voulez, il n'est pas obligatoire de l'installer dans le dossier de GTA San Andreas.&lt;br /&gt;
# Ensuite, il vous demandera dans quel dossier ce trouve le dossier de GTA San Andreas. Par défaut il se trouve dans: '''C:\Program Files\Rockstar Games\GTA San Andreas\'''.&lt;br /&gt;
# Lorsque l'installation se termine, vous aurez la possibilité de démarrer MTA:SA directement. Cliquez ensuite sur '''Finish'''.&lt;br /&gt;
# Plus tard, vous pourrez lancer ''MTA San Andreas'' depuis le menu démarrer.&lt;br /&gt;
&lt;br /&gt;
==Lancer le jeu==&lt;br /&gt;
# Démarrez Multi Theft Auto: San Andreas en (double-)cliquant sur son icône situé dans le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
# GTA:San Andreas va alors démarrer. Une fois le chargement effectué, vous allez vous retrouver face à l'interface du menu MTA:SA. Vous avez alors le choix entre plusieurs options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:MENU_QuickConnect.jpg]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quick connect''' – Ceci vous permet de vous connecter rapidement à un serveur dont vous connaissez l'IP ainsi que le Port, et, si nécessaire, le Pass (Mot de passe).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Server_Browser.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Browse servers''' – Ceci vous permet d'afficher la liste des serveurs en ligne.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Host_Game.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Host game''' – Ceci vous permet de démarrer un serveur local (LAN et/ou Internet).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Menu_Settings.JPG|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Settings '''– Ceci vous permet de changer votre pseudo, les contrôles, les options graphiques, audios, etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:About_Menu.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''About '''– Ceci vous permet de voir la liste des personnes ayant contribué au projet MTA:SA.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Map_Editor.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Map editor '''– Ceci vous permet de créer vos propres maps (cartes) complètes. Elles peuvent par la suite être chargées sur un serveur afin d'améliorer l'expérience de jeu.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quit '''– Ceci permet de quitter MTA:SA et de revenir à votre précédente application.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le moyen le plus simple et rapide de jouer à MTA:SA est d'utiliser '''Browse servers'''. Si les serveurs n’apparaissent pas au bout de quelques secondes d'attente, appuyez sur le bouton '''Refresh''' afin que MTA:SA recharge la liste des serveurs.&lt;br /&gt;
&lt;br /&gt;
* Dans la case '''Name''' apparait le nom du serveur.&lt;br /&gt;
* Dans la case '''Players''' apparait le nombre de joueurs connectés actuellement ainsi que le nombre de joueurs maximum, inscrits dans le format de '''[Slots Utilisés] / [Slots Maximum]'''.&lt;br /&gt;
* Dans la case '''Ping''' apparait votre ping (ou [http://fr.wikipedia.org/wiki/Lag_%28informatique%29 lag, latence]), entre vous et le serveur. Afin d'obtenir plus d'informations sur les lags, rendez-vous sur le lien situé auparavant.&lt;br /&gt;
* Dans la case '''Host''' apparait l'adresse IP du serveur. C'est grâce à celle-ci que vous pourrez, dans le futur, utiliser dans la case '''Quick connect''' du menu principal de MTA:SA afin de vous connecter rapidement à un serveur.&lt;br /&gt;
&lt;br /&gt;
Cache case peut être cliqué afin de les arranger dans l'ordre croissant ou décroissant.&lt;br /&gt;
&lt;br /&gt;
Pour une performance optimale, cherchez le meilleur équilibre entre joueurs et ping.&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez choisi un serveur, sélectionnez-le en cliquant dessus, puis en cliquant sur le bouton '''Connect''' dans le coin en haut à droite. Si tout se passe bien, vous allez être connecté automatiquement au serveur.&lt;br /&gt;
&lt;br /&gt;
==Comment jouer ?==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un système complet de script qui permet aux créateurs de cartes de modifier plusieurs éléments de jeu afin qu'ils puissent créer leurs propres modes de jeu. MTA:SA intègre autant d'éléments que possible qu'en solo, mais certains aspects sont différents.&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas de piétons ou de conducteurs dans les rues. Il n'y a que les joueurs actuellement connecté sur le serveur. Vous pouvez parler aux autres joueurs du serveur (par défaut si le script n'a pas modifié ceci) en appuyant sur la touche '''T''', puis en insérant votre texte. Si le serveur le propose, vous pouvez parler exclusivement à votre équipe en appuyant cette fois sur '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Le créateur de cartes de MTA:SA permet d'ajouter plusieurs objets sur une même carte, d'une route à un casino en passant par une planche à bois, etc. Et ceci peut-être combiné au script afin de faire bouger certains objets via une commande, une touche... Les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi, en appuyant sur la touche '''Tabulation''', afficher le tableau des scores. Par défaut, seuls les pseudos des joueurs ainsi que leur ping s'affichent, mais ceci peut-être modifié via le script. Par exemple, pour un mode de jeu tourné vers le deathmatch (combat à mort en Français), les scripteurs peuvent afficher une colonne référençant le nombre de meurtres et/ou morts. Encore une fois, ici, les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
==Contrôles==&lt;br /&gt;
&lt;br /&gt;
===Touches dans le jeu===&lt;br /&gt;
&lt;br /&gt;
* F8 : Affiche la console.&lt;br /&gt;
* F9 : Affiche l'aide.&lt;br /&gt;
* F11 : Affiche la carte de San Andreas, ainsi que votre position. Les touches suivantes ne fonctionnent que sur cette carte et se situent sur le pavé numérique:&lt;br /&gt;
**/ ou - : Zoom avant ou arrière.&lt;br /&gt;
**4, 8, 6, 2 : Déplace la carte respectivement vers la gauche, le haut, la droite, le bas.&lt;br /&gt;
**0 : Basculer entre attacher la vue sur le joueur (la carte suit l'icône du joueur) et mouvement libre (la carte reste stationnaire).&lt;br /&gt;
* F12 : Réaliser une capture d'écran.&lt;br /&gt;
* T : Chat général.&lt;br /&gt;
* Y : Chat de l'équipe.&lt;br /&gt;
* TAB : Liste des joueurs (si le serveur le permet).&lt;br /&gt;
&lt;br /&gt;
==Commandes de la console==&lt;br /&gt;
&lt;br /&gt;
Appuyez sur '''~ (tilde)''' ou '''F8''' pour accéder à la console, tapez ensuite la commande souhaitée avec les paramètres nécessaires (si possible) puis appuyez sur '''Entrée'''.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Affiche la liste de toutes les cartes disponibles sur le serveur. &lt;br /&gt;
&lt;br /&gt;
;'''nick [pseudo]''' :Change votre pseudo en jeu par celui que vous avez entré comme paramètre.&lt;br /&gt;
&lt;br /&gt;
;'''msg [pseudo] [message]''' ''ou'' '''pm [pseudo] [message]''' :Envoie un message privé à la personne dont le pseudo est spécifié en paramètre. Seule la personne à laquelle vous avez envoyé le message le verra. '''msg''' et '''pm''' ont la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' ''ou'' '''exit''' :Vous déconnecte du serveur tout en vous ramenant vers votre dernière application. Le bouton '''Quit''' du menu principal a la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Ceci affiche la dernière version et les informations sur le copyright du logiciel.&lt;br /&gt;
&lt;br /&gt;
;'''sver''' :Ceci affiche la version du serveur sur lequel vous êtes actuellement connecté.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Ceci affiche l'heure actuelle.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ceci vous déconnecte du serveur et vous ramène au menu principal.&lt;br /&gt;
&lt;br /&gt;
;'''say [texte]''' :Ceci vous permet de parler aux joueurs du serveur avec la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [pseudo]''' :Ceci vous permettra de ne plus voir le texte qu'écrit le joueur dont vous avez entré le pseudo en paramètre. Pour arrêter d'ignorer un joueur, retapez '''ignore [pseudo]'''.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Vous pouvez utiliser ces commandes en ajoutant un / (slash) devant le nom de ces commandes.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Astuce:''' Vous pouvez utiliser ces commandes dans la chatbox du serveur en insérant un '''&amp;quot;/&amp;quot;''' (slash) en face d'elles.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez retrouver cette liste en jeu en tapant '''help''' dans la console puis en appuyant sur '''Entrée'''. Le serveur sur lequel vous jouez peut aussi avoir des commandes supplémentaires qui peuvent être consultées en tapant '''commands''' dans la console.&lt;br /&gt;
&lt;br /&gt;
==Codes d'erreurs et leurs significations==&lt;br /&gt;
'''Erreurs de téléchargement'''&amp;lt;br&amp;gt;&lt;br /&gt;
0: UNKNOWN_ERROR&amp;lt;br&amp;gt;&lt;br /&gt;
1: INVALID_FILE_DESCRIPTORS&amp;lt;br&amp;gt;&lt;br /&gt;
2: INVALID_MAX_FILE_DESCRIPTOR&amp;lt;br&amp;gt;&lt;br /&gt;
3: INVALID_SELECT_RETURN&amp;lt;br&amp;gt;&lt;br /&gt;
4: INVALID_INITIAL_MULTI_PERFORM&amp;lt;br&amp;gt;&lt;br /&gt;
5: INVALID_MULTI_PERFORM_CODE&amp;lt;br&amp;gt;&lt;br /&gt;
6: INVALID_MULTI_PERFORM_CODE_NEW_DOWNLOADS&amp;lt;br&amp;gt;&lt;br /&gt;
7: UNEXPECTED_CURL_MESSAGE&amp;lt;br&amp;gt;&lt;br /&gt;
8: UNABLE_TO_CONNECT&amp;lt;br&amp;gt;&lt;br /&gt;
9: UNABLE_TO_DOWNLOAD_FILE&amp;lt;br&amp;gt;&lt;br /&gt;
10: FAILED_TO_INITIALIZE_DOWNLOAD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Erreurs fatales'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: no local player model on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
2: no local player on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
3: server downloads disabled&amp;lt;br&amp;gt;&lt;br /&gt;
4: no local player model on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
5: no local player on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
6: invalid custom data length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
7: invalid bitstream data on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
8: system entity on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
9: failed to create object on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
10: failed to create pickup on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
11: failed to create vehicle on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
12: invalid team-name length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
13: invalid lua-event name length in lua-event packet&amp;lt;br&amp;gt;&lt;br /&gt;
14: invalid resource name length in resource-start packet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Erreurs pour entrer dans un véhicule'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: script cancelled&amp;lt;br&amp;gt;&lt;br /&gt;
2: script cancelled (jack)&amp;lt;br&amp;gt;&lt;br /&gt;
3: current occupier is entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
4: invalid seat&amp;lt;br&amp;gt;&lt;br /&gt;
5: not close enough&amp;lt;br&amp;gt;&lt;br /&gt;
6: already in a vehicle&amp;lt;br&amp;gt;&lt;br /&gt;
7: already entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
8: invalid vehicle (trailer)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spécial: Jouer à MTA:SA sur Linux ?==&lt;br /&gt;
Si vous êtes l'un des joueurs qui ont Linux comme OS, et qui veulent pouvoir jouer à MTA:SA dessus, veuillez lire le  [[Manuel_du_Client_sur_Linux|Manuel du Client sur Linux]].&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40641</id>
		<title>FR/Manuel Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40641"/>
		<updated>2014-07-09T20:35:16Z</updated>

		<summary type="html">&lt;p&gt;Citizen: /* Commandes de la console */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Multi Theft Auto: San Andreas est le dernier mod en série de modifications multijoueurs pour les jeux Grand Theft Auto (sur PC exclusivement). Pour les versions sur GTA III et GTA:VC, s'exécutant tous deux sur l'ancien système, visitez [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Cette modification n'est en aucun cas approuvé et affilié à Rockstar Games ou Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
==Avant de commencer==&lt;br /&gt;
&lt;br /&gt;
Avant d'installer Multi Theft Auto: San Andreas, assurez-vous en premier que le jeu GTA:SA est bien installé. Dans le cas échéant, MTA:SA ne pourra démarrer. Si vous voulez garder vos mods spécifiques à la version solo du jeu (ces mods étant généralement interdits sur la plupart des serveurs MTA:SA), réinstallez GTA:SA dans un autre fichier sur votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous aussi d'être sur '''Windows XP''', '''Windows Vista''' (32 bits ou 64 bits), '''Windows 7''' (32 bits ou 64 bits) or '''Windows 8''' (32 bits ou 64 bits) et que vous  êtes capable de lancer le jeu solo. Sachez que si vous arrivez à jouer au solo sur un pc dont ses caractéristiques sont vraiment au minimum requis, vous aurez sûrement du mal à faire fonctionner MTA:SA correctement.&lt;br /&gt;
{{Note| &lt;br /&gt;
* MTA:SA ne fonctionne que sur GTA:SA '''v1.0'''. Si vous venez d'acheter le jeu, il est plus que probable que vous ayez la dernière version.''' [[Known_Issues_-_FAQ#Does_MTASA_work_with_v1.01_or_v2.00_of_GTA_San_Andreas.3F| (Plus d'info)]]&lt;br /&gt;
* Si vous avez la version Steam de GTA: San Andreas vous devez [[Known_Issues_-_FAQ#I_have_the_Steam_version_of_GTA_San_Andreas._How_can_I_play_MTASA.3F|lire ceci d'abord]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Exigences du système===&lt;br /&gt;
Les exigences du système pour faire fonctionner MTA:SA sont à peine plus élevées que celles nécessaires pour GTA:SA.&lt;br /&gt;
* Intel Pentium 4 ou AMD Athlon XP.&lt;br /&gt;
* 512MB DDR RAM.&lt;br /&gt;
* Une installation sans modifications du jeu GTA:SA v1.0 (Américain ou Européen).&lt;br /&gt;
* 3.7GB d'espace disponible sur votre disque dur (3.6GB sont minimum pour l'installation de GTA:SA).&lt;br /&gt;
* nVidia GeForce 4 series ou ATI Radeon 8xxx series (64MB RAM et DirectX 9.0 compatible).&lt;br /&gt;
* DirectX 9.0 carte son compatible.&lt;br /&gt;
* Clavier et souris.&lt;br /&gt;
* Une connexion internet haut-débit (pour faciliter les chargements).&lt;br /&gt;
&lt;br /&gt;
Pour de meilleurs graphismes, une carte graphique compatible avec Pixel Shader 2.0 (nVidia GeForce FX series ou plus, ATI Radeon 9xxx series ou plus) est recommandée.&lt;br /&gt;
&lt;br /&gt;
Pour une meilleure performance de chargement, une plus grande RAM est recommandée.&lt;br /&gt;
&lt;br /&gt;
==Installer MTA:SA==&lt;br /&gt;
# Si ce n'est pas déjà fait, téléchargez MTA:SA depuis la page du site [http://mtasa.com mtasa.com].&lt;br /&gt;
# Lancer l'installeur, pour Windows Vista et Windows 7 il faut le lancer en tant qu'administrateur. (L'installeur le demandera.)&lt;br /&gt;
# Vous devez accepter la licence de MTA:SA (GPLv3).&lt;br /&gt;
# Une page vous permettra de sélectionner les composants désirés:&lt;br /&gt;
#* '''Game Client''' s'interface avec le jeu et est nécessaire.&lt;br /&gt;
#* '''Dedicated Server''' vous permet de créer votre propre serveur.&lt;br /&gt;
#** '''Core components''' et '''Game module''' sont requis par le serveur dédié.&lt;br /&gt;
#** '''Core resources''' comprends toutes les ressources requises par le serveur dédié.&lt;br /&gt;
#** '''Optional resources''' comprends des ressources additionnels (des gamemodes et des maps).&lt;br /&gt;
#** '''Editor''' vous permet de créer des maps (optionnel).&lt;br /&gt;
#* '''Development''' comprends des outils de développement.&lt;br /&gt;
#** '''Module SDK''' le SDK permettant de créer des modules (connaissances en C++ requises).&lt;br /&gt;
#* '''Start menu group''' crée un group dans le menu démarrer pour les composants précédents.&lt;br /&gt;
#* '''Desktop icon''' crée un raccourcis sur le bureau pour lancer MTA:SA.&lt;br /&gt;
# Ensuite l'istalleur vous demandera dans quel dossier installer MTA:SA. Choisissez l'emplacement que vous voulez, il n'est pas obligatoire de l'installer dans le dossier de GTA San Andreas.&lt;br /&gt;
# Ensuite, il vous demandera dans quel dossier ce trouve le dossier de GTA San Andreas. Par défaut il se trouve dans: '''C:\Program Files\Rockstar Games\GTA San Andreas\'''.&lt;br /&gt;
# Lorsque l'installation se termine, vous aurez la possibilité de démarrer MTA:SA directement. Cliquez ensuite sur '''Finish'''.&lt;br /&gt;
# Plus tard, vous pourrez lancer ''MTA San Andreas'' depuis le menu démarrer.&lt;br /&gt;
&lt;br /&gt;
==Lancer le jeu==&lt;br /&gt;
# Démarrez Multi Theft Auto: San Andreas en (double-)cliquant sur son icône situé dans le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
# GTA:San Andreas va alors démarrer. Une fois le chargement effectué, vous allez vous retrouver face à l'interface du menu MTA:SA. Vous avez alors le choix entre plusieurs options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:MENU_QuickConnect.jpg]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quick connect''' – Ceci vous permet de vous connecter rapidement à un serveur dont vous connaissez l'IP ainsi que le Port, et, si nécessaire, le Pass (Mot de passe).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Server_Browser.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Browse servers''' – Ceci vous permet d'afficher la liste des serveurs en ligne.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Host_Game.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Host game''' – Ceci vous permet de démarrer un serveur local (LAN et/ou Internet).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Menu_Settings.JPG|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Settings '''– Ceci vous permet de changer votre pseudo, les contrôles, les options graphiques, audios, etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:About_Menu.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''About '''– Ceci vous permet de voir la liste des personnes ayant contribué au projet MTA:SA.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Map_Editor.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Map editor '''– Ceci vous permet de créer vos propres maps (cartes) complètes. Elles peuvent par la suite être chargées sur un serveur afin d'améliorer l'expérience de jeu.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quit '''– Ceci permet de quitter MTA:SA et de revenir à votre précédente application.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le moyen le plus simple et rapide de jouer à MTA:SA est d'utiliser '''Browse servers'''. Si les serveurs n’apparaissent pas au bout de quelques secondes d'attente, appuyez sur le bouton '''Refresh''' afin que MTA:SA recharge la liste des serveurs.&lt;br /&gt;
&lt;br /&gt;
* Dans la case '''Name''' apparait le nom du serveur.&lt;br /&gt;
* Dans la case '''Players''' apparait le nombre de joueurs connectés actuellement ainsi que le nombre de joueurs maximum, inscrits dans le format de '''[Slots Utilisés] / [Slots Maximum]'''.&lt;br /&gt;
* Dans la case '''Ping''' apparait votre ping (ou [http://fr.wikipedia.org/wiki/Lag_%28informatique%29 lag, latence]), entre vous et le serveur. Afin d'obtenir plus d'informations sur les lags, rendez-vous sur le lien situé auparavant.&lt;br /&gt;
* Dans la case '''Host''' apparait l'adresse IP du serveur. C'est grâce à celle-ci que vous pourrez, dans le futur, utiliser dans la case '''Quick connect''' du menu principal de MTA:SA afin de vous connecter rapidement à un serveur.&lt;br /&gt;
&lt;br /&gt;
Cache case peut être cliqué afin de les arranger dans l'ordre croissant ou décroissant.&lt;br /&gt;
&lt;br /&gt;
Pour une performance optimale, cherchez le meilleur équilibre entre joueurs et ping.&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez choisi un serveur, sélectionnez-le en cliquant dessus, puis en cliquant sur le bouton '''Connect''' dans le coin en haut à droite. Si tout se passe bien, vous allez être connecté automatiquement au serveur.&lt;br /&gt;
&lt;br /&gt;
==Comment jouer ?==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un système complet de script qui permet aux créateurs de cartes de modifier plusieurs éléments de jeu afin qu'ils puissent créer leurs propres modes de jeu. MTA:SA intègre autant d'éléments que possible qu'en solo, mais certains aspects sont différents.&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas de piétons ou de conducteurs dans les rues. Il n'y a que les joueurs actuellement connecté sur le serveur. Vous pouvez parler aux autres joueurs du serveur (par défaut si le script n'a pas modifié ceci) en appuyant sur la touche '''T''', puis en insérant votre texte. Si le serveur le propose, vous pouvez parler exclusivement à votre équipe en appuyant cette fois sur '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Le créateur de cartes de MTA:SA permet d'ajouter plusieurs objets sur une même carte, d'une route à un casino en passant par une planche à bois, etc. Et ceci peut-être combiné au script afin de faire bouger certains objets via une commande, une touche... Les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi, en appuyant sur la touche '''Tabulation''', afficher le tableau des scores. Par défaut, seuls les pseudos des joueurs ainsi que leur ping s'affichent, mais ceci peut-être modifié via le script. Par exemple, pour un mode de jeu tourné vers le deathmatch (combat à mort en Français), les scripteurs peuvent afficher une colonne référençant le nombre de meurtres et/ou morts. Encore une fois, ici, les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
==Contrôles==&lt;br /&gt;
&lt;br /&gt;
===Touches dans le jeu===&lt;br /&gt;
&lt;br /&gt;
* F8 : Affiche la console.&lt;br /&gt;
* F9 : Affiche l'aide.&lt;br /&gt;
* F11 : Affiche la carte de San Andreas, ainsi que votre position. Les touches suivantes ne fonctionnent que sur cette carte et se situent sur le pavé numérique:&lt;br /&gt;
**/ ou - : Zoom avant ou arrière.&lt;br /&gt;
**4, 8, 6, 2 : Déplace la carte respectivement vers la gauche, le haut, la droite, le bas.&lt;br /&gt;
**0 : Basculer entre attacher la vue sur le joueur (la carte suit l'icône du joueur) et mouvement libre (la carte reste stationnaire).&lt;br /&gt;
* F12 : Réaliser une capture d'écran.&lt;br /&gt;
* T : Chat général.&lt;br /&gt;
* Y : Chat de l'équipe.&lt;br /&gt;
* TAB : Liste des joueurs (si le serveur le permet).&lt;br /&gt;
&lt;br /&gt;
==Commandes de la console==&lt;br /&gt;
&lt;br /&gt;
Appuyez sur '''~ (tilde)''' ou '''F8''' pour accéder à la console, tapez ensuite la commande souhaitée avec les paramètres nécessaires (si possible) puis appuyez sur '''Entrée'''.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Affiche la liste de toutes les cartes disponibles sur le serveur. &lt;br /&gt;
&lt;br /&gt;
;'''nick [pseudo]''' :Change votre pseudo en jeu par celui que vous avez entré comme paramètre.&lt;br /&gt;
&lt;br /&gt;
;'''msg [pseudo] [message]''' ''ou'' '''pm [pseudo] [message]''' :Envoie un message privé à la personne dont le pseudo est spécifié en paramètre. Seule la personne à laquelle vous avez envoyé le message le verra. '''msg''' et '''pm''' ont la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' ''ou'' '''exit''' :Vous déconnecte du serveur tout en vous ramenant vers votre dernière application. Le bouton '''Quit''' du menu principal a la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Ceci affiche la dernière version et les informations sur le copyright du logiciel.&lt;br /&gt;
&lt;br /&gt;
;'''sver''' :Ceci affiche la version du serveur sur lequel vous êtes actuellement connecté.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Ceci affiche l'heure actuelle.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ceci vous déconnecte du serveur et vous ramène au menu principal.&lt;br /&gt;
&lt;br /&gt;
;'''say [texte]''' :Ceci vous permet de parler aux joueurs du serveur avec la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [pseudo]''' :Ceci vous permettra de ne plus voir le texte qu'écrit le joueur dont vous avez entré le pseudo en paramètre. Pour arrêter d'ignorer un joueur, retapez '''ignore [pseudo]'''.&lt;br /&gt;
{{Tip|You can use these commands in the chatbox by putting a / (forward slash) in front of them.}}&lt;br /&gt;
&lt;br /&gt;
'''Astuce:''' Vous pouvez utiliser ces commandes dans la chatbox du serveur en insérant un '''&amp;quot;/&amp;quot;''' (slash) en face d'elles.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez retrouver cette liste en jeu en tapant '''help''' dans la console puis en appuyant sur '''Entrée'''. Le serveur sur lequel vous jouez peut aussi avoir des commandes supplémentaires qui peuvent être consultées en tapant '''commands''' dans la console.&lt;br /&gt;
&lt;br /&gt;
==Codes d'erreurs et leurs significations==&lt;br /&gt;
'''Erreurs de téléchargement'''&amp;lt;br&amp;gt;&lt;br /&gt;
0: UNKNOWN_ERROR&amp;lt;br&amp;gt;&lt;br /&gt;
1: INVALID_FILE_DESCRIPTORS&amp;lt;br&amp;gt;&lt;br /&gt;
2: INVALID_MAX_FILE_DESCRIPTOR&amp;lt;br&amp;gt;&lt;br /&gt;
3: INVALID_SELECT_RETURN&amp;lt;br&amp;gt;&lt;br /&gt;
4: INVALID_INITIAL_MULTI_PERFORM&amp;lt;br&amp;gt;&lt;br /&gt;
5: INVALID_MULTI_PERFORM_CODE&amp;lt;br&amp;gt;&lt;br /&gt;
6: INVALID_MULTI_PERFORM_CODE_NEW_DOWNLOADS&amp;lt;br&amp;gt;&lt;br /&gt;
7: UNEXPECTED_CURL_MESSAGE&amp;lt;br&amp;gt;&lt;br /&gt;
8: UNABLE_TO_CONNECT&amp;lt;br&amp;gt;&lt;br /&gt;
9: UNABLE_TO_DOWNLOAD_FILE&amp;lt;br&amp;gt;&lt;br /&gt;
10: FAILED_TO_INITIALIZE_DOWNLOAD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Erreurs fatales'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: no local player model on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
2: no local player on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
3: server downloads disabled&amp;lt;br&amp;gt;&lt;br /&gt;
4: no local player model on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
5: no local player on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
6: invalid custom data length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
7: invalid bitstream data on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
8: system entity on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
9: failed to create object on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
10: failed to create pickup on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
11: failed to create vehicle on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
12: invalid team-name length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
13: invalid lua-event name length in lua-event packet&amp;lt;br&amp;gt;&lt;br /&gt;
14: invalid resource name length in resource-start packet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Erreurs pour entrer dans un véhicule'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: script cancelled&amp;lt;br&amp;gt;&lt;br /&gt;
2: script cancelled (jack)&amp;lt;br&amp;gt;&lt;br /&gt;
3: current occupier is entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
4: invalid seat&amp;lt;br&amp;gt;&lt;br /&gt;
5: not close enough&amp;lt;br&amp;gt;&lt;br /&gt;
6: already in a vehicle&amp;lt;br&amp;gt;&lt;br /&gt;
7: already entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
8: invalid vehicle (trailer)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spécial: Jouer à MTA:SA sur Linux ?==&lt;br /&gt;
Si vous êtes l'un des joueurs qui ont Linux comme OS, et qui veulent pouvoir jouer à MTA:SA dessus, veuillez lire le  [[Manuel_du_Client_sur_Linux|Manuel du Client sur Linux]].&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40640</id>
		<title>FR/Manuel Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40640"/>
		<updated>2014-07-09T20:29:00Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Updated to match english version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Multi Theft Auto: San Andreas est le dernier mod en série de modifications multijoueurs pour les jeux Grand Theft Auto (sur PC exclusivement). Pour les versions sur GTA III et GTA:VC, s'exécutant tous deux sur l'ancien système, visitez [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Cette modification n'est en aucun cas approuvé et affilié à Rockstar Games ou Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
==Avant de commencer==&lt;br /&gt;
&lt;br /&gt;
Avant d'installer Multi Theft Auto: San Andreas, assurez-vous en premier que le jeu GTA:SA est bien installé. Dans le cas échéant, MTA:SA ne pourra démarrer. Si vous voulez garder vos mods spécifiques à la version solo du jeu (ces mods étant généralement interdits sur la plupart des serveurs MTA:SA), réinstallez GTA:SA dans un autre fichier sur votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous aussi d'être sur '''Windows XP''', '''Windows Vista''' (32 bits ou 64 bits), '''Windows 7''' (32 bits ou 64 bits) or '''Windows 8''' (32 bits ou 64 bits) et que vous  êtes capable de lancer le jeu solo. Sachez que si vous arrivez à jouer au solo sur un pc dont ses caractéristiques sont vraiment au minimum requis, vous aurez sûrement du mal à faire fonctionner MTA:SA correctement.&lt;br /&gt;
{{Note| &lt;br /&gt;
* MTA:SA ne fonctionne que sur GTA:SA '''v1.0'''. Si vous venez d'acheter le jeu, il est plus que probable que vous ayez la dernière version.''' [[Known_Issues_-_FAQ#Does_MTASA_work_with_v1.01_or_v2.00_of_GTA_San_Andreas.3F| (Plus d'info)]]&lt;br /&gt;
* Si vous avez la version Steam de GTA: San Andreas vous devez [[Known_Issues_-_FAQ#I_have_the_Steam_version_of_GTA_San_Andreas._How_can_I_play_MTASA.3F|lire ceci d'abord]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Exigences du système===&lt;br /&gt;
Les exigences du système pour faire fonctionner MTA:SA sont à peine plus élevées que celles nécessaires pour GTA:SA.&lt;br /&gt;
* Intel Pentium 4 ou AMD Athlon XP.&lt;br /&gt;
* 512MB DDR RAM.&lt;br /&gt;
* Une installation sans modifications du jeu GTA:SA v1.0 (Américain ou Européen).&lt;br /&gt;
* 3.7GB d'espace disponible sur votre disque dur (3.6GB sont minimum pour l'installation de GTA:SA).&lt;br /&gt;
* nVidia GeForce 4 series ou ATI Radeon 8xxx series (64MB RAM et DirectX 9.0 compatible).&lt;br /&gt;
* DirectX 9.0 carte son compatible.&lt;br /&gt;
* Clavier et souris.&lt;br /&gt;
* Une connexion internet haut-débit (pour faciliter les chargements).&lt;br /&gt;
&lt;br /&gt;
Pour de meilleurs graphismes, une carte graphique compatible avec Pixel Shader 2.0 (nVidia GeForce FX series ou plus, ATI Radeon 9xxx series ou plus) est recommandée.&lt;br /&gt;
&lt;br /&gt;
Pour une meilleure performance de chargement, une plus grande RAM est recommandée.&lt;br /&gt;
&lt;br /&gt;
==Installer MTA:SA==&lt;br /&gt;
# Si ce n'est pas déjà fait, téléchargez MTA:SA depuis la page du site [http://mtasa.com mtasa.com].&lt;br /&gt;
# Lancer l'installeur, pour Windows Vista et Windows 7 il faut le lancer en tant qu'administrateur. (L'installeur le demandera.)&lt;br /&gt;
# Vous devez accepter la licence de MTA:SA (GPLv3).&lt;br /&gt;
# Une page vous permettra de sélectionner les composants désirés:&lt;br /&gt;
#* '''Game Client''' s'interface avec le jeu et est nécessaire.&lt;br /&gt;
#* '''Dedicated Server''' vous permet de créer votre propre serveur.&lt;br /&gt;
#** '''Core components''' et '''Game module''' sont requis par le serveur dédié.&lt;br /&gt;
#** '''Core resources''' comprends toutes les ressources requises par le serveur dédié.&lt;br /&gt;
#** '''Optional resources''' comprends des ressources additionnels (des gamemodes et des maps).&lt;br /&gt;
#** '''Editor''' vous permet de créer des maps (optionnel).&lt;br /&gt;
#* '''Development''' comprends des outils de développement.&lt;br /&gt;
#** '''Module SDK''' le SDK permettant de créer des modules (connaissances en C++ requises).&lt;br /&gt;
#* '''Start menu group''' crée un group dans le menu démarrer pour les composants précédents.&lt;br /&gt;
#* '''Desktop icon''' crée un raccourcis sur le bureau pour lancer MTA:SA.&lt;br /&gt;
# Ensuite l'istalleur vous demandera dans quel dossier installer MTA:SA. Choisissez l'emplacement que vous voulez, il n'est pas obligatoire de l'installer dans le dossier de GTA San Andreas.&lt;br /&gt;
# Ensuite, il vous demandera dans quel dossier ce trouve le dossier de GTA San Andreas. Par défaut il se trouve dans: '''C:\Program Files\Rockstar Games\GTA San Andreas\'''.&lt;br /&gt;
# Lorsque l'installation se termine, vous aurez la possibilité de démarrer MTA:SA directement. Cliquez ensuite sur '''Finish'''.&lt;br /&gt;
# Plus tard, vous pourrez lancer ''MTA San Andreas'' depuis le menu démarrer.&lt;br /&gt;
&lt;br /&gt;
==Lancer le jeu==&lt;br /&gt;
# Démarrez Multi Theft Auto: San Andreas en (double-)cliquant sur son icône situé dans le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
# GTA:San Andreas va alors démarrer. Une fois le chargement effectué, vous allez vous retrouver face à l'interface du menu MTA:SA. Vous avez alors le choix entre plusieurs options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:MENU_QuickConnect.jpg]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quick connect''' – Ceci vous permet de vous connecter rapidement à un serveur dont vous connaissez l'IP ainsi que le Port, et, si nécessaire, le Pass (Mot de passe).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Server_Browser.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Browse servers''' – Ceci vous permet d'afficher la liste des serveurs en ligne.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Host_Game.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Host game''' – Ceci vous permet de démarrer un serveur local (LAN et/ou Internet).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Menu_Settings.JPG|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Settings '''– Ceci vous permet de changer votre pseudo, les contrôles, les options graphiques, audios, etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:About_Menu.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''About '''– Ceci vous permet de voir la liste des personnes ayant contribué au projet MTA:SA.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Map_Editor.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Map editor '''– Ceci vous permet de créer vos propres maps (cartes) complètes. Elles peuvent par la suite être chargées sur un serveur afin d'améliorer l'expérience de jeu.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quit '''– Ceci permet de quitter MTA:SA et de revenir à votre précédente application.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le moyen le plus simple et rapide de jouer à MTA:SA est d'utiliser '''Browse servers'''. Si les serveurs n’apparaissent pas au bout de quelques secondes d'attente, appuyez sur le bouton '''Refresh''' afin que MTA:SA recharge la liste des serveurs.&lt;br /&gt;
&lt;br /&gt;
* Dans la case '''Name''' apparait le nom du serveur.&lt;br /&gt;
* Dans la case '''Players''' apparait le nombre de joueurs connectés actuellement ainsi que le nombre de joueurs maximum, inscrits dans le format de '''[Slots Utilisés] / [Slots Maximum]'''.&lt;br /&gt;
* Dans la case '''Ping''' apparait votre ping (ou [http://fr.wikipedia.org/wiki/Lag_%28informatique%29 lag, latence]), entre vous et le serveur. Afin d'obtenir plus d'informations sur les lags, rendez-vous sur le lien situé auparavant.&lt;br /&gt;
* Dans la case '''Host''' apparait l'adresse IP du serveur. C'est grâce à celle-ci que vous pourrez, dans le futur, utiliser dans la case '''Quick connect''' du menu principal de MTA:SA afin de vous connecter rapidement à un serveur.&lt;br /&gt;
&lt;br /&gt;
Cache case peut être cliqué afin de les arranger dans l'ordre croissant ou décroissant.&lt;br /&gt;
&lt;br /&gt;
Pour une performance optimale, cherchez le meilleur équilibre entre joueurs et ping.&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez choisi un serveur, sélectionnez-le en cliquant dessus, puis en cliquant sur le bouton '''Connect''' dans le coin en haut à droite. Si tout se passe bien, vous allez être connecté automatiquement au serveur.&lt;br /&gt;
&lt;br /&gt;
==Comment jouer ?==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un système complet de script qui permet aux créateurs de cartes de modifier plusieurs éléments de jeu afin qu'ils puissent créer leurs propres modes de jeu. MTA:SA intègre autant d'éléments que possible qu'en solo, mais certains aspects sont différents.&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas de piétons ou de conducteurs dans les rues. Il n'y a que les joueurs actuellement connecté sur le serveur. Vous pouvez parler aux autres joueurs du serveur (par défaut si le script n'a pas modifié ceci) en appuyant sur la touche '''T''', puis en insérant votre texte. Si le serveur le propose, vous pouvez parler exclusivement à votre équipe en appuyant cette fois sur '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Le créateur de cartes de MTA:SA permet d'ajouter plusieurs objets sur une même carte, d'une route à un casino en passant par une planche à bois, etc. Et ceci peut-être combiné au script afin de faire bouger certains objets via une commande, une touche... Les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi, en appuyant sur la touche '''Tabulation''', afficher le tableau des scores. Par défaut, seuls les pseudos des joueurs ainsi que leur ping s'affichent, mais ceci peut-être modifié via le script. Par exemple, pour un mode de jeu tourné vers le deathmatch (combat à mort en Français), les scripteurs peuvent afficher une colonne référençant le nombre de meurtres et/ou morts. Encore une fois, ici, les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
==Contrôles==&lt;br /&gt;
&lt;br /&gt;
===Touches dans le jeu===&lt;br /&gt;
&lt;br /&gt;
* F8 : Affiche la console.&lt;br /&gt;
* F9 : Affiche l'aide.&lt;br /&gt;
* F11 : Affiche la carte de San Andreas, ainsi que votre position. Les touches suivantes ne fonctionnent que sur cette carte et se situent sur le pavé numérique:&lt;br /&gt;
**/ ou - : Zoom avant ou arrière.&lt;br /&gt;
**4, 8, 6, 2 : Déplace la carte respectivement vers la gauche, le haut, la droite, le bas.&lt;br /&gt;
**0 : Basculer entre attacher la vue sur le joueur (la carte suit l'icône du joueur) et mouvement libre (la carte reste stationnaire).&lt;br /&gt;
* F12 : Réaliser une capture d'écran.&lt;br /&gt;
* T : Chat général.&lt;br /&gt;
* Y : Chat de l'équipe.&lt;br /&gt;
* TAB : Liste des joueurs (si le serveur le permet).&lt;br /&gt;
&lt;br /&gt;
==Commandes de la console==&lt;br /&gt;
&lt;br /&gt;
Appuyez sur '''~ (tilde)''' ou '''F8''' pour accéder à la console, tapez ensuite la commande souhaitée avec les paramètres nécessaires (si possible) puis appuyez sur '''Entrée'''.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Affiche la liste de toutes les cartes disponibles sur le serveur. &lt;br /&gt;
&lt;br /&gt;
;'''nick [pseudo]''' :Change votre pseudo en jeu par celui que vous avez entré comme paramètre.&lt;br /&gt;
&lt;br /&gt;
;'''msg [pseudo] [message]''' ''ou'' '''pm [pseudo] [message]''' :Envoie un message privé à la personne dont le pseudo est spécifié en paramètre. Seule la personne à laquelle vous avez envoyé le message le verra. '''msg''' et '''pm''' ont la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' ''ou'' '''exit''' :Vous déconnecte du serveur tout en vous ramenant vers votre dernière application. Le bouton '''Quit''' du menu principal a la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Ceci affiche la dernière version et les informations sur le copyright du logiciel.&lt;br /&gt;
&lt;br /&gt;
;'''sver''' :Ceci affiche la version du serveur sur lequel vous êtes actuellement connecté.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Ceci affiche l'heure actuelle.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ceci vous déconnecte du serveur et vous ramène au menu principal.&lt;br /&gt;
&lt;br /&gt;
;'''say [texte]''' :Ceci vous permet de parler aux joueurs du serveur avec la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [pseudo]''' :Ceci vous permettra de ne plus voir le texte qu'écrit le joueur dont vous avez entré le pseudo en paramètre. Pour arrêter d'ignorer un joueur, retapez '''ignore [pseudo]'''.&lt;br /&gt;
&lt;br /&gt;
'''Astuce:''' Vous pouvez utiliser ces commandes dans la chatbox du serveur en insérant un '''&amp;quot;/&amp;quot;''' (slash) en face d'elles.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez retrouver cette liste en jeu en tapant '''help''' dans la console puis en appuyant sur '''Entrée'''. Le serveur sur lequel vous jouez peut aussi avoir des commandes supplémentaires qui peuvent être consultées en tapant '''commands''' dans la console.&lt;br /&gt;
&lt;br /&gt;
==Codes d'erreurs et leurs significations==&lt;br /&gt;
'''Erreurs de téléchargement'''&amp;lt;br&amp;gt;&lt;br /&gt;
0: UNKNOWN_ERROR&amp;lt;br&amp;gt;&lt;br /&gt;
1: INVALID_FILE_DESCRIPTORS&amp;lt;br&amp;gt;&lt;br /&gt;
2: INVALID_MAX_FILE_DESCRIPTOR&amp;lt;br&amp;gt;&lt;br /&gt;
3: INVALID_SELECT_RETURN&amp;lt;br&amp;gt;&lt;br /&gt;
4: INVALID_INITIAL_MULTI_PERFORM&amp;lt;br&amp;gt;&lt;br /&gt;
5: INVALID_MULTI_PERFORM_CODE&amp;lt;br&amp;gt;&lt;br /&gt;
6: INVALID_MULTI_PERFORM_CODE_NEW_DOWNLOADS&amp;lt;br&amp;gt;&lt;br /&gt;
7: UNEXPECTED_CURL_MESSAGE&amp;lt;br&amp;gt;&lt;br /&gt;
8: UNABLE_TO_CONNECT&amp;lt;br&amp;gt;&lt;br /&gt;
9: UNABLE_TO_DOWNLOAD_FILE&amp;lt;br&amp;gt;&lt;br /&gt;
10: FAILED_TO_INITIALIZE_DOWNLOAD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Erreurs fatales'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: no local player model on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
2: no local player on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
3: server downloads disabled&amp;lt;br&amp;gt;&lt;br /&gt;
4: no local player model on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
5: no local player on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
6: invalid custom data length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
7: invalid bitstream data on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
8: system entity on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
9: failed to create object on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
10: failed to create pickup on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
11: failed to create vehicle on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
12: invalid team-name length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
13: invalid lua-event name length in lua-event packet&amp;lt;br&amp;gt;&lt;br /&gt;
14: invalid resource name length in resource-start packet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Erreurs pour entrer dans un véhicule'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: script cancelled&amp;lt;br&amp;gt;&lt;br /&gt;
2: script cancelled (jack)&amp;lt;br&amp;gt;&lt;br /&gt;
3: current occupier is entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
4: invalid seat&amp;lt;br&amp;gt;&lt;br /&gt;
5: not close enough&amp;lt;br&amp;gt;&lt;br /&gt;
6: already in a vehicle&amp;lt;br&amp;gt;&lt;br /&gt;
7: already entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
8: invalid vehicle (trailer)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spécial: Jouer à MTA:SA sur Linux ?==&lt;br /&gt;
Si vous êtes l'un des joueurs qui ont Linux comme OS, et qui veulent pouvoir jouer à MTA:SA dessus, veuillez lire le  [[Manuel_du_Client_sur_Linux|Manuel du Client sur Linux]].&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40639</id>
		<title>FR/Manuel Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Manuel_Client&amp;diff=40639"/>
		<updated>2014-07-09T18:46:01Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Update to match english version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Multi Theft Auto: San Andreas est le dernier mod en série de modifications multijoueurs pour les jeux Grand Theft Auto (sur PC exclusivement). Pour les versions sur GTA III et GTA:VC, s'exécutant tous deux sur l'ancien système, visitez [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Cette modification n'est en aucun cas approuvé et affilié à Rockstar Games ou Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
==Avant de commencer==&lt;br /&gt;
&lt;br /&gt;
Avant d'installer Multi Theft Auto: San Andreas, assurez-vous en premier que le jeu GTA:SA est bien installé. Dans le cas échéant, MTA:SA ne pourra démarrer. Si vous voulez garder vos mods spécifiques à la version solo du jeu (ces mods étant généralement interdits sur la plupart des serveurs MTA:SA), réinstallez GTA:SA dans un autre fichier sur votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous aussi d'être sur '''Windows XP''', '''Windows Vista''' (32 bits ou 64 bits), '''Windows 7''' (32 bits ou 64 bits) or '''Windows 8''' (32 bits ou 64 bits) et que vous  êtes capable de lancer le jeu solo. Sachez que si vous arrivez à jouer au solo sur un pc dont ses caractéristiques sont vraiment au minimum requis, vous aurez sûrement du mal à faire fonctionner MTA:SA correctement.&lt;br /&gt;
{{Note| &lt;br /&gt;
* MTA:SA ne fonctionne que sur GTA:SA '''v1.0'''. Si vous venez d'acheter le jeu, il est plus que probable que vous ayez la dernière version.''' [[Known_Issues_-_FAQ#Does_MTASA_work_with_v1.01_or_v2.00_of_GTA_San_Andreas.3F| (Plus d'info)]]&lt;br /&gt;
* Si vous avez la version Steam de GTA: San Andreas vous devez [[Known_Issues_-_FAQ#I_have_the_Steam_version_of_GTA_San_Andreas._How_can_I_play_MTASA.3F|lire ceci d'abord]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Exigences du système===&lt;br /&gt;
Les exigences du système pour faire fonctionner MTA:SA sont à peine plus élevées que celles nécessaires pour GTA:SA.&lt;br /&gt;
* Intel Pentium 4 ou AMD Athlon XP.&lt;br /&gt;
* 512MB DDR RAM.&lt;br /&gt;
* Une installation sans modifications du jeu GTA:SA v1.0 (Américain ou Européen).&lt;br /&gt;
* 3.7GB d'espace disponible sur votre disque dur (3.6GB sont minimum pour l'installation de GTA:SA).&lt;br /&gt;
* nVidia GeForce 4 series ou ATI Radeon 8xxx series (64MB RAM et DirectX 9.0 compatible).&lt;br /&gt;
* DirectX 9.0 carte son compatible.&lt;br /&gt;
* Clavier et souris.&lt;br /&gt;
* Une connexion internet haut-débit (pour faciliter les chargements).&lt;br /&gt;
&lt;br /&gt;
Pour de meilleurs graphismes, une carte graphique compatible avec Pixel Shader 2.0 (nVidia GeForce FX series ou plus, ATI Radeon 9xxx series ou plus) est recommandée.&lt;br /&gt;
&lt;br /&gt;
Pour une meilleure performance de chargement, une plus grande RAM est recommandée.&lt;br /&gt;
&lt;br /&gt;
==Installer MTA:SA==&lt;br /&gt;
Pour pouvoir installer MTA:SA, vous devez respecter un ordre précis, sans quoi il ne pourra pas se lancer.&lt;br /&gt;
&lt;br /&gt;
# Si ce n'est pas déjà fait, téléchargez le dernier client de MTA:SA sur [http://www.multitheftauto.com/ http://www.multitheftauto.com].&lt;br /&gt;
# Lancez l'installateur. Vous allez être questionné sur les composants à installer:&lt;br /&gt;
#* '''Client''': Ce sont les interfaces du client, nécessitées pour pouvoir faire fonctionner MTA:SA.&lt;br /&gt;
#* '''MTA Server''': Vous permet de pouvoir faire héberger votre serveur MTA:SA.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''': Utilisé pour créer des maps (cartes). Ceci n'est pas obligatoire pour faire fonctionner MTA:SA.&lt;br /&gt;
# Vous allez être questionné sur l'emplacement où vous voulez installer MTA:SA. Celui-ci peut-être n'importe où.&lt;br /&gt;
# Vous allez ensuite être questionné sur l'emplacement où le jeu GTA:SA est installé. Par défaut, le chemin d'accès est celui-ci: '''C:\Program Files\Rockstar Games\GTA San Andreas\'''.&lt;br /&gt;
# Une fois l'installation terminée, l'installateur va vous demander si vous voulez lancer MTA:SA. Cochez la case comme bon vous semble, puis cliquez sur '''Finish'''.&lt;br /&gt;
# Vous pouvez maintenant lancer MTA:SA depuis le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
&lt;br /&gt;
==Lancer le jeu==&lt;br /&gt;
# Démarrez Multi Theft Auto: San Andreas en (double-)cliquant sur son icône situé dans le menu '''Démarrer''' ou sur le bureau.&lt;br /&gt;
# GTA:San Andreas va alors démarrer. Une fois le chargement effectué, vous allez vous retrouver face à l'interface du menu MTA:SA. Vous avez alors le choix entre plusieurs options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:MENU_QuickConnect.jpg]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quick connect''' – Ceci vous permet de vous connecter rapidement à un serveur dont vous connaissez l'IP ainsi que le Port, et, si nécessaire, le Pass (Mot de passe).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Server_Browser.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Browse servers''' – Ceci vous permet d'afficher la liste des serveurs en ligne.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Host_Game.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Host game''' – Ceci vous permet de démarrer un serveur local (LAN et/ou Internet).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Menu_Settings.JPG|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Settings '''– Ceci vous permet de changer votre pseudo, les contrôles, les options graphiques, audios, etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:About_Menu.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''About '''– Ceci vous permet de voir la liste des personnes ayant contribué au projet MTA:SA.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
[[Image:Map_Editor.jpg|280px]]&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Map editor '''– Ceci vous permet de créer vos propres maps (cartes) complètes. Elles peuvent par la suite être chargées sur un serveur afin d'améliorer l'expérience de jeu.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;188&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| width=&amp;quot;380&amp;quot; |&lt;br /&gt;
&amp;lt;font size=&amp;quot;-1&amp;quot; face=&amp;quot;tahoma,helvetica,arial,sans-serif&amp;quot;&amp;gt;'''Quit '''– Ceci permet de quitter MTA:SA et de revenir à votre précédente application.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le moyen le plus simple et rapide de jouer à MTA:SA est d'utiliser '''Browse servers'''. Si les serveurs n’apparaissent pas au bout de quelques secondes d'attente, appuyez sur le bouton '''Refresh''' afin que MTA:SA recharge la liste des serveurs.&lt;br /&gt;
&lt;br /&gt;
* Dans la case '''Name''' apparait le nom du serveur.&lt;br /&gt;
* Dans la case '''Players''' apparait le nombre de joueurs connectés actuellement ainsi que le nombre de joueurs maximum, inscrits dans le format de '''[Slots Utilisés] / [Slots Maximum]'''.&lt;br /&gt;
* Dans la case '''Ping''' apparait votre ping (ou [http://fr.wikipedia.org/wiki/Lag_%28informatique%29 lag, latence]), entre vous et le serveur. Afin d'obtenir plus d'informations sur les lags, rendez-vous sur le lien situé auparavant.&lt;br /&gt;
* Dans la case '''Host''' apparait l'adresse IP du serveur. C'est grâce à celle-ci que vous pourrez, dans le futur, utiliser dans la case '''Quick connect''' du menu principal de MTA:SA afin de vous connecter rapidement à un serveur.&lt;br /&gt;
&lt;br /&gt;
Cache case peut être cliqué afin de les arranger dans l'ordre croissant ou décroissant.&lt;br /&gt;
&lt;br /&gt;
Pour une performance optimale, cherchez le meilleur équilibre entre joueurs et ping.&lt;br /&gt;
&lt;br /&gt;
Une fois que vous avez choisi un serveur, sélectionnez-le en cliquant dessus, puis en cliquant sur le bouton '''Connect''' dans le coin en haut à droite. Si tout se passe bien, vous allez être connecté automatiquement au serveur.&lt;br /&gt;
&lt;br /&gt;
==Comment jouer ?==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un système complet de script qui permet aux créateurs de cartes de modifier plusieurs éléments de jeu afin qu'ils puissent créer leurs propres modes de jeu. MTA:SA intègre autant d'éléments que possible qu'en solo, mais certains aspects sont différents.&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas de piétons ou de conducteurs dans les rues. Il n'y a que les joueurs actuellement connecté sur le serveur. Vous pouvez parler aux autres joueurs du serveur (par défaut si le script n'a pas modifié ceci) en appuyant sur la touche '''T''', puis en insérant votre texte. Si le serveur le propose, vous pouvez parler exclusivement à votre équipe en appuyant cette fois sur '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Le créateur de cartes de MTA:SA permet d'ajouter plusieurs objets sur une même carte, d'une route à un casino en passant par une planche à bois, etc. Et ceci peut-être combiné au script afin de faire bouger certains objets via une commande, une touche... Les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi, en appuyant sur la touche '''Tabulation''', afficher le tableau des scores. Par défaut, seuls les pseudos des joueurs ainsi que leur ping s'affichent, mais ceci peut-être modifié via le script. Par exemple, pour un mode de jeu tourné vers le deathmatch (combat à mort en Français), les scripteurs peuvent afficher une colonne référençant le nombre de meurtres et/ou morts. Encore une fois, ici, les possibilités sont presque infinies.&lt;br /&gt;
&lt;br /&gt;
==Contrôles==&lt;br /&gt;
&lt;br /&gt;
===Touches dans le jeu===&lt;br /&gt;
&lt;br /&gt;
* F8 : Affiche la console.&lt;br /&gt;
* F9 : Affiche l'aide.&lt;br /&gt;
* F11 : Affiche la carte de San Andreas, ainsi que votre position. Les touches suivantes ne fonctionnent que sur cette carte et se situent sur le pavé numérique:&lt;br /&gt;
**/ ou - : Zoom avant ou arrière.&lt;br /&gt;
**4, 8, 6, 2 : Déplace la carte respectivement vers la gauche, le haut, la droite, le bas.&lt;br /&gt;
**0 : Basculer entre attacher la vue sur le joueur (la carte suit l'icône du joueur) et mouvement libre (la carte reste stationnaire).&lt;br /&gt;
* F12 : Réaliser une capture d'écran.&lt;br /&gt;
* T : Chat général.&lt;br /&gt;
* Y : Chat de l'équipe.&lt;br /&gt;
* TAB : Liste des joueurs (si le serveur le permet).&lt;br /&gt;
&lt;br /&gt;
==Commandes de la console==&lt;br /&gt;
&lt;br /&gt;
Appuyez sur '''~ (tilde)''' ou '''F8''' pour accéder à la console, tapez ensuite la commande souhaitée avec les paramètres nécessaires (si possible) puis appuyez sur '''Entrée'''.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Affiche la liste de toutes les cartes disponibles sur le serveur. &lt;br /&gt;
&lt;br /&gt;
;'''nick [pseudo]''' :Change votre pseudo en jeu par celui que vous avez entré comme paramètre.&lt;br /&gt;
&lt;br /&gt;
;'''msg [pseudo] [message]''' ''ou'' '''pm [pseudo] [message]''' :Envoie un message privé à la personne dont le pseudo est spécifié en paramètre. Seule la personne à laquelle vous avez envoyé le message le verra. '''msg''' et '''pm''' ont la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' ''ou'' '''exit''' :Vous déconnecte du serveur tout en vous ramenant vers votre dernière application. Le bouton '''Quit''' du menu principal a la même fonction.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Ceci affiche la dernière version et les informations sur le copyright du logiciel.&lt;br /&gt;
&lt;br /&gt;
;'''sver''' :Ceci affiche la version du serveur sur lequel vous êtes actuellement connecté.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Ceci affiche l'heure actuelle.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ceci vous déconnecte du serveur et vous ramène au menu principal.&lt;br /&gt;
&lt;br /&gt;
;'''say [texte]''' :Ceci vous permet de parler aux joueurs du serveur avec la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [pseudo]''' :Ceci vous permettra de ne plus voir le texte qu'écrit le joueur dont vous avez entré le pseudo en paramètre. Pour arrêter d'ignorer un joueur, retapez '''ignore [pseudo]'''.&lt;br /&gt;
&lt;br /&gt;
'''Astuce:''' Vous pouvez utiliser ces commandes dans la chatbox du serveur en insérant un '''&amp;quot;/&amp;quot;''' (slash) en face d'elles.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez retrouver cette liste en jeu en tapant '''help''' dans la console puis en appuyant sur '''Entrée'''. Le serveur sur lequel vous jouez peut aussi avoir des commandes supplémentaires qui peuvent être consultées en tapant '''commands''' dans la console.&lt;br /&gt;
&lt;br /&gt;
==Codes d'erreurs et leurs significations==&lt;br /&gt;
'''Erreurs de téléchargement'''&amp;lt;br&amp;gt;&lt;br /&gt;
0: UNKNOWN_ERROR&amp;lt;br&amp;gt;&lt;br /&gt;
1: INVALID_FILE_DESCRIPTORS&amp;lt;br&amp;gt;&lt;br /&gt;
2: INVALID_MAX_FILE_DESCRIPTOR&amp;lt;br&amp;gt;&lt;br /&gt;
3: INVALID_SELECT_RETURN&amp;lt;br&amp;gt;&lt;br /&gt;
4: INVALID_INITIAL_MULTI_PERFORM&amp;lt;br&amp;gt;&lt;br /&gt;
5: INVALID_MULTI_PERFORM_CODE&amp;lt;br&amp;gt;&lt;br /&gt;
6: INVALID_MULTI_PERFORM_CODE_NEW_DOWNLOADS&amp;lt;br&amp;gt;&lt;br /&gt;
7: UNEXPECTED_CURL_MESSAGE&amp;lt;br&amp;gt;&lt;br /&gt;
8: UNABLE_TO_CONNECT&amp;lt;br&amp;gt;&lt;br /&gt;
9: UNABLE_TO_DOWNLOAD_FILE&amp;lt;br&amp;gt;&lt;br /&gt;
10: FAILED_TO_INITIALIZE_DOWNLOAD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Erreurs fatales'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: no local player model on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
2: no local player on ingame event&amp;lt;br&amp;gt;&lt;br /&gt;
3: server downloads disabled&amp;lt;br&amp;gt;&lt;br /&gt;
4: no local player model on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
5: no local player on player-list packet&amp;lt;br&amp;gt;&lt;br /&gt;
6: invalid custom data length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
7: invalid bitstream data on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
8: system entity on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
9: failed to create object on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
10: failed to create pickup on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
11: failed to create vehicle on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
12: invalid team-name length on entity-add packet&amp;lt;br&amp;gt;&lt;br /&gt;
13: invalid lua-event name length in lua-event packet&amp;lt;br&amp;gt;&lt;br /&gt;
14: invalid resource name length in resource-start packet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Erreurs pour entrer dans un véhicule'''&amp;lt;br&amp;gt;&lt;br /&gt;
1: script cancelled&amp;lt;br&amp;gt;&lt;br /&gt;
2: script cancelled (jack)&amp;lt;br&amp;gt;&lt;br /&gt;
3: current occupier is entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
4: invalid seat&amp;lt;br&amp;gt;&lt;br /&gt;
5: not close enough&amp;lt;br&amp;gt;&lt;br /&gt;
6: already in a vehicle&amp;lt;br&amp;gt;&lt;br /&gt;
7: already entering/exiting&amp;lt;br&amp;gt;&lt;br /&gt;
8: invalid vehicle (trailer)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spécial: Jouer à MTA:SA sur Linux ?==&lt;br /&gt;
Si vous êtes l'un des joueurs qui ont Linux comme OS, et qui veulent pouvoir jouer à MTA:SA dessus, veuillez lire le  [[Manuel_du_Client_sur_Linux|Manuel du Client sur Linux]].&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=39227</id>
		<title>Page d'accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=39227"/>
		<updated>2014-04-03T21:28:24Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Undo revision 39226 by Gaetan Piette (talk)&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;Dernière version stable de '''Multi Theft Auto: San Andreas''' est '''{{Current Version|full}}'''. Rendez-vous sur la [http://mtasa.com/ page principale] pour la télécharger.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Vous pouvez aussi télécharger une [http://nightly.mtasa.com/ beta] pour avoir la dernière version ( non stable ).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Bienvenue sur le wiki de Multi Theft Auto. Sur ce wiki, vous trouverez toutes les informations sur Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Il y a [[How you can help|différents moyens de nous aider]]: créer une map, un gamemode, rediger des articles sur des fonctions, écrire un exemple, écrire un tutorial ou juste jouer à MTA et nous rapportez les bugs trouvés.&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;
====Pour commencer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Manuel_Client|Manuel Client]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:DrawKiie DrawKiie] )&lt;br /&gt;
* [[FR/Manuel_Serveur|Manuel Serveur]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Problemes_connus|Problèmes connus]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Migrer_de_MTARace_a_MTASA_1.0.x|Migrer de MTA:Race à MTA:SA 1.0.x]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/A propos des Map|A propos des Map]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&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;
====Programmer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Introduction_Programmation|Introduction: La programmation]]&lt;br /&gt;
* [[FR/Introduction_GUI|Introduction: Le GUI]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:FatalTeror FatalTerror] )&lt;br /&gt;
* [[FR/Debugage|Tutoriel: Le débugage]] - Comment trouver les erreurs dans son script (Traduction:[http://wiki.multitheftauto.com/wiki/User:Vincenzo Vincenzo] alias Vincentdu90)&lt;br /&gt;
* [[FR/Ressources|Introduction: Les ressources]] (Traduction : [http://wiki.multitheftauto.com/wiki/User:Myk3L Myk3L])&lt;br /&gt;
** [[FR/Ressource_Acces_Internet|Introduction: L'accès depuis internet]] - Comment créer un site à partir d'une ressource (Traduction : [http://wiki.multitheftauto.com/wiki/User:Myk3L Myk3L])&lt;br /&gt;
** [[:Category:Resource|Catalogue des ressources]] &lt;br /&gt;
** [[FR/Meta.xml|Meta.xml]] - Derière chaque ressource ce trouve une meta pour la définir&lt;br /&gt;
** [[FR/ACL|ACL]] - Access Control List, pour définir les autorisations&lt;br /&gt;
* [[FR/Ecrire_Gamemode|Créer un gamemode]]&lt;br /&gt;
* [[FR/Fonctions_Utiles|Fonctions Utiles]]&lt;br /&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;
====Bases de données====&lt;br /&gt;
Cette section décrit toutes les capacités fournies par le LUA/MTA ou par les ressources.&lt;br /&gt;
* [[:Category:Resource|Catalogue des ressources]] - Vous devriez le lire pour réaliser un script approprié.&lt;br /&gt;
* [[FR/Les_scripts_clients| Les scripts clients]]&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;
====Aide générale du LUA====&lt;br /&gt;
Des pages conçues pour aider votre compréhension du Lua&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot;]&lt;br /&gt;
**[http://www.lua.org/manual/5.1/#index Les fonctions Lua]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory wiki Lua]&lt;br /&gt;
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Un guide général au Lua de Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Manuel]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definition Format]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]]&lt;br /&gt;
*[[Resource:Editor#FAQ|Questions Fréquentes]]&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;
====Développer Multi Theft Auto====&lt;br /&gt;
* [[FR/Compiler_MTASA|Compiler MTASA sur Windows]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_Mac_OS_X|Compiler MTASA sur Mac OS X]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_GNU_Linux|Compiler MTASA sur GNU/Linux]]&lt;br /&gt;
* [[FR/Directives_de_codage|Directives de codage]]&lt;br /&gt;
* [http://code.google.com/p/mtasa-blue Google Code SVN]&lt;br /&gt;
* [[FR/Roadmap|Roadmap]]&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;
====Références====&lt;br /&gt;
* [[FR/Fonctions_Clients|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Clients|Events Clients]]&lt;br /&gt;
* [[FR/Fonctions_Serveurs|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Serveurs|Events Clients]]&lt;br /&gt;
&amp;lt;!-- Incomplet * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[FR/MTA Classes|MTA Classes]] - Les descriptions détaillées de tous les types personnalisés MTA&lt;br /&gt;
** [[FR/Element|MTA Elements]] / [[Element tree]]&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|ID Listes]]====&lt;br /&gt;
*[[FR/Animations|Animations]]&lt;br /&gt;
*[[FR/Skins_Personnages|Skins Personnages]]&lt;br /&gt;
*[[FR/Vetements_CJ|Vêtements CJ]]&lt;br /&gt;
*[[FR/Garage|Garage IDs]]&lt;br /&gt;
*[[FR/Interieurs_IDs|Intérieurs IDs]]&lt;br /&gt;
*[[FR/Materiel_IDs|Matériel IDs]]&lt;br /&gt;
*[[FR/Projectiles|Projectiles]]&lt;br /&gt;
*[[FR/Radar Blips|Radar Blips]]&lt;br /&gt;
*[[FR/Sons|Sons]]&lt;br /&gt;
*[[FR/Vehicule_IDs|ID des véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Couleurs|Couleurs véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Upgrades|Tuning IDs]]&lt;br /&gt;
*[[FR/Armes|Armes]]&lt;br /&gt;
*[[FR/Meteos|Météos]]&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;
{{Languages list|fr}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=CreateProjectile&amp;diff=39036</id>
		<title>CreateProjectile</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=CreateProjectile&amp;diff=39036"/>
		<updated>2014-03-08T02:35:30Z</updated>

		<summary type="html">&lt;p&gt;Citizen: force arg is only for throwable projectiles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Client function}}&lt;br /&gt;
This function creates a projectile of the specified type on the specified coordinates.&lt;br /&gt;
&lt;br /&gt;
{{Note|'''Model''' argument is not synchronized between clients. Clients differs from local player see always standard projectile model.}}&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
projectile createProjectile ( element creator, int weaponType [, float posX, float posY, float posZ, float force = 1.0, element target = nil, float rotX, float rotY, float rotZ, float velX, float velY, float velZ, int model ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Required Arguments==&lt;br /&gt;
*'''creator:''' The [[element]] representing creator of the projectile. In case you want the projectile to be synced for everybody creator must be the local player or his vehicle.&lt;br /&gt;
*'''weaponType:''' [[int]] representing the projectile weaponType (characteristics). Valid IDs are:&lt;br /&gt;
{{Projectiles}}&lt;br /&gt;
&lt;br /&gt;
==Optional Arguments==&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
*'''posX''','''posY''','''posZ''': [[float]] starting coordinates for the projectile. They are coordinates of creator by default.&lt;br /&gt;
*'''force''': [[float]] representing the starting force for throwable projectiles.&lt;br /&gt;
*'''target''': [[element]] target used for heat seeking rockets.&lt;br /&gt;
*'''rotX''','''rotY''','''rotZ''': [[float]] starting rotation for the projectile.&lt;br /&gt;
*'''velX''','''velY''','''velZ''': [[float]] starting velocity for the projectile.&lt;br /&gt;
*'''model''': Integer representing the projectile's model, uses default model for weaponType if not specified.&lt;br /&gt;
&lt;br /&gt;
==Returns==&lt;br /&gt;
Returns a ''[[projectile]]'' element if [[projectile]] creation was succesfull. Returns ''false'' if unable to create a [[projectile]] (wrong weapon ID or projectiles limit was reached).&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example makes a rocket minigun (minigun shooting with rockets).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- This function gets triggered everytime player shoots.&lt;br /&gt;
function onClientPlayerWeaponFireFunc(weapon,ammo,ammoInClip,hitX,hitY,hitZ,hitElement)&lt;br /&gt;
	if weapon == 38 then -- if source is a local player and he uses minigun...&lt;br /&gt;
                x,y,z = getElementPosition(getLocalPlayer())&lt;br /&gt;
		if not createProjectile(getLocalPlayer(),19,x,y,z,200) then -- then we either create a projectile...&lt;br /&gt;
			outputChatBox ( &amp;quot;Rocket minigun overheated! Give it a rest pal!&amp;quot;, source ) -- or if projectile limit is reached we output player a chat message&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Don't forget to add the onClientPlayerWeaponFireFunc function as a handler for onClientPlayerWeaponFire.&lt;br /&gt;
addEventHandler(&amp;quot;onClientPlayerWeaponFire&amp;quot;, getLocalPlayer(), onClientPlayerWeaponFireFunc)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Client projectile functions}}&lt;br /&gt;
&lt;br /&gt;
[[it:createProjectile]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:SetElementData&amp;diff=38973</id>
		<title>Talk:SetElementData</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:SetElementData&amp;diff=38973"/>
		<updated>2014-02-25T15:50:19Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Added a question about the max key name length which is probably outdated.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bug found, i think o,o&lt;br /&gt;
setElementData (weaponPickup,&amp;quot;norespawn&amp;quot;,true) &amp;lt;&amp;lt;&lt;br /&gt;
 Weaponpickup is a weapon pickup as the name says, like a AK-47&lt;br /&gt;
Debugscript: WARNING: ...: Bad argument @ 'setElementData'&lt;br /&gt;
 True or False can't be a var in this case i think.&lt;br /&gt;
--[[User:JasperNL|Jasper.]] 18:38, 18 July 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The wiki says the key length can't be higher than 31 but in the source code it looks like it's now 128. Am I right ?:&lt;br /&gt;
 https://code.google.com/p/mtasa-blue/source/browse/trunk/MTA10_Server/mods/deathmatch/logic/CCustomData.h#23&lt;br /&gt;
--Citizen&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=33536</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=33536"/>
		<updated>2012-09-20T23:27:47Z</updated>

		<summary type="html">&lt;p&gt;Citizen: First to Premier&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouvez voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====Premier example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire éxploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux ojets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démaré par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoit comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=33535</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=33535"/>
		<updated>2012-09-20T23:26:54Z</updated>

		<summary type="html">&lt;p&gt;Citizen: pouver to pouvez&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouvez voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====First example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire éxploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux ojets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démaré par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoit comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=32987</id>
		<title>Page d'accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=32987"/>
		<updated>2012-08-30T20:28:55Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Introduction a la programation terminée&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;Dernière version stable de '''Multi Theft Auto: San Andreas''' est '''{{Current Version|full}}'''. Rendez-vous sur la [http://mtasa.com/ page principale] pour la télécharger.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Vous pouvez aussi télécharger une [http://nightly.mtasa.com/ beta] pour avoir la dernière version ( non stable ).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Bienvenue sur le wiki de Multi Theft Auto. Sur ce wiki, vous trouverez toutes les informations sur Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Il y a [[How you can help|différents moyens de nous aider]]: créer une map, un gamemode, rediger des articles sur des fonctions, écrire un exemple, écrire un tutorial ou juste jouer à MTA et nous rapportez les bugs trouvés.&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;
====Pour commencer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Manuel_Client|Manuel Client]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:DrawKiie DrawKiie] )&lt;br /&gt;
* [[FR/Manuel_Serveur|Manuel Serveur]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Problemes_connus|Problèmes connus]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Migrer_de_MTARace_a_MTASA_1.0.x|Migrer de MTA:Race à MTA:SA 1.0.x]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/A propos des Map|A propos des Map]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&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;
====Programmer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Introduction_Programmation|Introduction: La programmation]]&lt;br /&gt;
* [[FR/Introduction_GUI|Introduction: Le GUI]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:FatalTeror FatalTerror] )&lt;br /&gt;
* [[FR/Debugage|Tutoriel: Le débugage]] - Comment trouver les erreurs dans son script (Traduction:[http://wiki.multitheftauto.com/wiki/User:Vincenzo Vincenzo] alias Vincentdu90)&lt;br /&gt;
* [[FR/Ressources|Introduction: Les ressources]] (Traduction : [http://wiki.multitheftauto.com/wiki/User:Myk3L Myk3L])&lt;br /&gt;
** [[FR/Ressource_Acces_Internet|Introduction: L'accès depuis internet]] - Comment créer un site à partir d'une ressource (Traduction : [http://wiki.multitheftauto.com/wiki/User:Myk3L Myk3L])&lt;br /&gt;
** [[:Category:Resource|Catalogue des ressources]] &lt;br /&gt;
** [[FR/Meta.xml|Meta.xml]] - Derière chaque ressource ce trouve une meta pour la définir&lt;br /&gt;
** [[FR/ACL|ACL]] - Access Control List, pour définir les autorisations&lt;br /&gt;
* [[FR/Ecrire_Gamemode|Créer un gamemode]]&lt;br /&gt;
* [[FR/Fonctions_Utiles|Fonctions Utiles]]&lt;br /&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;
====Bases de données====&lt;br /&gt;
Cette section décrit toutes les capacités fournies par le LUA/MTA ou par les ressources.&lt;br /&gt;
* [[:Category:Resource|Catalogue des ressources]] - Vous devriez le lire pour réaliser un script approprié.&lt;br /&gt;
* [[FR/Les_scripts_clients| Les scripts clients]]&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;
====Aide générale du LUA====&lt;br /&gt;
Des pages conçues pour aider votre compréhension du Lua&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot;]&lt;br /&gt;
**[http://www.lua.org/manual/5.1/#index Les fonctions Lua]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory wiki Lua]&lt;br /&gt;
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Un guide général au Lua de Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Manuel]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definition Format]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]]&lt;br /&gt;
*[[Resource:Editor#FAQ|Questions Fréquentes]]&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;
====Développer Multi Theft Auto====&lt;br /&gt;
* [[FR/Compiler_MTASA|Compiler MTASA sur Windows]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_Mac_OS_X|Compiler MTASA sur Mac OS X]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_GNU_Linux|Compiler MTASA sur GNU/Linux]]&lt;br /&gt;
* [[FR/Directives_de_codage|Directives de codage]]&lt;br /&gt;
* [http://code.google.com/p/mtasa-blue Google Code SVN]&lt;br /&gt;
* [[FR/Roadmap|Roadmap]]&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;
====Références====&lt;br /&gt;
* [[FR/Fonctions_Clients|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Clients|Events Clients]]&lt;br /&gt;
* [[FR/Fonctions_Serveurs|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Serveurs|Events Clients]]&lt;br /&gt;
&amp;lt;!-- Incomplet * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[FR/MTA Classes|MTA Classes]] - Les descriptions détaillées de tous les types personnalisés MTA&lt;br /&gt;
** [[FR/Element|MTA Elements]] / [[Element tree]]&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|ID Listes]]====&lt;br /&gt;
*[[FR/Animations|Animations]]&lt;br /&gt;
*[[FR/Skins_Personnages|Skins Personnages]]&lt;br /&gt;
*[[FR/Vetements_CJ|Vêtements CJ]]&lt;br /&gt;
*[[FR/Garage|Garage IDs]]&lt;br /&gt;
*[[FR/Interieurs_IDs|Intérieurs IDs]]&lt;br /&gt;
*[[FR/Materiel_IDs|Matériel IDs]]&lt;br /&gt;
*[[FR/Projectiles|Projectiles]]&lt;br /&gt;
*[[FR/Radar Blips|Radar Blips]]&lt;br /&gt;
*[[FR/Sons|Sons]]&lt;br /&gt;
*[[FR/Vehicule_IDs|ID des véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Couleurs|Couleurs véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Upgrades|Tuning IDs]]&lt;br /&gt;
*[[FR/Armes|Armes]]&lt;br /&gt;
*[[FR/Meteos|Météos]]&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;
{{Languages list|fr}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=CreateVehicle&amp;diff=32024</id>
		<title>CreateVehicle</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=CreateVehicle&amp;diff=32024"/>
		<updated>2012-07-27T21:51:00Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Added a &amp;quot;Needs_Checking&amp;quot; for the numberplates which have to contain at least 1 letter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needs_Checking|Numberplates only seem to work for some vehicles, and then only for the front or rear plate only}}&lt;br /&gt;
{{Needs_Checking|Explain the direction parameter which should always be false and what is the point of having a parameter whose value need to be the same all the time. --[[User:MTA SE|MTA SE]] 20:05, 5 July 2012 (UTC)}}&lt;br /&gt;
{{Needs_Checking|The numberplates have to contain at least 1 letter. For example &amp;quot;132&amp;quot; will not work and the function will fail but, &amp;quot;13A&amp;quot; or &amp;quot;132A&amp;quot; will work}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Server client function}}&lt;br /&gt;
{{note_box|Vehicles (and other elements) created client-side are only seen by the client that created them, aren't synced and players cannot enter them. They are essentially for display only.}}&lt;br /&gt;
This function creates a vehicle at the specified location.&lt;br /&gt;
&lt;br /&gt;
Its worth noting that the position of the vehicle is the center point of the vehicle, not its base. As such, you need to ensure that the z value (vertical axis) is some height above the ground. You can find the exact height using the client side function [[getElementDistanceFromCentreOfMassToBaseOfModel]], or you can estimate it yourself and just spawn the vehicle so it drops to the ground.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
vehicle createVehicle ( int model, float x, float y, float z [, float rx, float ry, float rz, string numberplate, bool bDirection, int variant1, int variant2 ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''model''': The [[Vehicle IDs|vehicle ID]] of the vehicle being created.&lt;br /&gt;
* '''x''': A floating point number representing the X coordinate on the map.&lt;br /&gt;
* '''y''': A floating point number representing the Y coordinate on the map.&lt;br /&gt;
* '''z''': A floating point number representing the Z coordinate on the map.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments===&lt;br /&gt;
{{OptionalArg}}&lt;br /&gt;
* '''rx''': A floating point number representing the rotation about the X axis in degrees.&lt;br /&gt;
* '''ry''': A floating point number representing the rotation about the Y axis in degrees.&lt;br /&gt;
* '''rz''': A floating point number representing the rotation about the Z axis in degrees.&lt;br /&gt;
* '''numberplate''': A string that will go on the number plate of the car (max 8 characters). This is only applicable to cars.&lt;br /&gt;
* '''direction''': A boolean which should be set to false. *SERVER ONLY*&lt;br /&gt;
{{New feature/item|3.0120|1.2|| &lt;br /&gt;
* '''variant1''': An integer for the first vehicle variant see [[Vehicle variants]]&lt;br /&gt;
* '''variant2''': An integer for the second vehicle variant see [[Vehicle variants]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the [[vehicle]] element that was created. Returns ''false'' if the arguments are incorrect, or if the vehicle limit of 65535 is exceeded.&lt;br /&gt;
&lt;br /&gt;
==Using trains==&lt;br /&gt;
Trains are created using the createVehicle function. They are placed at the nearest point of the GTASA train pathing (railroad tracks) from their spawning point. &lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Example 1: Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This script spawns a Rhino on top of one lucky individual.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function scriptCreateTank ( player, command )&lt;br /&gt;
      local luckyBugger = getRandomPlayer() -- get a random player&lt;br /&gt;
      local x, y, z = getElementPosition ( luckyBugger ) -- retrive the player's position&lt;br /&gt;
      createVehicle ( 432, x, y, z + 10 ) -- create the tank 10 units above them&lt;br /&gt;
      outputChatBox ( &amp;quot;You got Tank'd!&amp;quot;, luckyBugger )&lt;br /&gt;
end&lt;br /&gt;
--Attach the 'scriptCreateTank' function to the &amp;quot;tank&amp;quot; command&lt;br /&gt;
addCommandHandler ( &amp;quot;tank&amp;quot;, scriptCreateTank )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Example 2: Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This script spawns a Rhino on top of the local player.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function scriptCreateTank ( commandName )&lt;br /&gt;
      local luckyBugger = getLocalPlayer() -- get the local player&lt;br /&gt;
      local x, y, z = getElementPosition ( luckyBugger ) -- retrive the player's position&lt;br /&gt;
      createVehicle ( 432, x, y, z + 10 ) -- create the tank 10 units above them&lt;br /&gt;
      outputChatBox ( &amp;quot;You got Tank'd!&amp;quot;, 255, 0, 0)&lt;br /&gt;
end&lt;br /&gt;
--Attach the 'scriptCreateTank' function to the &amp;quot;tank&amp;quot; command&lt;br /&gt;
addCommandHandler ( &amp;quot;tank&amp;quot;, scriptCreateTank )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Example 3: Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example creates a vehicle five units to the right of a player when they type ''createvehicle'' and its name in the console:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local distance = 5 --units&lt;br /&gt;
&lt;br /&gt;
-- define our handler (we'll take a variable number of parameters where the name goes, because there are vehicle names with more than one word)&lt;br /&gt;
function consoleCreateVehicle ( sourcePlayer, commandName, ... )&lt;br /&gt;
   -- if a player triggered it, not the admin,&lt;br /&gt;
   if ( sourcePlayer ) then&lt;br /&gt;
      -- calculate the position of the vehicle based on the player's position and rotation:&lt;br /&gt;
      local x, y, z = getElementPosition ( sourcePlayer ) -- get the player's position&lt;br /&gt;
      local rotZ = getPedRotation ( sourcePlayer ) -- get the player's rotation around the Z axis in degrees&lt;br /&gt;
      x = x + ( ( math.cos ( math.rad ( rotZ ) ) ) * distance ) -- calculate the X position of the vehicle&lt;br /&gt;
      y = y + ( ( math.sin ( math.rad ( rotZ ) ) ) * distance ) -- calculate the Y position of the vehicle&lt;br /&gt;
&lt;br /&gt;
      -- get the complete vehicle name by joining all passed parameters using Lua function table.concat&lt;br /&gt;
      local vehicleName = table.concat({...}, &amp;quot; &amp;quot;)&lt;br /&gt;
      -- get the vehicle's model ID from the name&lt;br /&gt;
      local vehicleID = getVehicleModelFromName ( vehicleName )&lt;br /&gt;
      -- if vehicle ID is valid,&lt;br /&gt;
      if vehicleID then&lt;br /&gt;
            -- create the vehicle using the information gathered above:&lt;br /&gt;
            local newVehicle = createVehicle ( vehicleID, x, y, z, 0, 0, rotZ )&lt;br /&gt;
            -- if vehicle creation failed, give the player a message&lt;br /&gt;
            if not newVehicle then&lt;br /&gt;
               outputConsole ( &amp;quot;Failed to create vehicle.&amp;quot;, sourcePlayer )&lt;br /&gt;
            end&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Attach the 'consoleCreateVehicle' function to the &amp;quot;createvehicle&amp;quot; command&lt;br /&gt;
addCommandHandler ( &amp;quot;createvehicle&amp;quot;, consoleCreateVehicle )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Vehicle functions}}&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31713</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31713"/>
		<updated>2012-06-30T08:23:52Z</updated>

		<summary type="html">&lt;p&gt;Citizen: /* Troisième exemple - Une carte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouver voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====First example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir des actions relatifs a la map comme:&lt;br /&gt;
** Ouvrir une certaine porte ou faire éxploser quelque chose quand une autre chose de spécifique se produit&lt;br /&gt;
** Créer ou déplacer quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toutes autre choses relatifs aux ojets du .map&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, l'attribut &amp;quot;type&amp;quot; a été changé en 'map', pour dire au [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple de tout à l'heure.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de carte. Évidemment ce n'est pas nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les créateurs de cartes.&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement démaré par le mapmanager et les renseignements qu'il contient peut être lu par le gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples pour savoit comment les ressources de cartes sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31712</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31712"/>
		<updated>2012-06-30T08:13:17Z</updated>

		<summary type="html">&lt;p&gt;Citizen: /* Second example - Un gamemode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouver voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====First example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laisser les joueurs choisirent leur équipe et les faire apparaître&lt;br /&gt;
** Leur fournir des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définir les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un script du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, il modifie le gameplay, mais définit réellement les règles de celui-ci. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de MTA pour contrôler des gamemodes et le chargement de cartes. On recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que ce gamemode ne fonctionnera probablement pas sans carte. Les gamemodes devront toujours être aussi génériques que possible. Un exemple de gamemode utilisant une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir les dispositifs carte-spécifiques, celui-ci peut inclure :&lt;br /&gt;
** En ouvrant une certaine porte/faisant éclater quelque chose quand quelque chose de spécifique se produit&lt;br /&gt;
** Créez ou déplacez quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toute autre chose carte-spécifiques &lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez voir, l'attribut &amp;quot;type&amp;quot; a changé en 'map', dire [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple ci-dessus.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de Carte. Évidemment ce n'est pas nécessairement nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les producteurs de carte pour créer leur propre monde dans les règles du gamemode pour lequel ils le créent. &lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement commencé par le mapmanager et les renseignements qu'il contient peut être lu par la ressource gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples de comment les ressources de carte sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31711</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31711"/>
		<updated>2012-06-30T08:01:49Z</updated>

		<summary type="html">&lt;p&gt;Citizen: faute&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouver voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====First example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laissez les joueurs choisir leur équipe et les apparaitre&lt;br /&gt;
** Fournissez-leur des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définissez les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un manuscrit du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, depuis lui non seulement des intereferes avec le gameplay, mais définit réellement les règles de lui-même. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de QA pour contrôler des gamemodes et le chargement de carte. On lui recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que le gamemode ne fonctionnera pas probablement sans carte. Gamemodes devrait toujours être aussi générique comme possible. Un exemple pour une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir les dispositifs carte-spécifiques, celui-ci peut inclure :&lt;br /&gt;
** En ouvrant une certaine porte/faisant éclater quelque chose quand quelque chose de spécifique se produit&lt;br /&gt;
** Créez ou déplacez quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toute autre chose carte-spécifiques &lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez voir, l'attribut &amp;quot;type&amp;quot; a changé en 'map', dire [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple ci-dessus.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de Carte. Évidemment ce n'est pas nécessairement nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les producteurs de carte pour créer leur propre monde dans les règles du gamemode pour lequel ils le créent. &lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement commencé par le mapmanager et les renseignements qu'il contient peut être lu par la ressource gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples de comment les ressources de carte sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31710</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31710"/>
		<updated>2012-06-30T08:01:24Z</updated>

		<summary type="html">&lt;p&gt;Citizen: /* Troisième exemple - une carte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouver voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====First example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laissez les joueurs choisir leur équipe et les apparaitre&lt;br /&gt;
** Fournissez-leur des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définissez les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un manuscrit du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, depuis lui non seulement des intereferes avec le gameplay, mais définit réellement les règles de lui-même. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de QA pour contrôler des gamemodes et le chargement de carte. On lui recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que le gamemode ne fonctionnera pas probablement sans carte. Gamemodes devrait toujours être aussi générique comme possible. Un exemple pour une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - Une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelsqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir les dispositifs carte-spécifiques, celui-ci peut inclure :&lt;br /&gt;
** En ouvrant une certaine porte/faisant éclater quelque chose quand quelque chose de spécifique se produit&lt;br /&gt;
** Créez ou déplacez quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toute autre chose carte-spécifiques &lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez voir, l'attribut &amp;quot;type&amp;quot; a changé en 'map', dire [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple ci-dessus.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de Carte. Évidemment ce n'est pas nécessairement nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les producteurs de carte pour créer leur propre monde dans les règles du gamemode pour lequel ils le créent. &lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement commencé par le mapmanager et les renseignements qu'il contient peut être lu par la ressource gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples de comment les ressources de carte sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31709</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=31709"/>
		<updated>2012-06-30T08:01:01Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Correction de phrase + réécriture de certaine pour en améliorer la compréhension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouver voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Penchons nous maintenant sur la ''meta.xml'' et ce qu'elle fait.&lt;br /&gt;
&lt;br /&gt;
====First example - Un script utile====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques commandes d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
Cet exemple de script doit tourner tout le temps (peut être même démarré en même temps que le serveur) car ces commandes d'admin peuvent être appelé à n'importe quelle moment.&lt;br /&gt;
&lt;br /&gt;
====Second example - Un gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelqu'un&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laissez les joueurs choisir leur équipe et les apparaitre&lt;br /&gt;
** Fournissez-leur des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définissez les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un manuscrit du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, depuis lui non seulement des intereferes avec le gameplay, mais définit réellement les règles de lui-même. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de QA pour contrôler des gamemodes et le chargement de carte. On lui recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que le gamemode ne fonctionnera pas probablement sans carte. Gamemodes devrait toujours être aussi générique comme possible. Un exemple pour une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Quelsqu'un&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir les dispositifs carte-spécifiques, celui-ci peut inclure :&lt;br /&gt;
** En ouvrant une certaine porte/faisant éclater quelque chose quand quelque chose de spécifique se produit&lt;br /&gt;
** Créez ou déplacez quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toute autre chose carte-spécifiques &lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez voir, l'attribut &amp;quot;type&amp;quot; a changé en 'map', dire [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple ci-dessus.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de Carte. Évidemment ce n'est pas nécessairement nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les producteurs de carte pour créer leur propre monde dans les règles du gamemode pour lequel ils le créent. &lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement commencé par le mapmanager et les renseignements qu'il contient peut être lu par la ressource gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples de comment les ressources de carte sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]].&lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:Page_d%27accueil&amp;diff=29814</id>
		<title>Talk:Page d'accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:Page_d%27accueil&amp;diff=29814"/>
		<updated>2012-03-30T13:49:35Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Main discussion started&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Citizen:'''&lt;br /&gt;
Je suis en train de créer toutes les pages du wiki fr pour qu'il ne reste plus qu'à traduire.&lt;br /&gt;
I'm creating all the pages for the french wiki, then the contributors will just click on Edit to translate that page.&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Vehicule_Couleurs&amp;diff=29810</id>
		<title>FR/Vehicule Couleurs</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Vehicule_Couleurs&amp;diff=29810"/>
		<updated>2012-03-30T13:44:03Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Reprise des pages afin de pouvoir les traduire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the vehicle colors you can use with [[setVehicleColor]] and [[getVehicleColor]].&lt;br /&gt;
{{Vehicle colors}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[id|ID Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ID Lists]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Vetements_CJ&amp;diff=29802</id>
		<title>FR/Vetements CJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Vetements_CJ&amp;diff=29802"/>
		<updated>2012-03-30T13:39:56Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Reprise des pages afin de pouvoir les traduire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These pages contain clothing images and details for all of CJ's apparel.&lt;br /&gt;
&lt;br /&gt;
*[[CJ Clothes\Shirt (0)|Type 0 - Shirt]]&lt;br /&gt;
*[[CJ Clothes\Head (1)|Type 1 - Head]]&lt;br /&gt;
*[[CJ Clothes\Trousers (2)|Type 2 - Trousers]]&lt;br /&gt;
*[[CJ Clothes\Shoes (3)|Type 3 - Shoes]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Left Upper Arm (4)|Type 4 - Tattoos: Left Upper Arm]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Left Lower Arm (5)|Type 5 - Tattoos: Left Lower Arm]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Right Upper Arm (6)|Type 6 - Tattoos: Right Upper Arm]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Right Lower Arm (7)|Type 7 - Tattoos: Right Lower Arm]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Back (8)|Type 8 - Tattoos: Back]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Left Chest (9)|Type 9 - Tattoos: Left Chest]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Right Chest (10)|Type 10 - Tattoos: Right Chest]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Stomach (11)|Type 11 - Tattoos: Stomach]]&lt;br /&gt;
*[[CJ Clothes\Tattoos: Lower Back (12)|Type 12 - Tattoos: Lower Back]]&lt;br /&gt;
*[[CJ Clothes\Necklace (13)|Type 13 - Necklace]]&lt;br /&gt;
*[[CJ Clothes\Watches (14)|Type 14 - Watches]]&lt;br /&gt;
*[[CJ Clothes\Glasses (15)|Type 15 - Glasses]]&lt;br /&gt;
*[[CJ Clothes\Hats (16)|Type 16 - Hats]]&lt;br /&gt;
*[[CJ Clothes\Extra (17)|Type 17 - Extra]]&lt;br /&gt;
&lt;br /&gt;
[[it:Vestiti di CJ]]&lt;br /&gt;
[[ru:CJ Clothes]]&lt;br /&gt;
[[Category:Scripting Concepts]]&lt;br /&gt;
[[Category:ID Lists]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Skins_Personnages&amp;diff=29801</id>
		<title>FR/Skins Personnages</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Skins_Personnages&amp;diff=29801"/>
		<updated>2012-03-30T13:39:19Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Reprise des pages afin de pouvoir les traduire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Skins that the player may use (pedestrian skins).&lt;br /&gt;
&lt;br /&gt;
*[[All Skins Page]] - Not recommended for slow Internet&lt;br /&gt;
*[[Special Skins Page]] - New skins available after MTA 1.1&lt;br /&gt;
&lt;br /&gt;
'''Sectioned Skin Pages:'''&lt;br /&gt;
----&lt;br /&gt;
*[[Skins Page 1]]: 7, 9-29&lt;br /&gt;
*[[Skins Page 2]]: 30-41, 43-52&lt;br /&gt;
*[[Skins Page 3]]: 53-64, 66-73, 75-76&lt;br /&gt;
*[[Skins Page 4]]: 77-85, 87-99&lt;br /&gt;
*[[Skins Page 5]]: 100-118, 120-122&lt;br /&gt;
*[[Skins Page 6]]: 123-144&lt;br /&gt;
*[[Skins Page 7]]: 145-148, 150-167&lt;br /&gt;
*[[Skins Page 8]]: 168-189&lt;br /&gt;
*[[Skins Page 9]]: 190-207, 209-212&lt;br /&gt;
*[[Skins Page 10]]: 213-234&lt;br /&gt;
*[[Skins Page 11]]: 235-238, 240-257&lt;br /&gt;
*[[Skins Page 12]]: 258-264, 274-288&lt;br /&gt;
&lt;br /&gt;
==Notes:==&lt;br /&gt;
*12 pages: 266 total.&lt;br /&gt;
&lt;br /&gt;
*IDs 1-8 (except 7) are non-functional&lt;br /&gt;
&lt;br /&gt;
*The following pairs of IDs produce same character (1st ID used in lists, 2nd disabled)&lt;br /&gt;
**118:119 &lt;br /&gt;
**148:149&lt;br /&gt;
&lt;br /&gt;
*Non-working IDs&lt;br /&gt;
1-6&lt;br /&gt;
8&lt;br /&gt;
42&lt;br /&gt;
65&lt;br /&gt;
74&lt;br /&gt;
86&lt;br /&gt;
119&lt;br /&gt;
149&lt;br /&gt;
208&lt;br /&gt;
239&lt;br /&gt;
265-273&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[id|ID Lists]]&lt;br /&gt;
&lt;br /&gt;
[[it:Skin Personaggi]]&lt;br /&gt;
[[ru:Character Skins]]&lt;br /&gt;
[[es:Skins de Personajes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ID Lists]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=29799</id>
		<title>FR/A propos des Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=29799"/>
		<updated>2012-03-30T13:25:44Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Problème du &amp;quot;rgb(127, 0, 127);&amp;quot; class=&amp;quot;sectionSubCaption&amp;quot;&amp;gt;Resource&amp;quot; Résolu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needs Checking|Either complete the translation or remove it.}}&lt;br /&gt;
Le &amp;quot;Map manager&amp;quot; est une ressource inclue dans la suite serveur de MTA DM. Elle offre des commandes, fonctions et événements pour les modes de jeu afin de dynamiser vos maps. Par exemple, quand un serveur doit charger plusieurs routes pour plusieurs maps, au lieu d'avoir le tout dans un seul script principal, ces routes peuvent êtres stockée dans plusieurs ressources et chargée simplement grâce à la fonction &amp;quot;changeGamemodeMap&amp;quot; quand une map démarre.&lt;br /&gt;
&lt;br /&gt;
Plus spécifiquement, le &amp;quot;Map manager&amp;quot; liste les modes de jeux et maps chargés sur le serveur. Il inclut un listing sur l'interface web, il rafraîchit cette liste fréquemment et met en gras les ressources et/ou maps actuellement entrain d'être utilisées. &lt;br /&gt;
&lt;br /&gt;
== Un Simple Tutoriel ==&lt;br /&gt;
Dans cette section nous allons poursuivre le travail commencé dans [[FR/Introduction_Programmation|Introduction to Scripting]]. Nous allons ajouter une ressource qui enregistre l'endroit de spawn des joueurs sur la map, le chargement de ce script se fera depuis le script principal.&lt;br /&gt;
&lt;br /&gt;
Premièrement, créez un dossier dans /Your MTA Server/mods/deathmatch/resources/, nommez-le &amp;quot;mymap&amp;quot;. Ensuite dans ce dossier, créez un fichier texte et nommez-le &amp;quot;meta.xml&amp;quot;, ce fichier est présent dans chaque scripts.&lt;br /&gt;
&lt;br /&gt;
Ecrivez les lignes suivantes dans le fichier ''meta.xml'' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
   &amp;lt;info type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;myserver&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;map src=&amp;quot;mymap.map&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Prenez garde car ce fichier est &amp;quot;lié&amp;quot; avec le ''gamemodes=&amp;quot;&amp;quot;'' choisit, qui contient le nom de la ressource principale qu'utilise ce mode. le paramètre ''map'', indique le nom de la map qui sera afficher sur le serveur.&lt;br /&gt;
&lt;br /&gt;
Maintenant créez un nouveau fichier texte dans /mymap/ et nommez le &amp;quot;mymap.map&amp;quot;, écrivez y les lignes suivantes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map&amp;gt;&lt;br /&gt;
   &amp;lt;spawnpoint id=&amp;quot;spawnpoint1&amp;quot; posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;18&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Notez que &amp;quot;spawnpoint&amp;quot; est le type de l'élément utilisé dans la fonction [[getElementsByType]], &amp;quot;id&amp;quot; est utilisée dans la fonction [[getElementByID]]&lt;br /&gt;
&lt;br /&gt;
Pour charger la map, le script principal doit pouvoir accéder aux maps par lui même. Quelques modifications sont à apportées dans script.lua situé dans &amp;quot;myserver&amp;quot;. Entrez les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function loadMap(startedMap)&lt;br /&gt;
	mapRoot = getResourceRootElement(startedMap)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), loadMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par défaut, l'evênement &amp;quot;onGamemodeMapStart&amp;quot; nous donne le &amp;quot;handle&amp;quot;(?) de la map (&amp;quot;startedMap&amp;quot;), lequel nous avons utilisé pour le &amp;quot;handle&amp;quot;(?) de la ressource contenant la map (&amp;quot;mapRoot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Avec la ressource &amp;quot;handle&amp;quot;(?), nous pouvons extraire les informations relatives au spawnpoint. Jetez un œil à la fonction joinHandler() dans script.lua, à la place de x, y and z, nous pouvons utiliser les informations de la map comme suit :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local spawn = getElementsByType(&amp;quot;spawnpoint&amp;quot;, mapRoot)&lt;br /&gt;
	local x,y,z,r&lt;br /&gt;
	for key, value in pairs(spawn) do&lt;br /&gt;
		x = getElementData(value, &amp;quot;posX&amp;quot;)&lt;br /&gt;
		y = getElementData(value, &amp;quot;posY&amp;quot;)&lt;br /&gt;
		z = getElementData(value, &amp;quot;posZ&amp;quot;)&lt;br /&gt;
		r = getElementData(value, &amp;quot;rot&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Lancez maintenant votre gamemode avec la commande suivante via la console:&lt;br /&gt;
&lt;br /&gt;
'''gamemode myserver mymap'''&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Pour utiliser le map manager, vos ressources doivent d'abord être reconnues en tant que gamemodes ou maps.&lt;br /&gt;
&lt;br /&gt;
Vous devez remplir quelques informations pour votre fichier de configuration du '''gamemode resource''' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;Votre Gamemode&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Map resources''' Les maps ont aussi besoin d'information dans le meta.xml, ''type=&amp;quot;map&amp;quot;'' et un ou plusieurs ''gamemodes''. Une map peut en effet être compatible avec plusieurs mode de jeu pour se faire il faudra séparer les modes par une virgule ''sans espaces''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;A gamemode map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;ctv,koth&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne peut y avoir qu’un mode de jeu 'Gamemode' Actif ou une map chargée à la fois.&lt;br /&gt;
&lt;br /&gt;
==Paramètres Supplémentaires==&lt;br /&gt;
Ces paramètres sont aussi à ajouter dans meta.xml.&lt;br /&gt;
&lt;br /&gt;
'''name:''' Entrez ici un message sympa qui sera afficher lors du démarrage de la ressource. C'est en quelques sorte un alias au cas ou le nom de votre ressource ne vous correspond pas.&lt;br /&gt;
&lt;br /&gt;
==Commandes==&lt;br /&gt;
'''changemap newmap [newgamemode]''' (changer le 'Gamemode' d'une map)&lt;br /&gt;
&lt;br /&gt;
'''changemode newgamemode [newmap]''' (lancer un mode de jeu 'Gamemode' et démarrez une map)&lt;br /&gt;
&lt;br /&gt;
'''gamemode newgamemode [newmap]''' (idem que la précédente)&lt;br /&gt;
&lt;br /&gt;
'''stopmode''' (Arrête le mode de jeu et la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''stopmap''' (Arrête la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''maps [gamemode]''' (liste toutes les maps sur le serveurs, ajoutez en option le mode pour lequel vous voulez connaître les maps)&lt;br /&gt;
&lt;br /&gt;
'''gamemodes''' (Liste tout les mode de jeu)&lt;br /&gt;
&lt;br /&gt;
==Paramètres==&lt;br /&gt;
'''*mapmanager.color''' [hex color string] (change la couleur de sortie des message du mapmanager) (Par défaut : #E1AA5A)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.messages''' [boolean] (si les changements de map/gm sont activés) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.ASE''' [boolean] (si le manager doit charger en mode ASE) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
==Autres fonctions==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Changement de mode de jeu, on peut aussi lui donner une map initial à charger.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change le mode de jeu d'une map pour un nouveau, on peut choisir un mode de jeu à charger une fois cette map rechargée.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodes ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Renvoie une table des tout les modes de jeu et leur pointeurs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodesCompatibleWithMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of compatible gamemode resource pointers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMaps ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of all map resource pointers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of compatible map resource pointers. If the gamemode is left blank, it returns all maps which aren't compatible with any gamemode.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns the currently running gamemode's resource pointer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns the currently running GM map's resource pointer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemode ( resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a resource is a gamemode or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a gamemode is compatible with a map or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a resource is a map or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a map is compatible with a gamemode or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Stops the current gamemode and its map.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Stop the current GM map.&lt;br /&gt;
Determines if a map is compatible with a gamemode or not.&lt;br /&gt;
&lt;br /&gt;
==Fired events==&lt;br /&gt;
''(For all these events, &amp;quot;source&amp;quot; is the resource's root element.)''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStart ( resource startedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a gamemode starts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStop ( resource stoppedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a gamemode is stopped.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStart ( resource startedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a GM map starts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStop ( resource stoppedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a GM map is stopped.&lt;br /&gt;
&lt;br /&gt;
==Supported map settings==&lt;br /&gt;
The following settings from the [[settings system|registry]] are applied by the map manager when a map is started:&lt;br /&gt;
&amp;lt;br&amp;gt;'''gamespeed''' [number]: The map's game speed.&lt;br /&gt;
&amp;lt;br&amp;gt;'''gravity''' [number]: The map's gravity.&lt;br /&gt;
&amp;lt;br&amp;gt;'''time''' [string of the form '''hh:mm''']: The map's time.&lt;br /&gt;
&amp;lt;br&amp;gt;'''weather''' [number]: The map's weather ID.&lt;br /&gt;
&amp;lt;br&amp;gt;'''waveheight''' [number]: The map's wave height.&lt;br /&gt;
&amp;lt;br&amp;gt;'''locked_time''' [boolean]: Whether the set time will be frozen by the manager or not.&lt;br /&gt;
&amp;lt;br&amp;gt;'''minplayers''' [number]: The required minimum number of players to start the map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''maxplayers''' [number]: The allowed maximum number of players to start the map.&lt;br /&gt;
&lt;br /&gt;
[[it:Map manager]]&lt;br /&gt;
[[ru:Resource:Mapmanager]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=29798</id>
		<title>FR/A propos des Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=29798"/>
		<updated>2012-03-30T13:21:07Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Modification du lien pour qu'il pointe vers la page en français&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needs Checking|Either complete the translation or remove it.}}&lt;br /&gt;
{{Resource page}}&lt;br /&gt;
Le &amp;quot;Map manager&amp;quot; est une ressource inclue dans la suite serveur de MTA DM. Elle offre des commandes, fonctions et événements pour les modes de jeu afin de dynamiser vos maps. Par exemple, quand un serveur doit charger plusieurs routes pour plusieurs maps, au lieu d'avoir le tout dans un seul script principal, ces routes peuvent êtres stockée dans plusieurs ressources et chargée simplement grâce à la fonction &amp;quot;changeGamemodeMap&amp;quot; quand une map démarre.&lt;br /&gt;
&lt;br /&gt;
Plus spécifiquement, le &amp;quot;Map manager&amp;quot; liste les modes de jeux et maps chargés sur le serveur. Il inclut un listing sur l'interface web, il rafraîchit cette liste fréquemment et met en gras les ressources et/ou maps actuellement entrain d'être utilisées. &lt;br /&gt;
&lt;br /&gt;
== Un Simple Tutoriel ==&lt;br /&gt;
Dans cette section nous allons poursuivre le travail commencé dans [[FR/Introduction_Programmation|Introduction to Scripting]]. Nous allons ajouter une ressource qui enregistre l'endroit de spawn des joueurs sur la map, le chargement de ce script se fera depuis le script principal.&lt;br /&gt;
&lt;br /&gt;
Premièrement, créez un dossier dans /Your MTA Server/mods/deathmatch/resources/, nommez-le &amp;quot;mymap&amp;quot;. Ensuite dans ce dossier, créez un fichier texte et nommez-le &amp;quot;meta.xml&amp;quot;, ce fichier est présent dans chaque scripts.&lt;br /&gt;
&lt;br /&gt;
Ecrivez les lignes suivantes dans le fichier ''meta.xml'' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
   &amp;lt;info type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;myserver&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;map src=&amp;quot;mymap.map&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Prenez garde car ce fichier est &amp;quot;lié&amp;quot; avec le ''gamemodes=&amp;quot;&amp;quot;'' choisit, qui contient le nom de la ressource principale qu'utilise ce mode. le paramètre ''map'', indique le nom de la map qui sera afficher sur le serveur.&lt;br /&gt;
&lt;br /&gt;
Maintenant créez un nouveau fichier texte dans /mymap/ et nommez le &amp;quot;mymap.map&amp;quot;, écrivez y les lignes suivantes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map&amp;gt;&lt;br /&gt;
   &amp;lt;spawnpoint id=&amp;quot;spawnpoint1&amp;quot; posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;18&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Notez que &amp;quot;spawnpoint&amp;quot; est le type de l'élément utilisé dans la fonction [[getElementsByType]], &amp;quot;id&amp;quot; est utilisée dans la fonction [[getElementByID]]&lt;br /&gt;
&lt;br /&gt;
Pour charger la map, le script principal doit pouvoir accéder aux maps par lui même. Quelques modifications sont à apportées dans script.lua situé dans &amp;quot;myserver&amp;quot;. Entrez les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function loadMap(startedMap)&lt;br /&gt;
	mapRoot = getResourceRootElement(startedMap)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), loadMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par défaut, l'evênement &amp;quot;onGamemodeMapStart&amp;quot; nous donne le &amp;quot;handle&amp;quot;(?) de la map (&amp;quot;startedMap&amp;quot;), lequel nous avons utilisé pour le &amp;quot;handle&amp;quot;(?) de la ressource contenant la map (&amp;quot;mapRoot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Avec la ressource &amp;quot;handle&amp;quot;(?), nous pouvons extraire les informations relatives au spawnpoint. Jetez un œil à la fonction joinHandler() dans script.lua, à la place de x, y and z, nous pouvons utiliser les informations de la map comme suit :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local spawn = getElementsByType(&amp;quot;spawnpoint&amp;quot;, mapRoot)&lt;br /&gt;
	local x,y,z,r&lt;br /&gt;
	for key, value in pairs(spawn) do&lt;br /&gt;
		x = getElementData(value, &amp;quot;posX&amp;quot;)&lt;br /&gt;
		y = getElementData(value, &amp;quot;posY&amp;quot;)&lt;br /&gt;
		z = getElementData(value, &amp;quot;posZ&amp;quot;)&lt;br /&gt;
		r = getElementData(value, &amp;quot;rot&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Lancez maintenant votre gamemode avec la commande suivante via la console:&lt;br /&gt;
&lt;br /&gt;
'''gamemode myserver mymap'''&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Pour utiliser le map manager, vos ressources doivent d'abord être reconnues en tant que gamemodes ou maps.&lt;br /&gt;
&lt;br /&gt;
Vous devez remplir quelques informations pour votre fichier de configuration du '''gamemode resource''' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;Votre Gamemode&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Map resources''' Les maps ont aussi besoin d'information dans le meta.xml, ''type=&amp;quot;map&amp;quot;'' et un ou plusieurs ''gamemodes''. Une map peut en effet être compatible avec plusieurs mode de jeu pour se faire il faudra séparer les modes par une virgule ''sans espaces''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;A gamemode map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;ctv,koth&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne peut y avoir qu’un mode de jeu 'Gamemode' Actif ou une map chargée à la fois.&lt;br /&gt;
&lt;br /&gt;
==Paramètres Supplémentaires==&lt;br /&gt;
Ces paramètres sont aussi à ajouter dans meta.xml.&lt;br /&gt;
&lt;br /&gt;
'''name:''' Entrez ici un message sympa qui sera afficher lors du démarrage de la ressource. C'est en quelques sorte un alias au cas ou le nom de votre ressource ne vous correspond pas.&lt;br /&gt;
&lt;br /&gt;
==Commandes==&lt;br /&gt;
'''changemap newmap [newgamemode]''' (changer le 'Gamemode' d'une map)&lt;br /&gt;
&lt;br /&gt;
'''changemode newgamemode [newmap]''' (lancer un mode de jeu 'Gamemode' et démarrez une map)&lt;br /&gt;
&lt;br /&gt;
'''gamemode newgamemode [newmap]''' (idem que la précédente)&lt;br /&gt;
&lt;br /&gt;
'''stopmode''' (Arrête le mode de jeu et la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''stopmap''' (Arrête la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''maps [gamemode]''' (liste toutes les maps sur le serveurs, ajoutez en option le mode pour lequel vous voulez connaître les maps)&lt;br /&gt;
&lt;br /&gt;
'''gamemodes''' (Liste tout les mode de jeu)&lt;br /&gt;
&lt;br /&gt;
==Paramètres==&lt;br /&gt;
'''*mapmanager.color''' [hex color string] (change la couleur de sortie des message du mapmanager) (Par défaut : #E1AA5A)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.messages''' [boolean] (si les changements de map/gm sont activés) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.ASE''' [boolean] (si le manager doit charger en mode ASE) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
==Autres fonctions==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Changement de mode de jeu, on peut aussi lui donner une map initial à charger.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change le mode de jeu d'une map pour un nouveau, on peut choisir un mode de jeu à charger une fois cette map rechargée.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodes ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Renvoie une table des tout les modes de jeu et leur pointeurs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodesCompatibleWithMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of compatible gamemode resource pointers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMaps ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of all map resource pointers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of compatible map resource pointers. If the gamemode is left blank, it returns all maps which aren't compatible with any gamemode.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns the currently running gamemode's resource pointer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns the currently running GM map's resource pointer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemode ( resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a resource is a gamemode or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a gamemode is compatible with a map or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a resource is a map or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a map is compatible with a gamemode or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Stops the current gamemode and its map.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Stop the current GM map.&lt;br /&gt;
Determines if a map is compatible with a gamemode or not.&lt;br /&gt;
&lt;br /&gt;
==Fired events==&lt;br /&gt;
''(For all these events, &amp;quot;source&amp;quot; is the resource's root element.)''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStart ( resource startedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a gamemode starts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStop ( resource stoppedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a gamemode is stopped.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStart ( resource startedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a GM map starts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStop ( resource stoppedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a GM map is stopped.&lt;br /&gt;
&lt;br /&gt;
==Supported map settings==&lt;br /&gt;
The following settings from the [[settings system|registry]] are applied by the map manager when a map is started:&lt;br /&gt;
&amp;lt;br&amp;gt;'''gamespeed''' [number]: The map's game speed.&lt;br /&gt;
&amp;lt;br&amp;gt;'''gravity''' [number]: The map's gravity.&lt;br /&gt;
&amp;lt;br&amp;gt;'''time''' [string of the form '''hh:mm''']: The map's time.&lt;br /&gt;
&amp;lt;br&amp;gt;'''weather''' [number]: The map's weather ID.&lt;br /&gt;
&amp;lt;br&amp;gt;'''waveheight''' [number]: The map's wave height.&lt;br /&gt;
&amp;lt;br&amp;gt;'''locked_time''' [boolean]: Whether the set time will be frozen by the manager or not.&lt;br /&gt;
&amp;lt;br&amp;gt;'''minplayers''' [number]: The required minimum number of players to start the map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''maxplayers''' [number]: The allowed maximum number of players to start the map.&lt;br /&gt;
&lt;br /&gt;
[[it:Map manager]]&lt;br /&gt;
[[ru:Resource:Mapmanager]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=29784</id>
		<title>Page d'accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Page_d%27accueil&amp;diff=29784"/>
		<updated>2012-03-30T13:01:17Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Suppression du FR/ à l'affichage dans le menu&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;Dernière version stable de '''Multi Theft Auto: San Andreas''' est '''{{Current Version|full}}'''. Rendez-vous sur la [http://mtasa.com/ page principale] pour la télécharger.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Vous pouvez aussi télécharger une [http://nightly.mtasa.com/ beta] pour avoir la dernière version ( non stable ).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Bienvenue sur le wiki de Multi Theft Auto. Sur ce wiki, vous trouverez toutes les informations sur Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Il y a [[How you can help|différents moyens de nous aider]]: créer une map, un gamemode, rediger des articles sur des fonctions, écrire un exemple, écrire un tutorial ou juste jouer à MTA et nous rapportez les bugs trouvés.&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;
====Pour commencer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Manuel_Client|Manuel Client]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:DrawKiie DrawKiie] )&lt;br /&gt;
* [[FR/Manuel_Serveur|Manuel Serveur]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Problemes_connus|Problèmes connus]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/Migrer_de_MTARace_a_MTASA_1.0.x|Migrer de MTA:Race à MTA:SA 1.0.x]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&gt;
* [[FR/A propos des Map|A propos des Map]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Rouche Rouche] )&lt;br /&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;
====Programmer====&lt;br /&gt;
&lt;br /&gt;
* [[FR/Introduction_Programmation|Introduction: La programmation]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:Citizen Citizen] )&lt;br /&gt;
* [[FR/Introduction_GUI|Introduction: Le GUI]] ( Traduction: [http://wiki.multitheftauto.com/wiki/User:FatalTeror FatalTerror] )&lt;br /&gt;
* [[FR/Debugage|Tutoriel: Le débugage]] - Comment trouver les erreurs dans son script (Traduction:[http://wiki.multitheftauto.com/wiki/User:Vincenzo Vincenzo] alias Vincentdu90)&lt;br /&gt;
* [[FR/Ressources|Introduction: Les ressources]]&lt;br /&gt;
** [[FR/Ressource_Acces_Internet|Introduction: L'accès internet]] - Comment créer un site à partir d'une ressource&lt;br /&gt;
** [[:Category:Resource|Catalogue des ressources]]&lt;br /&gt;
** [[FR/Meta.xml|Meta.xml]] - Derière chaque ressource ce trouve une meta pour la définir&lt;br /&gt;
** [[FR/ACL|ACL]] - Access Control List, pour définir les autorisations&lt;br /&gt;
* [[FR/Ecrire_Gamemode|Créer un gamemode]]&lt;br /&gt;
* [[FR/Fonctions_Utiles|Fonctions Utiles]]&lt;br /&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;
====Bases de données====&lt;br /&gt;
Cette section décrit toutes les capacités fournient par le LUA/MTA ou par les ressources.&lt;br /&gt;
* [[:Category:Resource|Catalogue des ressources]] - Vous devez le lire pour faire un script appropriés&lt;br /&gt;
* [[FR/Les_scripts_clients| Les scripts clients]]&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;
====Aide générale du LUA====&lt;br /&gt;
Des pages conçues pour aider votre compréhension du Lua&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot;]&lt;br /&gt;
**[http://www.lua.org/manual/5.1/#index Les fonctions Lua]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory wiki Lua]&lt;br /&gt;
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Un guide général au Lua de Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[Resource:Editor|Manuel]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definition Format]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Plugins]]&lt;br /&gt;
*[[Resource:Editor#FAQ|Questions Fréquentes]]&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;
====Développer Multi Theft Auto====&lt;br /&gt;
* [[FR/Compiler_MTASA|Compiler MTASA sur Windows]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_Mac_OS_X|Compiler MTASA sur Mac OS X]]&lt;br /&gt;
* [[FR/Compiler_MTASA_Server_sur_GNU_Linux|Compiler MTASA sur GNU/Linux]]&lt;br /&gt;
* [[FR/Directives_de_codage|Directives de codage]]&lt;br /&gt;
* [http://code.google.com/p/mtasa-blue Google Code SVN]&lt;br /&gt;
* [[FR/Roadmap|Roadmap]]&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;
====Références====&lt;br /&gt;
* [[FR/Fonctions_Clients|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Clients|Events Clients]]&lt;br /&gt;
* [[FR/Fonctions_Serveurs|Fonctions Clients]]&lt;br /&gt;
* [[FR/Events_Serveurs|Events Clients]]&lt;br /&gt;
&amp;lt;!-- Incomplet * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[FR/MTA Classes|MTA Classes]] - Les descriptions détaillées de tous les types personnalisés MTA&lt;br /&gt;
** [[FR/Element|MTA Elements]] / [[Element tree]]&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|ID Listes]]====&lt;br /&gt;
*[[FR/Animations|Animations]]&lt;br /&gt;
*[[FR/Skins_Personnages|Skins Personnages]]&lt;br /&gt;
*[[FR/Vetements_CJ|Vêtements CJ]]&lt;br /&gt;
*[[FR/Garage|Garage IDs]]&lt;br /&gt;
*[[FR/Interieurs_IDs|Intérieurs IDs]]&lt;br /&gt;
*[[FR/Materiel_IDs|Matériel IDs]]&lt;br /&gt;
*[[FR/Projectiles|Projectiles]]&lt;br /&gt;
*[[FR/Radar Blips|Radar Blips]]&lt;br /&gt;
*[[FR/Sons|Sons]]&lt;br /&gt;
*[[FR/Vehicule_IDs|ID des véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Couleurs|Couleurs véhicules]]&lt;br /&gt;
*[[FR/Vehicule_Upgrades|Tuning IDs]]&lt;br /&gt;
*[[FR/Armes|Armes]]&lt;br /&gt;
*[[FR/Meteos|Météos]]&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;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Debugage&amp;diff=29783</id>
		<title>FR/Debugage</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Debugage&amp;diff=29783"/>
		<updated>2012-03-30T12:48:44Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Created page with &amp;quot;Quand vous scriptez vous pouvez passer à côté de certaines erreurs qui ne sont pas apparentes au premier coup d’œil. Cette page va essayer de vous indiquer quelques démarc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quand vous scriptez vous pouvez passer à côté de certaines erreurs qui ne sont pas apparentes au premier coup d’œil. Cette page va essayer de vous indiquer quelques démarches à suivre pour localiser les erreurs.&lt;br /&gt;
&lt;br /&gt;
==Console de Débogage==&lt;br /&gt;
MTA a pour caractéristique de posséder une console de débogage qui comme son nom l'indique vous permet de déceler les erreurs dans les fonctions et scripts. Vous pouvez l'ouvrir en tapant ''debugscript x'' dans la console, ici ''x'' est le niveau de débogage:&lt;br /&gt;
* '''1:''' seulement les erreurs&lt;br /&gt;
* '''2:''' erreurs et warnings&lt;br /&gt;
* '''3:''' erreurs, warnings et messages d'informations&lt;br /&gt;
Ainsi, en tapant ''debugscript 3'' tout les messages seront visibles, cependant le niveau 2 est recommandé la plupart du temps pour le débogage. Quand vous testez vos scripts vous devez avoir le ''debugscript'' à disposition  , cela vous permettra de détecter facilement les fautes d'orthographes dans les fonctions ou toutes autres erreurs aussi simple.&lt;br /&gt;
&lt;br /&gt;
===Exemple===&lt;br /&gt;
L'exemple ci-dessous contient deux erreurs:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if (getPlayerName(player) == &amp;quot;Fedor&amp;quot;)&lt;br /&gt;
	outputChatbox(&amp;quot;Hello Fedor&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Quand ce bout de code va être chargé, debugscript va vous renvoyer à peu près ceci:&lt;br /&gt;
{{Debug info|Loading script failed: C:\&amp;lt;server path&amp;gt;\mods\deathmatch\resources\myResource\script.lua:15: 'then' expected near ´outputChatbox'}}&lt;br /&gt;
Cela signifie que le code ne peut-être analysé/traité, car il y a une erreur de syntaxe. On vous montre le répertoire où se trouve le fichier, vous pouvez donc voir dans quelle ressource ce dernier se trouve ('myResource' dans notre cas) et bien sûr on vous donne le nom du fichier en question. Après le nom du fichier, on a le numéro de la ligne et encore après l'erreur/problème en question. C'est bien plus facile à résoudre maintenant, il manque juste 'then':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if (getPlayerName(player) == &amp;quot;Fedor&amp;quot;) then&lt;br /&gt;
	outputChatbox(&amp;quot;Hello Fedor&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A présent le bout de code se charge et ne renvoie aucune erreur, jusqu'à ce qu'un joueur avec le pseudo 'Fedor' fasse son apparition. Le debugscript va nous renvoyer alors:&lt;br /&gt;
{{Debug error|C:\&amp;lt;server path&amp;gt;\mods\deathmatch\resources\d\script.lua:15: attempt to call global 'outputChatbox' (a nil value)}}&lt;br /&gt;
Cela signifie que la fonction appelée n'existe pas, cela s'explique facilement par le fait que le nom de la fonction est ''outputChatBox'' (avec une capitale ''B''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if (getPlayerName(player) == &amp;quot;Fedor&amp;quot;) then&lt;br /&gt;
	outputChatBox(&amp;quot;Hello Fedor&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci n'est bien sûr qu'un exemple, il y a une multitude d'autres erreurs et problèmes, mais vous avez au moins une idée du débogage.&lt;br /&gt;
&lt;br /&gt;
==Debug logging==&lt;br /&gt;
You can also turn debug message logging on by editing ''coreconfig.xml'' in your GTA\MTA folder. You should find the following tag:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;debugfile/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace that with a tag specifying the file you want to log messages to (file path is relative from the GTA folder):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;debugfile&amp;gt;MTA\debugscript.log&amp;lt;/debugfile&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All debug messages will be appended to the specified file from now on. To turn logging off, replace that line with an empty tag again.&lt;br /&gt;
&lt;br /&gt;
==Debug strategies==&lt;br /&gt;
There are several strategies that support finding errors, apart from going through the code of course. Most of them include outputting debug messages, with differing information depending on the situtation.&lt;br /&gt;
&lt;br /&gt;
===Useful functions===&lt;br /&gt;
First of all some functions that may come in handy for debugging.&lt;br /&gt;
* [[outputDebugString]] or [[outputChatBox]] for outputting any information&lt;br /&gt;
* [http://www.lua.org/manual/5.1/manual.html#pdf-tostring tostring()] on a variable to turn it into a string, for example when it contains a boolean value&lt;br /&gt;
* [[getElementType]] to check an MTA Element for its type&lt;br /&gt;
&lt;br /&gt;
===Ajouter un message pour vérifier quand une condition ''if'', ''when'' or ''how often'' est executée===&lt;br /&gt;
Un exemple typique qui vérifie si une condition ''if''est executée ou non. Pour faire ceci, il vous suffit d'ajoutez un message que vous reconnaîtrez lorsqu'il s'affichera quand la condition sera executée.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if (variable1 == variable2) then&lt;br /&gt;
	outputDebugString(&amp;quot;entered if&amp;quot;)&lt;br /&gt;
	-- Instruction&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Une autre pratique serait de vérifier quand est-ce que la valeur de la variable est modifiée. Il faut pour cela chercher le moment où la variable est modifiée et ajouter une fonction qui permet l'affichage d'un message juste après.&lt;br /&gt;
&lt;br /&gt;
===Afficher un message pour vérifier la &amp;quot;valeur&amp;quot; d'une variable===&lt;br /&gt;
Prenons le cas ou vous voulez créer un checkpoint (marqueur), mais ce dernier n'apparaît pas à la position attendu. La première chose que vous allez faire sera de vérifier si la fonction [[createMarker]] est executée. Au lieu de faire ceci, vous pouvez vérifier les valeurs qui sont utilisées par la fonction [[createMarker]].&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
outputChatBox(tostring(x)..&amp;quot; &amp;quot;..tostring(y)..&amp;quot; &amp;quot;..tostring(z))&lt;br /&gt;
createMarker(x,y,z)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce code aura pour conséquence de vous afficher un message avec les trois valeurs des variables qui sont utilisées en tant que coordonnées pour le marqueur. Vous pouvez maintenant comparer les valeurs obtenues avec celle désirées. Le [http://www.lua.org/manual/5.1/manual.html#pdf-tostring tostring()] vous permettra de vous assurer que les valeurs des variables seront transformées en &amp;quot;string&amp;quot; (chaîne), même si c'est un boléen.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Imagine you created a colshape (collision shape) somewhere and you want a player to stay 10 seconds in it, then perform some action.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function colShapeHit(player)&lt;br /&gt;
	-- set a timer to output a message (could as well execute another function)&lt;br /&gt;
	-- store the timer id in a table, using the player as index&lt;br /&gt;
	colshapeTimer[player] = setTimer(outputChatBox,10000,1,&amp;quot;The player stayed 10 seconds in the colshape!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeHit&amp;quot;,getRootElement(),colShapeHit)&lt;br /&gt;
&lt;br /&gt;
function colShapeLeave(player)&lt;br /&gt;
	-- kill the timer when the player leaves the colshape&lt;br /&gt;
	killTimer(colshapeTimer[player])&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeLeave&amp;quot;,getRootElement(),colShapeLeave)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
When a player enters the colshape, debugscript outputs the following message:&lt;br /&gt;
{{Debug error|..[path]: attempt to index global 'colshapeTimer' (a nil value)}}&lt;br /&gt;
This means you tried to index a table that does not exist. In the example above, this is done when storing the timer id in the table. We need to add a check if the table exists and if not create it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function colShapeHit(player)&lt;br /&gt;
	if (colshapeTimer == nil) then&lt;br /&gt;
		colshapeTimer = {}&lt;br /&gt;
	end&lt;br /&gt;
	-- set a timer to output a message (could as well execute another function)&lt;br /&gt;
	-- store the timer id in a table, using the player as index&lt;br /&gt;
	colshapeTimer[player] = setTimer(outputChatBox,10000,1,&amp;quot;The player stayed 10 seconds in the colshape!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeHit&amp;quot;,getRootElement(),colShapeHit)&lt;br /&gt;
&lt;br /&gt;
function colShapeLeave(player)&lt;br /&gt;
	-- kill the timer when the player leaves the colshape&lt;br /&gt;
	killTimer(colshapeTimer[player])&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeLeave&amp;quot;,getRootElement(),colShapeLeave)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we still get a warning when a player enters the colshape, waits for the message and leaves it again:&lt;br /&gt;
&lt;br /&gt;
{{Debug warning|[..]: Bad argument @ 'killTimer' Line: ..}}&lt;br /&gt;
&lt;br /&gt;
Except for that (we will talk about that later) everything seems to work fine. A player enters the colshape, the timer is started, if he stays the message occurs, if he leaves the timer is killed.&lt;br /&gt;
&lt;br /&gt;
===A more inconspicuous error===&lt;br /&gt;
But for some reason the message gets outputted twice when you stay in the colcircle while in a vehicle. Since it would appear some code is executed twice, we add debug messages to check this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function colShapeHit(player)&lt;br /&gt;
	if (colshapeTimer == nil) then&lt;br /&gt;
		colshapeTimer = {}&lt;br /&gt;
	end&lt;br /&gt;
	-- add a debug message&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeHit&amp;quot;)&lt;br /&gt;
	-- set a timer to output a message (could as well execute another function)&lt;br /&gt;
	-- store the timer id in a table, using the player as index&lt;br /&gt;
	colshapeTimer[player] = setTimer(outputChatBox,10000,1,&amp;quot;The player stayed 10 seconds in the colshape!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeHit&amp;quot;,getRootElement(),colShapeHit)&lt;br /&gt;
&lt;br /&gt;
function colShapeLeave(player)&lt;br /&gt;
	-- add a debug message&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeLeave&amp;quot;)&lt;br /&gt;
	-- kill the timer when the player leaves the colshape&lt;br /&gt;
	killTimer(colshapeTimer[player])&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeLeave&amp;quot;,getRootElement(),colShapeLeave)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we notice that both handler functions get executed twice when we are in a vehicle, but only once when we are on-foot. It would appear the vehicle triggers the colshape as well. To confirm this theory, we check the ''player'' variable that '''should''' contain a player element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function colShapeHit(player)&lt;br /&gt;
	if (colshapeTimer == nil) then&lt;br /&gt;
		colshapeTimer = {}&lt;br /&gt;
	end&lt;br /&gt;
	-- add a debug message, with the element type&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeHit &amp;quot;..getElementType(player))&lt;br /&gt;
	-- set a timer to output a message (could as well execute another function)&lt;br /&gt;
	-- store the timer id in a table, using the player as index&lt;br /&gt;
	colshapeTimer[player] = setTimer(outputChatBox,10000,1,&amp;quot;The player stayed 10 seconds in the colshape!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeHit&amp;quot;,getRootElement(),colShapeHit)&lt;br /&gt;
&lt;br /&gt;
function colShapeLeave(player)&lt;br /&gt;
	-- add a debug message, with the element type&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeLeave &amp;quot;..getElementType(player))&lt;br /&gt;
	-- kill the timer when the player leaves the colshape&lt;br /&gt;
	killTimer(colshapeTimer[player])&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeLeave&amp;quot;,getRootElement(),colShapeLeave)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The debug messages tell us that one of the ''player'' variables is a player, the other one a vehicle element. Since we only want to react when a player enters the colshape, we add an ''if'' that will end the execution of the function if it's '''not''' an player element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function colShapeHit(player)&lt;br /&gt;
	if (colshapeTimer == nil) then&lt;br /&gt;
		colshapeTimer = {}&lt;br /&gt;
	end&lt;br /&gt;
	-- add a check for the element type&lt;br /&gt;
	if (getElementType(player) ~= &amp;quot;player&amp;quot;) then return end&lt;br /&gt;
	-- add a debug message, with the element type&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeHit &amp;quot;..getElementType(player))&lt;br /&gt;
	-- set a timer to output a message (could as well execute another function)&lt;br /&gt;
	-- store the timer id in a table, using the player as index&lt;br /&gt;
	colshapeTimer[player] = setTimer(outputChatBox,10000,1,&amp;quot;The player stayed 10 seconds in the colshape!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeHit&amp;quot;,getRootElement(),colShapeHit)&lt;br /&gt;
&lt;br /&gt;
function colShapeLeave(player)&lt;br /&gt;
	-- add a check for the element type&lt;br /&gt;
	if (getElementType(player) ~= &amp;quot;player&amp;quot;) then return end&lt;br /&gt;
	-- add a debug message, with the element type&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeLeave &amp;quot;..getElementType(player))&lt;br /&gt;
	-- kill the timer when the player leaves the colshape&lt;br /&gt;
	killTimer(colshapeTimer[player])&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeLeave&amp;quot;,getRootElement(),colShapeLeave)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the script should work as desired, but will still output the warning mentioned above. This happens because the timer we try to kill when a player leaves the colshape will not exist anymore when it reached the 10 seconds and is executed. There are different ways to get rid of that warning (since you know that the timer might not exist anymore and you only want to kill it if it is there). One way would be to check if the timer referenced in the table really exists. To do this, we need to use [[isTimer]], which we will use when we kill the timer:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if (isTimer(colshapeTimer[player])) then&lt;br /&gt;
	killTimer(colshapeTimer[player])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So the complete working code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function colShapeHit(player)&lt;br /&gt;
	if (colshapeTimer == nil) then&lt;br /&gt;
		colshapeTimer = {}&lt;br /&gt;
	end&lt;br /&gt;
	-- add a check for the element type&lt;br /&gt;
	if (getElementType(player) ~= &amp;quot;player&amp;quot;) then return end&lt;br /&gt;
	-- add a debug message, with the element type&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeHit &amp;quot;..getElementType(player))&lt;br /&gt;
	-- set a timer to output a message (could as well execute another function)&lt;br /&gt;
	-- store the timer id in a table, using the player as index&lt;br /&gt;
	colshapeTimer[player] = setTimer(outputChatBox,10000,1,&amp;quot;The player stayed 10 seconds in the colshape!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeHit&amp;quot;,getRootElement(),colShapeHit)&lt;br /&gt;
&lt;br /&gt;
function colShapeLeave(player)&lt;br /&gt;
	-- add a check for the element type&lt;br /&gt;
	if (getElementType(player) ~= &amp;quot;player&amp;quot;) then return end&lt;br /&gt;
	-- add a debug message, with the element type&lt;br /&gt;
	outputDebugString(&amp;quot;colShapeLeave &amp;quot;..getElementType(player))&lt;br /&gt;
	-- kill the timer when the player leaves the colshape&lt;br /&gt;
	if (isTimer(colshapeTimer[player])) then&lt;br /&gt;
		killTimer(colshapeTimer[player])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onColShapeLeave&amp;quot;,getRootElement(),colShapeLeave)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Debugging Performance Issues==&lt;br /&gt;
&lt;br /&gt;
If your server is using up more resources than it should or you just want to make sure your scripts are efficient you can find the cause using a great tool that comes with MTA SA server, performancebrowser. Make sure that its started with &amp;quot;start performancebrowser&amp;quot; if it doesn't exist then get it from the default resources that come with the server. This tool provides an incredible amount of information for performance debugging. Memory leaks, element leaks and CPU intensive scripts are all easily findable via performancebrowser. If you use -d option in Lua timing you can see which functions are using up the CPU.&lt;br /&gt;
&lt;br /&gt;
To access performancebrowser you will need to go to your web browser and enter the address: http://serverIPHere:serverHTTPPortHere/performancebrowser/ Note that the / at the end is required. So for example: http://127.0.0.1:22005/performancebrowser/ You will then need to login with an in-game admin account or any account that has access to &amp;quot;general.HTTP&amp;quot; Most of the information you will need are in the categories Lua timing and Lua memory, look for values that are much higher than other values.&lt;br /&gt;
&lt;br /&gt;
===Examples of scripts that could cause performance problems===&lt;br /&gt;
&lt;br /&gt;
Adding data to a table but never removing it. This would take months/years before it causes a problem though.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local someData = {}&lt;br /&gt;
&lt;br /&gt;
function storeData()&lt;br /&gt;
    someData[source] = true&lt;br /&gt;
    -- There is no handling for when a player quits, this is considered a memory leak&lt;br /&gt;
    -- Using the Lua timing tab you can detect the RAM usage of each resource.&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, root, storeData)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Element leaking is possible if you use temporary colshapes for whatever reason and may not destroy them. This would cause bandwidth, CPU and memory performance issues over time.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function useTemporaryCol()&lt;br /&gt;
    local col = createColCircle(some code here)&lt;br /&gt;
    if (normally this should happen) then&lt;br /&gt;
        destroyElement(col)&lt;br /&gt;
    end&lt;br /&gt;
    -- But sometimes it didn't so the script ended but the collision area remained and over time&lt;br /&gt;
    -- you may end up with hundreds to thousands of pointless collision areas. &lt;br /&gt;
    -- The Lua timing tab allows you to see the amount of elements each script has created.&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High CPU usage resulting in the server FPS dropping so much that the server is unplayable. In under 24 hours this can create havoc on a very busy server. The amount of &amp;quot;refs&amp;quot; in the Lua timing detect this type of build up, surprisingly the Lua timing tab didn't help in this case but Lua memory did.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, root, function()&lt;br /&gt;
    -- Code for joiner&lt;br /&gt;
    addEventHandler(&amp;quot;onPlayerQuit&amp;quot;, root, function()&lt;br /&gt;
        -- Code for when they have quit&lt;br /&gt;
        -- See the problem? It's bound to root which the event handler is being added again and again and again&lt;br /&gt;
    end)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function uses up a lot of your CPU because whatever it does takes a long time. This is just some function that takes a long time to complete. Without performancebrowser you'd have no idea its the cause but with performancebrowser you can see that a resource is using lots of CPU in the Lua timing tab. If you then enter: -d into the options edit box it will even tell you what file name and first line of the function that is using up so much CPU.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function someDodgyCode()&lt;br /&gt;
    for i=1, 100000 do&lt;br /&gt;
        -- some code&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[it:Guida al Debug]]&lt;br /&gt;
[[Category:Scripting Concepts]]&lt;br /&gt;
[[ru:Debugging]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_GUI&amp;diff=29782</id>
		<title>FR/Introduction GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_GUI&amp;diff=29782"/>
		<updated>2012-03-30T12:48:34Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Created page with &amp;quot;&amp;lt;!-- place holder --&amp;gt; Une des grandes caractéristiques de MTA:SA c'est d'avoir la possibilité de personnaliser l'interface. Plus couramment appelé GUI(Graphic User Interface)....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- place holder --&amp;gt;&lt;br /&gt;
Une des grandes caractéristiques de MTA:SA c'est d'avoir la possibilité de personnaliser l'interface. Plus couramment appelé GUI(Graphic User Interface). L'interface graphique se compose de fenêtres, bouton, les boîtes d'édition, des cases à cocher ... Les GUI peuvent être affichés lorsque l'utilisateur est en jeu.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|Le panel admin(GUI)]]&lt;br /&gt;
&lt;br /&gt;
==Un tutoriel pour créer une fenêtre de connexion==&lt;br /&gt;
Dans ce tutoriel, nous allons faire une fenêtre de connexion simple avec deux boites de saisie et un bouton.&lt;br /&gt;
La fenêtre apparaîtra lorsque le joueur rejoindra le jeu et une fois que le joueur appuiera sur le bouton.&lt;br /&gt;
&lt;br /&gt;
===Créer la fenêtre de connexion===&lt;br /&gt;
Tous les GUI doivent être crée dans le coté client. Pour vous simplifier la vie, créez votre code dans des dossiers séparé.&lt;br /&gt;
Les fichiers client vous les mettez dans le dossier client que vous avez créer.&lt;br /&gt;
&lt;br /&gt;
Allez sur /Votre Server MTA/mods/deathmatch/resources/votreserver/, et créez un dossier du nom de &amp;quot;login&amp;quot;.&lt;br /&gt;
Puis dans ce répertoire créer le dosser &amp;quot;client&amp;quot;. (login/client)&lt;br /&gt;
Créez un fichier texte et nommez le &amp;quot;gui.lua&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Dans ce fichier nous allons écrire une fonction pour créer notre fenêtre. Pour créer une fenetre vous allez devoir utiliser [[guiCreateWindow]]: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createLoginWindow()&lt;br /&gt;
	-- on définie les positions de la fenêtre&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	-- on définie la taille de la fenêtre&lt;br /&gt;
	local Width = 0.25&lt;br /&gt;
	local Height = 0.25&lt;br /&gt;
	-- créez la fenêtre et sauvegardez cette élément sous la variable 'wdwLogin'&lt;br /&gt;
	-- cliquez sur le nom de la fonction pour regarder sa documentation&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Width, Height, &amp;quot;Veuillez vous connecter&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Relatif et Absolu ===&lt;br /&gt;
Notez que l'argument final passé à guiCreateWindow dans l'exemple ci-dessus est ''true''. Cela indique que l'ensemble et les dimensions de la fenêtre sont ''relative'', en signifiant qu'ils sont un ''percentage'' de la grandeur d'écran totale. Cela signifie que si le côté gauche lointain de l'écran est 0 et le droit lointain est 1, une position X de 0.5 représenterait le point de centre de l'écran. De même si le haut de l'écran est 0 et le fond est 1, une position Y de 0.2 serait 20 % de la voie en bas l'écran. Les mêmes principes s'appliquent tant à Largeur qu'à Hauteur aussi (avec une valeur de Largeur de 0.5 sens la fenêtre sera la moitié aussi large que l'écran). &lt;br /&gt;
&lt;br /&gt;
L'alternative à l'utilisation des valeurs relatives utilise absolu (en passant ''false'' au lieu de ''true'' pour guiCreateWindow). Les valeurs absolues sont calculées comme le nombre total de pixels du coin gauche-supérieur du parent (si aucun parent d'élément gui n'est spécifié, le parent est l'écran lui-même). Si nous supposons une résolution d'écran de 1920x1200, le côté gauche lointain de l'écran étant 0 pixels et le droit lointain étant 1920 pixels, une position X de 960 représentera le point de centre de l'écran. De même si le haut de l'écran est 0 pixels et le fond est 1200, une position Y de 20 serait 20 pixels en bas du haut de l'écran. La même pomme de principes tant à la Largeur qu'à la Hauteur aussi (avec une valeur de Largeur de 50 sens la fenêtre sera 50 pixels larges). Vous pouvez utiliser guiGetScreenSize et des petites mathématiques pour calculer certaines positions absolues. &lt;br /&gt;
&lt;br /&gt;
Les différences entre l'utilisation des valeurs relatives et absolues sont tout à fait simples; les valeurs absolues utilisatrices de données de gui resteront toujours exactement la même grandeur de pixel et la position, pendant que les valeurs relatives utilisatrices de données de gui seront toujours un pourcentage de sa grandeur parentale. &lt;br /&gt;
&lt;br /&gt;
L'absolu est généralement plus facile de maintenir en révisant le code à la main, pourtant votre choix de type dépend de la situation dont vous l'utilisez. &lt;br /&gt;
&lt;br /&gt;
Pour les buts de cette introduction nous utiliserons des valeurs relatives.&lt;br /&gt;
&lt;br /&gt;
===Adding the components===&lt;br /&gt;
Next, we'll add the text labels (saying &amp;quot;username:&amp;quot; and &amp;quot;password:&amp;quot;), edit boxes (for entering your data) and a button to log in.&lt;br /&gt;
&lt;br /&gt;
To create buttons we use [[guiCreateButton]] and to create edit boxes use [[guiCreateEdit]]:&lt;br /&gt;
&lt;br /&gt;
'''Note that we are now writing more code for our existing 'createLoginWindow' function. This is not a new function and is meant to replace what you already have.''' &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createLoginWindow()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Width = 0.25&lt;br /&gt;
	local Height = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Width, Height, &amp;quot;Please Log In&amp;quot;, true)&lt;br /&gt;
	&lt;br /&gt;
	-- define new X and Y positions for the first label&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	-- define new Width and Height values for the first label&lt;br /&gt;
	Width = 0.25&lt;br /&gt;
	Height = 0.25&lt;br /&gt;
	-- create the first label, note the final argument passed is 'wdwLogin' meaning the window&lt;br /&gt;
	-- we created above is the parent of this label (so all the position and size values are now relative to the position of that window)&lt;br /&gt;
	guiCreateLabel(X, Y, Width, Height, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	-- alter the Y value, so the second label is slightly below the first&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Width, Height, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Width = 0.5&lt;br /&gt;
	Height = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Width, Height, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Width, Height, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	-- set the maximum character length for the username and password fields to 50&lt;br /&gt;
	guiEditSetMaxLength(edtUser, 50)&lt;br /&gt;
	guiEditSetMaxLength(edtPass, 50)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.7&lt;br /&gt;
	Width = 0.25&lt;br /&gt;
	Height = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Width, Height, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	-- make the window invisible&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that every GUI component created is a child of the window, this is done by specifying the parent element (wdwLogin, in this case) when creating the component. &lt;br /&gt;
&lt;br /&gt;
This is very useful because not only does it mean that all the components are attached to the window and will move with it, but also that any changes done to the parent window will be applied down the tree to these child components. For example, we can now hide all of the GUI we just created by simply hiding the window:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --hides all the GUI we made so we can show them to the player at the appropriate moment. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the function we wrote===&lt;br /&gt;
The createLoginWindow function is now complete, but it won't do anything until we call it. It is recommended to create all GUI when the client resource starts, hide them, and show them to the player later when needed. Therefore, we'll write an event handler for &amp;quot;[[onClientResourceStart]]&amp;quot; to create the window:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- attach the event handler to the root element of the resource&lt;br /&gt;
-- this means it will only trigger when its own resource is started&lt;br /&gt;
addEventHandler(&amp;quot;onClientResourceStart&amp;quot;, getResourceRootElement(getThisResource()), &lt;br /&gt;
	function ()&lt;br /&gt;
		createLoginWindow()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As this is a log in window, we now need to show the window when the player joins the game. &lt;br /&gt;
This can be done using the same event, &amp;quot;[[onClientResourceStart]]&amp;quot;, so we can modify the above code to include showing the window:&lt;br /&gt;
&lt;br /&gt;
'''Note that we are now writing more code for our existing 'onClientResourceStart' handler. This is not a new event handler and is meant to replace what you already have.''' &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientResourceStart&amp;quot;, getResourceRootElement(getThisResource()), &lt;br /&gt;
	function ()&lt;br /&gt;
		-- create the log in window and its components&lt;br /&gt;
		createLoginWindow()&lt;br /&gt;
&lt;br /&gt;
		-- output a brief welcome message to the player&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA:SA Server, please log in.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		-- if the GUI was successfully created, then show the GUI to the player&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
			guiSetVisible(wdwLogin, true)&lt;br /&gt;
		else&lt;br /&gt;
			-- if the GUI hasnt been properly created, tell the player&lt;br /&gt;
			outputChatBox(&amp;quot;An unexpected error has occurred and the log in GUI has not been created.&amp;quot;)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
		-- enable the players cursor (so they can select and click on the components)&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
		-- set the input focus onto the GUI, allowing players (for example) to press 'T' without the chatbox opening&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we have a simple security check before making the window visible, so in the unlikely event that the window has not been created, meaning wdwLogin is not a valid element, we don't get an error and just inform the player what has happened. &lt;br /&gt;
In the next step, we will create the button functionality for the log in button.&lt;br /&gt;
&lt;br /&gt;
==Scripting the button==&lt;br /&gt;
Now that we have created our GUI and shown it to the player, we need to make it work. &lt;br /&gt;
&lt;br /&gt;
===Detecting the click===&lt;br /&gt;
When the player clicks on any part of the GUI, the event &amp;quot;[[onClientGUIClick]]&amp;quot; will be triggered for the GUI component you clicked on. This allows us to easily detect any clicks on the GUI elements we want to use.&lt;br /&gt;
For example, we can attach the event to the btnLogin button to catch any clicks on it:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- attach the event onClientGUIClick to btnLogin and set it to trigger the 'clientSubmitLogin' function&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''Note the final argument passed is &amp;quot;false&amp;quot;. This indicates that the event will only trigger directly on btnLogin, not if the event has propagated up or down the tree. Setting this to &amp;quot;true&amp;quot; while attaching to gui elements will mean that clicking on any element in the same branch will trigger this event.'''&lt;br /&gt;
&lt;br /&gt;
This line of code can now be added inside the createLoginWindow function. It is a common mistake to try and attach events to non-existant GUI elements, so make sure you always attach your events '''after''' the gui element (in this case, the button) has been created:&lt;br /&gt;
&lt;br /&gt;
'''Note that we are now writing more code for our existing 'createLoginWindow' function.''' &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createLoginWindow()&lt;br /&gt;
	-- create all our GUI elements&lt;br /&gt;
	...&lt;br /&gt;
&lt;br /&gt;
	-- now add our onClientGUIClick event to the button we just created&lt;br /&gt;
	addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Managing the click===&lt;br /&gt;
Now that we can detect when the player clicks on the button, we need to write code to manage what happens when they do.&lt;br /&gt;
In our [[onClientGUIClick]] event handle, we told it to call the function clientSubmitLogin whenever btnLogin is clicked.&lt;br /&gt;
Therefore, we can now use the function clientSubmitLogin to control what happens when the button is clicked:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- create the function and define the 'button' and 'state' parameters&lt;br /&gt;
-- (these are passed automatically by onClientGUIClick)&lt;br /&gt;
function clientSubmitLogin(button,state)&lt;br /&gt;
	-- if our login button was clicked with the left mouse button, and the state of the mouse button is up&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; and state == &amp;quot;up&amp;quot; then&lt;br /&gt;
		-- move the input focus back onto the game (allowing players to move around, open the chatbox, etc)&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		-- hide the window and all the components&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		-- hide the mouse cursor&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Now, when the button is clicked, the window will be hidden and all controls will be returned to the player. Next, we will tell the server to allow the player to spawn.&lt;br /&gt;
&lt;br /&gt;
===Triggering the server===&lt;br /&gt;
Triggering the server can be done using [[triggerServerEvent]]. This allows you to trigger a specified event on the server from the client. The same can be done in reverse using [[triggerClientEvent]].&lt;br /&gt;
Here, we use the [[triggerServerEvent]] function to call our own custom event on the server, named &amp;quot;submitLogin&amp;quot;, which will then control the spawning of the player serverside.&lt;br /&gt;
&lt;br /&gt;
'''Note that we are now writing more code for our existing 'clientSubmitLogin' function. This is not a new function and is meant to replace what you already have.''' &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button,state)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; and state == &amp;quot;up&amp;quot; then&lt;br /&gt;
		-- get the text entered in the 'username' field&lt;br /&gt;
		local username = guiGetText(edtUser)&lt;br /&gt;
		-- get the text entered in the 'password' field&lt;br /&gt;
		local password = guiGetText(edtPass)&lt;br /&gt;
&lt;br /&gt;
		-- if the username and password both exist&lt;br /&gt;
		if username and password then&lt;br /&gt;
			-- trigger the server event 'submitLogin' and pass the username and password to it&lt;br /&gt;
			triggerServerEvent(&amp;quot;submitLogin&amp;quot;, getRootElement(), username, password)&lt;br /&gt;
&lt;br /&gt;
			-- hide the gui, hide the cursor and return control to the player&lt;br /&gt;
			guiSetInputEnabled(false)&lt;br /&gt;
			guiSetVisible(wdwLogin, false)&lt;br /&gt;
			showCursor(false)&lt;br /&gt;
		else&lt;br /&gt;
			-- otherwise, output a message to the player, do not trigger the server&lt;br /&gt;
			-- and do not hide the gui&lt;br /&gt;
			outputChatBox(&amp;quot;Please enter a username and password.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating the serverside event===&lt;br /&gt;
At this point we now have all the code needed on the client side, so open up your serverside 'script.lua' file (from the [[Scripting Introduction|Introduction to Scripting]]) or another suitable serverside file to work with.&lt;br /&gt;
&lt;br /&gt;
On the server side, recall that we are spawning the player as soon as they login.&lt;br /&gt;
So, first of all, we will need to define the custom event that we used before on the client. This can be done using [[addEvent]] and [[addEventHandler]].&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- create our loginHandler function, with username and password parameters (passed from the client gui)&lt;br /&gt;
function loginHandler(username,password)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- define our custom event, and allow it to be triggered from the client ('true')&lt;br /&gt;
addEvent(&amp;quot;submitLogin&amp;quot;,true)&lt;br /&gt;
-- add an event handler so that when submitLogin is triggered, the function loginHandler is called&lt;br /&gt;
addEventHandler(&amp;quot;submitLogin&amp;quot;,root,loginHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logging in===&lt;br /&gt;
Now we have a function that is called through the custom event 'submitLogin', we can start to work on logging in and spawning the player, using our 'loginHandler' function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function loginHandler(username,password)&lt;br /&gt;
	-- check that the username and password are correct&lt;br /&gt;
	if username == &amp;quot;user&amp;quot; and password == &amp;quot;apple&amp;quot; then&lt;br /&gt;
		-- the player has successfully logged in, so spawn them&lt;br /&gt;
		if (client) then&lt;br /&gt;
			spawnPlayer(client, 1959.55, -1714.46, 10)&lt;br /&gt;
			fadeCamera(client, true)&lt;br /&gt;
                        setCameraTarget(client, client)&lt;br /&gt;
			outputChatBox(&amp;quot;Welcome to My Server.&amp;quot;, client)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- if the username or password are not correct, output a message to the player&lt;br /&gt;
		outputChatBox(&amp;quot;Invalid username and password. Please re-connect and try again.&amp;quot;,client)&lt;br /&gt;
        end			&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;submitLogin&amp;quot;,true)&lt;br /&gt;
addEventHandler(&amp;quot;submitLogin&amp;quot;,root,loginHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''For the purposes of this tutorial, a very basic username and password system is shown. For a more comprehensive alternative, you can use the Account System or a MySQL database.'''&lt;br /&gt;
&lt;br /&gt;
Also note the use of the variable &amp;quot;client&amp;quot;, it's an internal variable used by MTA to identify the player who triggered the event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, do not forget to include the new gui.lua file in the meta.xml of the main resource, and label it as a client script:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client/gui.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, we now have a basic login window that checks the player's username and password when the login button is clicked. If they are correct, the player is automatically spawned.&lt;br /&gt;
&lt;br /&gt;
For further help with GUI, see the [[:Category:GUI_Tutorials|GUI tutorials]].&lt;br /&gt;
&lt;br /&gt;
[[Category:GUI_Tutorials]]&lt;br /&gt;
[[it:Introduzione_allo_scripting_della_GUI]]&lt;br /&gt;
[[ru:Introduction to Scripting the GUI]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=29781</id>
		<title>FR/Introduction Programmation</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/Introduction_Programmation&amp;diff=29781"/>
		<updated>2012-03-30T12:48:17Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Created page with &amp;quot;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource d...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les ressources sont les parties clées de MTA. Une ressource est un dossier ou un .zip qui contient plusieurs fichiers, ainsi qu'une meta qui dit au serveur comment la resource doit-elle être chargée. Une ressource peut être comparée comme un programme qu'on peut lancer ou arrêter, il est possible de lancer plusieurs ressources en même temps.&lt;br /&gt;
&lt;br /&gt;
Tout ce qui a un rapport avec la programmation se passe dans les ressources, se que fait la ressource, définie si c'est un gamemode, une map or quelquechose d'autre. MTA s'installe avec des resources que vous pouvez facultativement utiliser dans vos gamemodes, comme la ressource &amp;quot;maplimits&amp;quot; pour garder les joueurs dans une certaine zone ou encore &amp;quot;deathpickups&amp;quot; pour créer des pickups pour ramasser une arme.&lt;br /&gt;
&lt;br /&gt;
'''La première chose à faire avant de pouvoir programmer en lua, c'est de se procurer un editeur de texte qui supporte le lua. Il vous sera beaucoups plus facile que de le faire avec le bloc-note de Windows. Nous vous recommendons donc [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] ou [http://luaedit.sourceforge.net/ LuaEdit]. Il y a aussi un logiciel non officiel [[MTASE|MTA Script Editor]] ( malheureusement l'auteur ne travail plus dessus ) que vous pouvez tester.'''&lt;br /&gt;
&lt;br /&gt;
==Créer un script qui fonctionne==&lt;br /&gt;
Nous allons voir tout d'abord comment créer un simple script étapes par étapes qui permetra aux joueurs de se deplacer dans la ville. Dans ce tutoriel, on utilisera notepadd++.&lt;br /&gt;
===Où sont tous les scripts ?===&lt;br /&gt;
Laissez moi d'abord vous présenter comment s'oranise une ressource. Allez dans votre dossier MTA San et et suivez le chemin suivant:&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Vous y verez de nombreux fichier avec l'extension .zip, se sont des ressources avec à l'intérieur des exemples de scripts . Toutes les ressources chargées sont dézippé par le serveur afin de pouvoir les exécuter ( les .zip ne sont pas obligatiores, vous pouvez aussi laissez votre ressource en tant que dossier ). Pour créer votre propre ressource, créez simplement un nouveau dossier et nommez le comme vous voulez ( Ne pas utiliser d'espace, utilisez plutôt un _ ) . Nommez le &amp;quot;myserveur&amp;quot; pour ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Maintenant entrez dans votre dossier. Le chemain devrait donc être&lt;br /&gt;
&lt;br /&gt;
	/serveur/mods/deathmatch/resources/myserveur/&lt;br /&gt;
&lt;br /&gt;
===Identifier votre ressource===&lt;br /&gt;
Pour que le serveur puisse savoir ce que contient votre ressource, un fichier ''meta.xml'' doit être créé afin d'établir une liste du contenu du dossier. Cette 'meta.xml' doit être à la racine de votre ressource ( et non pas dans un autre sous-dossier ), donc dans le dossier &amp;quot;myserveur&amp;quot; dans notre cas. Donc ouvrez notepadd++, créer un nouveau fichier (Ctrl+N), puis faite &amp;quot;Enregistrez sous ...&amp;quot; (Ctrl+Alt+S), dans &amp;quot;Nom:&amp;quot; vous écrivez &amp;quot;meta&amp;quot; et dans &amp;quot;Type:&amp;quot;, sélectionnez &amp;quot;*.xml&amp;quot; ( avant-dernier de la liste ), sauvegardez le dans votre dossier &amp;quot;myserveur&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Maintenant, ecrivez le code suivant dans votre ''meta.xml'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;Votre Nom&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Mon serveur&amp;quot; description=&amp;quot;Mon premier serveur MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dans la balise ''&amp;lt;info /&amp;gt;'', il y a le champ &amp;quot;type&amp;quot; qui indique si la ressource est un ''gamemode'' ou une ''map'', on y reviendra plus tard. Un gamemode est ce dont vous avez besoin pour que votre serveur est une base. &lt;br /&gt;
&lt;br /&gt;
La balise ''&amp;lt;script /&amp;gt;'' indique les scripts qui sont dans la ressource, que l'on va maintenant créer.&lt;br /&gt;
===Créer un script simple===&lt;br /&gt;
Notez que dans la balise ''&amp;lt;script /&amp;gt;'', le fichier .lua n'est pas dans un autre sous-dossier. Donc on va créer notre script.lua au même endroit que notre meta.xml ( Reproduisez la même opération mais &amp;quot;Nom:&amp;quot; écrivez 'script' et pour &amp;quot;Type:&amp;quot; choisissez 'Lua(*.lua)' ) puis copier-coller le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Bienvenue sur mon serveur&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce script va fous faire apparître aux coordonnées (x, y, z) spécifié dans le code, lorsque vous connecterez au serveur. La fonction ''fadeCamera'' sinon l'écran restera noir. Vous devez aussi dire à la camera de suivre le joueur grâce à la fonction 'setCameraTarget' (sinon il vera une mer bleu).&lt;br /&gt;
&lt;br /&gt;
La variable '''source''' indique qui 'déclenche' la fonction. Le fonction se 'déclenche' lorsqu'un joueur rejoind le serveur, vous utiliserez cette variable pour voir qui à rejoind le serveur. Donc lorsque un joueur( &amp;quot;la source&amp;quot; ) rejoindra notre serveur, on le fera apparaître aux coordonnées indiquées .&lt;br /&gt;
&lt;br /&gt;
Focalisons-nous sur [[addEventHandler]], vous pouver voir 3 choses: 'onPlayerJoin', qui indique quand éxécuter la fonction X. getRootElement(), qui indique qui/quoi peut être déclencher la fonction (getRootElement() veut dire toutes les choses et tous les joueurs). Et enfin la fonction X à éxecuter ( ici joinHandler ). Pour les autres details, nous verrons plus tard dans d'autres exemples mais tout d'abord testons notre premier gamemode!&lt;br /&gt;
&lt;br /&gt;
===Lancer le gamemode===&lt;br /&gt;
Pour lancer le serveur, lancer simplement le 'MTA Server.exe' qui se trouve dans votre dossier 'MTA San et\server'. Une liste d'info concernant le serveur apparaîtra en premier; notez le port du serveur ( 22003 par défaut ), vous en aurez besoin pour rejoindre le serveur. Après, le serveur charge toutes les ressources du dossier 'resource', et enfin &amp;quot;ready to accept connections!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir vous connecter, vous devez lancer votre gamemode. Tapez &amp;quot;start myserver&amp;quot; et appuyer sur Entrer. Le serveur va alors lancer le gamemode que nous avons créé, et nous affichera aussi les erreurs s'il y en a. Maintenant, vous pouvez maintenant lancer MTA, cliquez sur &amp;quot;Quick Connect&amp;quot; et ecrivez ceci: Dans Host: le1er champ: 127.0.0.1 ou localhost ( cela signifie que vous vous connectez au serveur du pc actuel ) et le 2ème champ: le port ( ici 22003 ) et cliquez sur 'Connect'. Si tout se passe bien, après quelques secondes, vous devriez apparaître et pouvoir allez où vous voulez.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous allons créer une commande que les joueurs pourront utiliser pour faire apparître une voiture à coté d'eux.&lt;br /&gt;
&lt;br /&gt;
==Créer une commande==&lt;br /&gt;
Revenons à l'intérieur de notre ''script.lua''. Tout d'abord, nous devons créer une fonction qu'on pourra appeler/éxécuter grâce à notre commande et la fonction 'addCommandHandler' afin de créer la commande que les joueurs pourront taper dans le chat( T ) ou la console( F8 ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- On crée la fonction qui sera appelée par notre commande avec les arguments: thePlayer, command, vehicleModel&lt;br /&gt;
function createVehicleForPlayer(thePlayer, commandName, vehicleModel)&lt;br /&gt;
   -- Ici on crée le véhicule&lt;br /&gt;
end&lt;br /&gt;
-- on crée la commande et on l'attache à notre fonction&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Note: Grâce au wiki, vous pouvez cliquer sur le nom des fonctions et cela vous redirigera sur la documentation de cette fonction.''&lt;br /&gt;
&lt;br /&gt;
====A propos du addCommandHandler====&lt;br /&gt;
Le premier argument du [[addCommandHandler]] est le nom de la commande the player will be able to enter, le second le nom de la fonction à appeler, dans notre cas, ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Si vous avez déjà de l'expérience dans le codage, vous savez qu'un fonction s'appelle comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nomDeLaFonction(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si l'on regarde bien l'exemple ci-dessus, nous pouvons voir que l'argument1 est thePlayer and argument2 le commandName. thePlayer est celui qui à tapé la commande et commandName contient le nom de la commande qu'il à tapé. Donc si un joueur tape &amp;quot;/greet&amp;quot;, cet argument va contenir &amp;quot;greet&amp;quot;. Argument3 c'est ce que le joueur à tapé en plus de la commande, vous allez apprendre ceci dans le tutoriel. N'oubliez jamais que les deux premiers arguments sont les arguments standards, mais vous pouvez les renommé si vous voulez, seul l'ordre est important.&lt;br /&gt;
&lt;br /&gt;
Par exemple: Un joueur tape &amp;quot;createVehicle 468&amp;quot; pour faire aparaître une Sanchez, la fonction addCommandHandler va appeller notre fonction createVehicleForPlayer, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;createVehicle&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer est l'élement joueur qui a tapé la commande&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Comme nous pouvons le voir, ll fournit plusieurs paramètres: le joueur qui a tapé la commande, la commande qu'il a tapé, et n'importe quelle texte qu'il a mis après, dans notre cas, &amp;quot;468&amp;quot; comme id de la Sanchez. Les deux premiers paramètres sont les même pour tous les addCommandHandler qu'on peut retrouver sur la page du [[addEventHandler]]. Vous devez toujours définir au moins ces deux paramètres pour utiliser les arguments après eux (par exemple pour traiter le texte qui a été entré après la commande, comme dans notre exemple le modèle du véhicule).&lt;br /&gt;
&lt;br /&gt;
''Note: Vous devez créer la commande APRES la fonction que vous allez utiliser pour cette commande, sinon il ne trouvera pas la fonction.''&lt;br /&gt;
&lt;br /&gt;
====Ecrire la fonction====&lt;br /&gt;
Pour remplir notre fonction d'instructions, nous devons d'abord pensez à ce que nous devons faire:&lt;br /&gt;
* Récupérer la position du joueur, donc on connaitra la position où faire apparaître le véhicule (on veut le faire apparaître à droite du joueur)&lt;br /&gt;
* Calculer la position où faire apparître le véhicule (nous ne voulons pas que le véhicule apparaisse dans le joueur)&lt;br /&gt;
* Faire apparître les véhicule&lt;br /&gt;
* Vérifier si le véhicule a bien apparus, ou aficher un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Pour ça, nous devons utiliser plusieurs fonctions. Pour trouver la fonction que nous devons utiliser, il faut aller faire un tour dans la [[Scripting Functions|La liste des fonctions serveur]]. D'abord nous avons besoin d'une fonction pour obtenir la position du joueur. Puisque les joueurs sont des éléments, nous devons allez dans la rubrique '''Element functions''' où l'on pourra trouver la fonction [[getElementPosition]]. En cliquant sur le nom de la fonction, le wiki va vous afficher sa description. On peut y voir la syntaxe, qu'est-ce que la fonction retourne. La syntaxe nous montre les argument qu'on peut ou qu'on doit envoyer.&lt;br /&gt;
&lt;br /&gt;
Pour [[getElementPosition]], la syntaxe est:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les trois float devant le nom de la fonction est le type de variable que la fonction nous retourne. Dans notre cas, la fonction retourne trois nombres à virgule(x, y et z). Dans les parenthèses, on peut voir les arguments que l'on doit envoyer, dans notre cas, l'element dont on veut récupérer la position, le joueur dans notre exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- on récupère la position x,y,z dans des variables locales&lt;br /&gt;
	-- une variable locale n'existe que dans le &amp;quot;périmètre&amp;quot; actuel. Ici, les variable x, y et z sont des variables locales qui se détruiront à la fin de la fonction.&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut s'assurer que le véhicule n'apparaît pas directement dans le joueur, donc on ajoute quelques unités à la variable ''x'', qui le fera apparaître plus à l'est par rapport au joueur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unité sur l'axes des x&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant nous avons besoin d'une autre fonction, celle qui va faire apparaître le véhicule. Nous allons la cherché encore une fois dans la [[Scripting Functions|liste des fonctions serveur]], mais cette fois, comme nous parlons d'un véhicule, nous devons donc aller dans la catégorie'''Vehicle functions''', où l'on va trouver la fonction [[createVehicle]]. Dans la syntaxe, nous pouvons voir que cette fonction ne retourne qu'une seule variable, le véhicule ( de type élément ) que nous venons de créer. Nous pouvons aussi voir qu'il y a des arguments entre crochets [], cela veut dire que ce sont des arguments optionels.&lt;br /&gt;
&lt;br /&gt;
Nous avons déjà tous les arguments pour la fonction [[createVehicle]] dans notre fonction: La position que nous avons juste calculée dans les variables &amp;quot;x, y, z&amp;quot;  et l'id du véhicule que nous avons fourni par la commande (&amp;quot;/createVehicle 468&amp;quot;) et qui est stocké dans la variable ''vehicleModel''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- récupere la position du joueur dans les variables x, y et z&lt;br /&gt;
	x = x + 5 -- rajoute 5 unités sur x&lt;br /&gt;
	-- on crée le véhicule et on enregistre l'élément de type &amp;quot;vehicle&amp;quot; dans la variable ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette variable, on pourrait faire pas mal de choses sympa, mais ici nous allons juste vérifier si le véhicule à bien été créé ou non. &lt;br /&gt;
Sur le wiki de la fonction [[createVehicle]], il y a la partie nomée '''Returns''', la fonction va retourner ''false'' si la voiture n'a pas été créé. Ducoups, on va regarder la valeur de la variable ''createdVehicle''.&lt;br /&gt;
&lt;br /&gt;
Voilà notre code complet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- On prent la position du joueur qui a tapé la commande&lt;br /&gt;
	x = x + 5 -- on ajoute 5 unités à x&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- on crée le véhicule demandé par le joueur et on récupère ce que nous retourne la fonction dans la variable createdVehicle&lt;br /&gt;
	-- On vérifie si la valeur retournée est égal à ''false'' ( ce qui signifie que ça n'a pas marché )&lt;br /&gt;
	if (createdVehicle == false) then&lt;br /&gt;
		-- si c'est le cas, on affiche un message d'erreur dans la chatbox mais seulement pour le joueur.&lt;br /&gt;
		outputChatBox(&amp;quot;Erreur lors de la création du véhicule.&amp;quot;,thePlayer)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;createVehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, nous avons utilisé une nouvelle fonction: [[outputChatBox]]. Vous devriez maintenant pouvoir regarder la description de cette fonction par vous même.&lt;br /&gt;
&lt;br /&gt;
==Ce que vous devez savoir==&lt;br /&gt;
Vous avez déjà lu quelques informations sur les ressources, les commandes et trouvez des fonctions dans le wiki, mais il y a encore beaucoup à apprendre. Cette section vous donnera une vue d'ensemble plutôt courte sur certaines de ces choses, tout en regardant les pages du wiki si possible.&lt;br /&gt;
===Les scripts client et serveur===&lt;br /&gt;
Vous pouvez avoir déjà remarqué ces termes (serveur/client) quelque part sur ce wiki, le plus souvent pour les fonctions. MTA ne supporte pas seulement les scripts exécuté par le serveur et des commandes (comme celle qu'on vien de faire) ou d'autres fonctions, mais aussi les scripts éxécuté par le client MTA, ceux des joueurs qui se connecte au serveur. La raison est que certaines fonctions de MTA doit être du coté client comme par exemple le GUI - Graphical User Interface - ( Pour tout ce qui est fenêtres, boutons, etc ), d'autres devraient être du côté client parce qu'ils fonctionnent mieux mais d'autres sont mieux pensées pour être du côté serveur ou ne fonctionne tout simplement pas du côté client.&lt;br /&gt;
&lt;br /&gt;
La plupart de vos scripts (gamemodes, maps) seront surement du côté serveur, comme celui que nous avons fait tout à l'heure. Si vous vous heurtez à quelque chose qui ne peut pas être résolu du côté serveur, vous devrez probablement le faire côté client. Pour un script client, vous devriez créer un script ordinaire (par exemple appelé ''client.lua'') et spécifié dans la meta.xml, comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'attribut ''type'' est par defaut 'server', donc nous avons juste besoin de spécifier que c'est un script client. Lorsque vous faites ceci, le fichier va être télecharger par le joueur sur son ordinateur lorsqu'il se connecte au serveur. Plus d'infos: [[Client side scripts]].&lt;br /&gt;
&lt;br /&gt;
===Ressources plus complexes===&lt;br /&gt;
La section précédente nous a montré brièvement comment ajouter des scripts clients à la ressource. Let's have some theoretical resources, by looking at the files it contains, the ''meta.xml'' and what they might do:&lt;br /&gt;
&lt;br /&gt;
====First example - A utility script====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/admin_commands&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/commands.lua&lt;br /&gt;
	/client.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;admin commands&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;commands.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;commands.lua&amp;quot; fournit quelques ordres d'admin, comme le fait d'interdire un joueur, en banissant ou quelque chose d'autre ce qui peut être utilisé par l'admin du serveur &lt;br /&gt;
* Le &amp;quot;client.lua&amp;quot; fournit un GUI pour être capable d'exécuter les actions mentionnées facilement &lt;br /&gt;
&lt;br /&gt;
This example might be running all the time (maybe even auto-started when the serveur starts) as it's useful during the whole gaming experience and also wont interfere with the gameplay, unless an admin decides to take some action of course.&lt;br /&gt;
&lt;br /&gt;
====Second example - A gamemode====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/counterstrike&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/counterstrike.lua&lt;br /&gt;
	/buymenu.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;Counterstrike remake&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;counterstrike.lua&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;buymenu.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;counterstrike.lua&amp;quot; contient des caractéristiques semblables aux dispositifs suivants :&lt;br /&gt;
** Laissez les joueurs choisir leur équipe et les apparaitre&lt;br /&gt;
** Fournissez-leur des armes, des cibles et des instructions (peut-être lues d'une carte, voir ci-dessous)&lt;br /&gt;
** Définissez les règles du jeu, par exemple. La partie se finie, ce qui se produit quand un joueur meurt&lt;br /&gt;
** .. et peut-être encore plus&lt;br /&gt;
* Le &amp;quot;buymenu.lua&amp;quot; est un manuscrit du côté client et crée un menu pour acheter des armes&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut s'appeler un gamemode, depuis lui non seulement des intereferes avec le gameplay, mais définit réellement les règles de lui-même. Le &amp;quot;type&amp;quot; attribut indique que cet exemple fonctionne avec [[Map Manager]], encore une autre ressource qui a été écrite par l'équipe de QA pour contrôler des gamemodes et le chargement de carte. On lui recommande fortement que vous basiez vos gamemodes sur les techniques qu'il fournit.&lt;br /&gt;
&lt;br /&gt;
Ceci signifie également que le gamemode ne fonctionnera pas probablement sans carte. Gamemodes devrait toujours être aussi générique comme possible. Un exemple pour une carte est énoncé dans le prochain exemple.&lt;br /&gt;
&lt;br /&gt;
====Troisième exemple - une carte====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
/cs-airport&lt;br /&gt;
	/meta.xml&lt;br /&gt;
	/airport.map&lt;br /&gt;
	/airport.lua&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
	&amp;lt;info author=&amp;quot;Someguy&amp;quot; description=&amp;quot;Counterstrike airport map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;counterstrike&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;map src=&amp;quot;airport.map&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;airport.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Le &amp;quot;airport.map&amp;quot; dans le fichier XML fournit des informations au sujet de la carte au gamemode, ceului-ci peut inclure :&lt;br /&gt;
** Là où les joueurs devraient apparaitre, avec quelles armes, avec quelle équipe&lt;br /&gt;
** Ce qui sont les cibles&lt;br /&gt;
** Temps, heure du monde, Limite de temps&lt;br /&gt;
** Fournir les véhicules&lt;br /&gt;
* Le ''airport.lua'' peut contenir les dispositifs carte-spécifiques, celui-ci peut inclure :&lt;br /&gt;
** En ouvrant une certaine porte/faisant éclater quelque chose quand quelque chose de spécifique se produit&lt;br /&gt;
** Créez ou déplacez quelques objets faits sur commande, ou manoeuvrez les objets qui sont créés dans le fichier .map&lt;br /&gt;
** .. toute autre chose carte-spécifiques &lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez voir, l'attribut &amp;quot;type&amp;quot; a changé en 'map', dire [[Map Manager]] que cette ressource est une carte, tandis que l'attribut &amp;quot;gamemodes&amp;quot; indique pour quels gamemodes cette carte est valide, dans ce cas-ci le gamemode de l'exemple ci-dessus.&lt;br /&gt;
Ce qui peut venir comme une surprise est qu'il y a aussi un script dans la ressource de Carte. Évidemment ce n'est pas nécessairement nécessaire dans une carte, mais ouvre une large gamme de possibilités pour les producteurs de carte pour créer leur propre monde dans les règles du gamemode pour lequel ils le créent. &lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;airport.map&amp;quot; pourrait être semblable à ceci :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map mode=&amp;quot;deathmatch&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;terrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2332.23&amp;quot; posY=&amp;quot;-12232.33&amp;quot; posZ=&amp;quot;4.42223&amp;quot; skins=&amp;quot;23-40&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/terrorists&amp;gt;&lt;br /&gt;
	&amp;lt;counterterrorists&amp;gt;&lt;br /&gt;
		&amp;lt;spawnpoint posX=&amp;quot;2334.23443&amp;quot; posY=&amp;quot;-12300.233&amp;quot; posZ=&amp;quot;10.2344&amp;quot; skins=&amp;quot;40-50&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/counterterrorists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;bomb posX=&amp;quot;23342.23&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;602&amp;quot; /&amp;gt;	&lt;br /&gt;
	&amp;lt;vehicle posX=&amp;quot;&amp;quot; posY=&amp;quot;&amp;quot; posZ=&amp;quot;&amp;quot; model=&amp;quot;603&amp;quot; /&amp;gt;	&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quand un gamemode est commencé avec une carte, les ressources de carte est automatiquement commencé par le mapmanager et les renseignements qu'il contient peut être lu par la ressource gamemode. Quand la carte change, la ressource de carte actuelle est arrêtée et la ressource de carte suivante est commencée. Pour une explication plus détaillée et des exemples de comment les ressources de carte sont utilisées dans le script principal, visitez s'il vous plaît la page [[Writing Gamemodes]]. &lt;br /&gt;
&lt;br /&gt;
===Événements===&lt;br /&gt;
Les événements sont la façon que MTA dit aux scripts des choses qui arrivent. Par exemple quand un joueur meurt, le [[onPlayerWasted]] l'événement est déclenché. Pour exécuter n'importe quelles actions quand un joueur meurt, vous devez vous préparer similiar à l'ajoutant d'un dresseur d'ordre, comme montré dans [[#Writing_the_script|the first chapter]].&lt;br /&gt;
&lt;br /&gt;
Cet exemple produiras un message avec le nom du joueur qui est mort : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function playerDied(totalAmmo, killer, killerWeapon, bodypart)&lt;br /&gt;
	outputChatBox(getPlayerName(source)..&amp;quot; died!&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerWasted&amp;quot;,getRootElement(),playerDied)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au lieu de montrer que les arguments sont nécessaires, la page de documentation pour les spectacles d'Événements quels paramètres sont passés à la handler function, similaire à la voie un [[*About_command_handlers|command handler]] fait, juste qu'il se distingue de l'événement à l'événement. Un autre point important est la variable &amp;quot;source&amp;quot;, qui existe dans les handler function. Ils ne doivent pas être ajoutés à la liste de paramètre de la fonction, mais cela existe toujours . Il a une différente valeur de l'événement à l'événement, pour les événements de joueur (comme dans l'exemple au-dessus) c'est l'élément de joueur. Comme un autre exemple, vous pouvez jeter un coup d'œil au script de joueur frayant fondamental dans la première section pour recevoir une idée comment &amp;quot;source&amp;quot; est utilisé. &lt;br /&gt;
&lt;br /&gt;
==Où aller d'ici==&lt;br /&gt;
Vous devriez maintenant être familiers avec les aspects les plus fondamentaux de MTA scripting et aussi un peu avec la documentation. Le [[Main_Page]] vous fournit des liens vers plus de renseignements, Classes de travaux dirigés et Références qui permettent un coup d'oeil plus profond dans les thèmes dont vous désirez apprendre.&lt;br /&gt;
&lt;br /&gt;
D'ici nous recommandons de lire le [[debugging]] la classe de travaux dirigés. De bonnes adresses déboguantes sont une nécessité absolue quand vous faites des scripts. &lt;br /&gt;
&lt;br /&gt;
[[ru:Scripting Introduction]]&lt;br /&gt;
[[it:Introduzione allo scripting]]&lt;br /&gt;
[[es:Introducción a la Programación]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=29780</id>
		<title>FR/A propos des Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=FR/A_propos_des_Map&amp;diff=29780"/>
		<updated>2012-03-30T12:47:45Z</updated>

		<summary type="html">&lt;p&gt;Citizen: Created page with &amp;quot;{{Needs Checking|Either complete the translation or remove it.}} {{Resource page}} Le &amp;quot;Map manager&amp;quot; est une ressource inclue dans la suite serveur de MTA DM. Elle offre des comma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needs Checking|Either complete the translation or remove it.}}&lt;br /&gt;
{{Resource page}}&lt;br /&gt;
Le &amp;quot;Map manager&amp;quot; est une ressource inclue dans la suite serveur de MTA DM. Elle offre des commandes, fonctions et événements pour les modes de jeu afin de dynamiser vos maps. Par exemple, quand un serveur doit charger plusieurs routes pour plusieurs maps, au lieu d'avoir le tout dans un seul script principal, ces routes peuvent êtres stockée dans plusieurs ressources et chargée simplement grâce à la fonction &amp;quot;changeGamemodeMap&amp;quot; quand une map démarre.&lt;br /&gt;
&lt;br /&gt;
Plus spécifiquement, le &amp;quot;Map manager&amp;quot; liste les modes de jeux et maps chargés sur le serveur. Il inclut un listing sur l'interface web, il rafraîchit cette liste fréquemment et met en gras les ressources et/ou maps actuellement entrain d'être utilisées. &lt;br /&gt;
&lt;br /&gt;
== Un Simple Tutoriel ==&lt;br /&gt;
Dans cette section nous allons poursuivre le travail commencé dans [[Scripting Introduction|Introduction to Scripting]]. Nous allons ajouter une ressource qui enregistre l'endroit de spawn des joueurs sur la map, le chargement de ce script se fera depuis le script principal.&lt;br /&gt;
&lt;br /&gt;
Premièrement, créez un dossier dans /Your MTA Server/mods/deathmatch/resources/, nommez-le &amp;quot;mymap&amp;quot;. Ensuite dans ce dossier, créez un fichier texte et nommez-le &amp;quot;meta.xml&amp;quot;, ce fichier est présent dans chaque scripts.&lt;br /&gt;
&lt;br /&gt;
Ecrivez les lignes suivantes dans le fichier ''meta.xml'' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
   &amp;lt;info type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;myserver&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;map src=&amp;quot;mymap.map&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Prenez garde car ce fichier est &amp;quot;lié&amp;quot; avec le ''gamemodes=&amp;quot;&amp;quot;'' choisit, qui contient le nom de la ressource principale qu'utilise ce mode. le paramètre ''map'', indique le nom de la map qui sera afficher sur le serveur.&lt;br /&gt;
&lt;br /&gt;
Maintenant créez un nouveau fichier texte dans /mymap/ et nommez le &amp;quot;mymap.map&amp;quot;, écrivez y les lignes suivantes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;map&amp;gt;&lt;br /&gt;
   &amp;lt;spawnpoint id=&amp;quot;spawnpoint1&amp;quot; posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;18&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Notez que &amp;quot;spawnpoint&amp;quot; est le type de l'élément utilisé dans la fonction [[getElementsByType]], &amp;quot;id&amp;quot; est utilisée dans la fonction [[getElementByID]]&lt;br /&gt;
&lt;br /&gt;
Pour charger la map, le script principal doit pouvoir accéder aux maps par lui même. Quelques modifications sont à apportées dans script.lua situé dans &amp;quot;myserver&amp;quot;. Entrez les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function loadMap(startedMap)&lt;br /&gt;
	mapRoot = getResourceRootElement(startedMap)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), loadMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par défaut, l'evênement &amp;quot;onGamemodeMapStart&amp;quot; nous donne le &amp;quot;handle&amp;quot;(?) de la map (&amp;quot;startedMap&amp;quot;), lequel nous avons utilisé pour le &amp;quot;handle&amp;quot;(?) de la ressource contenant la map (&amp;quot;mapRoot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Avec la ressource &amp;quot;handle&amp;quot;(?), nous pouvons extraire les informations relatives au spawnpoint. Jetez un œil à la fonction joinHandler() dans script.lua, à la place de x, y and z, nous pouvons utiliser les informations de la map comme suit :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local spawn = getElementsByType(&amp;quot;spawnpoint&amp;quot;, mapRoot)&lt;br /&gt;
	local x,y,z,r&lt;br /&gt;
	for key, value in pairs(spawn) do&lt;br /&gt;
		x = getElementData(value, &amp;quot;posX&amp;quot;)&lt;br /&gt;
		y = getElementData(value, &amp;quot;posY&amp;quot;)&lt;br /&gt;
		z = getElementData(value, &amp;quot;posZ&amp;quot;)&lt;br /&gt;
		r = getElementData(value, &amp;quot;rot&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Lancez maintenant votre gamemode avec la commande suivante via la console:&lt;br /&gt;
&lt;br /&gt;
'''gamemode myserver mymap'''&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Pour utiliser le map manager, vos ressources doivent d'abord être reconnues en tant que gamemodes ou maps.&lt;br /&gt;
&lt;br /&gt;
Vous devez remplir quelques informations pour votre fichier de configuration du '''gamemode resource''' :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;Votre Gamemode&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Map resources''' Les maps ont aussi besoin d'information dans le meta.xml, ''type=&amp;quot;map&amp;quot;'' et un ou plusieurs ''gamemodes''. Une map peut en effet être compatible avec plusieurs mode de jeu pour se faire il faudra séparer les modes par une virgule ''sans espaces''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;info description=&amp;quot;A gamemode map&amp;quot; type=&amp;quot;map&amp;quot; gamemodes=&amp;quot;ctv,koth&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne peut y avoir qu’un mode de jeu 'Gamemode' Actif ou une map chargée à la fois.&lt;br /&gt;
&lt;br /&gt;
==Paramètres Supplémentaires==&lt;br /&gt;
Ces paramètres sont aussi à ajouter dans meta.xml.&lt;br /&gt;
&lt;br /&gt;
'''name:''' Entrez ici un message sympa qui sera afficher lors du démarrage de la ressource. C'est en quelques sorte un alias au cas ou le nom de votre ressource ne vous correspond pas.&lt;br /&gt;
&lt;br /&gt;
==Commandes==&lt;br /&gt;
'''changemap newmap [newgamemode]''' (changer le 'Gamemode' d'une map)&lt;br /&gt;
&lt;br /&gt;
'''changemode newgamemode [newmap]''' (lancer un mode de jeu 'Gamemode' et démarrez une map)&lt;br /&gt;
&lt;br /&gt;
'''gamemode newgamemode [newmap]''' (idem que la précédente)&lt;br /&gt;
&lt;br /&gt;
'''stopmode''' (Arrête le mode de jeu et la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''stopmap''' (Arrête la map en cours)&lt;br /&gt;
&lt;br /&gt;
'''maps [gamemode]''' (liste toutes les maps sur le serveurs, ajoutez en option le mode pour lequel vous voulez connaître les maps)&lt;br /&gt;
&lt;br /&gt;
'''gamemodes''' (Liste tout les mode de jeu)&lt;br /&gt;
&lt;br /&gt;
==Paramètres==&lt;br /&gt;
'''*mapmanager.color''' [hex color string] (change la couleur de sortie des message du mapmanager) (Par défaut : #E1AA5A)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.messages''' [boolean] (si les changements de map/gm sont activés) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
'''*mapmanager.ASE''' [boolean] (si le manager doit charger en mode ASE) (Par défaut : true)&lt;br /&gt;
&lt;br /&gt;
==Autres fonctions==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Changement de mode de jeu, on peut aussi lui donner une map initial à charger.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change le mode de jeu d'une map pour un nouveau, on peut choisir un mode de jeu à charger une fois cette map rechargée.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodes ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Renvoie une table des tout les modes de jeu et leur pointeurs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getGamemodesCompatibleWithMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of compatible gamemode resource pointers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMaps ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of all map resource pointers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns a table of compatible map resource pointers. If the gamemode is left blank, it returns all maps which aren't compatible with any gamemode.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns the currently running gamemode's resource pointer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;resource getRunningGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Returns the currently running GM map's resource pointer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemode ( resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a resource is a gamemode or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a gamemode is compatible with a map or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMap ( resource theMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a resource is a map or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Determines if a map is compatible with a gamemode or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemode ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Stops the current gamemode and its map.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool stopGamemodeMap ( )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Stop the current GM map.&lt;br /&gt;
Determines if a map is compatible with a gamemode or not.&lt;br /&gt;
&lt;br /&gt;
==Fired events==&lt;br /&gt;
''(For all these events, &amp;quot;source&amp;quot; is the resource's root element.)''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStart ( resource startedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a gamemode starts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeStop ( resource stoppedGamemode )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a gamemode is stopped.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStart ( resource startedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a GM map starts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;onGamemodeMapStop ( resource stoppedMap )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fired before a GM map is stopped.&lt;br /&gt;
&lt;br /&gt;
==Supported map settings==&lt;br /&gt;
The following settings from the [[settings system|registry]] are applied by the map manager when a map is started:&lt;br /&gt;
&amp;lt;br&amp;gt;'''gamespeed''' [number]: The map's game speed.&lt;br /&gt;
&amp;lt;br&amp;gt;'''gravity''' [number]: The map's gravity.&lt;br /&gt;
&amp;lt;br&amp;gt;'''time''' [string of the form '''hh:mm''']: The map's time.&lt;br /&gt;
&amp;lt;br&amp;gt;'''weather''' [number]: The map's weather ID.&lt;br /&gt;
&amp;lt;br&amp;gt;'''waveheight''' [number]: The map's wave height.&lt;br /&gt;
&amp;lt;br&amp;gt;'''locked_time''' [boolean]: Whether the set time will be frozen by the manager or not.&lt;br /&gt;
&amp;lt;br&amp;gt;'''minplayers''' [number]: The required minimum number of players to start the map.&lt;br /&gt;
&amp;lt;br&amp;gt;'''maxplayers''' [number]: The allowed maximum number of players to start the map.&lt;br /&gt;
&lt;br /&gt;
[[it:Map manager]]&lt;br /&gt;
[[ru:Resource:Mapmanager]]&lt;/div&gt;</summary>
		<author><name>Citizen</name></author>
	</entry>
</feed>