<?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=Atti</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=Atti"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/Atti"/>
	<updated>2026-04-23T22:06:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17236</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17236"/>
		<updated>2008-06-11T09:38:43Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* What else should you do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Il map manager==&lt;br /&gt;
Dopo aver letto la sezione di sopra dovrebbe essere chiaro che una gamemode consiste di due parti:&lt;br /&gt;
* La ''resource'' della gamemode, che resta sempre uguale&lt;br /&gt;
* Molte ''resource'' delle mappe, che forniscono alla gamemode informazioni legate alla mappa&lt;br /&gt;
&lt;br /&gt;
Ora, al posto di scrivere uno script che carichi la mappa per ogni gamemode, il [[IT/Map manager|Map manager]] fornisce funzioni per caricare le gamemodes e le mappe. Semplicemente, quando digiti il comando giusto (per esempio 'gamemode ctf ctf-italy') avvierà le due ''resource'' 'ctf' e 'ctf-italy', chiamando anche l'evento '[[IT/Map_manager#Eventi|onGamemodeMapStart]]' per avvertire la ''resource'' 'ctf' che una mappa è stata caricata. La ''resource'' 'ctf' può quindi accedere alle informazioni contenute in 'ctf-italy' e iniziare a spawnare i players, etc.&lt;br /&gt;
&lt;br /&gt;
===Come usare il map manager===&lt;br /&gt;
Per usare questa feature, la tua gamemode deve essere ''taggata'' di conseguenza. In maniera più specifica, dovremo impostare, nel meta.xml, l'attributo &amp;quot;type&amp;quot; della ''tag'' &amp;lt;info&amp;gt; a &amp;quot;gamemode&amp;quot;. Inoltre, possiamo impostare per l'attributo &amp;quot;name&amp;quot; un nome più 'familiare' (come &amp;quot;Capture the flag&amp;quot;) che verrà mostrato nel server browser al posto del nome della ''resource''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml della gamemode &amp;quot;cowcatapult&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
Se la tua gamemode dovrà caricare mappe personalizzate, dovranno essere presenti gli ''event handlers'' per&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (se necessario)&lt;br /&gt;
Questi eventi vengono chiamati quando una mappa per la tua gamemode viene avviata o chiusa, e passano la ''reource'' della mappa come paramentro.&lt;br /&gt;
All'interno della funzione legata a questi eventi potrai ottenere tutte le informazioni che ti servono dai file della mappa.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap è la mappa appena avviata&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- ottiene il nodo di root della mappa avviata&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- ottiene tutte le bandiere della mappa e le salva in una tabella&lt;br /&gt;
    -- continua a caricare informazioni come sopra&lt;br /&gt;
&lt;br /&gt;
    -- spawna i players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rendere le mappe compatibili===&lt;br /&gt;
Le mappe sono ''resource'' separate. Questo è stato fatto perché creare una nuova mappa non implichi nessuna modifica nella gamemode, e viceversa.&lt;br /&gt;
&lt;br /&gt;
Per rendere una mappa compatibile con la tua gamemode, apri il suo file meta.xml e modificalo così: l'attributo &amp;quot;type&amp;quot; dev'essere settato a &amp;quot;map&amp;quot;, e l'attributo&amp;quot;gamemodes&amp;quot; dev'essere una lista senza spazi, in cui gli elementi sono i nomi delle gamemode con cui la mappa funziona, separati da virgole.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--meta.xml della mappa--&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;cowcatapult,assault,tdm&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;
Quando tutto è pronto, gli admin potranno usare questi due comandi per avviare/fermare le gamemode:&lt;br /&gt;
*/gamemode nomeGamemode [nomeMappa] (nomeMappa è opzionale: puoi selezionare una mappa con cui iniziare la gamemode, di default questo parametro è vuoto)&lt;br /&gt;
*/changemap nomeMappa [nomeGamemode] (nomeGamemode è opzionale: seleziona la gamemode da avviare con la mappa, di default è quella corrente)&lt;br /&gt;
&lt;br /&gt;
Il [[IT/Map manager|Map manager]] esporta qualche altra funzione che in questo esempio non serve, ma che potrebbe essere utile.&lt;br /&gt;
&lt;br /&gt;
==Cos'altro dovresti fare==&lt;br /&gt;
Ci sono alcune altre ''resource'' che dovresti usare nel creare la tua mode, o almeno conoscere.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
L'[[Resource:IT/Help manager|Help manager]] dovrebbe essere l'interfaccia standard per i giocatori che hanno bisogno di aiuto. Se usi l'[[Resource:IT/Help manager|Help manager]] per mostrare il testo d'aiuto della tua mode, tutti i giocatori che lo hanno già usato in altre gamemodes sapranno immediatamente come usufruirne. Esso mostra anche un aiuto per le diverse ''resource'' attive divise per schede in una sola finestra, se necessario.&lt;br /&gt;
&lt;br /&gt;
Ci sono due modi per usare l'[[Resource:IT/Help manager|Help manager]], in breve:&lt;br /&gt;
* Mostrare un semplice testo che spieghi come usare la gamemode&lt;br /&gt;
* Mostrare informazioni più complesse sotto forma di GUI.&lt;br /&gt;
&lt;br /&gt;
Leggi la [[Resource:IT/Help manager|pagina dell'Help manager]] per dettagli su come farlo.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17235</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17235"/>
		<updated>2008-06-11T09:29:16Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Rendere le mappe compatibili */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Il map manager==&lt;br /&gt;
Dopo aver letto la sezione di sopra dovrebbe essere chiaro che una gamemode consiste di due parti:&lt;br /&gt;
* La ''resource'' della gamemode, che resta sempre uguale&lt;br /&gt;
* Molte ''resource'' delle mappe, che forniscono alla gamemode informazioni legate alla mappa&lt;br /&gt;
&lt;br /&gt;
Ora, al posto di scrivere uno script che carichi la mappa per ogni gamemode, il [[IT/Map manager|Map manager]] fornisce funzioni per caricare le gamemodes e le mappe. Semplicemente, quando digiti il comando giusto (per esempio 'gamemode ctf ctf-italy') avvierà le due ''resource'' 'ctf' e 'ctf-italy', chiamando anche l'evento '[[IT/Map_manager#Eventi|onGamemodeMapStart]]' per avvertire la ''resource'' 'ctf' che una mappa è stata caricata. La ''resource'' 'ctf' può quindi accedere alle informazioni contenute in 'ctf-italy' e iniziare a spawnare i players, etc.&lt;br /&gt;
&lt;br /&gt;
===Come usare il map manager===&lt;br /&gt;
Per usare questa feature, la tua gamemode deve essere ''taggata'' di conseguenza. In maniera più specifica, dovremo impostare, nel meta.xml, l'attributo &amp;quot;type&amp;quot; della ''tag'' &amp;lt;info&amp;gt; a &amp;quot;gamemode&amp;quot;. Inoltre, possiamo impostare per l'attributo &amp;quot;name&amp;quot; un nome più 'familiare' (come &amp;quot;Capture the flag&amp;quot;) che verrà mostrato nel server browser al posto del nome della ''resource''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml della gamemode &amp;quot;cowcatapult&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
Se la tua gamemode dovrà caricare mappe personalizzate, dovranno essere presenti gli ''event handlers'' per&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (se necessario)&lt;br /&gt;
Questi eventi vengono chiamati quando una mappa per la tua gamemode viene avviata o chiusa, e passano la ''reource'' della mappa come paramentro.&lt;br /&gt;
All'interno della funzione legata a questi eventi potrai ottenere tutte le informazioni che ti servono dai file della mappa.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap è la mappa appena avviata&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- ottiene il nodo di root della mappa avviata&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- ottiene tutte le bandiere della mappa e le salva in una tabella&lt;br /&gt;
    -- continua a caricare informazioni come sopra&lt;br /&gt;
&lt;br /&gt;
    -- spawna i players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rendere le mappe compatibili===&lt;br /&gt;
Le mappe sono ''resource'' separate. Questo è stato fatto perché creare una nuova mappa non implichi nessuna modifica nella gamemode, e viceversa.&lt;br /&gt;
&lt;br /&gt;
Per rendere una mappa compatibile con la tua gamemode, apri il suo file meta.xml e modificalo così: l'attributo &amp;quot;type&amp;quot; dev'essere settato a &amp;quot;map&amp;quot;, e l'attributo&amp;quot;gamemodes&amp;quot; dev'essere una lista senza spazi, in cui gli elementi sono i nomi delle gamemode con cui la mappa funziona, separati da virgole.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--meta.xml della mappa--&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;cowcatapult,assault,tdm&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;
Quando tutto è pronto, gli admin potranno usare questi due comandi per avviare/fermare le gamemode:&lt;br /&gt;
*/gamemode nomeGamemode [nomeMappa] (nomeMappa è opzionale: puoi selezionare una mappa con cui iniziare la gamemode, di default questo parametro è vuoto)&lt;br /&gt;
*/changemap nomeMappa [nomeGamemode] (nomeGamemode è opzionale: seleziona la gamemode da avviare con la mappa, di default è quella corrente)&lt;br /&gt;
&lt;br /&gt;
Il [[IT/Map manager|Map manager]] esporta qualche altra funzione che in questo esempio non serve, ma che potrebbe essere utile.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17234</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17234"/>
		<updated>2008-06-11T09:28:39Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Making maps compatible */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Il map manager==&lt;br /&gt;
Dopo aver letto la sezione di sopra dovrebbe essere chiaro che una gamemode consiste di due parti:&lt;br /&gt;
* La ''resource'' della gamemode, che resta sempre uguale&lt;br /&gt;
* Molte ''resource'' delle mappe, che forniscono alla gamemode informazioni legate alla mappa&lt;br /&gt;
&lt;br /&gt;
Ora, al posto di scrivere uno script che carichi la mappa per ogni gamemode, il [[IT/Map manager|Map manager]] fornisce funzioni per caricare le gamemodes e le mappe. Semplicemente, quando digiti il comando giusto (per esempio 'gamemode ctf ctf-italy') avvierà le due ''resource'' 'ctf' e 'ctf-italy', chiamando anche l'evento '[[IT/Map_manager#Eventi|onGamemodeMapStart]]' per avvertire la ''resource'' 'ctf' che una mappa è stata caricata. La ''resource'' 'ctf' può quindi accedere alle informazioni contenute in 'ctf-italy' e iniziare a spawnare i players, etc.&lt;br /&gt;
&lt;br /&gt;
===Come usare il map manager===&lt;br /&gt;
Per usare questa feature, la tua gamemode deve essere ''taggata'' di conseguenza. In maniera più specifica, dovremo impostare, nel meta.xml, l'attributo &amp;quot;type&amp;quot; della ''tag'' &amp;lt;info&amp;gt; a &amp;quot;gamemode&amp;quot;. Inoltre, possiamo impostare per l'attributo &amp;quot;name&amp;quot; un nome più 'familiare' (come &amp;quot;Capture the flag&amp;quot;) che verrà mostrato nel server browser al posto del nome della ''resource''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml della gamemode &amp;quot;cowcatapult&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
Se la tua gamemode dovrà caricare mappe personalizzate, dovranno essere presenti gli ''event handlers'' per&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (se necessario)&lt;br /&gt;
Questi eventi vengono chiamati quando una mappa per la tua gamemode viene avviata o chiusa, e passano la ''reource'' della mappa come paramentro.&lt;br /&gt;
All'interno della funzione legata a questi eventi potrai ottenere tutte le informazioni che ti servono dai file della mappa.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap è la mappa appena avviata&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- ottiene il nodo di root della mappa avviata&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- ottiene tutte le bandiere della mappa e le salva in una tabella&lt;br /&gt;
    -- continua a caricare informazioni come sopra&lt;br /&gt;
&lt;br /&gt;
    -- spawna i players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rendere le mappe compatibili===&lt;br /&gt;
Le mappe sono ''resource'' separate. Questo è stato fatto perché creare una nuova mappa non implichi nessuna modifica nella gamemode, e viceversa.&lt;br /&gt;
&lt;br /&gt;
Per rendere una mappa compatibile con la tua gamemode, apri il suo file meta.xml e modificalo così: l'attributo &amp;quot;type&amp;quot; dev'essere settato a &amp;quot;map&amp;quot;, e l'attributo&amp;quot;gamemodes&amp;quot; dev'essere una lista senza spazi, in cui gli elementi sono i nomi delle gamemode con cui la mappa funziona, separati da virgole.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--meta.xml della mappa--&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;cowcatapult,assault,tdm&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;
Quando tutto è pronto, gli admin potranno usare questi due comandi per avviare/fermare le gamemode:&lt;br /&gt;
/gamemode nomeGamemode [nomeMappa] (nomeMappa è opzionale: puoi selezionare una mappa con cui iniziare la gamemode, di default questo parametro è vuoto)&lt;br /&gt;
/changemap nomeMappa [nomeGamemode] (nomeGamemode è opzionale: seleziona la gamemode da avviare con la mappa, di default è quella corrente)&lt;br /&gt;
&lt;br /&gt;
[[IT/Map manager|Map manager]] esporta qualche altra funzione che in questo esempio non serve, ma che potrebbe essere utile.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17233</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17233"/>
		<updated>2008-06-11T08:58:05Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* How to use the mapmanager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Il map manager==&lt;br /&gt;
Dopo aver letto la sezione di sopra dovrebbe essere chiaro che una gamemode consiste di due parti:&lt;br /&gt;
* La ''resource'' della gamemode, che resta sempre uguale&lt;br /&gt;
* Molte ''resource'' delle mappe, che forniscono alla gamemode informazioni legate alla mappa&lt;br /&gt;
&lt;br /&gt;
Ora, al posto di scrivere uno script che carichi la mappa per ogni gamemode, il [[IT/Map manager|Map manager]] fornisce funzioni per caricare le gamemodes e le mappe. Semplicemente, quando digiti il comando giusto (per esempio 'gamemode ctf ctf-italy') avvierà le due ''resource'' 'ctf' e 'ctf-italy', chiamando anche l'evento '[[IT/Map_manager#Eventi|onGamemodeMapStart]]' per avvertire la ''resource'' 'ctf' che una mappa è stata caricata. La ''resource'' 'ctf' può quindi accedere alle informazioni contenute in 'ctf-italy' e iniziare a spawnare i players, etc.&lt;br /&gt;
&lt;br /&gt;
===Come usare il map manager===&lt;br /&gt;
Per usare questa feature, la tua gamemode deve essere ''taggata'' di conseguenza. In maniera più specifica, dovremo impostare, nel meta.xml, l'attributo &amp;quot;type&amp;quot; della ''tag'' &amp;lt;info&amp;gt; a &amp;quot;gamemode&amp;quot;. Inoltre, possiamo impostare per l'attributo &amp;quot;name&amp;quot; un nome più 'familiare' (come &amp;quot;Capture the flag&amp;quot;) che verrà mostrato nel server browser al posto del nome della ''resource''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml della gamemode &amp;quot;cowcatapult&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
Se la tua gamemode dovrà caricare mappe personalizzate, dovranno essere presenti gli ''event handlers'' per&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (se necessario)&lt;br /&gt;
Questi eventi vengono chiamati quando una mappa per la tua gamemode viene avviata o chiusa, e passano la ''reource'' della mappa come paramentro.&lt;br /&gt;
All'interno della funzione legata a questi eventi potrai ottenere tutte le informazioni che ti servono dai file della mappa.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap è la mappa appena avviata&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- ottiene il nodo di root della mappa avviata&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- ottiene tutte le bandiere della mappa e le salva in una tabella&lt;br /&gt;
    -- continua a caricare informazioni come sopra&lt;br /&gt;
&lt;br /&gt;
    -- spawna i players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Making maps compatible===&lt;br /&gt;
Maps are separate resources. This is done so no editing of the gamemode resource is ever necessary in order to create a custom map, and also allows you to pack map-specific scripts/config files with them.&lt;br /&gt;
&lt;br /&gt;
To make a map compatible with your gamemode, open its resource's meta.xml and tag it as well: the &amp;quot;type&amp;quot; attribute must be set to &amp;quot;map&amp;quot;, and the &amp;quot;gamemodes&amp;quot; attribute must be a comma-separated list (no spaces) of gamemode resource names that the map works with.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--map's meta.xml--&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;cowcatapult,assault,tdm&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;
Once you have everything set up, admins will use these two commands to start/stop gamemodes:&lt;br /&gt;
/gamemode gamemodeName [mapName] (optional parameter allows picking an initial map, defaults to none)&lt;br /&gt;
/changemap mapName [gamemodeName] (optional parameter specifies the gamemode to start the map with, defaults to the current one)&lt;br /&gt;
&lt;br /&gt;
[[Map manager]] exports a few more access functions which you don't have to use, but may be useful.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17232</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17232"/>
		<updated>2008-06-11T08:42:42Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Il map manager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Il map manager==&lt;br /&gt;
Dopo aver letto la sezione di sopra dovrebbe essere chiaro che una gamemode consiste di due parti:&lt;br /&gt;
* La ''resource'' della gamemode, che resta sempre uguale&lt;br /&gt;
* Molte ''resource'' delle mappe, che forniscono alla gamemode informazioni legate alla mappa&lt;br /&gt;
&lt;br /&gt;
Ora, al posto di scrivere uno script che carichi la mappa per ogni gamemode, il [[IT/Map manager|Map manager]] fornisce funzioni per caricare le gamemodes e le mappe. Semplicemente, quando digiti il comando giusto (per esempio 'gamemode ctf ctf-italy') avvierà le due ''resource'' 'ctf' e 'ctf-italy', chiamando anche l'evento '[[IT/Map_manager#Eventi|onGamemodeMapStart]]' per avvertire la ''resource'' 'ctf' che una mappa è stata caricata. La ''resource'' 'ctf' può quindi accedere alle informazioni contenute in 'ctf-italy' e iniziare a spawnare i players, etc.&lt;br /&gt;
&lt;br /&gt;
===How to use the mapmanager===&lt;br /&gt;
To use the mapmanager service, your gamemode resource has to be tagged as such first. More specifically you'll be setting the &amp;quot;type&amp;quot; attribute of its &amp;lt;info&amp;gt; tag to &amp;quot;gamemode&amp;quot; inside meta.xml. Also, you can set the &amp;quot;name&amp;quot; attribute to a friendly name (like &amp;quot;Capture the flag&amp;quot;) that will be shown on ASE instead of the resource name.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml in &amp;quot;cowcatapult&amp;quot; gamemode --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
If your gamemode is going to load custom maps, you should add handlers for&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (if any unloading is necessary)&lt;br /&gt;
These are fired when a map for your gamemode is started or stopped, and pass the map resource as a parameter.&lt;br /&gt;
Within the handler function for these events you can extract all info you need from the resource's map files and configuration files.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap contains a reference to the resource of the map&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- get the root node of the started map&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- get all flags in the map and store them in a table&lt;br /&gt;
    -- go on loading information like in the example above&lt;br /&gt;
&lt;br /&gt;
    -- spawn players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Making maps compatible===&lt;br /&gt;
Maps are separate resources. This is done so no editing of the gamemode resource is ever necessary in order to create a custom map, and also allows you to pack map-specific scripts/config files with them.&lt;br /&gt;
&lt;br /&gt;
To make a map compatible with your gamemode, open its resource's meta.xml and tag it as well: the &amp;quot;type&amp;quot; attribute must be set to &amp;quot;map&amp;quot;, and the &amp;quot;gamemodes&amp;quot; attribute must be a comma-separated list (no spaces) of gamemode resource names that the map works with.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--map's meta.xml--&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;cowcatapult,assault,tdm&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;
Once you have everything set up, admins will use these two commands to start/stop gamemodes:&lt;br /&gt;
/gamemode gamemodeName [mapName] (optional parameter allows picking an initial map, defaults to none)&lt;br /&gt;
/changemap mapName [gamemodeName] (optional parameter specifies the gamemode to start the map with, defaults to the current one)&lt;br /&gt;
&lt;br /&gt;
[[Map manager]] exports a few more access functions which you don't have to use, but may be useful.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17231</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17231"/>
		<updated>2008-06-11T08:42:02Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Il map manager==&lt;br /&gt;
Dopo aver letto la sezione di sopra dovrebbe essere chiaro che una gamemode consiste di due parti:&lt;br /&gt;
* La ''resource'' della gamemode, che resta sempre uguale&lt;br /&gt;
* Molte ''resource'' delle mappe, che forniscono alla gamemode informazioni legate alla mappa&lt;br /&gt;
&lt;br /&gt;
Ora, al posto di scrivere uno script che carichi la mappa per ogni gamemode, il [[IT/Map manager|Map manager]] fornisce funzioni per caricare le gamemodes e le mappe. Semplicemente, quando digiti il comando giusto (per esempio 'gamemode ctf ctf-italy') avvierà le due ''resource'' 'ctf' e 'ctf-italy', chiamando anche l'evento '[[IT/Map_manager#Evention|GamemodeMapStart]]' per avvertire la ''resource'' 'ctf' che una mappa è stata caricata. La ''resource'' 'ctf' può quindi accedere alle informazioni contenute in 'ctf-italy' e iniziare a spawnare i players, etc.&lt;br /&gt;
&lt;br /&gt;
===How to use the mapmanager===&lt;br /&gt;
To use the mapmanager service, your gamemode resource has to be tagged as such first. More specifically you'll be setting the &amp;quot;type&amp;quot; attribute of its &amp;lt;info&amp;gt; tag to &amp;quot;gamemode&amp;quot; inside meta.xml. Also, you can set the &amp;quot;name&amp;quot; attribute to a friendly name (like &amp;quot;Capture the flag&amp;quot;) that will be shown on ASE instead of the resource name.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml in &amp;quot;cowcatapult&amp;quot; gamemode --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
If your gamemode is going to load custom maps, you should add handlers for&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (if any unloading is necessary)&lt;br /&gt;
These are fired when a map for your gamemode is started or stopped, and pass the map resource as a parameter.&lt;br /&gt;
Within the handler function for these events you can extract all info you need from the resource's map files and configuration files.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap contains a reference to the resource of the map&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- get the root node of the started map&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- get all flags in the map and store them in a table&lt;br /&gt;
    -- go on loading information like in the example above&lt;br /&gt;
&lt;br /&gt;
    -- spawn players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Making maps compatible===&lt;br /&gt;
Maps are separate resources. This is done so no editing of the gamemode resource is ever necessary in order to create a custom map, and also allows you to pack map-specific scripts/config files with them.&lt;br /&gt;
&lt;br /&gt;
To make a map compatible with your gamemode, open its resource's meta.xml and tag it as well: the &amp;quot;type&amp;quot; attribute must be set to &amp;quot;map&amp;quot;, and the &amp;quot;gamemodes&amp;quot; attribute must be a comma-separated list (no spaces) of gamemode resource names that the map works with.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--map's meta.xml--&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;cowcatapult,assault,tdm&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;
Once you have everything set up, admins will use these two commands to start/stop gamemodes:&lt;br /&gt;
/gamemode gamemodeName [mapName] (optional parameter allows picking an initial map, defaults to none)&lt;br /&gt;
/changemap mapName [gamemodeName] (optional parameter specifies the gamemode to start the map with, defaults to the current one)&lt;br /&gt;
&lt;br /&gt;
[[Map manager]] exports a few more access functions which you don't have to use, but may be useful.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17230</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17230"/>
		<updated>2008-06-11T08:28:51Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot;.. team ..&amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La funzione [[IT/getElementsByType|getElementsByType]] restituisce una tabella contenente tutti gli elementi di un dato tipo (il tipo corrisponde al nome del ''nodo'' [nell'esempio &amp;quot;flag&amp;quot;] nel file .map). Questo funziona sia per i tipi personalizzati sia per quelli di default di MTA (come &amp;quot;vehicle&amp;quot; o &amp;quot;player&amp;quot;).&lt;br /&gt;
[[IT/getElementData|getElementData]] è usato per ritrovare gli attributi impostati nell'XML.&lt;br /&gt;
In questi semplice esempio, un oggetto è creato nella posizione della bandiera e un messaggio viene inviato in cheatbox. In realtà, bisognerà fare ovviamente del lavoro in più durante il caricamento della mappa, come in questo caso creare delle ''forme di collisione'' per determinare quando un player cattura la bandiera.&lt;br /&gt;
&lt;br /&gt;
==Map manager==&lt;br /&gt;
Having read the section above it should be clear that a gamemode should always consist of two parts:&lt;br /&gt;
* The gamemode resource that always stays the same&lt;br /&gt;
* Many different maps resources that give the gamemode map-specific information&lt;br /&gt;
&lt;br /&gt;
Now instead of writing a map-loader for every single gamemode, the [[Map manager]] provides functions to load gamemodes and maps. Simply put, when you enter the correct command (for example 'gamemode ctf ctf-italy') it will start both resources 'ctf' and 'ctf-italy' while triggering an event ([[onGamemodeMapStart]]) to tell the 'ctf' resource that a map was loaded. The 'ctf' resource can then access the information 'ctf-italy' contains and start spawning players etc.&lt;br /&gt;
&lt;br /&gt;
===How to use the mapmanager===&lt;br /&gt;
To use the mapmanager service, your gamemode resource has to be tagged as such first. More specifically you'll be setting the &amp;quot;type&amp;quot; attribute of its &amp;lt;info&amp;gt; tag to &amp;quot;gamemode&amp;quot; inside meta.xml. Also, you can set the &amp;quot;name&amp;quot; attribute to a friendly name (like &amp;quot;Capture the flag&amp;quot;) that will be shown on ASE instead of the resource name.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml in &amp;quot;cowcatapult&amp;quot; gamemode --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
If your gamemode is going to load custom maps, you should add handlers for&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (if any unloading is necessary)&lt;br /&gt;
These are fired when a map for your gamemode is started or stopped, and pass the map resource as a parameter.&lt;br /&gt;
Within the handler function for these events you can extract all info you need from the resource's map files and configuration files.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap contains a reference to the resource of the map&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- get the root node of the started map&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- get all flags in the map and store them in a table&lt;br /&gt;
    -- go on loading information like in the example above&lt;br /&gt;
&lt;br /&gt;
    -- spawn players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Making maps compatible===&lt;br /&gt;
Maps are separate resources. This is done so no editing of the gamemode resource is ever necessary in order to create a custom map, and also allows you to pack map-specific scripts/config files with them.&lt;br /&gt;
&lt;br /&gt;
To make a map compatible with your gamemode, open its resource's meta.xml and tag it as well: the &amp;quot;type&amp;quot; attribute must be set to &amp;quot;map&amp;quot;, and the &amp;quot;gamemodes&amp;quot; attribute must be a comma-separated list (no spaces) of gamemode resource names that the map works with.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--map's meta.xml--&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;cowcatapult,assault,tdm&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;
Once you have everything set up, admins will use these two commands to start/stop gamemodes:&lt;br /&gt;
/gamemode gamemodeName [mapName] (optional parameter allows picking an initial map, defaults to none)&lt;br /&gt;
/changemap mapName [gamemodeName] (optional parameter specifies the gamemode to start the map with, defaults to the current one)&lt;br /&gt;
&lt;br /&gt;
[[Map manager]] exports a few more access functions which you don't have to use, but may be useful.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17229</id>
		<title>IT/Scrivere una gamemode</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Scrivere_una_gamemode&amp;diff=17229"/>
		<updated>2008-06-11T08:02:16Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:25%]]&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
&lt;br /&gt;
Questa guida cerca di definire a grandi linee le regole per scrivere una gamemode ben fatta. Se hai appena iniziato a programmare per MTA, vorrai probabilmente controllare prima gli altri tutorial che troverai nella [[IT/Pagina principale|Pagina principale]].&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Una ''gamemode'' è una risorsa che, una volta avviata, domina l'intero gameplay, dicendo ai giocatori cosa fare, creando oggetti, definendo come i giocatori possono vincere o accumulare punti eccetera eccetera. Alcuni esempi sono le gamemodes Race o Deathmatch.&lt;br /&gt;
&lt;br /&gt;
==Cosa si intende per gamemode &amp;quot;ben fatta&amp;quot;?==&lt;br /&gt;
Per essere semplici, una gamemode &amp;quot;ben fatta&amp;quot; è una gamemode che utilizza appieno le potenzialità delle mappe (.map) di MTA; vale a dire che la gamemode non contiene elementi specifici delle mappe(pickups, oggetti, spawns, veicoli eccetera)''hardcodati'' al loro interno. Questi elementi vanno invece inseriti nelle mappe di MTA(.map) che verranno poi caricate dagli scripts. In questo modo possono essere caricate mappe diverse per la stessa gamemode, o è anche possibile creare delle mappe grazie al map editor di MTA.&lt;br /&gt;
Un ovvio esempio di una gamemode &amp;quot;ben fatta&amp;quot; è MTA:Race: permette ai giocatori di caricare mappe personalizzate(i file .map). Non c'è bisogno di modificare la gamemode stessa per cambiare gli spawnpoints, i veicoli, eccetera.&lt;br /&gt;
&lt;br /&gt;
===Files mappa===&lt;br /&gt;
Tecnicamente, i file mappa non sono altro che documenti XML con estensione .map; definiscono le basi di gioco di una o più gamemodes, anche se non possono cambiare le &amp;quot;regole del gioco&amp;quot;, essendo queste definite dalla gamemode(.lua).&lt;br /&gt;
&lt;br /&gt;
Ogni elemento nel gioco corrisponde ad un ''nodo'' nel file .map. C'è una sintassi predefinita per elementi quali oggetti, veicoli eccetera; comunque, per elementi &amp;quot;speciali&amp;quot; delle tue gamemodes, dovrai creare tu una sintassi apposita.&lt;br /&gt;
&lt;br /&gt;
====Esempio====&lt;br /&gt;
Per il nostro esempio, prendiamo in esame la gamemode ''Capture the Flag''. Una mappa per questa gamemode deve sostanzialmente definire gli spawnpoints dei giocatori e la posizione delle bandiere, ed eventualmente la presenza di altri oggetti come i veicoli o i pickups. Un file .map molto semplificato apparirebbe così:&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;877.25219726563&amp;quot; rot=&amp;quot;63.350006103516&amp;quot; model=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;pickup id=&amp;quot;Armor 1&amp;quot; posX=&amp;quot;1911.083984375&amp;quot; posY=&amp;quot;-1658.8798828125&amp;quot; posZ=&amp;quot;885.40216064453&amp;quot; type=&amp;quot;armor&amp;quot; health=&amp;quot;50&amp;quot; respawn=&amp;quot;60000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;flag posX=&amp;quot;1959.5487060547&amp;quot; posY=&amp;quot;-1714.4613037109&amp;quot; posZ=&amp;quot;877.25219726563&amp;quot; team=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/map&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qui possiamo vedere due elementi di MTA: uno spawnpoint ed un pickup. Ancora più importante, questa mappa ha un ''nodo'' chiamato ''flag'' che definisce la posizione ed il colore della bandiera. Gli spawnpoints ed i pickups possono essere gestiti da risorse esterne, ma gli elementi personalizzati devono essere processati dalle gamemodes.&lt;br /&gt;
&lt;br /&gt;
Insomma, vogliamo che i giocatori possano creare le proprie mappe senza aver bisogno dello script LUA.&lt;br /&gt;
&lt;br /&gt;
====Esempio: come ottenere le informazioni dal file .map====&lt;br /&gt;
Come detto prima, la tua mode ha bisogno di ritrovare gli elementi personalizzati definiti in un file .map e processarli. Questo è abbastanza facile, come è dimostrato qui sotto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- crea una tabella con tutti gli elementi di tipo flag&lt;br /&gt;
local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; )&lt;br /&gt;
-- crea un ciclo per ogni elemento che abbiamo trovato&lt;br /&gt;
for key, value in pairs(flagElements) do&lt;br /&gt;
	-- ottiene le info di quell'elemento&lt;br /&gt;
	local posX = getElementData ( value, &amp;quot;posX&amp;quot; )&lt;br /&gt;
	local posY = getElementData ( value, &amp;quot;posY&amp;quot; )&lt;br /&gt;
	local posZ = getElementData ( value, &amp;quot;posZ&amp;quot; )&lt;br /&gt;
	local team = getElementData ( value, &amp;quot;team&amp;quot; )&lt;br /&gt;
	-- crea un oggetto a seconda della posizione della bandiera (flag)&lt;br /&gt;
	createObject ( 1337, posX, posY, posZ )&lt;br /&gt;
	-- scrive in chat il team per cui abbiamo creato una base&lt;br /&gt;
	outputChatBox ( &amp;quot;Base creata per il team &amp;quot; .. team .. &amp;quot;!&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The [[getElementsByType]] function retrieves a table of all the elements of a certain type (the type corresponds to the node name in the .map file). This works for both custom types and built-in MTA types (like &amp;quot;vehicle&amp;quot; or &amp;quot;player&amp;quot;).&lt;br /&gt;
[[getElementData]] can be used to retrieve the xml attributes set in the .map file.&lt;br /&gt;
In this simple example, an object is created at the flag's location and a message is outputted in the chatbox. In reality, you will of course need to do more during map loading, like in this case setting up collision shapes to detect players taking the flag.&lt;br /&gt;
&lt;br /&gt;
==Map manager==&lt;br /&gt;
Having read the section above it should be clear that a gamemode should always consist of two parts:&lt;br /&gt;
* The gamemode resource that always stays the same&lt;br /&gt;
* Many different maps resources that give the gamemode map-specific information&lt;br /&gt;
&lt;br /&gt;
Now instead of writing a map-loader for every single gamemode, the [[Map manager]] provides functions to load gamemodes and maps. Simply put, when you enter the correct command (for example 'gamemode ctf ctf-italy') it will start both resources 'ctf' and 'ctf-italy' while triggering an event ([[onGamemodeMapStart]]) to tell the 'ctf' resource that a map was loaded. The 'ctf' resource can then access the information 'ctf-italy' contains and start spawning players etc.&lt;br /&gt;
&lt;br /&gt;
===How to use the mapmanager===&lt;br /&gt;
To use the mapmanager service, your gamemode resource has to be tagged as such first. More specifically you'll be setting the &amp;quot;type&amp;quot; attribute of its &amp;lt;info&amp;gt; tag to &amp;quot;gamemode&amp;quot; inside meta.xml. Also, you can set the &amp;quot;name&amp;quot; attribute to a friendly name (like &amp;quot;Capture the flag&amp;quot;) that will be shown on ASE instead of the resource name.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- meta.xml in &amp;quot;cowcatapult&amp;quot; gamemode --&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info type=&amp;quot;gamemode&amp;quot; name=&amp;quot;Cow catapulting 2.0&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;
If your gamemode is going to load custom maps, you should add handlers for&lt;br /&gt;
* onGamemodeMapStart&lt;br /&gt;
* onGamemodeMapStop (if any unloading is necessary)&lt;br /&gt;
These are fired when a map for your gamemode is started or stopped, and pass the map resource as a parameter.&lt;br /&gt;
Within the handler function for these events you can extract all info you need from the resource's map files and configuration files.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function startCtfMap( startedMap ) -- startedMap contains a reference to the resource of the map&lt;br /&gt;
    local mapRoot = getResourceRootElement( startedMap )        -- get the root node of the started map&lt;br /&gt;
    local flagElements = getElementsByType ( &amp;quot;flag&amp;quot; , mapRoot ) -- get all flags in the map and store them in a table&lt;br /&gt;
    -- go on loading information like in the example above&lt;br /&gt;
&lt;br /&gt;
    -- spawn players etc.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEventHandler(&amp;quot;onGamemodeMapStart&amp;quot;, getRootElement(), startCtfMap)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Making maps compatible===&lt;br /&gt;
Maps are separate resources. This is done so no editing of the gamemode resource is ever necessary in order to create a custom map, and also allows you to pack map-specific scripts/config files with them.&lt;br /&gt;
&lt;br /&gt;
To make a map compatible with your gamemode, open its resource's meta.xml and tag it as well: the &amp;quot;type&amp;quot; attribute must be set to &amp;quot;map&amp;quot;, and the &amp;quot;gamemodes&amp;quot; attribute must be a comma-separated list (no spaces) of gamemode resource names that the map works with.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--map's meta.xml--&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;cowcatapult,assault,tdm&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;
Once you have everything set up, admins will use these two commands to start/stop gamemodes:&lt;br /&gt;
/gamemode gamemodeName [mapName] (optional parameter allows picking an initial map, defaults to none)&lt;br /&gt;
/changemap mapName [gamemodeName] (optional parameter specifies the gamemode to start the map with, defaults to the current one)&lt;br /&gt;
&lt;br /&gt;
[[Map manager]] exports a few more access functions which you don't have to use, but may be useful.&lt;br /&gt;
&lt;br /&gt;
==What else should you do==&lt;br /&gt;
There are several other resources that gamemodes should use/be compliant with.&lt;br /&gt;
&lt;br /&gt;
===Helpmanager===&lt;br /&gt;
The helpmanager is ought to be the standard interface for players when they need help. If you use the helpmanager to display your gamemode's help, every player that used helpmanager before (e.g. in other gamemodes) will immediately know how to get there. It also displays help for different resources running resources in one window, if necessary.&lt;br /&gt;
&lt;br /&gt;
There are basicially two ways to use the helpmanager:&lt;br /&gt;
* Provide a simple text that explains how to use your gamemode&lt;br /&gt;
* Request a GUI element from the helpmanager that will be displayed in its own tab in the helpmanager window and lets you add any GUI elements to it. This is the recommended way for gamemodes that need to display more complex information that needs its own GUI.&lt;br /&gt;
&lt;br /&gt;
Read the helpmanager page for details on how to do it.&lt;br /&gt;
&lt;br /&gt;
===Scoreboard===&lt;br /&gt;
Scoreboard displays players and teams currently ingame. You add custom columns to it to provide map specific information. For example the column 'points' in the 'ctf' gamemode could represent the player's points gained through kills or captures. As usual, see the scoreboard help page for more information.&lt;br /&gt;
&lt;br /&gt;
===Map cycler===&lt;br /&gt;
The map cycler controls what gamemodes and maps are played on a server. You can specifiy for example how many times in a row a map will be played until it switches to the next. To achieve this, you need to tell the map cycler when your gamemode finished (e.g. when a round ends).&lt;br /&gt;
&lt;br /&gt;
[[en:Writing gamemodes]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/fadeCamera&amp;diff=17228</id>
		<title>IT/fadeCamera</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/fadeCamera&amp;diff=17228"/>
		<updated>2008-06-11T07:20:25Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Esempio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione dissolverà la telecamera di un giocatore in un colore o la riporterà alla normalità dopo un determinato periodo di tempo. Questo influenzerà anche il volume del suono del giocatore (dissolto al 50% = 50% del volume, dissolvenza totale = nessun suono).&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&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;
bool fadeCamera ( player thePlayer, bool fadeIn, [ float timeToFade = 1.0, int red = 0, int green = 0, int blue = 0 ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti Richiesti===&lt;br /&gt;
* '''thePlayer:''' Il [[IT/Elemento/Player|giocatore]] la cui telecamera deve dissolversi.&lt;br /&gt;
* '''fadeIn:''' Se la telecamera deve dissolversi in apertura (''true'') o in chiusura (''false'').&lt;br /&gt;
&lt;br /&gt;
===Argomenti Opzionali===&lt;br /&gt;
* '''timeToFade:''' Il numero di secondi che impiegherà per dissolversi.&lt;br /&gt;
* '''red:''' La quantità di rosso del colore nel quale la telecamera si dissolverà (0 - 255). Non necessario per dissolvenza in apertura.&lt;br /&gt;
* '''green:''' La quantità di verde del colore nel quale la telecamera si dissolverà (0 - 255). Non necessario per dissolvenza in apertura.&lt;br /&gt;
* '''blue:''' La quantità di blu del colore nel quale la telecamera si dissolverà (0 - 255). Non necessario per dissolvenza in apertura.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&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;
bool fadeCamera ( bool fadeIn, [ float timeToFade = 1.0, int red = 0, int green = 0, int blue = 0 ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti Richiesti===&lt;br /&gt;
* '''thePlayer:''' Il [[IT/Elemento/Player|giocatore]] la cui telecamera deve dissolversi.&lt;br /&gt;
* '''fadeIn:''' Se la telecamera deve dissolversi in apertura (''true'') o in chiusura (''false'').&lt;br /&gt;
&lt;br /&gt;
===Argomenti Opzionali===&lt;br /&gt;
* '''timeToFade:''' Il numero di secondi che impiegherà per dissolversi.&lt;br /&gt;
* '''red:''' La quantità di rosso del colore nel quale la telecamera si dissolverà (0 - 255). Non necessario per dissolvenza in apertura.&lt;br /&gt;
* '''green:''' La quantità di verde del colore nel quale la telecamera si dissolverà (0 - 255). Non necessario per dissolvenza in apertura.&lt;br /&gt;
* '''blue:''' La quantità di blu del colore nel quale la telecamera si dissolverà (0 - 255). Non necessario per dissolvenza in apertura.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Ritorna ''true'' se la telecamera è stata dissolta con successo, ''false'' se sono stati passati argomenti non validi alla funzione.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
Quando un giocatore subisce danni, attiva un rapido effetto di dissolvenza in rosso sul suo schermo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function addRednessOnDamage ( )&lt;br /&gt;
      fadeCamera ( source, false, 1.0, 255, 0, 0 )         -- dissolve la telecamera del giocatore sul rosso per un periodo di un secondo&lt;br /&gt;
      setTimer ( fadeCamera, 500, 1, source, true, 0.5 )   -- non permette di dissolversi completamente, interrompe la dissolvenza e la riporta alla normalità&lt;br /&gt;
end&lt;br /&gt;
addEventHandler ( &amp;quot;onPlayerDamage&amp;quot;, getRootElement(), addRednessOnDamage )&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;
{{IT/Camera functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:IT/Cursor_functions&amp;diff=17224</id>
		<title>Template:IT/Cursor functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:IT/Cursor_functions&amp;diff=17224"/>
		<updated>2008-06-11T00:24:50Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: &amp;lt;noinclude&amp;gt;{{IT/MainP}}&amp;lt;/noinclude&amp;gt; *getCursorPosition *isCursorShowing *showCursor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IT/MainP}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
*[[IT/getCursorPosition|getCursorPosition]]&lt;br /&gt;
*[[IT/isCursorShowing|isCursorShowing]]&lt;br /&gt;
*[[IT/showCursor|showCursor]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17223</id>
		<title>IT/showCursor</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17223"/>
		<updated>2008-06-11T00:23:10Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{IT/Funzioni server client}}&lt;br /&gt;
Questa funzione è usata per mostrare o nascondere il cursore di un [[IT/Elemento/Player|giocatore]].&lt;br /&gt;
&lt;br /&gt;
Nota che, indipendentemente dallo stato del cursore impostato da questa funzione, il cursore sarà sempre visibile quando la chatbox o il menu sono aperti.&lt;br /&gt;
&lt;br /&gt;
==Sintassi== &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;
bool showCursor ( player thePlayer, bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''thePlayer:''' Il [[IT/Elemento/Player|giocatore]] di cui vuoi mostrare o nascondere il cursore.&lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&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;
bool showCursor ( bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il cursore del [[IT/Elemento/Player|giocatore]] è stato mostrato o nascosto con successo, altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio attiva il cursore per un player di nome &amp;quot;Atti&amp;quot;, quindi invia un messaggio se è stato attivato con successo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local thePlayer = getPlayerFromNick ( &amp;quot;Atti&amp;quot; )              -- ottiene il player di nome Atti&lt;br /&gt;
if thePlayer then                                           -- se lo abbiamo ottenuto&lt;br /&gt;
    showCursor ( thePlayer, true )                          -- gli mostriamo il cursore&lt;br /&gt;
    if isCursorShowing ( thePlayer ) then                   -- ha funzionato?&lt;br /&gt;
        outputChatBox ( &amp;quot;Il cursore è ora attivo per Atti!&amp;quot; ) -- invia un messaggio nella chatbox&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;
&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;
Questo esempio attiva il cursore per il client attivo, quindi invia un messaggio in chatbox.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
showCursor ( true )                          -- mostriamo il cursore&lt;br /&gt;
if isCursorShowing ( ) then                   -- ha funzionato?&lt;br /&gt;
    outputChatBox ( &amp;quot;Il cursore è ora attivo per &amp;quot;..getPlayerName( getLocalPlayer() )..&amp;quot;!&amp;quot; ) -- invia un messaggio nella chatbox&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;
{{IT/Cursor_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17222</id>
		<title>IT/showCursor</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17222"/>
		<updated>2008-06-11T00:22:47Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Esempio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{IT/Funzioni server client}}&lt;br /&gt;
Questa funzione è usata per mostrare o nascondere il cursore di un [[IT/Elemento/Player|giocatore]].&lt;br /&gt;
&lt;br /&gt;
Nota che, indipendentemente dallo stato del cursore impostato da questa funzione, il cursore sarà sempre visibile quando la chatbox o il menu sono aperti.&lt;br /&gt;
&lt;br /&gt;
==Sintassi== &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;
bool showCursor ( player thePlayer, bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''thePlayer:''' Il [[IT/Elemento/Player|giocatore]] di cui vuoi mostrare o nascondere il cursore.&lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&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;
bool showCursor ( bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il cursore del [[IT/Elemento/Player|giocatore]] è stato mostrato o nascosto con successo, altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio attiva il cursore per un player di nome &amp;quot;Atti&amp;quot;, quindi invia un messaggio se è stato attivato con successo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local thePlayer = getPlayerFromNick ( &amp;quot;Atti&amp;quot; )              -- ottiene il player di nome Atti&lt;br /&gt;
if thePlayer then                                           -- se lo abbiamo ottenuto&lt;br /&gt;
    showCursor ( thePlayer, true )                          -- gli mostriamo il cursore&lt;br /&gt;
    if isCursorShowing ( thePlayer ) then                   -- ha funzionato?&lt;br /&gt;
        outputChatBox ( &amp;quot;Il cursore è ora attivo per Atti!&amp;quot; ) -- invia un messaggio nella chatbox&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;
&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;
Questo esempio attiva il cursore per il client attivo, quindi invia un messaggio in chatbox.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
showCursor ( true )                          -- mostriamo il cursore&lt;br /&gt;
if isCursorShowing ( ) then                   -- ha funzionato?&lt;br /&gt;
    outputChatBox ( &amp;quot;Il cursore è ora attivo per &amp;quot;..getPlayerName( getLocalPlayer() )..&amp;quot;!&amp;quot; ) -- invia un messaggio nella chatbox&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;
{{IT/Funzioni_cursore}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17221</id>
		<title>IT/showCursor</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17221"/>
		<updated>2008-06-11T00:21:01Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{IT/Funzioni server client}}&lt;br /&gt;
Questa funzione è usata per mostrare o nascondere il cursore di un [[IT/Elemento/Player|giocatore]].&lt;br /&gt;
&lt;br /&gt;
Nota che, indipendentemente dallo stato del cursore impostato da questa funzione, il cursore sarà sempre visibile quando la chatbox o il menu sono aperti.&lt;br /&gt;
&lt;br /&gt;
==Sintassi== &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;
bool showCursor ( player thePlayer, bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''thePlayer:''' Il [[IT/Elemento/Player|giocatore]] di cui vuoi mostrare o nascondere il cursore.&lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&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;
bool showCursor ( bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il cursore del [[IT/Elemento/Player|giocatore]] è stato mostrato o nascosto con successo, altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio attiva il cursore per un player di nome &amp;quot;Atti&amp;quot;, quindi invia un messaggio se è stato attivato con successo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local thePlayer = getPlayerFromNick ( &amp;quot;Atti&amp;quot; )              -- ottiene il player di nome Dave&lt;br /&gt;
if thePlayer then                                           -- se lo abbiamo ottenuto&lt;br /&gt;
    showCursor ( thePlayer, true )                          -- gli mostriamo il cursore&lt;br /&gt;
    if isCursorShowing ( thePlayer ) then                   -- ha funzionato?&lt;br /&gt;
        outputChatBox ( &amp;quot;Il cursore è ora attivo per Atti!&amp;quot; ) -- invia un messaggio nella chatbox&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;
&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;
Questo esempio attiva il cursore per il client attivo, quindi invia un messaggio in chatbox.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
showCursor ( true )                          -- mostriamo il cursore&lt;br /&gt;
if isCursorShowing ( ) then                   -- ha funzionato?&lt;br /&gt;
    outputChatBox ( &amp;quot;Il cursore è ora attivo per &amp;quot;..getPlayerName( getLocalPlayer() )..&amp;quot;!&amp;quot; ) -- invia un messaggio nella chatbox&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;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{IT/Funzioni_cursore}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17220</id>
		<title>IT/showCursor</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/showCursor&amp;diff=17220"/>
		<updated>2008-06-11T00:19:09Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: __NOTOC__ {{Funzioni server client}} Questa funzione è usata per mostrare o nascondere il cursore di un giocatore.  Nota che, indipendentemente dallo stato del curs...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Funzioni server client}}&lt;br /&gt;
Questa funzione è usata per mostrare o nascondere il cursore di un [[IT/Elemento/Player|giocatore]].&lt;br /&gt;
&lt;br /&gt;
Nota che, indipendentemente dallo stato del cursore impostato da questa funzione, il cursore sarà sempre visibile quando la chatbox o il menu sono aperti.&lt;br /&gt;
&lt;br /&gt;
==Sintassi== &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;
bool showCursor ( player thePlayer, bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''thePlayer:''' Il [[IT/Elemento/Player|giocatore]] di cui vuoi mostrare o nascondere il cursore.&lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&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;
bool showCursor ( bool show )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''show:''' Un valore booleano che determina se mostrare (''true'') o nascondere (''false'') il cursore.&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il cursore del [[IT/Elemento/Player|giocatore]] è stato mostrato o nascosto con successo, altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio attiva il cursore per un player di nome &amp;quot;Atti&amp;quot;, quindi invia un messaggio se è stato attivato con successo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local thePlayer = getPlayerFromNick ( &amp;quot;Atti&amp;quot; )              -- ottiene il player di nome Dave&lt;br /&gt;
if thePlayer then                                           -- se lo abbiamo ottenuto&lt;br /&gt;
    showCursor ( thePlayer, true )                          -- gli mostriamo il cursore&lt;br /&gt;
    if isCursorShowing ( thePlayer ) then                   -- ha funzionato?&lt;br /&gt;
        outputChatBox ( &amp;quot;Il cursore è ora attivo per Atti!&amp;quot; ) -- invia un messaggio nella chatbox&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;
&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;
Questo esempio attiva il cursore per il client attivo, quindi invia un messaggio in chatbox.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
showCursor ( true )                          -- mostriamo il cursore&lt;br /&gt;
if isCursorShowing ( ) then                   -- ha funzionato?&lt;br /&gt;
    outputChatBox ( &amp;quot;Il cursore è ora attivo per &amp;quot;..getPlayerName( getLocalPlayer() )..&amp;quot;!&amp;quot; ) -- invia un messaggio nella chatbox&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;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{IT/Funzioni_cursore}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17218</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17218"/>
		<updated>2008-06-11T00:04:59Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:100%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[IT/Introduzione allo scripting|Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scriptare il pulsante===&lt;br /&gt;
Quando il giocatore clicca su qualsiasi parte della GUI, verrà chiamato l'evento &amp;quot;[[IT/onClientGUIClick|onClientGUIClick]]&amp;quot; per il componente GUI su cui hai cliccato. Quindi, se clicchi sul pulsante, puoi aggiungere un ''event handler'' legato al pulsante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, pulsante, funzione, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nel nostro script, abbiamo bisogno di un ''event handler'' legato solo al pulsante. Quando viene cliccato, il client ''dirà'' al server di spawnare il player. Recuperate il codice dell'&amp;quot;onClientResourceStart&amp;quot; dalla precedente sezione, e aggiungete la linea successiva DOPO che la funzione CreaFinestraLogin() è chiamata:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientConfermaLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'event handler deve essere aggiunto qui perché dobbiamo essere certi che la variabile btnLogin contenga il pulsante che ci serve. Non puoi legare un evento a un elemento che non esiste. Ti sarai reso conto che abbiamo bisogno della funzione &amp;quot;clientConfermaLogin&amp;quot;, come è scritto nella riga di sopra (ricordate che questa funzione va sempre PRIMA dell'''event handler'' a cui si riferisce).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientConfermaLogin(tasto)&lt;br /&gt;
	if tasto == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La variabile &amp;quot;tasto&amp;quot; è passata dall'''event handler'', ed è una stringa contenente il nome del tasto del mouse premuto (&amp;quot;left&amp;quot; [sinistra] o &amp;quot;right&amp;quot; [destra]). Qui tocchiamo anche un nuovo concetto, gli eventi personalizzati. Essi possono essere chiamati dallo stesso ''lato'' (da server a server, da client a client), o possono servire da mezzo di comunicazione tra i due ''lati'' (da server a client, o viceversa). Qui usiamo la funzione [[IT/triggerServerEvent|triggerServerEvent]] per chiamare un evento personalizzato gestito dal server , &amp;quot;ConfermaLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto abbiamo tutto il codice che ci serve, lato client. Sul lato server, ricordiamo che nella mode che abbiamo spawneremo i players nel momento in cui entrano nella partita: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Benvenuto nel mio server!&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;
Tuttavia, visto che dovremo spawnare il player quando il pulsante viene premuto, basterà sostituire l'evento &amp;quot;onPlayerJoin&amp;quot; con l'evento personalizzato chiamato dallo script lato client. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (source) then&lt;br /&gt;
	      spawnPlayer(source, x, y, z)&lt;br /&gt;
	      fadeCamera(source, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Benvenuto nel mio server!&amp;quot;, source)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;ConfermaLogin&amp;quot;, true)&lt;br /&gt;
addEventHandler(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che il secondo argomento della funzione [[IT/addEvent|addEvent]] (quello col valore &amp;quot;true&amp;quot;) specifica se l'evento può essere chiamato dall'''altro lato'', ed evidentemente dobbiamo attivarlo, perché l'evento personalizzato in questo caso viene chiamato dal client. La variabile &amp;quot;source&amp;quot; in questo caso identifica il client che ha ''causato'' l'evento, cioé che ha fatto chiamare la funzione. &lt;br /&gt;
&lt;br /&gt;
Infine, non dimentichiamo di includere il nuovo file ''gui.lua'' nel ''meta.xml'' della resource principale:&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;
A questo punto, abbiamo un semplice sistema di login che spawna il giocatore quando il pulsante &amp;quot;login&amp;quot; è premuto. Possiamo anche usare l'username e la password inviati dalla funzione [[IT/triggerServerEvent|triggerServerEvent]] per verificare l'identità del giocatore prima di spawnarlo.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17217</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17217"/>
		<updated>2008-06-11T00:02:40Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Un tutorial per creare una finestra di login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[IT/Introduzione allo scripting|Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scriptare il pulsante===&lt;br /&gt;
Quando il giocatore clicca su qualsiasi parte della GUI, verrà chiamato l'evento &amp;quot;[[IT/onClientGUIClick|onClientGUIClick]]&amp;quot; per il componente GUI su cui hai cliccato. Quindi, se clicchi sul pulsante, puoi aggiungere un ''event handler'' legato al pulsante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, pulsante, funzione, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nel nostro script, abbiamo bisogno di un ''event handler'' legato solo al pulsante. Quando viene cliccato, il client ''dirà'' al server di spawnare il player. Recuperate il codice dell'&amp;quot;onClientResourceStart&amp;quot; dalla precedente sezione, e aggiungete la linea successiva DOPO che la funzione CreaFinestraLogin() è chiamata:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientConfermaLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'event handler deve essere aggiunto qui perché dobbiamo essere certi che la variabile btnLogin contenga il pulsante che ci serve. Non puoi legare un evento a un elemento che non esiste. Ti sarai reso conto che abbiamo bisogno della funzione &amp;quot;clientConfermaLogin&amp;quot;, come è scritto nella riga di sopra (ricordate che questa funzione va sempre PRIMA dell'''event handler'' a cui si riferisce).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientConfermaLogin(tasto)&lt;br /&gt;
	if tasto == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La variabile &amp;quot;tasto&amp;quot; è passata dall'''event handler'', ed è una stringa contenente il nome del tasto del mouse premuto (&amp;quot;left&amp;quot; [sinistra] o &amp;quot;right&amp;quot; [destra]). Qui tocchiamo anche un nuovo concetto, gli eventi personalizzati. Essi possono essere chiamati dallo stesso ''lato'' (da server a server, da client a client), o possono servire da mezzo di comunicazione tra i due ''lati'' (da server a client, o viceversa). Qui usiamo la funzione [[IT/triggerServerEvent|triggerServerEvent]] per chiamare un evento personalizzato gestito dal server , &amp;quot;ConfermaLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto abbiamo tutto il codice che ci serve, lato client. Sul lato server, ricordiamo che nella mode che abbiamo spawneremo i players nel momento in cui entrano nella partita: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Benvenuto nel mio server!&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;
Tuttavia, visto che dovremo spawnare il player quando il pulsante viene premuto, basterà sostituire l'evento &amp;quot;onPlayerJoin&amp;quot; con l'evento personalizzato chiamato dallo script lato client. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (source) then&lt;br /&gt;
	      spawnPlayer(source, x, y, z)&lt;br /&gt;
	      fadeCamera(source, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Benvenuto nel mio server!&amp;quot;, source)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;ConfermaLogin&amp;quot;, true)&lt;br /&gt;
addEventHandler(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che il secondo argomento della funzione [[IT/addEvent|addEvent]] (quello col valore &amp;quot;true&amp;quot;) specifica se l'evento può essere chiamato dall'''altro lato'', ed evidentemente dobbiamo attivarlo, perché l'evento personalizzato in questo caso viene chiamato dal client. La variabile &amp;quot;source&amp;quot; in questo caso identifica il client che ha ''causato'' l'evento, cioé che ha fatto chiamare la funzione. &lt;br /&gt;
&lt;br /&gt;
Infine, non dimentichiamo di includere il nuovo file ''gui.lua'' nel ''meta.xml'' della resource principale:&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;
A questo punto, abbiamo un semplice sistema di login che spawna il giocatore quando il pulsante &amp;quot;login&amp;quot; è premuto. Possiamo anche usare l'username e la password inviati dalla funzione [[IT/triggerServerEvent|triggerServerEvent]] per verificare l'identità del giocatore prima di spawnarlo.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17216</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17216"/>
		<updated>2008-06-11T00:01:52Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Un tutorial per creare una finestra di login */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[IT/introduzione allo scripting|Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scriptare il pulsante===&lt;br /&gt;
Quando il giocatore clicca su qualsiasi parte della GUI, verrà chiamato l'evento &amp;quot;[[IT/onClientGUIClick|onClientGUIClick]]&amp;quot; per il componente GUI su cui hai cliccato. Quindi, se clicchi sul pulsante, puoi aggiungere un ''event handler'' legato al pulsante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, pulsante, funzione, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nel nostro script, abbiamo bisogno di un ''event handler'' legato solo al pulsante. Quando viene cliccato, il client ''dirà'' al server di spawnare il player. Recuperate il codice dell'&amp;quot;onClientResourceStart&amp;quot; dalla precedente sezione, e aggiungete la linea successiva DOPO che la funzione CreaFinestraLogin() è chiamata:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientConfermaLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'event handler deve essere aggiunto qui perché dobbiamo essere certi che la variabile btnLogin contenga il pulsante che ci serve. Non puoi legare un evento a un elemento che non esiste. Ti sarai reso conto che abbiamo bisogno della funzione &amp;quot;clientConfermaLogin&amp;quot;, come è scritto nella riga di sopra (ricordate che questa funzione va sempre PRIMA dell'''event handler'' a cui si riferisce).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientConfermaLogin(tasto)&lt;br /&gt;
	if tasto == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La variabile &amp;quot;tasto&amp;quot; è passata dall'''event handler'', ed è una stringa contenente il nome del tasto del mouse premuto (&amp;quot;left&amp;quot; [sinistra] o &amp;quot;right&amp;quot; [destra]). Qui tocchiamo anche un nuovo concetto, gli eventi personalizzati. Essi possono essere chiamati dallo stesso ''lato'' (da server a server, da client a client), o possono servire da mezzo di comunicazione tra i due ''lati'' (da server a client, o viceversa). Qui usiamo la funzione [[IT/triggerServerEvent|triggerServerEvent]] per chiamare un evento personalizzato gestito dal server , &amp;quot;ConfermaLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto abbiamo tutto il codice che ci serve, lato client. Sul lato server, ricordiamo che nella mode che abbiamo spawneremo i players nel momento in cui entrano nella partita: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Benvenuto nel mio server!&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;
Tuttavia, visto che dovremo spawnare il player quando il pulsante viene premuto, basterà sostituire l'evento &amp;quot;onPlayerJoin&amp;quot; con l'evento personalizzato chiamato dallo script lato client. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (source) then&lt;br /&gt;
	      spawnPlayer(source, x, y, z)&lt;br /&gt;
	      fadeCamera(source, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Benvenuto nel mio server!&amp;quot;, source)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;ConfermaLogin&amp;quot;, true)&lt;br /&gt;
addEventHandler(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che il secondo argomento della funzione [[IT/addEvent|addEvent]] (quello col valore &amp;quot;true&amp;quot;) specifica se l'evento può essere chiamato dall'''altro lato'', ed evidentemente dobbiamo attivarlo, perché l'evento personalizzato in questo caso viene chiamato dal client. La variabile &amp;quot;source&amp;quot; in questo caso identifica il client che ha ''causato'' l'evento, cioé che ha fatto chiamare la funzione. &lt;br /&gt;
&lt;br /&gt;
Infine, non dimentichiamo di includere il nuovo file ''gui.lua'' nel ''meta.xml'' della resource principale:&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;
A questo punto, abbiamo un semplice sistema di login che spawna il giocatore quando il pulsante &amp;quot;login&amp;quot; è premuto. Possiamo anche usare l'username e la password inviati dalla funzione [[IT/triggerServerEvent|triggerServerEvent]] per verificare l'identità del giocatore prima di spawnarlo.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Pagina_principale&amp;diff=17215</id>
		<title>IT/Pagina principale</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Pagina_principale&amp;diff=17215"/>
		<updated>2008-06-10T23:51:22Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Per iniziare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;[http://www.spreadfirefox.com/en-US/worldrecord Prenotati anche tu per l'uscita di Firefox 3!]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:Firefoxrecord.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.getfirefox.com/ Scarica Firefox gratis!]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #5555FF;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;Questa wiki è stata tradotta da(in ordine cronologico): [[User:Shadd|Shadd]], [[User:Atti|Atti]] e [[User:Talco|Talco]].&amp;lt;br /&amp;gt;This wiki has been translated by(in chronological order): [[User:Shadd|Shadd]], [[User:Atti|Atti]] and [[User:Talco|Talco]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;float:right;&amp;quot;&amp;gt;[[Image:Scripting.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
Benvenuto nella wiki in italiano di Multi Theft Auto: San Andreas Deathmatch. Qui troverai abbondanti informazioni sullo sviluppo di gamemode e mappe per Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Stiamo rilasciando le ''anteprime per lo sviluppatore'' perchè abbiamo bisogno del tuo aiuto! Ci sono molte [[IT/Come puoi aiutare|cose che puoi fare per aiutarci]] ad ottenere una release completa e raffinata di MTA:SA DM - creare una mappa, una gamemode, aiutare a documentare le funzioni, scrivere del codice di esempio, dei tutorial o semplicemente giocare a MTA e riportare nel forum i bug che trovi.&lt;br /&gt;
&lt;br /&gt;
Questa release è una gran cosa per noi - rilasciamo il prodotto di due anni del nostro lavoro e non possiamo aspettare di vedere cosa ci fate. Ricorda che possono capitare degli inevitabili problemi e che comunque le cose non sono ancora del tutto complete!&lt;br /&gt;
&lt;br /&gt;
Se hai qualche domanda o problema relativo allo scripting, sentiti libero di metterti in contatto con noi (in inglese) attraverso il nostro [[IT/Canale IRC|Canale IRC]].&lt;br /&gt;
&lt;br /&gt;
'''Hai bisogno di possedere un account in mtabeta.com per poter modificare questa wiki.''' Per favore registrati in [http://www.mtabeta.com mtabeta.com] e poi usa gli stessi dati per fare il login qui. Se vandalizzerai questa wiki verrai bannato.&lt;br /&gt;
&lt;br /&gt;
La wiki supporta '''[http://gears.google.com/ Google Gears]''', che ti permetterà di vedere questa wiki anche offline (e velocemente). Installa Google Gears e clicca il link ''Go Offline'' in fondo ad ogni pagina. Aspetta un'ora (!) che venga scaricata, quando avrà finito lo vedrai in basso ad ogni pagina, appena dopo il link ''Go Offline''. Fatto ciò, usa l'opzione ''Lavora scollegato'' del tuo browser (in genere nel menu File), o disconnettiti da internet e naviga nella wiki normalmente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px dotted navy; padding: 4px; margin: 10px&amp;quot;&amp;gt;L'ultima versione disponibile di '''Multi Theft Auto: San Andreas Deathmatch''' è la '''{{Current Version|full}}'''. Visita la [http://www.mtasa.com/dp.html pagina download] e scaricala!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
====Per iniziare====&lt;br /&gt;
&lt;br /&gt;
* [[IT/Manuale del Client|Manuale del Client]] {{IT/100%}}&lt;br /&gt;
* [[IT/Manuale del Server|Manuale del Server]] {{IT/100%}}&lt;br /&gt;
* [[IT/Bugs noti e FAQ|Bugs noti e FAQ]] {{IT/100%}}&lt;br /&gt;
* [[IT/Introduzione allo scripting|Introduzione allo Scripting]] {{IT/100%}}&lt;br /&gt;
* [[IT/Introduzione allo scripting della GUI|Introduzione allo scripting della GUI]] {{IT/100%}}&lt;br /&gt;
* [[IT/Guida al Debug|Guida al Debug]] {{IT/100%}} - Come trovare gli errori dei tuoi scripts&lt;br /&gt;
* [[IT/Classi di MTA|Classi di MTA]] {{IT/00%}}&lt;br /&gt;
** [[IT/Elementi|Elementi di MTA]] / [[IT/Albero degli elementi|Albero degli elementi]] {{IT/00%}}&lt;br /&gt;
* [[IT/Introduzione alle Risorse|Introduzione alle Risorse]] {{IT/00%}}&lt;br /&gt;
** [[IT/Accesso web alle Risorse|Accesso web alle Risorse]] {{IT/00%}}&lt;br /&gt;
** [[:Category:IT/Risorse|Catalogo risorse]]&lt;br /&gt;
** [[IT/Meta.xml|Meta.xml]] {{IT/100%}}&lt;br /&gt;
* [[IT/Scrivere una gamemode|Scrivere una gamemode]] {{IT/25%}}&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;
====Database====&lt;br /&gt;
Questa sezione delinea tutte le possibilità che MTA o le ''resources'' danno.&lt;br /&gt;
* [[Resource:IT/Map manager|Map Manager]] {{IT/100%}}&lt;br /&gt;
* [[IT/Script client-side|Script client-side]] {{IT/100%}}&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;
====Guide LUA====&lt;br /&gt;
Pagine create per aiutarti a comprendere il LUA (in inglese). &lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Manual]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
====Documentazione====&lt;br /&gt;
* [[IT/Funzioni Client-side|Funzioni Client-side]] {{IT/100%}}&lt;br /&gt;
* [[IT/Eventi Client-side|Eventi Client-side]] {{IT/00%}}&lt;br /&gt;
* [[IT/Funzioni Server-side|Funzioni Server-side]] {{IT/00%}}&lt;br /&gt;
* [[IT/Eventi Server-side|Eventi Server-side]] {{IT/00%}}&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Liste ID====&lt;br /&gt;
* [[IT/Skin Personaggi|Skin Personaggi]] {{IT/100%}} ([[IT/Tutte Le Skin|Tutte Le Skin)]] {{IT/100%}}&lt;br /&gt;
* [[IT/Vestiti di CJ|Vestiti di CJ]] {{IT/100%}}&lt;br /&gt;
* [[IT/Esplosivi|Esplosivi]] {{IT/100%}}&lt;br /&gt;
* [[IT/Segnalini radar|Segnalini radar]] {{IT/100%}}&lt;br /&gt;
* [[Template:IT/Suoni|Suoni]] {{IT/100%}}&lt;br /&gt;
* [[IT/ID Veicoli|Veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Colori default veicoli|Colori di default dei veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Colori veicoli|Tabella dei colori dei veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Miglioramenti Veicoli|Miglioramenti Veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Armi|Armi]] {{IT/100%}}&lt;br /&gt;
* [[IT/Meteo|Meteo]] {{IT/100%}}&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;
&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Talk:Introduction_to_Scripting_the_GUI&amp;diff=17214</id>
		<title>Talk:Introduction to Scripting the GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Talk:Introduction_to_Scripting_the_GUI&amp;diff=17214"/>
		<updated>2008-06-10T23:50:28Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: Are you sure about that &amp;quot;client&amp;quot; var? I translated it in the Italian wiki, and I think it's an error... --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Are you sure about that &amp;quot;client&amp;quot; var? I translated it in the Italian wiki, and I think it's an error...&lt;br /&gt;
--[[User:Atti|Atti]] 18:50, 10 June 2008 (CDT)&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17213</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17213"/>
		<updated>2008-06-10T23:49:05Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Scriptare il pulsante */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scriptare il pulsante===&lt;br /&gt;
Quando il giocatore clicca su qualsiasi parte della GUI, verrà chiamato l'evento &amp;quot;[[IT/onClientGUIClick|onClientGUIClick]]&amp;quot; per il componente GUI su cui hai cliccato. Quindi, se clicchi sul pulsante, puoi aggiungere un ''event handler'' legato al pulsante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, pulsante, funzione, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nel nostro script, abbiamo bisogno di un ''event handler'' legato solo al pulsante. Quando viene cliccato, il client ''dirà'' al server di spawnare il player. Recuperate il codice dell'&amp;quot;onClientResourceStart&amp;quot; dalla precedente sezione, e aggiungete la linea successiva DOPO che la funzione CreaFinestraLogin() è chiamata:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientConfermaLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'event handler deve essere aggiunto qui perché dobbiamo essere certi che la variabile btnLogin contenga il pulsante che ci serve. Non puoi legare un evento a un elemento che non esiste. Ti sarai reso conto che abbiamo bisogno della funzione &amp;quot;clientConfermaLogin&amp;quot;, come è scritto nella riga di sopra (ricordate che questa funzione va sempre PRIMA dell'''event handler'' a cui si riferisce).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientConfermaLogin(tasto)&lt;br /&gt;
	if tasto == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La variabile &amp;quot;tasto&amp;quot; è passata dall'''event handler'', ed è una stringa contenente il nome del tasto del mouse premuto (&amp;quot;left&amp;quot; [sinistra] o &amp;quot;right&amp;quot; [destra]). Qui tocchiamo anche un nuovo concetto, gli eventi personalizzati. Essi possono essere chiamati dallo stesso ''lato'' (da server a server, da client a client), o possono servire da mezzo di comunicazione tra i due ''lati'' (da server a client, o viceversa). Qui usiamo la funzione [[IT/triggerServerEvent|triggerServerEvent]] per chiamare un evento personalizzato gestito dal server , &amp;quot;ConfermaLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto abbiamo tutto il codice che ci serve, lato client. Sul lato server, ricordiamo che nella mode che abbiamo spawneremo i players nel momento in cui entrano nella partita: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Benvenuto nel mio server!&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;
Tuttavia, visto che dovremo spawnare il player quando il pulsante viene premuto, basterà sostituire l'evento &amp;quot;onPlayerJoin&amp;quot; con l'evento personalizzato chiamato dallo script lato client. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (source) then&lt;br /&gt;
	      spawnPlayer(source, x, y, z)&lt;br /&gt;
	      fadeCamera(source, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Benvenuto nel mio server!&amp;quot;, source)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;ConfermaLogin&amp;quot;, true)&lt;br /&gt;
addEventHandler(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che il secondo argomento della funzione [[IT/addEvent|addEvent]] (quello col valore &amp;quot;true&amp;quot;) specifica se l'evento può essere chiamato dall'''altro lato'', ed evidentemente dobbiamo attivarlo, perché l'evento personalizzato in questo caso viene chiamato dal client. La variabile &amp;quot;source&amp;quot; in questo caso identifica il client che ha ''causato'' l'evento, cioé che ha fatto chiamare la funzione. &lt;br /&gt;
&lt;br /&gt;
Infine, non dimentichiamo di includere il nuovo file ''gui.lua'' nel ''meta.xml'' della resource principale:&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;
A questo punto, abbiamo un semplice sistema di login che spawna il giocatore quando il pulsante &amp;quot;login&amp;quot; è premuto. Possiamo anche usare l'username e la password inviati dalla funzione [[IT/triggerServerEvent|triggerServerEvent]] per verificare l'identità del giocatore prima di spawnarlo.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17212</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17212"/>
		<updated>2008-06-10T23:48:18Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Scriptare il pulsante */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scriptare il pulsante===&lt;br /&gt;
Quando il giocatore clicca su qualsiasi parte della GUI, verrà chiamato l'evento &amp;quot;[[IT/onClientGUIClick|onClientGUIClick]]&amp;quot; per il componente GUI su cui hai cliccato. Quindi, se clicchi sul pulsante, puoi aggiungere un ''event handler'' legato al pulsante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, pulsante, funzione, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nel nostro script, abbiamo bisogno di un ''event handler'' legato solo al pulsante. Quando viene cliccato, il client ''dirà'' al server di spawnare il player. Recuperate il codice dell'&amp;quot;onClientResourceStart&amp;quot; dalla precedente sezione, e aggiungete la linea successiva DOPO che la funzione CreaFinestraLogin() è chiamata:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientConfermaLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L''event handler' deve essere aggiunto qui perché dobbiamo essere certi che la variabile btnLogin contenga il pulsante che ci serve. Non puoi legare un evento a un elemento che non esiste. Ti sarai reso conto che abbiamo bisogno della funzione &amp;quot;clientConfermaLogin&amp;quot;, come è scritto nella riga di sopra (ricordate che questa funzione va sempre PRIMA dell'''event handler'' a cui si riferisce).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientConfermaLogin(tasto)&lt;br /&gt;
	if tasto == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La variabile &amp;quot;tasto&amp;quot; è passata dall'''event handler'', ed è una stringa contenente il nome del tasto del mouse premuto (&amp;quot;left&amp;quot; [sinistra] o &amp;quot;right&amp;quot; [destra]). Qui tocchiamo anche un nuovo concetto, gli eventi personalizzati. Essi possono essere chiamati dallo stesso ''lato'' (da server a server, da client a client), o possono servire da mezzo di comunicazione tra i due ''lati'' (da server a client, o viceversa). Qui usiamo la funzione [[IT/triggerServerEvent|triggerServerEvent]] per chiamare un evento personalizzato gestito dal server , &amp;quot;ConfermaLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto abbiamo tutto il codice che ci serve, lato client. Sul lato server, ricordiamo che nella mode che abbiamo spawneremo i players nel momento in cui entrano nella partita: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Benvenuto nel mio server!&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;
Tuttavia, visto che dovremo spawnare il player quando il pulsante viene premuto, basterà sostituire l'evento &amp;quot;onPlayerJoin&amp;quot; con l'evento personalizzato chiamato dallo script lato client. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (source) then&lt;br /&gt;
	      spawnPlayer(source, x, y, z)&lt;br /&gt;
	      fadeCamera(source, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Benvenuto nel mio server!&amp;quot;, source)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;ConfermaLogin&amp;quot;, true)&lt;br /&gt;
addEventHandler(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che il secondo argomento della funzione [[IT/addEvent|addEvent]] (quello col valore &amp;quot;true&amp;quot;) specifica se l'evento può essere chiamato dall'''altro lato'', ed evidentemente dobbiamo attivarlo, perché l'evento personalizzato in questo caso viene chiamato dal client. La variabile &amp;quot;source&amp;quot; in questo caso identifica il client che ha ''causato'' l'evento, cioé che ha fatto chiamare la funzione. &lt;br /&gt;
&lt;br /&gt;
Infine, non dimentichiamo di includere il nuovo file ''gui.lua'' nel ''meta.xml'' della resource principale:&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;
A questo punto, abbiamo un semplice sistema di login che spawna il giocatore quando il pulsante &amp;quot;login&amp;quot; è premuto. Possiamo anche usare l'username e la password inviati dalla funzione [[IT/triggerServerEvent|triggerServerEvent]] per verificare l'identità del giocatore prima di spawnarlo.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17211</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17211"/>
		<updated>2008-06-10T23:47:35Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Scripting the button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scriptare il pulsante===&lt;br /&gt;
Quando il giocatore clicca su qualsiasi parte della GUI, verrà chiamato l'evento &amp;quot;[[IT/onClientGUIClick|onClientGUIClick]]&amp;quot; per il componente GUI su cui hai cliccato. Quindi, se clicchi sul pulsante, puoi aggiungere un ''event handler'' legato al pulsante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, pulsante, funzione, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nel nostro script, abbiamo bisogno di un ''event handler'' legato solo al pulsante. Quando viene cliccato, il client ''dirà'' al server di spawnare il player. Recuperate il codice dell'&amp;quot;onClientResourceStart&amp;quot; dalla precedente sezione, e aggiungete la linea successiva DOPO che la funzione CreaFinestraLogin() è chiamata:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientConfermaLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
L'''event handler'' deve essere aggiunto qui perché dobbiamo essere certi che la variabile btnLogin contenga il pulsante che ci serve. Non puoi legare un evento a un elemento che non esiste. Ti sarai reso conto che abbiamo bisogno della funzione &amp;quot;clientConfermaLogin&amp;quot;, come è scritto nella riga di sopra (ricordate che questa funzione va sempre PRIMA dell'''event handler'' a cui si riferisce).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientConfermaLogin(tasto)&lt;br /&gt;
	if tasto == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La variabile &amp;quot;tasto&amp;quot; è passata dall'''event handler'', ed è una stringa contenente il nome del tasto del mouse premuto (&amp;quot;left&amp;quot; [sinistra] o &amp;quot;right&amp;quot; [destra]). Qui tocchiamo anche un nuovo concetto, gli eventi personalizzati. Essi possono essere chiamati dallo stesso ''lato'' (da server a server, da client a client), o possono servire da mezzo di comunicazione tra i due ''lati'' (da server a client, o viceversa). Qui usiamo la funzione [[IT/triggerServerEvent|triggerServerEvent]] per chiamare un evento personalizzato gestito dal server , &amp;quot;ConfermaLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto abbiamo tutto il codice che ci serve, lato client. Sul lato server, ricordiamo che nella mode che abbiamo spawneremo i players nel momento in cui entrano nella partita: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Benvenuto nel mio server!&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;
Tuttavia, visto che dovremo spawnare il player quando il pulsante viene premuto, basterà sostituire l'evento &amp;quot;onPlayerJoin&amp;quot; con l'evento personalizzato chiamato dallo script lato client. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (source) then&lt;br /&gt;
	      spawnPlayer(source, x, y, z)&lt;br /&gt;
	      fadeCamera(source, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Benvenuto nel mio server!&amp;quot;, source)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addEvent(&amp;quot;ConfermaLogin&amp;quot;, true)&lt;br /&gt;
addEventHandler(&amp;quot;ConfermaLogin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che il secondo argomento della funzione [[IT/addEvent|addEvent]] (quello col valore &amp;quot;true&amp;quot;) specifica se l'evento può essere chiamato dall'''altro lato'', ed evidentemente dobbiamo attivarlo, perché l'evento personalizzato in questo caso viene chiamato dal client. La variabile &amp;quot;source&amp;quot; in questo caso identifica il client che ha ''causato'' l'evento, cioé che ha fatto chiamare la funzione. &lt;br /&gt;
&lt;br /&gt;
Infine, non dimentichiamo di includere il nuovo file ''gui.lua'' nel ''meta.xml'' della resource principale:&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;
A questo punto, abbiamo un semplice sistema di login che spawna il giocatore quando il pulsante &amp;quot;login&amp;quot; è premuto. Possiamo anche usare l'username e la password inviati dalla funzione [[IT/triggerServerEvent|triggerServerEvent]] per verificare l'identità del giocatore prima di spawnarlo.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17208</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17208"/>
		<updated>2008-06-10T23:11:50Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Usare la funzione che abbiamo scritto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l'''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17207</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17207"/>
		<updated>2008-06-10T23:11:25Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreaFinestraLogin()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vorremmo quindi che la finestra apparisse quando il giocatore entra nella partita, usando lo stesso evento &amp;quot;[[IT/onClientResourceStart|onClientResourceStart]]&amp;quot;. Adesso l' ''event handler'' risulterà simile a questo:&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;
		CreaFinestraLogin()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Benvenuto nel server, per favore effettua il login.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Abbiamo effettuato un controllo prima di chiamare la funzione [[IT/guiSetVisible|guiSetVisible]], in modo da verificare l'esistenza di wdwLogin: anche se esso non è un elemento valido, in ogni caso non otterremo un errore. La funzione [[IT/showCursor|showCursor]] ti dà controllo sul tuo mouse, e [[IT/guiSetInputEnabled|guiSetInputEnabled]] serve ad assicurarsi che mentre stai scrivendo nella GUI, lettere come &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; non muoveranno il tuo personaggio o chiuderanno la finestra GUI. Nel prossimo passo, faremo in modo che il bottone funzioni come desideriamo.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17205</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17205"/>
		<updated>2008-06-10T23:02:48Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usare la funzione che abbiamo scritto===&lt;br /&gt;
La funzione CreaFinestraLogin è pronta, ma sarà inutile finchè non la chiameremo. Si raccomanda di creare tutti gli elementi GUI quando lo script lato client è caricato, nasconderli, e poi mostrarli al giocatore quando serve. Pertanto, creeremo un ''event handler'' legato all'evento &amp;quot;[[onClientResourceStart|IT/onClientResourceStart]]&amp;quot; per creare la finestra:&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;
		CreateLoginWindow()&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
We would like to show the window when the client joins the game, using the same event &amp;quot;[[onClientResourceStart]]&amp;quot;. Now the event handler looks like:&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;
		CreateLoginWindow()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA DM Server, please log in.  &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that we have a security check before making the window visible, so that in case the window had not been created, in which case wdwLogin is not a valid element, we don't get an error. The [[showCursor]] function gives control to your mouse, and [[guiSetInputEnabled]] makes sure when you type in the GUI, certain letters like &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; don't move your character or bring out the chatbox input. In the next step, we'll make the button work as desired.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17204</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17204"/>
		<updated>2008-06-10T22:58:27Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	guiSetVisible(wdwLogin, false)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nota che ogni componente GUI che abbiamo creato è ''figlio'' della finestra, e per farlo abbiamo specificato l'elemento ''genitore'' (wdwLogin, in questo caso) quando abbiamo creato il componente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Questo è molto utile, perché quando in seguito dovremo controllare l'intero set di GUI, potremo riferirci direttamente all'elemento ''genitore''. Ad esempio:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiSetVisible(wdwLogin, false) --nasconde tutti gli elementi GUI creati finora, perché il giocatore li veda solo al momento opportuno. &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 done, 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 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;
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;
We would like to show the window when the client joins the game, using the same event &amp;quot;[[onClientResourceStart]]&amp;quot;. Now the event handler looks like:&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;
		CreateLoginWindow()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA DM Server, please log in.  &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that we have a security check before making the window visible, so that in case the window had not been created, in which case wdwLogin is not a valid element, we don't get an error. The [[showCursor]] function gives control to your mouse, and [[guiSetInputEnabled]] makes sure when you type in the GUI, certain letters like &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; don't move your character or bring out the chatbox input. In the next step, we'll make the button work as desired.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17202</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17202"/>
		<updated>2008-06-10T22:54:49Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
[[Category:0%]]&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Username&amp;quot;, true, wdwLogin)&lt;br /&gt;
	Y = 0.5&lt;br /&gt;
	guiCreateLabel(X, Y, Larghezza, Altezza, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
	X = 0.415&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Larghezza = 0.5&lt;br /&gt;
	Altezza = 0.15&lt;br /&gt;
	edtUser = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&lt;br /&gt;
        Y = 0.5&lt;br /&gt;
	edtPass = guiCreateEdit(X, Y, Larghezza, Altezza, &amp;quot;&amp;quot;, true, wdwLogin)&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;
	Larghezza = 0.25&lt;br /&gt;
	Altezza = 0.2&lt;br /&gt;
	btnLogin = guiCreateButton(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true, wdwLogin)&lt;br /&gt;
	&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;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Width, Height, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is very useful because later when you need to control the entire set of GUI, you can just refer to the parent element. For example:&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 done, 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 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;
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;
We would like to show the window when the client joins the game, using the same event &amp;quot;[[onClientResourceStart]]&amp;quot;. Now the event handler looks like:&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;
		CreateLoginWindow()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA DM Server, please log in.  &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that we have a security check before making the window visible, so that in case the window had not been created, in which case wdwLogin is not a valid element, we don't get an error. The [[showCursor]] function gives control to your mouse, and [[guiSetInputEnabled]] makes sure when you type in the GUI, certain letters like &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; don't move your character or bring out the chatbox input. In the next step, we'll make the button work as desired.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17156</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17156"/>
		<updated>2008-06-06T22:33:15Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
&amp;lt;!-- place holder --&amp;gt;&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Come forse avrai notato, le coordinate che abbiamo inserito sono in percentuale, in questo caso rispetto all'intero schermo. Significa che 0 corrisponde all'estremità destra dello schermo, 1 a quella sinistra, e 0,5 la metà esatta. Questo è applicato non solo alla X e alla Y, ma anche alla larghezza e all'altezza della finestra (se &amp;quot;Larghezza&amp;quot; fosse 0.5, la finestra sarebbe larga esattamente la metà dello schermo). In seguito aggiungeremo le scritte (&amp;quot;username:&amp;quot; e &amp;quot;password:&amp;quot;), i campi di modifica e la casella di controllo. Sostituiamo la funzione con la sua versione completa:&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;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Width = 0.25&lt;br /&gt;
	Height = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Width, Height, &amp;quot;Username&amp;quot;, true, wdwLogin)&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;
	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;
	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;
	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;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Width, Height, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is very useful because later when you need to control the entire set of GUI, you can just refer to the parent element. For example:&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 done, 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 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;
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;
We would like to show the window when the client joins the game, using the same event &amp;quot;[[onClientResourceStart]]&amp;quot;. Now the event handler looks like:&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;
		CreateLoginWindow()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA DM Server, please log in.  &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that we have a security check before making the window visible, so that in case the window had not been created, in which case wdwLogin is not a valid element, we don't get an error. The [[showCursor]] function gives control to your mouse, and [[guiSetInputEnabled]] makes sure when you type in the GUI, certain letters like &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; don't move your character or bring out the chatbox input. In the next step, we'll make the button work as desired.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17149</id>
		<title>IT/Introduzione allo scripting della GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Introduzione_allo_scripting_della_GUI&amp;diff=17149"/>
		<updated>2008-06-06T21:11:59Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: {{IT/MainP}} &amp;lt;!-- place holder --&amp;gt; Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzat...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
&amp;lt;!-- place holder --&amp;gt;&lt;br /&gt;
Una funzionalità molto importane di MTA è quella di poter scriptare delle GUI (Graphic User Interface - Interfaccia Grafica per l'Utente) personalizzate. La GUI consiste di finestre, pulsanti, campi di modifica, caselle di controllo... Essi possono essere mostrati mentre un player sta giocando, e possono essere usati al posto dei normali comandi per l'input/output. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|GUI del pannello da Admin]]&lt;br /&gt;
&lt;br /&gt;
==Un tutorial per creare una finestra di login==&lt;br /&gt;
In questo tutorial creeremo una semplice finestra di login, con due campi ed un pulsante. La finestra appare quando un giocatore entra nel server, e quando il pulsante viene premuto, il giocatore spawna. Il tutorial continuerà la ''gamemode'' che abbiamo iniziato nell'[[introduzione allo scripting|IT/Introduzione allo Scripting]]. Daremo anche un'occhiata allo scripting lato client. &lt;br /&gt;
&lt;br /&gt;
===Disegnare la finestra===&lt;br /&gt;
Tutte le GUI devono essere scriptate lato client, dunque potrebbe essere conveniente riunirle tutte in una cartella separata. Dunque, quando hai creato una cartella a tuo piacimento, creiamo un file &amp;quot;gui.lua&amp;quot;, e in questo file scriveremo una funzione che disegni la finestra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function CreaFinestraLogin()&lt;br /&gt;
	local X = 0.375&lt;br /&gt;
	local Y = 0.375&lt;br /&gt;
	local Larghezza = 0.25&lt;br /&gt;
	local Altezza = 0.25&lt;br /&gt;
	wdwLogin = guiCreateWindow(X, Y, Larghezza, Altezza, &amp;quot;Log In&amp;quot;, true)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You may click on the function's name to read its documentation. Note that the coordinates of the window is in ''percentage'' of the screen. It means that if the screen is labelled with 0 on the left end, and 1 on the right end, and if &amp;quot;X&amp;quot; is 0.5, it represents the middle of the screen. It applies to Y, window width, and window height as well (if &amp;quot;width&amp;quot; is 0.5, the window will be half as wide as the screen). Next we'll add the text labels (saying &amp;quot;username:&amp;quot; and &amp;quot;password:&amp;quot;), edit boxes and a button. Replace the function with its complete version:&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;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Width = 0.25&lt;br /&gt;
	Height = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Width, Height, &amp;quot;Username&amp;quot;, true, wdwLogin)&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;
	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;
	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;
	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;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Width, Height, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is very useful because later when you need to control the entire set of GUI, you can just refer to the parent element. For example:&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 done, 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 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;
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;
We would like to show the window when the client joins the game, using the same event &amp;quot;[[onClientResourceStart]]&amp;quot;. Now the event handler looks like:&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;
		CreateLoginWindow()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA DM Server, please log in.  &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that we have a security check before making the window visible, so that in case the window had not been created, in which case wdwLogin is not a valid element, we don't get an error. The [[showCursor]] function gives control to your mouse, and [[guiSetInputEnabled]] makes sure when you type in the GUI, certain letters like &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; don't move your character or bring out the chatbox input. In the next step, we'll make the button work as desired.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Introduction_to_Scripting_the_GUI&amp;diff=17136</id>
		<title>Introduction to Scripting the GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Introduction_to_Scripting_the_GUI&amp;diff=17136"/>
		<updated>2008-06-06T18:45:52Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- place holder --&amp;gt;&lt;br /&gt;
One important feature in MTA:DM is the ability to script customized GUI (Graphic User Interface). The GUI consists of windows, button, edit boxes, check boxes... Almost every standard form components in graphical environments. They can be displayed while the user is in game, and used for inputs and outpus in place of traditional commands. &lt;br /&gt;
&lt;br /&gt;
[[Image:AdminGUI.png|thumb|Admin Console GUI]]&lt;br /&gt;
&lt;br /&gt;
==A tutorial to make a login window==&lt;br /&gt;
In this tutorial we'll make a simple login window, with two input boxes and a button. The window appears when the player joins the game, and once the button is clicked, the player is spawned. The tutorial will continue the gamemode we made in [[Scripting Introduction|Introduction to Scripting]]. We'll also take a look at client-side scripting. &lt;br /&gt;
&lt;br /&gt;
===Draw the window===&lt;br /&gt;
All the GUI must be made client side. It is also a good practice to keep all the client scripts in a separate folder. Browse to /Your MTA Server/mods/deathmatch/resources/myserver/ directory, and create a folder named &amp;quot;client&amp;quot;. Under /client/ directory, create a text file and name it &amp;quot;gui.lua&amp;quot;, and in this file we will write a funtion that draws the window:&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;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You may click on the function's name to read its documentation. Note that the coordinates of the window is in ''percentage'' of the screen. It means that if the screen is labelled with 0 on the left end, and 1 on the right end, and if &amp;quot;X&amp;quot; is 0.5, it represents the middle of the screen. It applies to Y, window width, and window height as well (if &amp;quot;width&amp;quot; is 0.5, the window will be half as wide as the screen). Next we'll add the text labels (saying &amp;quot;username:&amp;quot; and &amp;quot;password:&amp;quot;), edit boxes and a button. Replace the function with its complete version:&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;
	X = 0.0825&lt;br /&gt;
	Y = 0.2&lt;br /&gt;
	Width = 0.25&lt;br /&gt;
	Height = 0.25&lt;br /&gt;
	guiCreateLabel(X, Y, Width, Height, &amp;quot;Username&amp;quot;, true, wdwLogin)&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;
	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;
	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;
	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;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
guiCreateLabel(X, Y, Width, Height, &amp;quot;Password&amp;quot;, true, wdwLogin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is very useful because later when you need to control the entire set of GUI, you can just refer to the parent element. For example:&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 done, 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 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;
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;
We would like to show the window when the client joins the game, using the same event &amp;quot;[[onClientResourceStart]]&amp;quot;. Now the event handler looks like:&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;
		CreateLoginWindow()&lt;br /&gt;
&lt;br /&gt;
                outputChatBox(&amp;quot;Welcome to My MTA DM Server, please log in.  &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	        if (wdwLogin ~= nil) then&lt;br /&gt;
		         guiSetVisible(wdwLogin, true)&lt;br /&gt;
	        end &lt;br /&gt;
&lt;br /&gt;
	        showCursor(true)&lt;br /&gt;
	        guiSetInputEnabled(true)&lt;br /&gt;
	end&lt;br /&gt;
)	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that we have a security check before making the window visible, so that in case the window had not been created, in which case wdwLogin is not a valid element, we don't get an error. The [[showCursor]] function gives control to your mouse, and [[guiSetInputEnabled]] makes sure when you type in the GUI, certain letters like &amp;quot;A&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;W&amp;quot;, &amp;quot;T&amp;quot; don't move your character or bring out the chatbox input. In the next step, we'll make the button work as desired.&lt;br /&gt;
&lt;br /&gt;
===Scripting the button===&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. For instance, if you click on the button, you can add the event handler attached to the button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, theButtonElement, theHandlerFunction, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our script, we only need the event handler attached to the button. When it's clicked, the client will tell the server to spawn the player. Find the event handler code for &amp;quot;onClientResourceStart&amp;quot; from the previous section, and add the following line right AFTER CreateLoginWindow() is called:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onClientGUIClick&amp;quot;, btnLogin, clientSubmitLogin, false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The event handler must be added here because it makes sure variable btnLogin contains the actual button. You cannot attach an event to an non-existant element. You should have noticed that we need the &amp;quot;clientSubmitLogin&amp;quot; function, as stated in the line above.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function clientSubmitLogin(button)&lt;br /&gt;
	if button == &amp;quot;left&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		triggerServerEvent(&amp;quot;SubmitLogin&amp;quot;, getRootElement(), guiGetText(edtUser), guiGetText(edtPass))&lt;br /&gt;
		guiSetInputEnabled(false)&lt;br /&gt;
		guiSetVisible(wdwLogin, false)&lt;br /&gt;
		showCursor(false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The variable &amp;quot;button&amp;quot; is passed by the event handler, and it's a string with the name of the button (either &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;). Here we also hit a new concept, which is custom events. Custom events can be triggered by script from the same side (server to server, or client to client), or from the other side (server to client, or vice versa). Here we use the [[triggerServerEvent]] function to trigger a custom event on the server, &amp;quot;SubmitLogin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At this point we have all the code needed on the client side. On the server side, recall that we are spawning the player as soon as they join, as shown below: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	outputChatBox(&amp;quot;Welcome to My Server&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;
However, since we are going to spawn the player when the button is clicked, we must replace the &amp;quot;onPlayerJoin&amp;quot; event with the custom event triggered by the client script. Replace the above code with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler(username, password)&lt;br /&gt;
	local x,y,z&lt;br /&gt;
	x = 1959.55&lt;br /&gt;
	y = -1714.46&lt;br /&gt;
	z = 10&lt;br /&gt;
        if (client) then&lt;br /&gt;
	      spawnPlayer(client, x, y, z)&lt;br /&gt;
	      fadeCamera(client, true)&lt;br /&gt;
	      outputChatBox(&amp;quot;Welcome to My Server&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;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that the second arguement of [[addEvent]] function (the one with value &amp;quot;true&amp;quot;) specifies whether the event can be triggered by the other side, therefore we need to turn it on since the client is triggering it. Also note 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;
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;
As to this point, we have a basic login window that spawns the player when the &amp;quot;login&amp;quot; button is clicked. You can also use the username and password submitted by the [[triggerServerEvent]] function to verify the player's identify before spawning him.&lt;br /&gt;
&lt;br /&gt;
[[it:Introduzione_allo_scripting_della_GUI]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerPing&amp;diff=17121</id>
		<title>IT/getPlayerPing</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerPing&amp;diff=17121"/>
		<updated>2008-06-06T18:21:35Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Esempio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
Questa funzione restituisce il ping di un [[IT/player|player]]. Il ping è il numero di millisecondi che i pacchetti di dati impiegano per essere inviati dal server al client o viceversa.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int getPlayerPing ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
*'''thePlayer''': Il [[IT/player|player]] di cui vuoi determinare il ping.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Ritorna il ping come ''integer'', o ''false'' se il giocatore selezionato non è valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio verifica il ping di un giocatore che è appena entrato e lo avverte se esso supera i 100 ms.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function controllaPing()&lt;br /&gt;
	local ping = getPlayerPing(source)    -- ottiene il ping dell'elemento ''source'' (il player appena entrato)&lt;br /&gt;
	if (ping &amp;gt; 100) then                  -- se è maggiore di 100...&lt;br /&gt;
		outputChatBox(&amp;quot;Il tuo ping è alto, abbassalo se possibile.&amp;quot;, source) -- mostra un messaggio al player&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), controllaPing) -- aggiunge l'event handler&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;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
Questo esempio verifica il ping di un giocatore quando usa il comando ''ping'' e lo avverte se esso supera i 100 ms.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function controllaPing()&lt;br /&gt;
        local ping = getPlayerPing(getLocalPlayer())  -- ottiene il ping del player del client attuale&lt;br /&gt;
        if (ping &amp;gt; 100) then                          -- se è maggiore di 100...&lt;br /&gt;
                outputChatBox(&amp;quot;Il tuo ping è alto, abbassalo se possibile.&amp;quot;, getLocalPlayer()) -- mostra un messaggio al player&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;ping&amp;quot;, controllaPing) -- aggiunge il comando ''ping''&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerPing&amp;diff=17119</id>
		<title>IT/getPlayerPing</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerPing&amp;diff=17119"/>
		<updated>2008-06-06T18:20:49Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: __NOTOC__ {{Funzioni server client}} {{IT/MainP}} Questa funzione restituisce il ping di un player. Il ping è il numero di millisecondi che i pacchetti di dati impiegano per...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
Questa funzione restituisce il ping di un [[IT/player|player]]. Il ping è il numero di millisecondi che i pacchetti di dati impiegano per essere inviati dal server al client o viceversa.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;int getPlayerPing ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
*'''thePlayer''': Il [[IT/player|player]] di cui vuoi determinare il ping.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Ritorna il ping come ''integer'', o ''false'' se il giocatore selezionato non è valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio verifica il ping di un giocatore che è appena entrato e lo avverte se esso supera i 100 ms.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function controllaPing()&lt;br /&gt;
	local ping = getPlayerPing(source)    -- ottiene il ping dell'elemento ''source'' (il player appena entrato)&lt;br /&gt;
	if (ping &amp;gt; 100) then                  -- se è maggiore di 100...&lt;br /&gt;
		outputChatBox(&amp;quot;Il tuo ping è piuttosto alto, abbassalo se possibile.&amp;quot;, source) -- mostra un messaggio al player&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), controllaPing) -- aggiunge l'event handler&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;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
Questo esempio verifica il ping di un giocatore quando usa il comando ''ping'' e lo avverte se esso supera i 100 ms.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function controllaPing()&lt;br /&gt;
        local ping = getPlayerPing(getLocalPlayer())  -- ottiene il ping del player del client attuale&lt;br /&gt;
        if (ping &amp;gt; 100) then                          -- se è maggiore di 100...&lt;br /&gt;
                outputChatBox(&amp;quot;Il tuo ping è piuttosto alto, abbassalo se possibile.&amp;quot;) -- mostra un messaggio al player&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;ping&amp;quot;, controllaPing) -- aggiunge il comando ''ping''&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/isPlayerDead&amp;diff=17118</id>
		<title>IT/isPlayerDead</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/isPlayerDead&amp;diff=17118"/>
		<updated>2008-06-06T18:10:36Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione verifica se un giocatore è morto o meno.&lt;br /&gt;
&lt;br /&gt;
==Sintassi== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerDead ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''thePlayer:''' Il [[IT/player|player]] di cui vuoi verificare la morte.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il player è morto, altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio permette a un giocatore di usare il comando 'sonomorto' per verificare se è morto o meno.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--Verifica se il giocatore è morto meno e mostra un messaggio nella chatbox&lt;br /&gt;
function verificaMorte ( thePlayer, commandName )&lt;br /&gt;
    if ( isPlayerDead ( thePlayer ) ) then&lt;br /&gt;
         outputChatBox ( &amp;quot;Sei morto, preparati a diventare uno zombie!&amp;quot;, thePlayer )&lt;br /&gt;
    else&lt;br /&gt;
         outputChatBox ( &amp;quot;Tira pure un sospiro di sollievo, sei vivo.&amp;quot;, thePlayer )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;sonomorto&amp;quot;, verificaMorte )&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;
Questo esempio permette a un giocatore di usare il comando 'sonomorto' per verificare se è morto o meno.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--Check if player is alive or dead and let them know in the chat box&lt;br /&gt;
function verificaMorte ( commandName )&lt;br /&gt;
    if ( isPlayerDead ( getLocalPlayer() ) ) then&lt;br /&gt;
         outputChatBox ( &amp;quot;Sei morto, preparati a diventare uno zombie!&amp;quot;, getLocalPlayer() )&lt;br /&gt;
    else&lt;br /&gt;
         outputChatBox ( &amp;quot;Tira pure un sospiro di sollievo, sei vivo.&amp;quot;, getLocalPlayer() )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;sonomorto&amp;quot;, verificaMorte )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17117</id>
		<title>IT/getPlayerName</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17117"/>
		<updated>2008-06-06T18:10:25Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Esempio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione restituisce una stringa contenente il nick di un giocatore.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string getPlayerName ( player thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
* '''thePlayer:''' Il giocatore di cui vuoi sapere il nome.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce una stringa contenente il nome del player selezionato, oppure ''false'' se è stato selezionato un player non valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
Questo esempio scrive in chat il nome del player del client che esegue lo script.&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;
--otteniamo il player ''locale''&lt;br /&gt;
local localPlayer = getLocalPlayer()&lt;br /&gt;
--otteniamo il suo nome&lt;br /&gt;
local nomeLocalPlayer = getPlayerName(localPlayer)&lt;br /&gt;
--e lo scriviamo in chat&lt;br /&gt;
outputChatBox(nomeLocalPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17116</id>
		<title>IT/getPlayerName</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17116"/>
		<updated>2008-06-06T18:10:02Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione restituisce una stringa contenente il nick di un giocatore.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string getPlayerName ( player thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
* '''thePlayer:''' Il giocatore di cui vuoi sapere il nome.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce una stringa contenente il nome del player selezionato, oppure ''false'' se è stato selezionato un player non valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
Questo esempio scrive in chat il nome del player del client che esegue lo script.&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;
--otteniamo il player ''locale''&lt;br /&gt;
local localPlayer = getLocalPlayer()&lt;br /&gt;
--otteniamo il suo nome&lt;br /&gt;
local nomeLocalPlayer = getPlayerName(localPlayer)&lt;br /&gt;
--e lo scriviamo in chat&lt;br /&gt;
outputChatBox(nomeLocalPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17115</id>
		<title>IT/getPlayerName</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17115"/>
		<updated>2008-06-06T18:09:35Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione restituisce una stringa contenente il nick di un giocatore.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string getPlayerName ( player thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
* '''thePlayer:''' Il giocatore di cui vuoi sapere il nome.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce una stringa contenente il nome del player selezionato, oppure ''false'' se è stato selezionato un player non valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
Questo esempio scrive in chat il nome del player del client che esegue lo script.&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;
--otteniamo il player ''locale''&lt;br /&gt;
local localPlayer = getLocalPlayer()&lt;br /&gt;
--otteniamo il suo nome&lt;br /&gt;
local nomeLocalPlayer = getPlayerName(localPlayer)&lt;br /&gt;
--e lo scriviamo in chat&lt;br /&gt;
outputChatBox(nomeLocalPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17114</id>
		<title>IT/getPlayerName</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17114"/>
		<updated>2008-06-06T18:09:21Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione restituisce una stringa contenente il nick di un giocatore.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string getPlayerName ( player thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
* '''thePlayer:''' Il giocatore di cui vuoi sapere il nome.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce una stringa contenente il nome del player selezionato, oppure ''false'' se è stato selezionato un player non valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
Questo esempio scrive in chat il nome del player del client che esegue lo script.&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;
--otteniamo il player ''locale''&lt;br /&gt;
local localPlayer = getLocalPlayer()&lt;br /&gt;
--otteniamo il suo nome&lt;br /&gt;
local nomeLocalPlayer = getPlayerName(localPlayer)&lt;br /&gt;
--e lo scriviamo in chat&lt;br /&gt;
outputChatBox(nomeLocalPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17113</id>
		<title>IT/getPlayerName</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getPlayerName&amp;diff=17113"/>
		<updated>2008-06-06T18:09:00Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: {{IT/Funzioni client}} {{IT/MainP}} __NOTOC__ Questa funzione restituisce una stringa contenente il nick di un giocatore.  ==Sintassi== &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt; string getPlayerName ( player thePlaye...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione restituisce una stringa contenente il nick di un giocatore.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
string getPlayerName ( player thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
* '''thePlayer:''' Il giocatore di cui vuoi sapere il nome.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce una stringa contenente il nome del player selezionato, oppure ''false'' se è stato selezionato un player non valido.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
Questo esempio scrive in chat il nome del player del client che esegue lo script.&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;
--otteniamo il player ''locale''&lt;br /&gt;
local localPlayer = getLocalPlayer()&lt;br /&gt;
--otteniamo il suo nome&lt;br /&gt;
local nomeLocalPlayer = getPlayerName(localPlayer)&lt;br /&gt;
--e lo scriviamo in chat&lt;br /&gt;
outputChatBox(nomeLocalPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/getLocalPlayer&amp;diff=17108</id>
		<title>IT/getLocalPlayer</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/getLocalPlayer&amp;diff=17108"/>
		<updated>2008-06-06T18:00:17Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: {{IT/Funzioni client}} {{IT/MainP}} __NOTOC__ Questa funzione restituisce l'elemento 'player' del client che sta eseguendo lo script.   ==Sintassi==  &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt; player getLocalPlayer ( ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione restituisce l'elemento 'player' del client che sta eseguendo lo script. &lt;br /&gt;
&lt;br /&gt;
==Sintassi== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
player getLocalPlayer ( )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce l'elemento [[IT/player|player]] del client attuale.&lt;br /&gt;
&lt;br /&gt;
==Esempio== &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;
Questo esempio scrive l'attuale posizione del giocatore nella console.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local localPlayer = getLocalPlayer ( )&lt;br /&gt;
&lt;br /&gt;
function mostraPosizioneAttuale ( )&lt;br /&gt;
	-- ottiene l'attuale posizione del giocatore&lt;br /&gt;
	local px, py, pz = getElementPosition ( localPlayer )&lt;br /&gt;
	-- la scrive nella console&lt;br /&gt;
	outputConsole ( &amp;quot;La tua attuale posizione: &amp;quot; .. px .. &amp;quot; &amp;quot; .. py .. &amp;quot; &amp;quot; .. pz )&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;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/isPlayerMuted&amp;diff=17106</id>
		<title>IT/isPlayerMuted</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/isPlayerMuted&amp;diff=17106"/>
		<updated>2008-06-06T17:49:28Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Esempio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{IT/Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
Questa funzione verifica se un player è stato 'zittito', cioè se gli è impedito di inviare messaggi in chat.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerMuted ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
*'''thePlayer:''' Il [[IT/player|player]] che vuoi controllare.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il player è stato 'zittito', altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
tizio = getPlayerFromNick ( &amp;quot;Tizio&amp;quot; )&lt;br /&gt;
if ( isPlayerMuted ( tizio ) then&lt;br /&gt;
   outputChatBox ( &amp;quot;Tizio non può scrivere in chat.&amp;quot; )&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/isPlayerMuted&amp;diff=17105</id>
		<title>IT/isPlayerMuted</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/isPlayerMuted&amp;diff=17105"/>
		<updated>2008-06-06T17:47:17Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: __NOTOC__ {{IT/Funzioni server client}} {{IT/MainP}} Questa funzione verifica se un player è stato 'zittito', cioè se gli è impedito di inviare messaggi in chat.  ==Sintassi==  &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;[l...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{IT/Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
Questa funzione verifica se un player è stato 'zittito', cioè se gli è impedito di inviare messaggi in chat.&lt;br /&gt;
&lt;br /&gt;
==Sintassi==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerMuted ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti===&lt;br /&gt;
*'''thePlayer:''' Il [[IT/player|player]] che vuoi controllare.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il player è stato 'zittito', altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
tizio = getPlayerFromNick ( &amp;quot;Tizio&amp;quot; )&lt;br /&gt;
if ( isPlayerMuted ( someguy ) then&lt;br /&gt;
   outputChatBox ( &amp;quot;Tizio non può scrivere in chat.&amp;quot; )&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/isPlayerDead&amp;diff=17103</id>
		<title>IT/isPlayerDead</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/isPlayerDead&amp;diff=17103"/>
		<updated>2008-06-06T17:25:57Z</updated>

		<summary type="html">&lt;p&gt;Atti: New page: {{IT/Funzioni server client}} {{IT/MainP}} __NOTOC__ Questa funzione verifica se un giocatore è morto o meno.  ==Sintassi==  &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerDead ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;  ==...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/Funzioni server client}}&lt;br /&gt;
{{IT/MainP}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Questa funzione verifica se un giocatore è morto o meno.&lt;br /&gt;
&lt;br /&gt;
==Sintassi== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerDead ( player thePlayer )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Argomenti richiesti=== &lt;br /&gt;
*'''thePlayer:''' Il [[IT/player|player]] di cui vuoi verificare la morte.&lt;br /&gt;
&lt;br /&gt;
===Valori restituiti===&lt;br /&gt;
Restituisce ''true'' se il player è morto, altrimenti ''false''.&lt;br /&gt;
&lt;br /&gt;
==Esempio==&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;
Questo esempio permette a un giocatore di usare il comando 'sonomorto' per verificare se è morto o meno.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--Verifica se il giocatore è morto meno e mostra un messaggio nella chatbox&lt;br /&gt;
function verificaMorte ( thePlayer, commandName )&lt;br /&gt;
    if ( isPlayerDead ( thePlayer ) ) then&lt;br /&gt;
         outputChatBox ( &amp;quot;Sei morto, preparati a diventare uno zombie!&amp;quot;, thePlayer )&lt;br /&gt;
    else&lt;br /&gt;
         outputChatBox ( &amp;quot;Tira pure un sospiro di sollievo, sei vivo.&amp;quot;, thePlayer )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;sonomorto&amp;quot;, verificaMorte )&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;
Questo esempio permette a un giocatore di usare il comando 'sonomorto' per verificare se è morto o meno.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--Check if player is alive or dead and let them know in the chat box&lt;br /&gt;
function verificaMorte ( commandName )&lt;br /&gt;
    if ( isPlayerDead ( getLocalPlayer() ) ) then&lt;br /&gt;
         outputChatBox ( &amp;quot;Sei morto, preparati a diventare uno zombie!&amp;quot;, getLocalPlayer() )&lt;br /&gt;
    else&lt;br /&gt;
         outputChatBox ( &amp;quot;Tira pure un sospiro di sollievo, sei vivo.&amp;quot;, getLocalPlayer() )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler ( &amp;quot;sonomorto&amp;quot;, verificaMorte )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vedere anche==&lt;br /&gt;
{{IT/Player_functions}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnColShapeHit&amp;diff=15840</id>
		<title>OnColShapeHit</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnColShapeHit&amp;diff=15840"/>
		<updated>2008-02-18T14:33:55Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
{{Server event}}&lt;br /&gt;
This event is triggered when the player or a vehicle hits a [[colshape]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
element hitElement, bool matchingDimension&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''hitElement''': the [[element]] that entered the colshape.&lt;br /&gt;
*'''matchingDimension''': a boolean referring to whether the hit collision shape was in the same dimension as the element.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[colshape]] that got hit by a player or vehicle.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example creates a hill area for a ''King of the hill'' gamemode.  When a player enters or leaves the area, it's announced in the chatbox.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- create our hill area for our gamemode&lt;br /&gt;
local hillArea = createColSquare ( -2171.0678710938, 678.17950439453, 0, 15, 15 )&lt;br /&gt;
&lt;br /&gt;
-- add hill_Enter as a handler for when a player enters the hill area&lt;br /&gt;
function hill_Enter ( thePlayer, matchingDimension )&lt;br /&gt;
        local nameOfThePlayer = getClientName(thePlayer)&lt;br /&gt;
	--announce to everyone that the player entered the hill&lt;br /&gt;
	outputChatBox( nameOfThePlayer..&amp;quot; entered the zone!&amp;quot;, getRootElement(),255, 255, 109 )&lt;br /&gt;
end&lt;br /&gt;
addEventHandler ( &amp;quot;onColShapeHit&amp;quot;, hillArea, hill_Enter )&lt;br /&gt;
&lt;br /&gt;
-- add hill_Enter as a handler for when a player leaves the hill area&lt;br /&gt;
function hill_Exit ( thePlayer, matchingDimension )&lt;br /&gt;
	--check if the player is not dead&lt;br /&gt;
	if isPlayerDead ( thePlayer ) ~= true then&lt;br /&gt;
		--if he was alive, announce to everyone that the player has left the hill&lt;br /&gt;
		outputChatBox ( nameOfThePlayer..&amp;quot; left the zone!&amp;quot;, getRootElement(), 255, 255, 109 )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler ( &amp;quot;onColShapeLeave&amp;quot;, hillArea, hill_Exit )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{See also/Server event|Colshape events}}&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15759</id>
		<title>IT/Manuale del Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15759"/>
		<updated>2008-02-10T11:49:55Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Avviare il gioco via ASE (The All-Seeing Eye) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Multi Theft Auto: San Andreas è l'ultima di una lunga serie di mod multiplayer create dai fan per le versioni PC dei vari Grand Theft Auto. Trovate le versioni per GTA3 e Vice City che usano il vecchio ''core'' in [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Questa mod non è approvata da Rockstar Games o Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
Per favore, ricorda che MTA:SA Deathmatch è una beta, il che significa che può crashare o generare risultati inaspettati.&lt;br /&gt;
&lt;br /&gt;
==Prima di iniziare==&lt;br /&gt;
&lt;br /&gt;
Prima di installare Multi Theft Auto: San Andreas, assicurati che non ci siano mod installate in GTA: San Andreas. Queste andrebbero in conflitto con MTA. Se vorresti continuare a usare le tue mod per il ''single player'', puoi creare due installazioni reinstallando San Andreas in un'altra cartella del tuo Hard Disk.&lt;br /&gt;
&lt;br /&gt;
Assicurati anche di stare usando '''Windows XP''', '''Windows 2000''', '''Windows Vista''' o '''Windows Server 2003''' e che il tuo PC riesca a far girare San Andreas in ''single player''. Ricorda che se raggiungi solo i requisiti minimi di San Andreas, potrebbero capitarti dei rallentamenti in MTA, visto che richiede una maggiore potenza di calcolo del processore.&lt;br /&gt;
&lt;br /&gt;
'''Attenzione: MTA:SA funziona solo su GTA:SA versione 1.0.''' Se hai comprato il gioco recentemente, probabilmente hai una versione successiva.&lt;br /&gt;
&lt;br /&gt;
Se riscontri dei problemi, dai un'occhiata a [[IT/Bugs noti e FAQ|bugs noti e FAQ]], o contattaci via IRC a irc://irc.multitheftauto.com/mta (in inglese).&lt;br /&gt;
&lt;br /&gt;
===Requisiti di sistema===&lt;br /&gt;
I requisiti minimi di sistema di Multi Theft Auto: San Andreas sono leggermente più alti di quelli di Grand Theft Auto: San Andreas originale.&lt;br /&gt;
* Intel Pentium 4 o AMD Athlon XP&lt;br /&gt;
* 512MB DDR RAM&lt;br /&gt;
* Installazione pulista di Grand Theft Auto: San Andreas, versione 1.0 o 1.1 (americana o europea)&lt;br /&gt;
* 3.7GB di spazio libero nell'hard disk (3.6GB sono per un'installazione minima di GTA:SA)&lt;br /&gt;
* nVidia GeForce 4 series o ATI Radeon 8xxx series (compatibile con 64MB RAM e DirectX 9.0)&lt;br /&gt;
* Scheda audio compatibile con DirectX 9.0&lt;br /&gt;
* Tastiera e mouse&lt;br /&gt;
* Connessione a internet a banda larga (per un gioco online tranquillo)&lt;br /&gt;
&lt;br /&gt;
Per le ''feature'' aggiuntive, una scheda video compatibile con il pixel shader 2.0 (nVidia GeForce FX series o superiore, ATI Radeon 9xxx series o superiore) è raccomandata.&lt;br /&gt;
&lt;br /&gt;
Per un caricamento più rapido, è raccomandato un aumento di RAM.&lt;br /&gt;
&lt;br /&gt;
==Installare il gioco==&lt;br /&gt;
&lt;br /&gt;
# Se già non l'hai, registrati in http://www.mtabeta.com e scarica il client di MTA.&lt;br /&gt;
# Esegui l'installer. Riceverai un messaggio di introduzione, poi ti sarà presentato il Contratto di Licenza per l'Utente Finale (EULA). Dovrai acconsentire per continuare l'installazione.&lt;br /&gt;
# A questo punto potrai creare un account, usarne uno che hai già, o non usarne nessuno - in questo caso seleziona la seconda opzione&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Prima opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Crea un account in MTABeta.com, dopo averlo fatto inserisci i tuoi dati per il nell'installer&amp;lt;br&amp;gt;&lt;br /&gt;
'''Seconda opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Inserisci i dati del tuo account nell'installer&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Ti sarà richiesto quali componenti installare.&lt;br /&gt;
#* '''Client''' è la mod che si interfaccia col gioco, ed è richiesta.&lt;br /&gt;
#* '''MTA Server''' ti permette di ''hostare'' il tuo server casalingo.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''' è usato per creare nuove mappe, ed è una componente opzionale.&lt;br /&gt;
&lt;br /&gt;
# Allora ti sarà chiesta la cartella dove è installato il gioco. Devi impostarla alla stessa cartella dove hai installato GTA. Di default è: '''C:\Programmi\Rockstar Games\GTA San Andreas\'''. Premi il bottone '''Install''' per iniziare l'installazione vera e propria.&lt;br /&gt;
# Quando finisce l'installazione, potrai decidere se avviare immediatamente MTA: San Andreas. Scegli l'opzione che vuoi e premi '''Finish'''.&lt;br /&gt;
# Potrai avviare MTA:DM da '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas''' se vuoi giocare.&lt;br /&gt;
&lt;br /&gt;
==Avviare il gioco==&lt;br /&gt;
# Avvia Multi Theft Auto cliccando sull'icona in '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas'''.&lt;br /&gt;
# GTA: San Andreas si avvierà e, quando tutto sarà caricato, vedrete il menu principale di MTA. Qui troverai svariate opazioni:&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''' – ti permette di connetterti a un server di cui conosci già l'indirizzo IP o l'URL e la porta. È utile se sai già in quale server entrare e così non hai bisogno di cercarlo nell'intera lista di server.&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_ServerBrowser.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''' – ti mostra una lista di server dove puoi giocare. &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: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 '''– ti permette di cambiare il tuo nickname ingame, personalizzare i controlli e modificare i settaggi video.&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:MENU_About.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 '''– ti mostra una lista di coloro che hanno contribuito a questo progetto.&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;
&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;'''Map editor '''– ti permette di creare le tue mappe personalizzate, complete di checkpoints, rampe, pickup e altri oggetti. Possono anche essere caricate su un server per poterci giocare con gli amici.&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 '''– ritorna al desktop di Windows.&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;
Il modo più facile di giocare è premere '''Browse Servers''' nel menu. Apparirà una nuova finestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:manual_image006a.jpg]]&amp;lt;/center&amp;gt; '''Immagine da aggiornare in seguito'''&lt;br /&gt;
&lt;br /&gt;
Se i server non sono già apparsi, premi il tasto '''Refresh''' e MTA cercherà eventuali server, mostradoli in una lista.&lt;br /&gt;
&lt;br /&gt;
* Nella tabella '''Name''', è mostrato il nome di ogni server.&lt;br /&gt;
* Nella tabella '''Players''', è mostrato il numero di players e la capacità massima del server, nel formato [Slot Usate] / [Slot Massime].&lt;br /&gt;
* Nella tabella '''Ping''' è mostrato il ping, o ''latenza'', tra il tuo PC e il server. Il ping è la misura del tempo che si impiega a mandare &amp;quot;pacchetti&amp;quot; di dati che devono essere mandati al server e ricevuti da esso, quindi un ping più alto significa che avrai più lag in quel particolar server. Generalmente, i server più vicini a dove ti trovi hanno i ping minori.&lt;br /&gt;
* Nella tabella '''Host''' c'è l'indirizzo IP del server. Lo puoi usare in futuro per connetterti al server usando l'opzione Quick Connect.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella può essere cliccata per disporre i suoi elementi in ordine ascendente o discendente.&lt;br /&gt;
&lt;br /&gt;
Per le migliori performance di gioco e ping, cerca un compromesso tra numero di players e ping.&lt;br /&gt;
Quando scegli un server, selezionalo e premi il tasto '''Connect''' in alto a destra nella finestra. Se tutto va bene, dovresti connetterti al server e unirti al gioco automaticamente.&lt;br /&gt;
&lt;br /&gt;
===Avviare il gioco via ASE (The All-Seeing Eye)===&lt;br /&gt;
&lt;br /&gt;
Se non sei soddisfatto della lista di server MTA:San Andreas, potresti provare '''The All-Seeing Eye''', che ti permettere di scorrere la lista di server fuori del gioco, e può applicare dei filtri particolari. Questo tutorial ti aiuterà a installare ASE e ad entrare in un server con il doppio click.&lt;br /&gt;
# Scarica ASE da http://videogames.yahoo.com/multiplayer , e installalo.&lt;br /&gt;
# '''Questo è un bug di MTA:SA up fino alla versione dp2, e probabilmente sarà risolto successivamente.''' &amp;lt;br /&amp;gt; Scarica [http://www.xup.in/dl,19686489/ASELauncher.zip/ ASELauncher] ed estrai ASELauncher.exe nella tua cartella di MTA (di default C:\Programmi\MTA San Andreas). Questo piccolo programma converte i comandi di ASE in un formato che MTA può comprendere. &lt;br /&gt;
# Adesso aggiungi MTA:SA alla tua lista di giochi di ASE:&lt;br /&gt;
#* In ASE, clicca ''Tools'' -&amp;gt; ''Options'', e seleziona la tabella ''Games''&lt;br /&gt;
#* Apri la categoria ''Not installed'' e seleziona ''Multi Theft Auto'' nella lista&lt;br /&gt;
#* Seleziona ''Visible in filter list'', clicca ''Browse'' e scegli '''ASELauncher.exe''' nella tua cartella MTA&lt;br /&gt;
#* Lascia vuoto il campo ''Player name'', e chiudi la finestra premendo ''OK''&lt;br /&gt;
# Un nuovo gioco '''Multi Theft Auto''' è apparso. Quando clicchi su ''Refresh'' nella barra in alto, vedrai tutti i server per tutte le versioni di MTA. Adesso aggiungiamo un filtro per mostrare solo la versione attuale, '''1.0 dp2'''&lt;br /&gt;
#* Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
#* Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
#* Inserisci un nome per il filtro nel campo ''Name'', per esempio '''MTA:SA 1.0 dp2'''&lt;br /&gt;
#* Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if version != &amp;quot;1.0dp2&amp;quot; remove&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* Clicca ''OK''&lt;br /&gt;
#* Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo la versione attuale di MTA, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Potete poi configurare tutti i filtri che volete: eccone uno, per esempio, per vedere solo i server che contengono ITA nel nome:&lt;br /&gt;
# Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
# Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
# Inserisci un nome per il filtro nel campo ''Name'', per esempio '''ITA'''&lt;br /&gt;
# Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if hostname ~!= &amp;quot;*ITA*&amp;quot; remove&amp;lt;/tt&amp;gt; (potete sostituire ITA con quello che volete)&lt;br /&gt;
# Clicca ''OK''&lt;br /&gt;
# Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo i server che contengono ITA nel nome, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
Nel caso in cui vogliate creare un filtro ancora più particolare, ecco un [http://www.udpsoft.com/eye/wizard.html wizard per creare un vostro filtro personalizzato]: dovete inserire le righe di codice che vi dà nella finestra in basso al posto del codice del filtro che state inserendo (quarto punto nella guida di sopra).&lt;br /&gt;
&lt;br /&gt;
==Come giocare==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un sistema di scripting compreso che permette ai creatori di mappe di modificare molti elementi di gioco per creare le loro gamemode innovative. Il gioco incorpora più aspetti possibile del single player, ma ci sono alcune differenze.&lt;br /&gt;
&lt;br /&gt;
Non ci sono pedoni o veicoli gestiti dall'IA. Le unice persone sulla mappa sono i tuoi avversari, o alleati se ci sono i team. Puoi parlare con tutti gli altri players con la chat nella parte in alto a sinistra dello schermo, che puoi attivare con '''T'''. Per chattare solo con i tuoi compagni di team, premi '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Il ''map editor'' di MTA permette ai creatori di mappe di aggiungere alle loro creazioni svariati oggetti del mondo di GTA, come le strade, i barili esplosivi, le rampe, gli edifici, le colline e molto altro. Non solo questo, ma gli oggetti possono essere mossi via scripting, cambiare ''model'' e scomparire. Questo offre una gran quantità di divertimento e di varianti del gioco.&lt;br /&gt;
&lt;br /&gt;
Premi Tab per guardare lo scoreboard. Di default, verranno mostrati solo il nome del player e il ping, ma con gli script si possono aggiungere nuove colonne specifiche per la gamemode con cui si sta giocando. Per esempio, una mode deathmatch avrà sicuramente una colonna con il numero di kills del player, ma il creatore della mappa potrebbe decidere di aggiungere altre colonne per il numero di volte che sei morto, o da quanto tempo stai giocando, per poter valutare meglio il tuo punteggio.&lt;br /&gt;
&lt;br /&gt;
==Controlli==&lt;br /&gt;
&lt;br /&gt;
===Comandi di MTA===&lt;br /&gt;
&lt;br /&gt;
* F8 (o ~) - Apre la Console&lt;br /&gt;
* F9 - Mostra una finestra di aiuto ingame&lt;br /&gt;
* F11 - Mostra la mappa di SA ''(per spostarla usa i comandi che seguono)''&lt;br /&gt;
**+/- del tastierino numerico - Zoom avanti e indietro&lt;br /&gt;
**4, 8, 6, 2 del tastierino numerico - Muove la mappa a destra, a sinistra, in alto o in basso&lt;br /&gt;
**0 del tastierino numerico - Alterna una mappa dinamica (segue il segnalino del player) con una libera (resta ferma)  &lt;br /&gt;
* F12 - Salva uno screenshot dello schermo in '''C:\Programmi\MTA San Andreas\screenshots'''&lt;br /&gt;
* T - Chat&lt;br /&gt;
* Y - Chat del team&lt;br /&gt;
* TAB - Lista dei player (se la risorsa [[IT/Scoreboard|Scoreboard]] è avviata nel server corrente)&lt;br /&gt;
&lt;br /&gt;
==Comandi della Console==&lt;br /&gt;
&lt;br /&gt;
Digita '''~ (tilde)''' o '''F8''' per entrare nella console, quindi scrivi un comando seguito dagli argomenti necessari (se servono) e premi ''Invio''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;'''bind defaults''' :Reimposta i comandi di default.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Mostra una lista di tutte le mappe disponibili nel server. &lt;br /&gt;
&lt;br /&gt;
;'''nick [nickname]''' :Cambia il tuo nick ingame in quello che specifichi nel parametro [nickname].&lt;br /&gt;
&lt;br /&gt;
;'''msg [nickname] [messaggio]''' o '''pm [nickname] [messaggio]''' :Invia un messaggio privato al player con il nick specificato nel parametro [nickname]. Solo la persona specificata potrà vedere il messaggio. Sia '''msg''' sia '''pm''' hanno la stessa funzione.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' o '''exit''' :Ti disconnette dal server e ritorna al desktop. Ha la stessa funzione del tasto ''Quit'' nel menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Mostra la versione corrente e il copyright del software.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Mostra l'ora corrente.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ti disconnette dal server e ritorna al menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''say [testo]''' :Ti permette di inviare il messaggio nel parametro [testo] nella chatbox, attraverso la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [nickname]''' :Questo ignorerà ogni messaggio scritto dal player con il nick specificato nel parametro [nickname]. Per smettere di ignorare un player, riscrivi '''ignore [nickname]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Suggerimento:''' Puoi scrivere questi comandi in chatbox facendoli precedere da un ''/''.&lt;br /&gt;
&lt;br /&gt;
Una lista (in inglese) dei comandi della console si può ottenere scrivendo '''help''' nella console e premendo ''Invio''. La mappa attuale può avere dei comandi propri che possono essere controllati digitando '''commands''' nella console.&lt;br /&gt;
&lt;br /&gt;
==Codici degli errori e loro significato==&lt;br /&gt;
'''Errori di download [Download error]'''&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;
'''Errori fatali [Fatal error]'''&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;
'''Errori 'impossibile entrare nel veicolo''''&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;
[[en:Deathmatch Client Manual]]&lt;br /&gt;
[[ru:Deathmatch Client Manual]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15758</id>
		<title>IT/Manuale del Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15758"/>
		<updated>2008-02-10T11:49:17Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Avviare il gioco via ASE (The All-Seeing Eye) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Multi Theft Auto: San Andreas è l'ultima di una lunga serie di mod multiplayer create dai fan per le versioni PC dei vari Grand Theft Auto. Trovate le versioni per GTA3 e Vice City che usano il vecchio ''core'' in [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Questa mod non è approvata da Rockstar Games o Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
Per favore, ricorda che MTA:SA Deathmatch è una beta, il che significa che può crashare o generare risultati inaspettati.&lt;br /&gt;
&lt;br /&gt;
==Prima di iniziare==&lt;br /&gt;
&lt;br /&gt;
Prima di installare Multi Theft Auto: San Andreas, assicurati che non ci siano mod installate in GTA: San Andreas. Queste andrebbero in conflitto con MTA. Se vorresti continuare a usare le tue mod per il ''single player'', puoi creare due installazioni reinstallando San Andreas in un'altra cartella del tuo Hard Disk.&lt;br /&gt;
&lt;br /&gt;
Assicurati anche di stare usando '''Windows XP''', '''Windows 2000''', '''Windows Vista''' o '''Windows Server 2003''' e che il tuo PC riesca a far girare San Andreas in ''single player''. Ricorda che se raggiungi solo i requisiti minimi di San Andreas, potrebbero capitarti dei rallentamenti in MTA, visto che richiede una maggiore potenza di calcolo del processore.&lt;br /&gt;
&lt;br /&gt;
'''Attenzione: MTA:SA funziona solo su GTA:SA versione 1.0.''' Se hai comprato il gioco recentemente, probabilmente hai una versione successiva.&lt;br /&gt;
&lt;br /&gt;
Se riscontri dei problemi, dai un'occhiata a [[IT/Bugs noti e FAQ|bugs noti e FAQ]], o contattaci via IRC a irc://irc.multitheftauto.com/mta (in inglese).&lt;br /&gt;
&lt;br /&gt;
===Requisiti di sistema===&lt;br /&gt;
I requisiti minimi di sistema di Multi Theft Auto: San Andreas sono leggermente più alti di quelli di Grand Theft Auto: San Andreas originale.&lt;br /&gt;
* Intel Pentium 4 o AMD Athlon XP&lt;br /&gt;
* 512MB DDR RAM&lt;br /&gt;
* Installazione pulista di Grand Theft Auto: San Andreas, versione 1.0 o 1.1 (americana o europea)&lt;br /&gt;
* 3.7GB di spazio libero nell'hard disk (3.6GB sono per un'installazione minima di GTA:SA)&lt;br /&gt;
* nVidia GeForce 4 series o ATI Radeon 8xxx series (compatibile con 64MB RAM e DirectX 9.0)&lt;br /&gt;
* Scheda audio compatibile con DirectX 9.0&lt;br /&gt;
* Tastiera e mouse&lt;br /&gt;
* Connessione a internet a banda larga (per un gioco online tranquillo)&lt;br /&gt;
&lt;br /&gt;
Per le ''feature'' aggiuntive, una scheda video compatibile con il pixel shader 2.0 (nVidia GeForce FX series o superiore, ATI Radeon 9xxx series o superiore) è raccomandata.&lt;br /&gt;
&lt;br /&gt;
Per un caricamento più rapido, è raccomandato un aumento di RAM.&lt;br /&gt;
&lt;br /&gt;
==Installare il gioco==&lt;br /&gt;
&lt;br /&gt;
# Se già non l'hai, registrati in http://www.mtabeta.com e scarica il client di MTA.&lt;br /&gt;
# Esegui l'installer. Riceverai un messaggio di introduzione, poi ti sarà presentato il Contratto di Licenza per l'Utente Finale (EULA). Dovrai acconsentire per continuare l'installazione.&lt;br /&gt;
# A questo punto potrai creare un account, usarne uno che hai già, o non usarne nessuno - in questo caso seleziona la seconda opzione&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Prima opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Crea un account in MTABeta.com, dopo averlo fatto inserisci i tuoi dati per il nell'installer&amp;lt;br&amp;gt;&lt;br /&gt;
'''Seconda opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Inserisci i dati del tuo account nell'installer&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Ti sarà richiesto quali componenti installare.&lt;br /&gt;
#* '''Client''' è la mod che si interfaccia col gioco, ed è richiesta.&lt;br /&gt;
#* '''MTA Server''' ti permette di ''hostare'' il tuo server casalingo.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''' è usato per creare nuove mappe, ed è una componente opzionale.&lt;br /&gt;
&lt;br /&gt;
# Allora ti sarà chiesta la cartella dove è installato il gioco. Devi impostarla alla stessa cartella dove hai installato GTA. Di default è: '''C:\Programmi\Rockstar Games\GTA San Andreas\'''. Premi il bottone '''Install''' per iniziare l'installazione vera e propria.&lt;br /&gt;
# Quando finisce l'installazione, potrai decidere se avviare immediatamente MTA: San Andreas. Scegli l'opzione che vuoi e premi '''Finish'''.&lt;br /&gt;
# Potrai avviare MTA:DM da '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas''' se vuoi giocare.&lt;br /&gt;
&lt;br /&gt;
==Avviare il gioco==&lt;br /&gt;
# Avvia Multi Theft Auto cliccando sull'icona in '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas'''.&lt;br /&gt;
# GTA: San Andreas si avvierà e, quando tutto sarà caricato, vedrete il menu principale di MTA. Qui troverai svariate opazioni:&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''' – ti permette di connetterti a un server di cui conosci già l'indirizzo IP o l'URL e la porta. È utile se sai già in quale server entrare e così non hai bisogno di cercarlo nell'intera lista di server.&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_ServerBrowser.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''' – ti mostra una lista di server dove puoi giocare. &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: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 '''– ti permette di cambiare il tuo nickname ingame, personalizzare i controlli e modificare i settaggi video.&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:MENU_About.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 '''– ti mostra una lista di coloro che hanno contribuito a questo progetto.&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;
&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;'''Map editor '''– ti permette di creare le tue mappe personalizzate, complete di checkpoints, rampe, pickup e altri oggetti. Possono anche essere caricate su un server per poterci giocare con gli amici.&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 '''– ritorna al desktop di Windows.&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;
Il modo più facile di giocare è premere '''Browse Servers''' nel menu. Apparirà una nuova finestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:manual_image006a.jpg]]&amp;lt;/center&amp;gt; '''Immagine da aggiornare in seguito'''&lt;br /&gt;
&lt;br /&gt;
Se i server non sono già apparsi, premi il tasto '''Refresh''' e MTA cercherà eventuali server, mostradoli in una lista.&lt;br /&gt;
&lt;br /&gt;
* Nella tabella '''Name''', è mostrato il nome di ogni server.&lt;br /&gt;
* Nella tabella '''Players''', è mostrato il numero di players e la capacità massima del server, nel formato [Slot Usate] / [Slot Massime].&lt;br /&gt;
* Nella tabella '''Ping''' è mostrato il ping, o ''latenza'', tra il tuo PC e il server. Il ping è la misura del tempo che si impiega a mandare &amp;quot;pacchetti&amp;quot; di dati che devono essere mandati al server e ricevuti da esso, quindi un ping più alto significa che avrai più lag in quel particolar server. Generalmente, i server più vicini a dove ti trovi hanno i ping minori.&lt;br /&gt;
* Nella tabella '''Host''' c'è l'indirizzo IP del server. Lo puoi usare in futuro per connetterti al server usando l'opzione Quick Connect.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella può essere cliccata per disporre i suoi elementi in ordine ascendente o discendente.&lt;br /&gt;
&lt;br /&gt;
Per le migliori performance di gioco e ping, cerca un compromesso tra numero di players e ping.&lt;br /&gt;
Quando scegli un server, selezionalo e premi il tasto '''Connect''' in alto a destra nella finestra. Se tutto va bene, dovresti connetterti al server e unirti al gioco automaticamente.&lt;br /&gt;
&lt;br /&gt;
===Avviare il gioco via ASE (The All-Seeing Eye)===&lt;br /&gt;
&lt;br /&gt;
Se non sei soddisfatto della lista di server MTA:San Andreas, potresti provare '''The All-Seeing Eye''', che ti permettere di scorrere la lista di server fuori del gioco, e può applicare dei filtri particolari. Questo tutorial ti aiuterà a installare ASE e ad entrare in un server con il doppio click.&lt;br /&gt;
# Scarica ASE da http://videogames.yahoo.com/multiplayer , e installalo.&lt;br /&gt;
# '''Questo è un bug di MTA:SA up fino alla versione dp2, e probabilmente sarà risolto successivamente.''' &amp;lt;br /&amp;gt; Scarica [http://www.xup.in/dl,19686489/ASELauncher.zip/ ASELauncher] ed estrai ASELauncher.exe nella tua cartella di MTA (di default C:\Programmi\MTA San Andreas). Questo piccolo programma converte i comandi di ASE in un formato che MTA può comprendere. &lt;br /&gt;
# Adesso aggiungi MTA:SA alla tua lista di giochi di ASE:&lt;br /&gt;
#* In ASE, clicca ''Tools'' -&amp;gt; ''Options'', e seleziona la tabella ''Games''&lt;br /&gt;
#* Apri la categoria ''Not installed'' e seleziona ''Multi Theft Auto'' nella lista&lt;br /&gt;
#* Seleziona ''Visible in filter list'', clicca ''Browse'' e scegli '''ASELauncher.exe''' nella tua cartella MTA&lt;br /&gt;
#* Lascia vuoto il campo ''Player name'', e chiudi la finestra premendo ''OK''&lt;br /&gt;
# Un nuovo gioco '''Multi Theft Auto''' è apparso. Quando clicchi su ''Refresh'' nella barra in alto, vedrai tutti i server per tutte le versioni di MTA. Adesso aggiungiamo un filtro per mostrare solo la versione attuale, '''1.0 dp2'''&lt;br /&gt;
#* Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
#* Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
#* Inserisci un nome per il filtro nel campo ''Name'', per esempio '''MTA:SA 1.0 dp2'''&lt;br /&gt;
#* Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if version != &amp;quot;1.0dp2&amp;quot; remove&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* Clicca ''OK''&lt;br /&gt;
#* Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo la versione attuale di MTA, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
Potete poi configurare tutti i filtri che volete: eccone uno, per esempio, per vedere solo i server che contengono ITA nel nome:&lt;br /&gt;
# Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
# Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
# Inserisci un nome per il filtro nel campo ''Name'', per esempio '''ITA'''&lt;br /&gt;
# Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if hostname ~!= &amp;quot;*ITA*&amp;quot; remove&amp;lt;/tt&amp;gt; (potete sostituire ITA con quello che volete)&lt;br /&gt;
# Clicca ''OK''&lt;br /&gt;
# Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo i server che contengono ITA nel nome, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
Nel caso in cui vogliate creare un filtro ancora più particolare, ecco un [http://www.udpsoft.com/eye/wizard.html wizard per creare un vostro filtro personalizzato]: dovete mettere le righe di codice che vi dà nella finestra in basso al posto del codice del filtro che state inserendo (quarto punto nella guida di sopra).&lt;br /&gt;
&lt;br /&gt;
==Come giocare==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un sistema di scripting compreso che permette ai creatori di mappe di modificare molti elementi di gioco per creare le loro gamemode innovative. Il gioco incorpora più aspetti possibile del single player, ma ci sono alcune differenze.&lt;br /&gt;
&lt;br /&gt;
Non ci sono pedoni o veicoli gestiti dall'IA. Le unice persone sulla mappa sono i tuoi avversari, o alleati se ci sono i team. Puoi parlare con tutti gli altri players con la chat nella parte in alto a sinistra dello schermo, che puoi attivare con '''T'''. Per chattare solo con i tuoi compagni di team, premi '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Il ''map editor'' di MTA permette ai creatori di mappe di aggiungere alle loro creazioni svariati oggetti del mondo di GTA, come le strade, i barili esplosivi, le rampe, gli edifici, le colline e molto altro. Non solo questo, ma gli oggetti possono essere mossi via scripting, cambiare ''model'' e scomparire. Questo offre una gran quantità di divertimento e di varianti del gioco.&lt;br /&gt;
&lt;br /&gt;
Premi Tab per guardare lo scoreboard. Di default, verranno mostrati solo il nome del player e il ping, ma con gli script si possono aggiungere nuove colonne specifiche per la gamemode con cui si sta giocando. Per esempio, una mode deathmatch avrà sicuramente una colonna con il numero di kills del player, ma il creatore della mappa potrebbe decidere di aggiungere altre colonne per il numero di volte che sei morto, o da quanto tempo stai giocando, per poter valutare meglio il tuo punteggio.&lt;br /&gt;
&lt;br /&gt;
==Controlli==&lt;br /&gt;
&lt;br /&gt;
===Comandi di MTA===&lt;br /&gt;
&lt;br /&gt;
* F8 (o ~) - Apre la Console&lt;br /&gt;
* F9 - Mostra una finestra di aiuto ingame&lt;br /&gt;
* F11 - Mostra la mappa di SA ''(per spostarla usa i comandi che seguono)''&lt;br /&gt;
**+/- del tastierino numerico - Zoom avanti e indietro&lt;br /&gt;
**4, 8, 6, 2 del tastierino numerico - Muove la mappa a destra, a sinistra, in alto o in basso&lt;br /&gt;
**0 del tastierino numerico - Alterna una mappa dinamica (segue il segnalino del player) con una libera (resta ferma)  &lt;br /&gt;
* F12 - Salva uno screenshot dello schermo in '''C:\Programmi\MTA San Andreas\screenshots'''&lt;br /&gt;
* T - Chat&lt;br /&gt;
* Y - Chat del team&lt;br /&gt;
* TAB - Lista dei player (se la risorsa [[IT/Scoreboard|Scoreboard]] è avviata nel server corrente)&lt;br /&gt;
&lt;br /&gt;
==Comandi della Console==&lt;br /&gt;
&lt;br /&gt;
Digita '''~ (tilde)''' o '''F8''' per entrare nella console, quindi scrivi un comando seguito dagli argomenti necessari (se servono) e premi ''Invio''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;'''bind defaults''' :Reimposta i comandi di default.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Mostra una lista di tutte le mappe disponibili nel server. &lt;br /&gt;
&lt;br /&gt;
;'''nick [nickname]''' :Cambia il tuo nick ingame in quello che specifichi nel parametro [nickname].&lt;br /&gt;
&lt;br /&gt;
;'''msg [nickname] [messaggio]''' o '''pm [nickname] [messaggio]''' :Invia un messaggio privato al player con il nick specificato nel parametro [nickname]. Solo la persona specificata potrà vedere il messaggio. Sia '''msg''' sia '''pm''' hanno la stessa funzione.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' o '''exit''' :Ti disconnette dal server e ritorna al desktop. Ha la stessa funzione del tasto ''Quit'' nel menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Mostra la versione corrente e il copyright del software.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Mostra l'ora corrente.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ti disconnette dal server e ritorna al menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''say [testo]''' :Ti permette di inviare il messaggio nel parametro [testo] nella chatbox, attraverso la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [nickname]''' :Questo ignorerà ogni messaggio scritto dal player con il nick specificato nel parametro [nickname]. Per smettere di ignorare un player, riscrivi '''ignore [nickname]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Suggerimento:''' Puoi scrivere questi comandi in chatbox facendoli precedere da un ''/''.&lt;br /&gt;
&lt;br /&gt;
Una lista (in inglese) dei comandi della console si può ottenere scrivendo '''help''' nella console e premendo ''Invio''. La mappa attuale può avere dei comandi propri che possono essere controllati digitando '''commands''' nella console.&lt;br /&gt;
&lt;br /&gt;
==Codici degli errori e loro significato==&lt;br /&gt;
'''Errori di download [Download error]'''&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;
'''Errori fatali [Fatal error]'''&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;
'''Errori 'impossibile entrare nel veicolo''''&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;
[[en:Deathmatch Client Manual]]&lt;br /&gt;
[[ru:Deathmatch Client Manual]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15757</id>
		<title>IT/Manuale del Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15757"/>
		<updated>2008-02-10T11:48:55Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Avviare il gioco via ASE (The All-Seeing Eye) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Multi Theft Auto: San Andreas è l'ultima di una lunga serie di mod multiplayer create dai fan per le versioni PC dei vari Grand Theft Auto. Trovate le versioni per GTA3 e Vice City che usano il vecchio ''core'' in [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Questa mod non è approvata da Rockstar Games o Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
Per favore, ricorda che MTA:SA Deathmatch è una beta, il che significa che può crashare o generare risultati inaspettati.&lt;br /&gt;
&lt;br /&gt;
==Prima di iniziare==&lt;br /&gt;
&lt;br /&gt;
Prima di installare Multi Theft Auto: San Andreas, assicurati che non ci siano mod installate in GTA: San Andreas. Queste andrebbero in conflitto con MTA. Se vorresti continuare a usare le tue mod per il ''single player'', puoi creare due installazioni reinstallando San Andreas in un'altra cartella del tuo Hard Disk.&lt;br /&gt;
&lt;br /&gt;
Assicurati anche di stare usando '''Windows XP''', '''Windows 2000''', '''Windows Vista''' o '''Windows Server 2003''' e che il tuo PC riesca a far girare San Andreas in ''single player''. Ricorda che se raggiungi solo i requisiti minimi di San Andreas, potrebbero capitarti dei rallentamenti in MTA, visto che richiede una maggiore potenza di calcolo del processore.&lt;br /&gt;
&lt;br /&gt;
'''Attenzione: MTA:SA funziona solo su GTA:SA versione 1.0.''' Se hai comprato il gioco recentemente, probabilmente hai una versione successiva.&lt;br /&gt;
&lt;br /&gt;
Se riscontri dei problemi, dai un'occhiata a [[IT/Bugs noti e FAQ|bugs noti e FAQ]], o contattaci via IRC a irc://irc.multitheftauto.com/mta (in inglese).&lt;br /&gt;
&lt;br /&gt;
===Requisiti di sistema===&lt;br /&gt;
I requisiti minimi di sistema di Multi Theft Auto: San Andreas sono leggermente più alti di quelli di Grand Theft Auto: San Andreas originale.&lt;br /&gt;
* Intel Pentium 4 o AMD Athlon XP&lt;br /&gt;
* 512MB DDR RAM&lt;br /&gt;
* Installazione pulista di Grand Theft Auto: San Andreas, versione 1.0 o 1.1 (americana o europea)&lt;br /&gt;
* 3.7GB di spazio libero nell'hard disk (3.6GB sono per un'installazione minima di GTA:SA)&lt;br /&gt;
* nVidia GeForce 4 series o ATI Radeon 8xxx series (compatibile con 64MB RAM e DirectX 9.0)&lt;br /&gt;
* Scheda audio compatibile con DirectX 9.0&lt;br /&gt;
* Tastiera e mouse&lt;br /&gt;
* Connessione a internet a banda larga (per un gioco online tranquillo)&lt;br /&gt;
&lt;br /&gt;
Per le ''feature'' aggiuntive, una scheda video compatibile con il pixel shader 2.0 (nVidia GeForce FX series o superiore, ATI Radeon 9xxx series o superiore) è raccomandata.&lt;br /&gt;
&lt;br /&gt;
Per un caricamento più rapido, è raccomandato un aumento di RAM.&lt;br /&gt;
&lt;br /&gt;
==Installare il gioco==&lt;br /&gt;
&lt;br /&gt;
# Se già non l'hai, registrati in http://www.mtabeta.com e scarica il client di MTA.&lt;br /&gt;
# Esegui l'installer. Riceverai un messaggio di introduzione, poi ti sarà presentato il Contratto di Licenza per l'Utente Finale (EULA). Dovrai acconsentire per continuare l'installazione.&lt;br /&gt;
# A questo punto potrai creare un account, usarne uno che hai già, o non usarne nessuno - in questo caso seleziona la seconda opzione&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Prima opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Crea un account in MTABeta.com, dopo averlo fatto inserisci i tuoi dati per il nell'installer&amp;lt;br&amp;gt;&lt;br /&gt;
'''Seconda opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Inserisci i dati del tuo account nell'installer&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Ti sarà richiesto quali componenti installare.&lt;br /&gt;
#* '''Client''' è la mod che si interfaccia col gioco, ed è richiesta.&lt;br /&gt;
#* '''MTA Server''' ti permette di ''hostare'' il tuo server casalingo.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''' è usato per creare nuove mappe, ed è una componente opzionale.&lt;br /&gt;
&lt;br /&gt;
# Allora ti sarà chiesta la cartella dove è installato il gioco. Devi impostarla alla stessa cartella dove hai installato GTA. Di default è: '''C:\Programmi\Rockstar Games\GTA San Andreas\'''. Premi il bottone '''Install''' per iniziare l'installazione vera e propria.&lt;br /&gt;
# Quando finisce l'installazione, potrai decidere se avviare immediatamente MTA: San Andreas. Scegli l'opzione che vuoi e premi '''Finish'''.&lt;br /&gt;
# Potrai avviare MTA:DM da '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas''' se vuoi giocare.&lt;br /&gt;
&lt;br /&gt;
==Avviare il gioco==&lt;br /&gt;
# Avvia Multi Theft Auto cliccando sull'icona in '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas'''.&lt;br /&gt;
# GTA: San Andreas si avvierà e, quando tutto sarà caricato, vedrete il menu principale di MTA. Qui troverai svariate opazioni:&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''' – ti permette di connetterti a un server di cui conosci già l'indirizzo IP o l'URL e la porta. È utile se sai già in quale server entrare e così non hai bisogno di cercarlo nell'intera lista di server.&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_ServerBrowser.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''' – ti mostra una lista di server dove puoi giocare. &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: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 '''– ti permette di cambiare il tuo nickname ingame, personalizzare i controlli e modificare i settaggi video.&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:MENU_About.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 '''– ti mostra una lista di coloro che hanno contribuito a questo progetto.&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;
&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;'''Map editor '''– ti permette di creare le tue mappe personalizzate, complete di checkpoints, rampe, pickup e altri oggetti. Possono anche essere caricate su un server per poterci giocare con gli amici.&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 '''– ritorna al desktop di Windows.&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;
Il modo più facile di giocare è premere '''Browse Servers''' nel menu. Apparirà una nuova finestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:manual_image006a.jpg]]&amp;lt;/center&amp;gt; '''Immagine da aggiornare in seguito'''&lt;br /&gt;
&lt;br /&gt;
Se i server non sono già apparsi, premi il tasto '''Refresh''' e MTA cercherà eventuali server, mostradoli in una lista.&lt;br /&gt;
&lt;br /&gt;
* Nella tabella '''Name''', è mostrato il nome di ogni server.&lt;br /&gt;
* Nella tabella '''Players''', è mostrato il numero di players e la capacità massima del server, nel formato [Slot Usate] / [Slot Massime].&lt;br /&gt;
* Nella tabella '''Ping''' è mostrato il ping, o ''latenza'', tra il tuo PC e il server. Il ping è la misura del tempo che si impiega a mandare &amp;quot;pacchetti&amp;quot; di dati che devono essere mandati al server e ricevuti da esso, quindi un ping più alto significa che avrai più lag in quel particolar server. Generalmente, i server più vicini a dove ti trovi hanno i ping minori.&lt;br /&gt;
* Nella tabella '''Host''' c'è l'indirizzo IP del server. Lo puoi usare in futuro per connetterti al server usando l'opzione Quick Connect.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella può essere cliccata per disporre i suoi elementi in ordine ascendente o discendente.&lt;br /&gt;
&lt;br /&gt;
Per le migliori performance di gioco e ping, cerca un compromesso tra numero di players e ping.&lt;br /&gt;
Quando scegli un server, selezionalo e premi il tasto '''Connect''' in alto a destra nella finestra. Se tutto va bene, dovresti connetterti al server e unirti al gioco automaticamente.&lt;br /&gt;
&lt;br /&gt;
===Avviare il gioco via ASE (The All-Seeing Eye)===&lt;br /&gt;
&lt;br /&gt;
Se non sei soddisfatto della lista di server MTA:San Andreas, potresti provare '''The All-Seeing Eye''', che ti permettere di scorrere la lista di server fuori del gioco, e può applicare dei filtri particolari. Questo tutorial ti aiuterà a installare ASE e ad entrare in un server con il doppio click.&lt;br /&gt;
# Scarica ASE da http://videogames.yahoo.com/multiplayer , e installalo.&lt;br /&gt;
# '''Questo è un bug di MTA:SA up fino alla versione dp2, e probabilmente sarà risolto successivamente.''' &amp;lt;br /&amp;gt; Scarica [http://www.xup.in/dl,19686489/ASELauncher.zip/ ASELauncher] ed estrai ASELauncher.exe nella tua cartella di MTA (di default C:\Programmi\MTA San Andreas). Questo piccolo programma converte i comandi di ASE in un formato che MTA può comprendere. &lt;br /&gt;
# Adesso aggiungi MTA:SA alla tua lista di giochi di ASE:&lt;br /&gt;
#* In ASE, clicca ''Tools'' -&amp;gt; ''Options'', e seleziona la tabella ''Games''&lt;br /&gt;
#* Apri la categoria ''Not installed'' e seleziona ''Multi Theft Auto'' nella lista&lt;br /&gt;
#* Seleziona ''Visible in filter list'', clicca ''Browse'' e scegli '''ASELauncher.exe''' nella tua cartella MTA&lt;br /&gt;
#* Lascia vuoto il campo ''Player name'', e chiudi la finestra premendo ''OK''&lt;br /&gt;
# Un nuovo gioco '''Multi Theft Auto''' è apparso. Quando clicchi su ''Refresh'' nella barra in alto, vedrai tutti i server per tutte le versioni di MTA. Adesso aggiungiamo un filtro per mostrare solo la versione attuale, '''1.0 dp2'''&lt;br /&gt;
#* Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
#* Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
#* Inserisci un nome per il filtro nel campo ''Name'', per esempio '''MTA:SA 1.0 dp2'''&lt;br /&gt;
#* Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if version != &amp;quot;1.0dp2&amp;quot; remove&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* Clicca ''OK''&lt;br /&gt;
#* Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo la versione attuale di MTA, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
Potete poi configurare tutti i filtri che volete: eccone uno, per esempio, per vedere solo i server che contengono ITA nel nome:&lt;br /&gt;
#* Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
#* Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
#* Inserisci un nome per il filtro nel campo ''Name'', per esempio '''ITA'''&lt;br /&gt;
#* Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if hostname ~!= &amp;quot;*ITA*&amp;quot; remove&amp;lt;/tt&amp;gt; (potete sostituire ITA con quello che volete)&lt;br /&gt;
#* Clicca ''OK''&lt;br /&gt;
#* Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo i server che contengono ITA nel nome, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
Nel caso in cui vogliate creare un filtro ancora più particolare, ecco un [http://www.udpsoft.com/eye/wizard.html wizard per creare un vostro filtro personalizzato]: dovete mettere le righe di codice che vi dà nella finestra in basso al posto del codice del filtro che state inserendo (quarto punto nella guida di sopra).&lt;br /&gt;
&lt;br /&gt;
==Come giocare==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un sistema di scripting compreso che permette ai creatori di mappe di modificare molti elementi di gioco per creare le loro gamemode innovative. Il gioco incorpora più aspetti possibile del single player, ma ci sono alcune differenze.&lt;br /&gt;
&lt;br /&gt;
Non ci sono pedoni o veicoli gestiti dall'IA. Le unice persone sulla mappa sono i tuoi avversari, o alleati se ci sono i team. Puoi parlare con tutti gli altri players con la chat nella parte in alto a sinistra dello schermo, che puoi attivare con '''T'''. Per chattare solo con i tuoi compagni di team, premi '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Il ''map editor'' di MTA permette ai creatori di mappe di aggiungere alle loro creazioni svariati oggetti del mondo di GTA, come le strade, i barili esplosivi, le rampe, gli edifici, le colline e molto altro. Non solo questo, ma gli oggetti possono essere mossi via scripting, cambiare ''model'' e scomparire. Questo offre una gran quantità di divertimento e di varianti del gioco.&lt;br /&gt;
&lt;br /&gt;
Premi Tab per guardare lo scoreboard. Di default, verranno mostrati solo il nome del player e il ping, ma con gli script si possono aggiungere nuove colonne specifiche per la gamemode con cui si sta giocando. Per esempio, una mode deathmatch avrà sicuramente una colonna con il numero di kills del player, ma il creatore della mappa potrebbe decidere di aggiungere altre colonne per il numero di volte che sei morto, o da quanto tempo stai giocando, per poter valutare meglio il tuo punteggio.&lt;br /&gt;
&lt;br /&gt;
==Controlli==&lt;br /&gt;
&lt;br /&gt;
===Comandi di MTA===&lt;br /&gt;
&lt;br /&gt;
* F8 (o ~) - Apre la Console&lt;br /&gt;
* F9 - Mostra una finestra di aiuto ingame&lt;br /&gt;
* F11 - Mostra la mappa di SA ''(per spostarla usa i comandi che seguono)''&lt;br /&gt;
**+/- del tastierino numerico - Zoom avanti e indietro&lt;br /&gt;
**4, 8, 6, 2 del tastierino numerico - Muove la mappa a destra, a sinistra, in alto o in basso&lt;br /&gt;
**0 del tastierino numerico - Alterna una mappa dinamica (segue il segnalino del player) con una libera (resta ferma)  &lt;br /&gt;
* F12 - Salva uno screenshot dello schermo in '''C:\Programmi\MTA San Andreas\screenshots'''&lt;br /&gt;
* T - Chat&lt;br /&gt;
* Y - Chat del team&lt;br /&gt;
* TAB - Lista dei player (se la risorsa [[IT/Scoreboard|Scoreboard]] è avviata nel server corrente)&lt;br /&gt;
&lt;br /&gt;
==Comandi della Console==&lt;br /&gt;
&lt;br /&gt;
Digita '''~ (tilde)''' o '''F8''' per entrare nella console, quindi scrivi un comando seguito dagli argomenti necessari (se servono) e premi ''Invio''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;'''bind defaults''' :Reimposta i comandi di default.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Mostra una lista di tutte le mappe disponibili nel server. &lt;br /&gt;
&lt;br /&gt;
;'''nick [nickname]''' :Cambia il tuo nick ingame in quello che specifichi nel parametro [nickname].&lt;br /&gt;
&lt;br /&gt;
;'''msg [nickname] [messaggio]''' o '''pm [nickname] [messaggio]''' :Invia un messaggio privato al player con il nick specificato nel parametro [nickname]. Solo la persona specificata potrà vedere il messaggio. Sia '''msg''' sia '''pm''' hanno la stessa funzione.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' o '''exit''' :Ti disconnette dal server e ritorna al desktop. Ha la stessa funzione del tasto ''Quit'' nel menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Mostra la versione corrente e il copyright del software.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Mostra l'ora corrente.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ti disconnette dal server e ritorna al menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''say [testo]''' :Ti permette di inviare il messaggio nel parametro [testo] nella chatbox, attraverso la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [nickname]''' :Questo ignorerà ogni messaggio scritto dal player con il nick specificato nel parametro [nickname]. Per smettere di ignorare un player, riscrivi '''ignore [nickname]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Suggerimento:''' Puoi scrivere questi comandi in chatbox facendoli precedere da un ''/''.&lt;br /&gt;
&lt;br /&gt;
Una lista (in inglese) dei comandi della console si può ottenere scrivendo '''help''' nella console e premendo ''Invio''. La mappa attuale può avere dei comandi propri che possono essere controllati digitando '''commands''' nella console.&lt;br /&gt;
&lt;br /&gt;
==Codici degli errori e loro significato==&lt;br /&gt;
'''Errori di download [Download error]'''&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;
'''Errori fatali [Fatal error]'''&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;
'''Errori 'impossibile entrare nel veicolo''''&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;
[[en:Deathmatch Client Manual]]&lt;br /&gt;
[[ru:Deathmatch Client Manual]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15658</id>
		<title>IT/Manuale del Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15658"/>
		<updated>2008-01-30T16:32:25Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Multi Theft Auto: San Andreas è l'ultima di una lunga serie di mod multiplayer create dai fan per le versioni PC dei vari Grand Theft Auto. Trovate le versioni per GTA3 e Vice City che usano il vecchio ''core'' in [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Questa mod non è approvata da Rockstar Games o Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
Per favore, ricorda che MTA:SA Deathmatch è una beta, il che significa che può crashare o generare risultati inaspettati.&lt;br /&gt;
&lt;br /&gt;
==Prima di iniziare==&lt;br /&gt;
&lt;br /&gt;
Prima di installare Multi Theft Auto: San Andreas, assicurati che non ci siano mod installate in GTA: San Andreas. Queste andrebbero in conflitto con MTA. Se vorresti continuare a usare le tue mod per il ''single player'', puoi creare due installazioni reinstallando San Andreas in un'altra cartella del tuo Hard Disk.&lt;br /&gt;
&lt;br /&gt;
Assicurati anche di stare usando '''Windows XP''', '''Windows 2000''', '''Windows Vista''' o '''Windows Server 2003''' e che il tuo PC riesca a far girare San Andreas in ''single player''. Ricorda che se raggiungi solo i requisiti minimi di San Andreas, potrebbero capitarti dei rallentamenti in MTA, visto che richiede una maggiore potenza di calcolo del processore.&lt;br /&gt;
&lt;br /&gt;
'''Attenzione: MTA:SA funziona solo su GTA:SA versione 1.0.''' Se hai comprato il gioco recentemente, probabilmente hai una versione successiva.&lt;br /&gt;
&lt;br /&gt;
Se riscontri dei problemi, dai un'occhiata a [[IT/Bugs noti e FAQ|bugs noti e FAQ]], o contattaci via IRC a irc://irc.multitheftauto.com/mta (in inglese).&lt;br /&gt;
&lt;br /&gt;
===Requisiti di sistema===&lt;br /&gt;
I requisiti minimi di sistema di Multi Theft Auto: San Andreas sono leggermente più alti di quelli di Grand Theft Auto: San Andreas originale.&lt;br /&gt;
* Intel Pentium 4 o AMD Athlon XP&lt;br /&gt;
* 512MB DDR RAM&lt;br /&gt;
* Installazione pulista di Grand Theft Auto: San Andreas, versione 1.0 o 1.1 (americana o europea)&lt;br /&gt;
* 3.7GB di spazio libero nell'hard disk (3.6GB sono per un'installazione minima di GTA:SA)&lt;br /&gt;
* nVidia GeForce 4 series o ATI Radeon 8xxx series (compatibile con 64MB RAM e DirectX 9.0)&lt;br /&gt;
* Scheda audio compatibile con DirectX 9.0&lt;br /&gt;
* Tastiera e mouse&lt;br /&gt;
* Connessione a internet a banda larga (per un gioco online tranquillo)&lt;br /&gt;
&lt;br /&gt;
Per le ''feature'' aggiuntive, una scheda video compatibile con il pixel shader 2.0 (nVidia GeForce FX series o superiore, ATI Radeon 9xxx series o superiore) è raccomandata.&lt;br /&gt;
&lt;br /&gt;
Per un caricamento più rapido, è raccomandato un aumento di RAM.&lt;br /&gt;
&lt;br /&gt;
==Installare il gioco==&lt;br /&gt;
&lt;br /&gt;
# Se già non l'hai, registrati in http://www.mtabeta.com e scarica il client di MTA.&lt;br /&gt;
# Esegui l'installer. Riceverai un messaggio di introduzione, poi ti sarà presentato il Contratto di Licenza per l'Utente Finale (EULA). Dovrai acconsentire per continuare l'installazione.&lt;br /&gt;
# A questo punto potrai creare un account, usarne uno che hai già, o non usarne nessuno - in questo caso seleziona la seconda opzione&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Prima opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Crea un account in MTABeta.com, dopo averlo fatto inserisci i tuoi dati per il nell'installer&amp;lt;br&amp;gt;&lt;br /&gt;
'''Seconda opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Inserisci i dati del tuo account nell'installer&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Ti sarà richiesto quali componenti installare.&lt;br /&gt;
#* '''Client''' è la mod che si interfaccia col gioco, ed è richiesta.&lt;br /&gt;
#* '''MTA Server''' ti permette di ''hostare'' il tuo server casalingo.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''' è usato per creare nuove mappe, ed è una componente opzionale.&lt;br /&gt;
&lt;br /&gt;
# Allora ti sarà chiesta la cartella dove è installato il gioco. Devi impostarla alla stessa cartella dove hai installato GTA. Di default è: '''C:\Programmi\Rockstar Games\GTA San Andreas\'''. Premi il bottone '''Install''' per iniziare l'installazione vera e propria.&lt;br /&gt;
# Quando finisce l'installazione, potrai decidere se avviare immediatamente MTA: San Andreas. Scegli l'opzione che vuoi e premi '''Finish'''.&lt;br /&gt;
# Potrai avviare MTA:DM da '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas''' se vuoi giocare.&lt;br /&gt;
&lt;br /&gt;
==Avviare il gioco==&lt;br /&gt;
# Avvia Multi Theft Auto cliccando sull'icona in '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas'''.&lt;br /&gt;
# GTA: San Andreas si avvierà e, quando tutto sarà caricato, vedrete il menu principale di MTA. Qui troverai svariate opazioni:&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''' – ti permette di connetterti a un server di cui conosci già l'indirizzo IP o l'URL e la porta. È utile se sai già in quale server entrare e così non hai bisogno di cercarlo nell'intera lista di server.&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_ServerBrowser.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''' – ti mostra una lista di server dove puoi giocare. &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: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 '''– ti permette di cambiare il tuo nickname ingame, personalizzare i controlli e modificare i settaggi video.&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:MENU_About.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 '''– ti mostra una lista di coloro che hanno contribuito a questo progetto.&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;
&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;'''Map editor '''– ti permette di creare le tue mappe personalizzate, complete di checkpoints, rampe, pickup e altri oggetti. Possono anche essere caricate su un server per poterci giocare con gli amici.&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 '''– ritorna al desktop di Windows.&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;
Il modo più facile di giocare è premere '''Browse Servers''' nel menu. Apparirà una nuova finestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:manual_image006a.jpg]]&amp;lt;/center&amp;gt; '''Immagine da aggiornare in seguito'''&lt;br /&gt;
&lt;br /&gt;
Se i server non sono già apparsi, premi il tasto '''Refresh''' e MTA cercherà eventuali server, mostradoli in una lista.&lt;br /&gt;
&lt;br /&gt;
* Nella tabella '''Name''', è mostrato il nome di ogni server.&lt;br /&gt;
* Nella tabella '''Players''', è mostrato il numero di players e la capacità massima del server, nel formato [Slot Usate] / [Slot Massime].&lt;br /&gt;
* Nella tabella '''Ping''' è mostrato il ping, o ''latenza'', tra il tuo PC e il server. Il ping è la misura del tempo che si impiega a mandare &amp;quot;pacchetti&amp;quot; di dati che devono essere mandati al server e ricevuti da esso, quindi un ping più alto significa che avrai più lag in quel particolar server. Generalmente, i server più vicini a dove ti trovi hanno i ping minori.&lt;br /&gt;
* Nella tabella '''Host''' c'è l'indirizzo IP del server. Lo puoi usare in futuro per connetterti al server usando l'opzione Quick Connect.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella può essere cliccata per disporre i suoi elementi in ordine ascendente o discendente.&lt;br /&gt;
&lt;br /&gt;
Per le migliori performance di gioco e ping, cerca un compromesso tra numero di players e ping.&lt;br /&gt;
Quando scegli un server, selezionalo e premi il tasto '''Connect''' in alto a destra nella finestra. Se tutto va bene, dovresti connetterti al server e unirti al gioco automaticamente.&lt;br /&gt;
&lt;br /&gt;
===Avviare il gioco via ASE (The All-Seeing Eye)===&lt;br /&gt;
&lt;br /&gt;
Se non sei soddisfatto della lista di server MTA:San Andreas, potresti provare '''The All-Seeing Eye''', che ti permettere di scorrere la lista di server fuori del gioco, e può applicare dei filtri particolari. Questo tutorial ti aiuterà a installare ASE e ad entrare in un server con il doppio click.&lt;br /&gt;
# Scarica ASE da http://videogames.yahoo.com/multiplayer , e installalo.&lt;br /&gt;
# '''Questo è un bug di MTA:SA up fino alla versione dp2, e probabilmente sarà risolto successivamente.''' &amp;lt;br /&amp;gt; Scarica [http://www.xup.in/dl,19686489/ASELauncher.zip/ ASELauncher] ed estrai ASELauncher.exe nella tua cartella di MTA (di default C:\Programmi\MTA San Andreas). Questo piccolo programma converte i comandi di ASE in un formato che MTA può comprendere. &lt;br /&gt;
# Adesso aggiungi MTA:SA alla tua lista di giochi di ASE:&lt;br /&gt;
#* In ASE, clicca ''Tools'' -&amp;gt; ''Options'', e seleziona la tabella ''Games''&lt;br /&gt;
#* Apri la categoria ''Not installed'' e seleziona ''Multi Theft Auto'' nella lista&lt;br /&gt;
#* Seleziona ''Visible in filter list'', clicca ''Browse'' e scegli '''ASELauncher.exe''' nella tua cartella MTA&lt;br /&gt;
#* Lascia vuoto il campo ''Player name'', e chiudi la finestra premendo ''OK''&lt;br /&gt;
# Un nuovo gioco '''Multi Theft Auto''' è apparso. Quando clicchi su ''Refresh'' nella barra in alto, vedrai tutti i server per tutte le versioni di MTA. Adesso aggiungiamo un filtro per mostrare solo la versione attuale, '''1.0 dp2'''&lt;br /&gt;
#* Clicca col tasto destro su ''Multi Theft Auto'' e seleziona ''New...''&lt;br /&gt;
#* Nella barra in basso a sinistra, seleziona ''Modifier'' e sostituisci MYMOD con '''MTADP2'''&lt;br /&gt;
#* Inserisci un nome per il filtro nel campo ''Name'', per esempio '''MTA:SA 1.0 dp2'''&lt;br /&gt;
#* Inserisci il codice per il filtro seguente (con il numero della linea):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if version != &amp;quot;1.0dp2&amp;quot; remove&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* Clicca ''OK''&lt;br /&gt;
#* Il tuo nuovo filtro è mostrato tra i ''My filters''&lt;br /&gt;
# Finito! Ora attiva il tuo filtro per mostrare solo la versione attuale di MTA, seleziona il gioco ''Multi Theft Auto'', e fai doppio click su un server per giocare.&lt;br /&gt;
&lt;br /&gt;
==Come giocare==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un sistema di scripting compreso che permette ai creatori di mappe di modificare molti elementi di gioco per creare le loro gamemode innovative. Il gioco incorpora più aspetti possibile del single player, ma ci sono alcune differenze.&lt;br /&gt;
&lt;br /&gt;
Non ci sono pedoni o veicoli gestiti dall'IA. Le unice persone sulla mappa sono i tuoi avversari, o alleati se ci sono i team. Puoi parlare con tutti gli altri players con la chat nella parte in alto a sinistra dello schermo, che puoi attivare con '''T'''. Per chattare solo con i tuoi compagni di team, premi '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Il ''map editor'' di MTA permette ai creatori di mappe di aggiungere alle loro creazioni svariati oggetti del mondo di GTA, come le strade, i barili esplosivi, le rampe, gli edifici, le colline e molto altro. Non solo questo, ma gli oggetti possono essere mossi via scripting, cambiare ''model'' e scomparire. Questo offre una gran quantità di divertimento e di varianti del gioco.&lt;br /&gt;
&lt;br /&gt;
Premi Tab per guardare lo scoreboard. Di default, verranno mostrati solo il nome del player e il ping, ma con gli script si possono aggiungere nuove colonne specifiche per la gamemode con cui si sta giocando. Per esempio, una mode deathmatch avrà sicuramente una colonna con il numero di kills del player, ma il creatore della mappa potrebbe decidere di aggiungere altre colonne per il numero di volte che sei morto, o da quanto tempo stai giocando, per poter valutare meglio il tuo punteggio.&lt;br /&gt;
&lt;br /&gt;
==Controlli==&lt;br /&gt;
&lt;br /&gt;
===Comandi di MTA===&lt;br /&gt;
&lt;br /&gt;
* F8 (o ~) - Apre la Console&lt;br /&gt;
* F9 - Mostra una finestra di aiuto ingame&lt;br /&gt;
* F11 - Mostra la mappa di SA ''(per spostarla usa i comandi che seguono)''&lt;br /&gt;
**+/- del tastierino numerico - Zoom avanti e indietro&lt;br /&gt;
**4, 8, 6, 2 del tastierino numerico - Muove la mappa a destra, a sinistra, in alto o in basso&lt;br /&gt;
**0 del tastierino numerico - Alterna una mappa dinamica (segue il segnalino del player) con una libera (resta ferma)  &lt;br /&gt;
* F12 - Salva uno screenshot dello schermo in '''C:\Programmi\MTA San Andreas\screenshots'''&lt;br /&gt;
* T - Chat&lt;br /&gt;
* Y - Chat del team&lt;br /&gt;
* TAB - Lista dei player (se la risorsa [[IT/Scoreboard|Scoreboard]] è avviata nel server corrente)&lt;br /&gt;
&lt;br /&gt;
==Comandi della Console==&lt;br /&gt;
&lt;br /&gt;
Digita '''~ (tilde)''' o '''F8''' per entrare nella console, quindi scrivi un comando seguito dagli argomenti necessari (se servono) e premi ''Invio''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;'''bind defaults''' :Reimposta i comandi di default.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Mostra una lista di tutte le mappe disponibili nel server. &lt;br /&gt;
&lt;br /&gt;
;'''nick [nickname]''' :Cambia il tuo nick ingame in quello che specifichi nel parametro [nickname].&lt;br /&gt;
&lt;br /&gt;
;'''msg [nickname] [messaggio]''' o '''pm [nickname] [messaggio]''' :Invia un messaggio privato al player con il nick specificato nel parametro [nickname]. Solo la persona specificata potrà vedere il messaggio. Sia '''msg''' sia '''pm''' hanno la stessa funzione.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' o '''exit''' :Ti disconnette dal server e ritorna al desktop. Ha la stessa funzione del tasto ''Quit'' nel menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Mostra la versione corrente e il copyright del software.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Mostra l'ora corrente.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ti disconnette dal server e ritorna al menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''say [testo]''' :Ti permette di inviare il messaggio nel parametro [testo] nella chatbox, attraverso la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [nickname]''' :Questo ignorerà ogni messaggio scritto dal player con il nick specificato nel parametro [nickname]. Per smettere di ignorare un player, riscrivi '''ignore [nickname]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Suggerimento:''' Puoi scrivere questi comandi in chatbox facendoli precedere da un ''/''.&lt;br /&gt;
&lt;br /&gt;
Una lista (in inglese) dei comandi della console si può ottenere scrivendo '''help''' nella console e premendo ''Invio''. La mappa attuale può avere dei comandi propri che possono essere controllati digitando '''commands''' nella console.&lt;br /&gt;
&lt;br /&gt;
==Codici degli errori e loro significato==&lt;br /&gt;
'''Errori di download [Download error]'''&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;
'''Errori fatali [Fatal error]'''&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;
'''Errori 'impossibile entrare nel veicolo''''&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;
[[en:Deathmatch Client Manual]]&lt;br /&gt;
[[ru:Deathmatch Client Manual]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Pagina_principale&amp;diff=15656</id>
		<title>IT/Pagina principale</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Pagina_principale&amp;diff=15656"/>
		<updated>2008-01-30T15:09:59Z</updated>

		<summary type="html">&lt;p&gt;Atti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px dotted #5555FF;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;Questa wiki è stata tradotta da(in ordine cronologico): [[User:Shadd|Shadd]], [[User:Atti|Atti]] e [[User:Talco|Talco]].&amp;lt;br /&amp;gt;This wiki has been translated by(in chronological order): [[User:Shadd|Shadd]], [[User:Atti|Atti]] and [[User:Talco|Talco]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;float:right;&amp;quot;&amp;gt;[[Image:Scripting.jpg]]&amp;lt;/div&amp;gt;Benvenuto nella wiki in italiano di Multi Theft Auto: San Andreas Deathmatch. Qui troverai abbondanti informazioni sullo sviluppo di gamemode e mappe per Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Stiamo rilasciando le ''anteprime per lo sviluppatore'' perchè abbiamo bisogno del tuo aiuto! Ci sono molte [[IT/Come puoi aiutare|cose che puoi fare per aiutarci]] ad ottenere una release completa e raffinata di MTA:SA DM - creare una mappa, una gamemode, aiutare a documentare le funzioni, scrivere del codice di esempio, dei tutorial o semplicemente giocare a MTA e riportare nel forum i bug che trovi.&lt;br /&gt;
&lt;br /&gt;
Questa release è una gran cosa per noi - rilasciamo il prodotto di due anni del nostro lavoro e non possiamo aspettare di vedere cosa ci fate. Ricorda che possono capitare degli inevitabili problemi e che comunque le cose non sono ancora del tutto complete!&lt;br /&gt;
&lt;br /&gt;
Se hai qualche domanda o problema relativo allo scripting, sentiti libero di metterti in contatto con noi (in inglese) attraverso il nostro [[IRC Channel|Canale IRC]].&lt;br /&gt;
&lt;br /&gt;
'''Hai bisogno di possedere un account in mtabeta.com per poter modificare questa wiki.''' Per favore registrati in [http://www.mtabeta.com mtabeta.com] e poi usa gli stessi dati per fare il login qui. Se vandalizzerai questa wiki verrai bannato.&lt;br /&gt;
&lt;br /&gt;
La wiki supporta '''[http://gears.google.come/ Google Gears]''', che ti permetterà di vedere questa wiki anche offline (e velocemente). Installa Google Gears e clicca il link ''Go Offline'' in fondo ad ogni pagina. Aspetta un'ora (!) che venga scaricata, quando avrà finito lo vedrai in basso ad ogni pagina, appena dopo il link ''Go Offline''. Fatto ciò, usa l'opzione ''Lavora scollegato'' del tuo browser (in genere nel menu File), o disconnettiti da internet e naviga nella wiki normalmente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px dotted navy; padding: 4px; margin: 10px&amp;quot;&amp;gt;L'ultima versione disponibile di '''Multi Theft Auto: San Andreas Deathmatch''' è la '''{{Current Version|full}}'''. Visita la [http://www.mtasa.com/dp.html pagina download] e scaricala!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
====Per iniziare====&lt;br /&gt;
&lt;br /&gt;
* [[IT/Manuale del Client|Manuale del Client]] {{IT/75%}}{{IT/75%}}&lt;br /&gt;
* [[IT/Manuale del Server|Manuale del Server]] {{IT/50%}}&lt;br /&gt;
* [[IT/Bugs noti e FAQ|Bugs noti e FAQ]] {{IT/100%}}&lt;br /&gt;
* [[IT/Introduzione allo scripting|Introduzione allo Scripting]] {{IT/100%}}&lt;br /&gt;
* [[IT/Guida al Debug|Guida al Debug]] - Come trovare gli errori dei tuoi scripts {{IT/100%}}&lt;br /&gt;
* [[IT/Classi di MTA|Classi di MTA]] {{IT/00%}}&lt;br /&gt;
** [[IT/Elementi|Elementi di MTA]] / [[IT/Albero degli elementi|Albero degli elementi]] {{IT/00%}}&lt;br /&gt;
* [[IT/Introduzione alle Risorse|Introduzione alle Risorse]] {{IT/00%}}&lt;br /&gt;
** [[IT/Accesso web alle Risorse|Accesso web alle Risorse]] {{IT/00%}}&lt;br /&gt;
* [[IT/Scrivere una gamemode|Scrivere una gamemode]] {{IT/25%}}&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;
====Database====&lt;br /&gt;
Questa sezione delinea tutte le possibilità che MTA o le ''resources'' danno.&lt;br /&gt;
* [[IT/Map manager|Map manager]] {{IT/00%}} - Usalo per le tue gamemodes&lt;br /&gt;
* [[IT/Script client-side|Script client-side]] {{IT/100%}}&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;
====Guide LUA====&lt;br /&gt;
Pagine create per aiutarti a comprendere il LUA (in inglese). &lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in LUA&amp;quot; Manual]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory LUA Wiki]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
====Documentazione====&lt;br /&gt;
* [[IT/Funzioni Client-side|Funzioni Client-side]] {{IT/00%}}&lt;br /&gt;
* [[IT/Eventi Client-side|Eventi Client-side]] {{IT/00%}}&lt;br /&gt;
* [[IT/Funzioni Server-side|Funzioni Server-side]] {{IT/00%}}&lt;br /&gt;
* [[IT/Eventi Server-side|Eventi Server-side]] {{IT/00%}}&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Liste ID====&lt;br /&gt;
* [[IT/Skin Personaggi|Skin Personaggi]] {{IT/100%}} ([[IT/Tutte Le Skin|Tutte Le Skin)]] {{IT/100%}}&lt;br /&gt;
* [[IT/Vestiti di CJ|Vestiti di CJ]] {{IT/100%}}&lt;br /&gt;
* [[IT/Esplosivi|Esplosivi]] {{IT/100%}}&lt;br /&gt;
* [[IT/Segnalini radar|Segnalini radar]] {{IT/100%}}&lt;br /&gt;
* [[Template:IT/Suoni|Suoni]] {{IT/100%}}&lt;br /&gt;
* [[IT/ID Veicoli|Veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Colori default veicoli|Colori di default dei veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Colori veicoli|Tabella dei colori dei veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Miglioramenti Veicoli|Miglioramenti Veicoli]] {{IT/100%}}&lt;br /&gt;
* [[IT/Armi|Armi]] {{IT/100%}}&lt;br /&gt;
* [[IT/Meteo|Meteo]] {{IT/100%}}&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;
&lt;br /&gt;
[[pl:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[nl:Main Page]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15655</id>
		<title>IT/Manuale del Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15655"/>
		<updated>2008-01-30T15:09:31Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Codici degli errori e loro significato */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Multi Theft Auto: San Andreas è l'ultima di una lunga serie di mod multiplayer create dai fan per le versioni PC dei vari Grand Theft Auto. Trovate le versioni per GTA3 e Vice City che usano il vecchio ''core'' in [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Questa mod non è approvata da Rockstar Games o Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
Per favore, ricorda che MTA:SA Deathmatch è una beta, il che significa che può crashare o generare risultati inaspettati.&lt;br /&gt;
&lt;br /&gt;
==Prima di iniziare==&lt;br /&gt;
&lt;br /&gt;
Prima di installare Multi Theft Auto: San Andreas, assicurati che non ci siano mod installate in GTA: San Andreas. Queste andrebbero in conflitto con MTA. Se vorresti continuare a usare le tue mod per il ''single player'', puoi creare due installazioni reinstallando San Andreas in un'altra cartella del tuo Hard Disk.&lt;br /&gt;
&lt;br /&gt;
Assicurati anche di stare usando '''Windows XP''', '''Windows 2000''', '''Windows Vista''' o '''Windows Server 2003''' e che il tuo PC riesca a far girare San Andreas in ''single player''. Ricorda che se raggiungi solo i requisiti minimi di San Andreas, potrebbero capitarti dei rallentamenti in MTA, visto che richiede una maggiore potenza di calcolo del processore.&lt;br /&gt;
&lt;br /&gt;
'''Attenzione: MTA:SA funziona solo su GTA:SA versione 1.0.''' Se hai comprato il gioco recentemente, probabilmente hai una versione successiva.&lt;br /&gt;
&lt;br /&gt;
Se riscontri dei problemi, dai un'occhiata a [[IT/Bugs noti e FAQ|bugs noti e FAQ]], o contattaci via IRC a irc://irc.multitheftauto.com/mta (in inglese).&lt;br /&gt;
&lt;br /&gt;
===Requisiti di sistema===&lt;br /&gt;
I requisiti minimi di sistema di Multi Theft Auto: San Andreas sono leggermente più alti di quelli di Grand Theft Auto: San Andreas originale.&lt;br /&gt;
* Intel Pentium 4 o AMD Athlon XP&lt;br /&gt;
* 512MB DDR RAM&lt;br /&gt;
* Installazione pulista di Grand Theft Auto: San Andreas, versione 1.0 o 1.1 (americana o europea)&lt;br /&gt;
* 3.7GB di spazio libero nell'hard disk (3.6GB sono per un'installazione minima di GTA:SA)&lt;br /&gt;
* nVidia GeForce 4 series o ATI Radeon 8xxx series (compatibile con 64MB RAM e DirectX 9.0)&lt;br /&gt;
* Scheda audio compatibile con DirectX 9.0&lt;br /&gt;
* Tastiera e mouse&lt;br /&gt;
* Connessione a internet a banda larga (per un gioco online tranquillo)&lt;br /&gt;
&lt;br /&gt;
Per le ''feature'' aggiuntive, una scheda video compatibile con il pixel shader 2.0 (nVidia GeForce FX series o superiore, ATI Radeon 9xxx series o superiore) è raccomandata.&lt;br /&gt;
&lt;br /&gt;
Per un caricamento più rapido, è raccomandato un aumento di RAM.&lt;br /&gt;
&lt;br /&gt;
==Installare il gioco==&lt;br /&gt;
&lt;br /&gt;
# Se già non l'hai, registrati in http://www.mtabeta.com e scarica il client di MTA.&lt;br /&gt;
# Esegui l'installer. Riceverai un messaggio di introduzione, poi ti sarà presentato il Contratto di Licenza per l'Utente Finale (EULA). Dovrai acconsentire per continuare l'installazione.&lt;br /&gt;
# A questo punto potrai creare un account, usarne uno che hai già, o non usarne nessuno - in questo caso seleziona la seconda opzione&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Prima opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Crea un account in MTABeta.com, dopo averlo fatto inserisci i tuoi dati per il nell'installer&amp;lt;br&amp;gt;&lt;br /&gt;
'''Seconda opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Inserisci i dati del tuo account nell'installer&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Ti sarà richiesto quali componenti installare.&lt;br /&gt;
#* '''Client''' è la mod che si interfaccia col gioco, ed è richiesta.&lt;br /&gt;
#* '''MTA Server''' ti permette di ''hostare'' il tuo server casalingo.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''' è usato per creare nuove mappe, ed è una componente opzionale.&lt;br /&gt;
&lt;br /&gt;
# Allora ti sarà chiesta la cartella dove è installato il gioco. Devi impostarla alla stessa cartella dove hai installato GTA. Di default è: '''C:\Programmi\Rockstar Games\GTA San Andreas\'''. Premi il bottone '''Install''' per iniziare l'installazione vera e propria.&lt;br /&gt;
# Quando finisce l'installazione, potrai decidere se avviare immediatamente MTA: San Andreas. Scegli l'opzione che vuoi e premi '''Finish'''.&lt;br /&gt;
# Potrai avviare MTA:DM da '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas''' se vuoi giocare.&lt;br /&gt;
&lt;br /&gt;
==Avviare il gioco==&lt;br /&gt;
# Avvia Multi Theft Auto cliccando sull'icona in '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas'''.&lt;br /&gt;
# GTA: San Andreas si avvierà e, quando tutto sarà caricato, vedrete il menu principale di MTA. Qui troverai svariate opazioni:&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''' – ti permette di connetterti a un server di cui conosci già l'indirizzo IP o l'URL e la porta. È utile se sai già in quale server entrare e così non hai bisogno di cercarlo nell'intera lista di server.&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_ServerBrowser.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''' – ti mostra una lista di server dove puoi giocare. &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: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 '''– ti permette di cambiare il tuo nickname ingame, personalizzare i controlli e modificare i settaggi video.&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:MENU_About.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 '''– ti mostra una lista di coloro che hanno contribuito a questo progetto.&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;
&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;'''Map editor '''– ti permette di creare le tue mappe personalizzate, complete di checkpoints, rampe, pickup e altri oggetti. Possono anche essere caricate su un server per poterci giocare con gli amici.&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 '''– ritorna al desktop di Windows.&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;
Il modo più facile di giocare è premere '''Browse Servers''' nel menu. Apparirà una nuova finestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:manual_image006a.jpg]]&amp;lt;/center&amp;gt; '''Immagine da aggiornare in seguito'''&lt;br /&gt;
&lt;br /&gt;
Se i server non sono già apparsi, premi il tasto '''Refresh''' e MTA cercherà eventuali server, mostradoli in una lista.&lt;br /&gt;
&lt;br /&gt;
* Nella tabella '''Name''', è mostrato il nome di ogni server.&lt;br /&gt;
* Nella tabella '''Players''', è mostrato il numero di players e la capacità massima del server, nel formato [Slot Usate] / [Slot Massime].&lt;br /&gt;
* Nella tabella '''Ping''' è mostrato il ping, o ''latenza'', tra il tuo PC e il server. Il ping è la misura del tempo che si impiega a mandare &amp;quot;pacchetti&amp;quot; di dati che devono essere mandati al server e ricevuti da esso, quindi un ping più alto significa che avrai più lag in quel particolar server. Generalmente, i server più vicini a dove ti trovi hanno i ping minori.&lt;br /&gt;
* Nella tabella '''Host''' c'è l'indirizzo IP del server. Lo puoi usare in futuro per connetterti al server usando l'opzione Quick Connect.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella può essere cliccata per disporre i suoi elementi in ordine ascendente o discendente.&lt;br /&gt;
&lt;br /&gt;
Per le migliori performance di gioco e ping, cerca un compromesso tra numero di players e ping.&lt;br /&gt;
Quando scegli un server, selezionalo e premi il tasto '''Connect''' in alto a destra nella finestra. Se tutto va bene, dovresti connetterti al server e unirti al gioco automaticamente.&lt;br /&gt;
&lt;br /&gt;
===Running the game from ASE (The All-Seeing Eye)===&lt;br /&gt;
&lt;br /&gt;
If you are not satisfied with the in-game server browser of MTA:San Andreas, you might want to check out '''The All-Seeing Eye''', which allows you to browse the server list out of the game, and can apply custom filters. This tutorial will help with the setup of ASE, and show how to make join on double-click work.&lt;br /&gt;
# Download ASE from http://videogames.yahoo.com/multiplayer , and install.&lt;br /&gt;
# '''This applies to MTA:SA up to version 1.0 dp2, and will probably be fixed in a later version''' &amp;lt;br /&amp;gt; Download [http://www.xup.in/dl,19686489/ASELauncher.zip/ ASELauncher] and extract ASELauncher.exe to your MTA directory (default C:\Program Files\MTA San Andreas). This tiny program converts the ASE command-line to a format MTA can understand. &lt;br /&gt;
# Now add MTA:SA to your ASE games list:&lt;br /&gt;
#* In ASE, click ''Tools'' -&amp;gt; ''Options'', and select the tab ''Games''&lt;br /&gt;
#* Open the category ''Not installed'' and select ''Multi Theft Auto'' in the list&lt;br /&gt;
#* Check ''Visible in filter list'', click ''Browse'' and select '''ASELauncher.exe''' in your MTA San Andreas directory&lt;br /&gt;
#* Leave the field ''Player name'' empty, and close the dialog with ''OK''&lt;br /&gt;
# A new game '''Multi Theft Auto''' has appeared. When you click ''Refresh'' in the toolbar, you will see all servers for all versions of MTA. Now add a modifier to only show the current version, '''1.0 dp2'''&lt;br /&gt;
#* Right-click ''Multi Theft Auto'' and select ''New...''&lt;br /&gt;
#* In the lower-left, select ''Modifier'' and replace MYMOD by '''MTADP2'''&lt;br /&gt;
#* Enter a name for the modifier in the ''Name'' field, e.g. '''MTA:SA 1.0 dp2'''&lt;br /&gt;
#* Insert the following filter code (with the line number):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if version != &amp;quot;1.0dp2&amp;quot; remove&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* Click ''OK''&lt;br /&gt;
#* Your new modifier is shown under ''My filters''&lt;br /&gt;
# All done! Now activate your modifier to only show your game version, select the game ''Multi Theft Auto'', and double-click any server to play.&lt;br /&gt;
&lt;br /&gt;
==Come giocare==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un sistema di scripting compreso che permette ai creatori di mappe di modificare molti elementi di gioco per creare le loro gamemode innovative. Il gioco incorpora più aspetti possibile del single player, ma ci sono alcune differenze.&lt;br /&gt;
&lt;br /&gt;
Non ci sono pedoni o veicoli gestiti dall'IA. Le unice persone sulla mappa sono i tuoi avversari, o alleati se ci sono i team. Puoi parlare con tutti gli altri players con la chat nella parte in alto a sinistra dello schermo, che puoi attivare con '''T'''. Per chattare solo con i tuoi compagni di team, premi '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Il ''map editor'' di MTA permette ai creatori di mappe di aggiungere alle loro creazioni svariati oggetti del mondo di GTA, come le strade, i barili esplosivi, le rampe, gli edifici, le colline e molto altro. Non solo questo, ma gli oggetti possono essere mossi via scripting, cambiare ''model'' e scomparire. Questo offre una gran quantità di divertimento e di varianti del gioco.&lt;br /&gt;
&lt;br /&gt;
Premi Tab per guardare lo scoreboard. Di default, verranno mostrati solo il nome del player e il ping, ma con gli script si possono aggiungere nuove colonne specifiche per la gamemode con cui si sta giocando. Per esempio, una mode deathmatch avrà sicuramente una colonna con il numero di kills del player, ma il creatore della mappa potrebbe decidere di aggiungere altre colonne per il numero di volte che sei morto, o da quanto tempo stai giocando, per poter valutare meglio il tuo punteggio.&lt;br /&gt;
&lt;br /&gt;
==Controlli==&lt;br /&gt;
&lt;br /&gt;
===Comandi di MTA===&lt;br /&gt;
&lt;br /&gt;
* F8 (o ~) - Apre la Console&lt;br /&gt;
* F9 - Mostra una finestra di aiuto ingame&lt;br /&gt;
* F11 - Mostra la mappa di SA ''(per spostarla usa i comandi che seguono)''&lt;br /&gt;
**+/- del tastierino numerico - Zoom avanti e indietro&lt;br /&gt;
**4, 8, 6, 2 del tastierino numerico - Muove la mappa a destra, a sinistra, in alto o in basso&lt;br /&gt;
**0 del tastierino numerico - Alterna una mappa dinamica (segue il segnalino del player) con una libera (resta ferma)  &lt;br /&gt;
* F12 - Salva uno screenshot dello schermo in '''C:\Programmi\MTA San Andreas\screenshots'''&lt;br /&gt;
* T - Chat&lt;br /&gt;
* Y - Chat del team&lt;br /&gt;
* TAB - Lista dei player (se la risorsa [[IT/Scoreboard|Scoreboard]] è avviata nel server corrente)&lt;br /&gt;
&lt;br /&gt;
==Comandi della Console==&lt;br /&gt;
&lt;br /&gt;
Digita '''~ (tilde)''' o '''F8''' per entrare nella console, quindi scrivi un comando seguito dagli argomenti necessari (se servono) e premi ''Invio''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;'''bind defaults''' :Reimposta i comandi di default.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Mostra una lista di tutte le mappe disponibili nel server. &lt;br /&gt;
&lt;br /&gt;
;'''nick [nickname]''' :Cambia il tuo nick ingame in quello che specifichi nel parametro [nickname].&lt;br /&gt;
&lt;br /&gt;
;'''msg [nickname] [messaggio]''' o '''pm [nickname] [messaggio]''' :Invia un messaggio privato al player con il nick specificato nel parametro [nickname]. Solo la persona specificata potrà vedere il messaggio. Sia '''msg''' sia '''pm''' hanno la stessa funzione.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' o '''exit''' :Ti disconnette dal server e ritorna al desktop. Ha la stessa funzione del tasto ''Quit'' nel menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Mostra la versione corrente e il copyright del software.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Mostra l'ora corrente.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ti disconnette dal server e ritorna al menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''say [testo]''' :Ti permette di inviare il messaggio nel parametro [testo] nella chatbox, attraverso la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [nickname]''' :Questo ignorerà ogni messaggio scritto dal player con il nick specificato nel parametro [nickname]. Per smettere di ignorare un player, riscrivi '''ignore [nickname]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Suggerimento:''' Puoi scrivere questi comandi in chatbox facendoli precedere da un ''/''.&lt;br /&gt;
&lt;br /&gt;
Una lista (in inglese) dei comandi della console si può ottenere scrivendo '''help''' nella console e premendo ''Invio''. La mappa attuale può avere dei comandi propri che possono essere controllati digitando '''commands''' nella console.&lt;br /&gt;
&lt;br /&gt;
==Codici degli errori e loro significato==&lt;br /&gt;
'''Errori di download [Download error]'''&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;
'''Errori fatali [Fatal error]'''&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;
'''Errori 'impossibile entrare nel veicolo''''&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;
[[en:Deathmatch Client Manual]]&lt;br /&gt;
[[ru:Deathmatch Client Manual]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15654</id>
		<title>IT/Manuale del Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IT/Manuale_del_Client&amp;diff=15654"/>
		<updated>2008-01-30T15:09:02Z</updated>

		<summary type="html">&lt;p&gt;Atti: /* Error codes and their meanings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IT/MainP}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduzione==&lt;br /&gt;
Multi Theft Auto: San Andreas è l'ultima di una lunga serie di mod multiplayer create dai fan per le versioni PC dei vari Grand Theft Auto. Trovate le versioni per GTA3 e Vice City che usano il vecchio ''core'' in [http://www.multitheftauto.com/ http://www.multitheftauto.com]. Questa mod non è approvata da Rockstar Games o Take 2 Interactive.&lt;br /&gt;
&lt;br /&gt;
Per favore, ricorda che MTA:SA Deathmatch è una beta, il che significa che può crashare o generare risultati inaspettati.&lt;br /&gt;
&lt;br /&gt;
==Prima di iniziare==&lt;br /&gt;
&lt;br /&gt;
Prima di installare Multi Theft Auto: San Andreas, assicurati che non ci siano mod installate in GTA: San Andreas. Queste andrebbero in conflitto con MTA. Se vorresti continuare a usare le tue mod per il ''single player'', puoi creare due installazioni reinstallando San Andreas in un'altra cartella del tuo Hard Disk.&lt;br /&gt;
&lt;br /&gt;
Assicurati anche di stare usando '''Windows XP''', '''Windows 2000''', '''Windows Vista''' o '''Windows Server 2003''' e che il tuo PC riesca a far girare San Andreas in ''single player''. Ricorda che se raggiungi solo i requisiti minimi di San Andreas, potrebbero capitarti dei rallentamenti in MTA, visto che richiede una maggiore potenza di calcolo del processore.&lt;br /&gt;
&lt;br /&gt;
'''Attenzione: MTA:SA funziona solo su GTA:SA versione 1.0.''' Se hai comprato il gioco recentemente, probabilmente hai una versione successiva.&lt;br /&gt;
&lt;br /&gt;
Se riscontri dei problemi, dai un'occhiata a [[IT/Bugs noti e FAQ|bugs noti e FAQ]], o contattaci via IRC a irc://irc.multitheftauto.com/mta (in inglese).&lt;br /&gt;
&lt;br /&gt;
===Requisiti di sistema===&lt;br /&gt;
I requisiti minimi di sistema di Multi Theft Auto: San Andreas sono leggermente più alti di quelli di Grand Theft Auto: San Andreas originale.&lt;br /&gt;
* Intel Pentium 4 o AMD Athlon XP&lt;br /&gt;
* 512MB DDR RAM&lt;br /&gt;
* Installazione pulista di Grand Theft Auto: San Andreas, versione 1.0 o 1.1 (americana o europea)&lt;br /&gt;
* 3.7GB di spazio libero nell'hard disk (3.6GB sono per un'installazione minima di GTA:SA)&lt;br /&gt;
* nVidia GeForce 4 series o ATI Radeon 8xxx series (compatibile con 64MB RAM e DirectX 9.0)&lt;br /&gt;
* Scheda audio compatibile con DirectX 9.0&lt;br /&gt;
* Tastiera e mouse&lt;br /&gt;
* Connessione a internet a banda larga (per un gioco online tranquillo)&lt;br /&gt;
&lt;br /&gt;
Per le ''feature'' aggiuntive, una scheda video compatibile con il pixel shader 2.0 (nVidia GeForce FX series o superiore, ATI Radeon 9xxx series o superiore) è raccomandata.&lt;br /&gt;
&lt;br /&gt;
Per un caricamento più rapido, è raccomandato un aumento di RAM.&lt;br /&gt;
&lt;br /&gt;
==Installare il gioco==&lt;br /&gt;
&lt;br /&gt;
# Se già non l'hai, registrati in http://www.mtabeta.com e scarica il client di MTA.&lt;br /&gt;
# Esegui l'installer. Riceverai un messaggio di introduzione, poi ti sarà presentato il Contratto di Licenza per l'Utente Finale (EULA). Dovrai acconsentire per continuare l'installazione.&lt;br /&gt;
# A questo punto potrai creare un account, usarne uno che hai già, o non usarne nessuno - in questo caso seleziona la seconda opzione&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Prima opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Crea un account in MTABeta.com, dopo averlo fatto inserisci i tuoi dati per il nell'installer&amp;lt;br&amp;gt;&lt;br /&gt;
'''Seconda opzione selezionata'''&amp;lt;br&amp;gt;&lt;br /&gt;
Inserisci i dati del tuo account nell'installer&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Ti sarà richiesto quali componenti installare.&lt;br /&gt;
#* '''Client''' è la mod che si interfaccia col gioco, ed è richiesta.&lt;br /&gt;
#* '''MTA Server''' ti permette di ''hostare'' il tuo server casalingo.&lt;br /&gt;
#* '''MTA Server &amp;gt; Editor''' è usato per creare nuove mappe, ed è una componente opzionale.&lt;br /&gt;
&lt;br /&gt;
# Allora ti sarà chiesta la cartella dove è installato il gioco. Devi impostarla alla stessa cartella dove hai installato GTA. Di default è: '''C:\Programmi\Rockstar Games\GTA San Andreas\'''. Premi il bottone '''Install''' per iniziare l'installazione vera e propria.&lt;br /&gt;
# Quando finisce l'installazione, potrai decidere se avviare immediatamente MTA: San Andreas. Scegli l'opzione che vuoi e premi '''Finish'''.&lt;br /&gt;
# Potrai avviare MTA:DM da '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas''' se vuoi giocare.&lt;br /&gt;
&lt;br /&gt;
==Avviare il gioco==&lt;br /&gt;
# Avvia Multi Theft Auto cliccando sull'icona in '''Start Menu\Tutti i programmi\MTA San Andreas\Play MTA San Andreas'''.&lt;br /&gt;
# GTA: San Andreas si avvierà e, quando tutto sarà caricato, vedrete il menu principale di MTA. Qui troverai svariate opazioni:&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''' – ti permette di connetterti a un server di cui conosci già l'indirizzo IP o l'URL e la porta. È utile se sai già in quale server entrare e così non hai bisogno di cercarlo nell'intera lista di server.&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_ServerBrowser.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''' – ti mostra una lista di server dove puoi giocare. &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: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 '''– ti permette di cambiare il tuo nickname ingame, personalizzare i controlli e modificare i settaggi video.&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:MENU_About.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 '''– ti mostra una lista di coloro che hanno contribuito a questo progetto.&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;
&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;'''Map editor '''– ti permette di creare le tue mappe personalizzate, complete di checkpoints, rampe, pickup e altri oggetti. Possono anche essere caricate su un server per poterci giocare con gli amici.&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 '''– ritorna al desktop di Windows.&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;
Il modo più facile di giocare è premere '''Browse Servers''' nel menu. Apparirà una nuova finestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:manual_image006a.jpg]]&amp;lt;/center&amp;gt; '''Immagine da aggiornare in seguito'''&lt;br /&gt;
&lt;br /&gt;
Se i server non sono già apparsi, premi il tasto '''Refresh''' e MTA cercherà eventuali server, mostradoli in una lista.&lt;br /&gt;
&lt;br /&gt;
* Nella tabella '''Name''', è mostrato il nome di ogni server.&lt;br /&gt;
* Nella tabella '''Players''', è mostrato il numero di players e la capacità massima del server, nel formato [Slot Usate] / [Slot Massime].&lt;br /&gt;
* Nella tabella '''Ping''' è mostrato il ping, o ''latenza'', tra il tuo PC e il server. Il ping è la misura del tempo che si impiega a mandare &amp;quot;pacchetti&amp;quot; di dati che devono essere mandati al server e ricevuti da esso, quindi un ping più alto significa che avrai più lag in quel particolar server. Generalmente, i server più vicini a dove ti trovi hanno i ping minori.&lt;br /&gt;
* Nella tabella '''Host''' c'è l'indirizzo IP del server. Lo puoi usare in futuro per connetterti al server usando l'opzione Quick Connect.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella può essere cliccata per disporre i suoi elementi in ordine ascendente o discendente.&lt;br /&gt;
&lt;br /&gt;
Per le migliori performance di gioco e ping, cerca un compromesso tra numero di players e ping.&lt;br /&gt;
Quando scegli un server, selezionalo e premi il tasto '''Connect''' in alto a destra nella finestra. Se tutto va bene, dovresti connetterti al server e unirti al gioco automaticamente.&lt;br /&gt;
&lt;br /&gt;
===Running the game from ASE (The All-Seeing Eye)===&lt;br /&gt;
&lt;br /&gt;
If you are not satisfied with the in-game server browser of MTA:San Andreas, you might want to check out '''The All-Seeing Eye''', which allows you to browse the server list out of the game, and can apply custom filters. This tutorial will help with the setup of ASE, and show how to make join on double-click work.&lt;br /&gt;
# Download ASE from http://videogames.yahoo.com/multiplayer , and install.&lt;br /&gt;
# '''This applies to MTA:SA up to version 1.0 dp2, and will probably be fixed in a later version''' &amp;lt;br /&amp;gt; Download [http://www.xup.in/dl,19686489/ASELauncher.zip/ ASELauncher] and extract ASELauncher.exe to your MTA directory (default C:\Program Files\MTA San Andreas). This tiny program converts the ASE command-line to a format MTA can understand. &lt;br /&gt;
# Now add MTA:SA to your ASE games list:&lt;br /&gt;
#* In ASE, click ''Tools'' -&amp;gt; ''Options'', and select the tab ''Games''&lt;br /&gt;
#* Open the category ''Not installed'' and select ''Multi Theft Auto'' in the list&lt;br /&gt;
#* Check ''Visible in filter list'', click ''Browse'' and select '''ASELauncher.exe''' in your MTA San Andreas directory&lt;br /&gt;
#* Leave the field ''Player name'' empty, and close the dialog with ''OK''&lt;br /&gt;
# A new game '''Multi Theft Auto''' has appeared. When you click ''Refresh'' in the toolbar, you will see all servers for all versions of MTA. Now add a modifier to only show the current version, '''1.0 dp2'''&lt;br /&gt;
#* Right-click ''Multi Theft Auto'' and select ''New...''&lt;br /&gt;
#* In the lower-left, select ''Modifier'' and replace MYMOD by '''MTADP2'''&lt;br /&gt;
#* Enter a name for the modifier in the ''Name'' field, e.g. '''MTA:SA 1.0 dp2'''&lt;br /&gt;
#* Insert the following filter code (with the line number):&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;1    if version != &amp;quot;1.0dp2&amp;quot; remove&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* Click ''OK''&lt;br /&gt;
#* Your new modifier is shown under ''My filters''&lt;br /&gt;
# All done! Now activate your modifier to only show your game version, select the game ''Multi Theft Auto'', and double-click any server to play.&lt;br /&gt;
&lt;br /&gt;
==Come giocare==&lt;br /&gt;
&lt;br /&gt;
MTA:SA offre un sistema di scripting compreso che permette ai creatori di mappe di modificare molti elementi di gioco per creare le loro gamemode innovative. Il gioco incorpora più aspetti possibile del single player, ma ci sono alcune differenze.&lt;br /&gt;
&lt;br /&gt;
Non ci sono pedoni o veicoli gestiti dall'IA. Le unice persone sulla mappa sono i tuoi avversari, o alleati se ci sono i team. Puoi parlare con tutti gli altri players con la chat nella parte in alto a sinistra dello schermo, che puoi attivare con '''T'''. Per chattare solo con i tuoi compagni di team, premi '''Y'''.&lt;br /&gt;
&lt;br /&gt;
Il ''map editor'' di MTA permette ai creatori di mappe di aggiungere alle loro creazioni svariati oggetti del mondo di GTA, come le strade, i barili esplosivi, le rampe, gli edifici, le colline e molto altro. Non solo questo, ma gli oggetti possono essere mossi via scripting, cambiare ''model'' e scomparire. Questo offre una gran quantità di divertimento e di varianti del gioco.&lt;br /&gt;
&lt;br /&gt;
Premi Tab per guardare lo scoreboard. Di default, verranno mostrati solo il nome del player e il ping, ma con gli script si possono aggiungere nuove colonne specifiche per la gamemode con cui si sta giocando. Per esempio, una mode deathmatch avrà sicuramente una colonna con il numero di kills del player, ma il creatore della mappa potrebbe decidere di aggiungere altre colonne per il numero di volte che sei morto, o da quanto tempo stai giocando, per poter valutare meglio il tuo punteggio.&lt;br /&gt;
&lt;br /&gt;
==Controlli==&lt;br /&gt;
&lt;br /&gt;
===Comandi di MTA===&lt;br /&gt;
&lt;br /&gt;
* F8 (o ~) - Apre la Console&lt;br /&gt;
* F9 - Mostra una finestra di aiuto ingame&lt;br /&gt;
* F11 - Mostra la mappa di SA ''(per spostarla usa i comandi che seguono)''&lt;br /&gt;
**+/- del tastierino numerico - Zoom avanti e indietro&lt;br /&gt;
**4, 8, 6, 2 del tastierino numerico - Muove la mappa a destra, a sinistra, in alto o in basso&lt;br /&gt;
**0 del tastierino numerico - Alterna una mappa dinamica (segue il segnalino del player) con una libera (resta ferma)  &lt;br /&gt;
* F12 - Salva uno screenshot dello schermo in '''C:\Programmi\MTA San Andreas\screenshots'''&lt;br /&gt;
* T - Chat&lt;br /&gt;
* Y - Chat del team&lt;br /&gt;
* TAB - Lista dei player (se la risorsa [[IT/Scoreboard|Scoreboard]] è avviata nel server corrente)&lt;br /&gt;
&lt;br /&gt;
==Comandi della Console==&lt;br /&gt;
&lt;br /&gt;
Digita '''~ (tilde)''' o '''F8''' per entrare nella console, quindi scrivi un comando seguito dagli argomenti necessari (se servono) e premi ''Invio''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;'''bind defaults''' :Reimposta i comandi di default.&lt;br /&gt;
&lt;br /&gt;
;'''maps''' :Mostra una lista di tutte le mappe disponibili nel server. &lt;br /&gt;
&lt;br /&gt;
;'''nick [nickname]''' :Cambia il tuo nick ingame in quello che specifichi nel parametro [nickname].&lt;br /&gt;
&lt;br /&gt;
;'''msg [nickname] [messaggio]''' o '''pm [nickname] [messaggio]''' :Invia un messaggio privato al player con il nick specificato nel parametro [nickname]. Solo la persona specificata potrà vedere il messaggio. Sia '''msg''' sia '''pm''' hanno la stessa funzione.&lt;br /&gt;
&lt;br /&gt;
;'''quit''' o '''exit''' :Ti disconnette dal server e ritorna al desktop. Ha la stessa funzione del tasto ''Quit'' nel menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''ver''' :Mostra la versione corrente e il copyright del software.&lt;br /&gt;
&lt;br /&gt;
;'''time''' :Mostra l'ora corrente.&lt;br /&gt;
&lt;br /&gt;
;'''disconnect''' :Ti disconnette dal server e ritorna al menu principale.&lt;br /&gt;
&lt;br /&gt;
;'''say [testo]''' :Ti permette di inviare il messaggio nel parametro [testo] nella chatbox, attraverso la console.&lt;br /&gt;
&lt;br /&gt;
;'''ignore [nickname]''' :Questo ignorerà ogni messaggio scritto dal player con il nick specificato nel parametro [nickname]. Per smettere di ignorare un player, riscrivi '''ignore [nickname]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Suggerimento:''' Puoi scrivere questi comandi in chatbox facendoli precedere da un ''/''.&lt;br /&gt;
&lt;br /&gt;
Una lista (in inglese) dei comandi della console si può ottenere scrivendo '''help''' nella console e premendo ''Invio''. La mappa attuale può avere dei comandi propri che possono essere controllati digitando '''commands''' nella console.&lt;br /&gt;
&lt;br /&gt;
==Codici degli errori e loro significato==&lt;br /&gt;
'''Download error'''&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;
'''Fatal errors'''&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;
'''Errori 'impossibile entrare nel veicolo''''&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;
[[en:Deathmatch Client Manual]]&lt;br /&gt;
[[ru:Deathmatch Client Manual]]&lt;/div&gt;</summary>
		<author><name>Atti</name></author>
	</entry>
</feed>