Resource:IT/Map manager: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Creata la pagina e tradotta la sezione 0)
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{IT/MainP}}
{{IT/MainP}}
[[Category:100%]]
{{IT/Risorsa}}
{{IT/Risorsa}}
Il '''map manager''' è una risorsa inclusa nel pacchetto server di MTA:SA DM e comprende comandi, funzioni ed eventi per le gamemodes per gestire dinamicamente le loro mappe. Ad esempio, quando un server ha bisogno di caricare diverse mappe per una race mode, invece di essere messe tutte nella risorsa della gamemode, possono essere inserite in una risorsa separata ed essere successivamente richiamate con la funzione "changeGamemodeMap" quando una nuova gara inizia.  
Il '''map manager''' è una risorsa inclusa nel pacchetto server di MTA:SA DM e comprende comandi, funzioni ed eventi per le gamemodes per gestire dinamicamente le loro mappe. Ad esempio, quando un server ha bisogno di caricare diverse mappe per una race mode, invece di essere messe tutte nella risorsa della gamemode, possono essere inserite in una risorsa separata ed essere successivamente richiamate con la funzione "changeGamemodeMap" quando una nuova gara inizia.  
Line 5: Line 6:
Più specificamente, il map manager memorizza la lista di tutte le gamemodes/mappe e ne gestisce il caricamento; applica alcune impostazioni della mappa che hanno effetto sul mondo del gioco e setta le regole della mappa e il tipo di gioco su ASE. Comprende inoltre una funzione che visualizza ed aggiorna automaticamente nel browser la mode/mappa.
Più specificamente, il map manager memorizza la lista di tutte le gamemodes/mappe e ne gestisce il caricamento; applica alcune impostazioni della mappa che hanno effetto sul mondo del gioco e setta le regole della mappa e il tipo di gioco su ASE. Comprende inoltre una funzione che visualizza ed aggiorna automaticamente nel browser la mode/mappa.


==A simple tutorial==
==Un semplice tutorial==
In this section we are going to continue the basic gamemode we created in the [[Scripting Introduction|Introduction to Scripting]]. We will add a simple map resource that only contains the spawnpoint data for the players, and load the data in the main script when the player needs to spawn.
In questa sezione continueremo a lavorare sulla gamemode che abbiamo creato nella pagina [[IT/Introduzione_allo_scripting|introduzione allo Scripting]]. Aggiungeremo una semplice risorsa mappa che conterrà gli spawn dei giocatori e caricherà i dati nello script principale quando un giocatore dovrà spawnare.


First of all, we make a folder under /Your MTA Server/mods/deathmatch/resources/, and name it "mymap". Then under /mymap/ directory, create a text file and name it "meta.xml", which is required for every resource.
Innanzitutto crea una cartella sotto <syntaxhighlight lang="lua"><SERVER>/mods/deathmatch/resources/</syntaxhighlight>, che chiamerai '''mymap'''. Dentro <syntaxhighlight lang="lua">/mymap/</syntaxhighlight> crea un file di testo chiamato '''meta.xml''', che è necessario a tutte le risorse.


Enter the following codes in the ''meta.xml'' file:
Inserisci questo codice all'interno di ''meta.xml'':
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<meta>
<meta>
Line 17: Line 18:
</meta>
</meta>
</syntaxhighlight>
</syntaxhighlight>
Note that this resource is "linked" to the main resource with the ''gamemodes=""'' tag, which contains the name of the main resource. In the ''map'' tag, it indicates the name of the .map file which contains the actual map data.
Notare che questa risorsa è collegata allo script principale tramite l'attributo <syntaxhighlight lang="lua">gamemodes=""</syntaxhighlight>, che contiene il nome della risorsa principale. Nel tag <syntaxhighlight lang="lua">map</syntaxhighlight> è indicato il nome del file .map che contiene le informazioni sulla mappa.


Now let's create another text file under /mymap/ and name it "mymap.map", and enter the following codes:
Ora crea un altro file di testo sotto <syntaxhighlight lang="lua">/mymap/</syntaxhighlight> e chiamalo '''mymap.map''', inserendovi questo codice:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<map>
<map>
Line 25: Line 26:
</map>
</map>
</syntaxhighlight>
</syntaxhighlight>
Note that "spawnpoint" is the type of the element, used in [[getElementsByType]] function; likewise, "id" is used in [[getElementByID]] function.  
Notare che <syntaxhighlight lang="lua">spawnpoint</syntaxhighlight> è il tipo di elemento usato nella funzione [[IT/getElementsByType|getElementsByType]]; così come <syntaxhighlight lang="lua">id</syntaxhighlight> è usato nella funzione [[IT/getElementByID|getElementByID]].  


To load the map data, the main script needs access to the map resource itself. Now let's edit the script.lua file in "myserver" resource. Enter the following code:
Per caricare i dati della mappa lo script principale ha bisogno di un collegamento con la risorsa della mappa. Modifichiamo il file '''script.lua''' nella risorsa <syntaxhighlight lang="lua">myserver</syntaxhighlight>. Inserisci il seguente codice:


<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 36: Line 37:
addEventHandler("onGamemodeMapStart", g_root, loadMap)
addEventHandler("onGamemodeMapStart", g_root, loadMap)
</syntaxhighlight>
</syntaxhighlight>
Basically, the "onGamemodeMapStart" event gives us the handle of the map ("startedMap"), which we used to extract the handle of the resource containing the map ("mapRoot").
In pratica, l'evento <syntaxhighlight lang="lua">onGamemodeMapStart</syntaxhighlight> ci da l'handle della mappa ("startedMap"), che abbiamo usato per estrarre l'handle della risorsa contenente la mappa ("mapRoot").


With the resource handle, we can extract the spawnpoint information from it. Look at the joinHandler() function in script.lua, instead of specifying x, y and z, we can use the map data as the following:
Con l'handle della risorsa possiamo estrarne le informazioni sugli spawnpoint. Creando la funzione <syntaxhighlight lang="lua">joinHandler()</syntaxhighlight> dentro '''script.lua''', invece di specificare le coordinate '''x''', '''y''' e '''z''', possiamo usare i dati della mappa come segue:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function joinHandler()
function joinHandler()
local spawn = getElementsByType("spawnpoint", mapRoot)
local spawn = getElementsByType("spawnpoint", mapRoot) --Creiamo una table (array) locale contenente gli elementi <spawnpoint>
local x,y,z,r
local x,y,z,r --Creaiamo delle variabili locali per tutte le coordinate
for key, value in pairs(spawn) do
for key, value in pairs(spawn) do --Inseriamo nelle variabili delle coordinate le coordinate prese dall'elemento <spawnpoint>
x = getElementData(value, "posX")
x = getElementData(value, "posX")
y = getElementData(value, "posY")
y = getElementData(value, "posY")
Line 49: Line 50:
r = getElementData(value, "rot")
r = getElementData(value, "rot")
end
end
spawnPlayer(source, x, y, z)
spawnPlayer(source, x, y, z) --Spawniamo il giocatore alle coordinate appena prese
fadeCamera(source, true)
fadeCamera(source, true) --E impostiamo la sua telecamera su di lui
end
end
</syntaxhighlight>
</syntaxhighlight>
Now you may start the gamemode in the server console with the following command:
Ora puoi far partire la gamemode sul tuo server avviando in console il seguente comando:
<syntaxhighlight lang="lua">gamemode myserver mymap</syntaxhighlight>


'''gamemode myserver mymap'''
==Un tutorial più avanzato==
In questo tutorial, invece di avviare la mappa con il comando sopra descritto quando avviamo il server, avvieremo la risorsa con qualche linea di script. Questo può tornare utile se hai molte mappe e vuoi che il server le avvii automaticamente.


==A more advanced tutorial==
Prima di tutto dobbiamo creare un handler per l'evento [[IT/onResourceStart|onResourceStart]], che si attiva quando la risorsa principale viene avviata con il comando <syntaxhighlight lang="lua">gamemode</syntaxhighlight>. Poi, con la funzione assegnata all'evento, carichiamo la risorsa mappa e inizializziamo la mappa:
In this tutorial, instead of starting the map while starting the server with the command above, we'll start the map resource with a few lines of script. This is useful when you have multiple maps and would like to let the server start them automatically.
 
First of all we need to add a new event handler for [[onResourceStart]] event, which is fired when the main script is started manually with the ''gamemode'' command. Then in the function binded to the event, we'll load the map resource and start the map:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function Initialize(startedResource)
function Initialize(startedResource)
mapRes = getResourceFromName("mymap")
mapRes = getResourceFromName("mymap") --Otteniamo l'handle della risorsa "mymap"
manager = getResourceFromName("mapmanager")
manager = getResourceFromName("mapmanager") --E quello di "mapmanager"
startResource(mapRes)
startResource(mapRes) --Inizializziamo la risorsa "mymap"
call(manager, "changeGamemodeMap", mapRes, getThisResource())
call(manager, "changeGamemodeMap", mapRes, getThisResource()) --E chiamiamo la funzione "changeGamemodeMap" dentro mapmanager
end
end


addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), Initialize)
addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), Initialize) --Impostiamo Inizialize() come handler per onResourceStart
</syntaxhighlight>
</syntaxhighlight>
The [[call]] function lets you use a function defined in another resource, which is the "changeGamemodeMap" function in the "mapmanager" resource in our case.  
La funzione [[IT/call|call]] permette, come visto, di chiamare una funzione presente in un'altra risorsa, in questo caso la funzione <syntaxhighlight lang="lua">changeGamemodeMap</syntaxhighlight> dentro la riosrsa '''mapmanager'''.  


If you try to run the server now, it will give you several "access denied" errors. That's because the main resource, "myserver", doesn't yet have access to the function [[startResource]] by default. We must add the resource in the Access Control List with appropriate rights.
Se provassi ad avviare il server adesso, riceveresti molti errori "access denied" (accesso negato). QUesto perché la risorsa principale, '''myserver''', non ha ancora accesso di default alla funzione [[IT/startResource|startResource]]. Dobbiamo aggiungere la funzione nell'Access Control List con i diritti necessari.


Go to /Your MTA Server/mods/deathmatch/ directory. You will see a file named acl.xml. Open it with Notepad, and insert the following codes:
Vai nella cartella <syntaxhighlight lang="lua"><SERVER>/mods/deathmatch/</syntaxhighlight>. Vedrai un file chiamato '''acl.xml''', aprilo con un qualsiasi editor di testo ed inserisci il seguente codice:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<group name="myserver">
<group name="myserver">
Line 88: Line 88:
</acl>
</acl>
</syntaxhighlight>
</syntaxhighlight>
Make sure the acl.xml file is closed, then restart the server process. It will reload the ACL settings and give your resource access to the function. Now you can start the gamemode with:
Assicurati che '''acl.xml''' sia chiuso, quindi riavvia il server; esso ricaricherà il file ACL, dando i diritti di accesso della risorsa alla funzione. Ora puoi avviare la funzione con:
 
<syntaxhighlight lang="lua">gamemode myserver</syntaxhighlight>
'''gamemode myserver'''
E lo script avvierà la mappa per voi.
 
And the script will automatically load the map for you.
 
==Usage==
To use the map manager, your resources must first be marked as either gamemodes or maps.
 
You have to tag the '''gamemode resource''' with the correct type in its info tag:
<syntaxhighlight lang="xml"><info description="A gamemode" type="gamemode" /></syntaxhighlight>
 
'''Map resources''' also need the ''type="map"'' tag, plus a ''gamemodes'' tag listing the gamemode resources they're compatible with in a comma-separated list ''without spaces''.
<syntaxhighlight lang="xml"><info description="A gamemode map" type="map" gamemodes="ctv,koth" /></syntaxhighlight>
 
There can be only one gamemode and one gamemode map loaded at once.


==Optional resource attributes==
==Utilizzo==
These attributes all go in the corresponding resource's info tag.
Per usare il map manager, le tue risorse devono essere prima marcate come ''gamemodes'' o ''mappe''.


'''name:''' A friendly name for your gamemode or map, to be displayed in the start messages or map listings instead of the filename.
Devi contrassegnare le '''risorse gamemode''' con il tipo corretto nel tag <syntaxhighlight lang="lua">info</syntaxhighlight>:
<syntaxhighlight lang="xml"><info description="Una gamemode" type="gamemode" /></syntaxhighlight>


==Commands==
Anche le '''risorse mappa''' hanno bisogno dell'attributo <syntaxhighlight lang="lua">type="map"</syntaxhighlight>, più un attributo <syntaxhighlight lang="lua">gamemodes</syntaxhighlight> con una lista di gamemodes con cui sono compatibili, ''separate da virgole e senza spazi''.
'''changemap newmap [newgamemode]''' (changes the gamemode map to a new one, optionally changing the gamemode as well)
<syntaxhighlight lang="xml"><info description="Una mappa" type="map" gamemodes="ctv,koth" /></syntaxhighlight>


'''changemode newgamemode [newmap]''' (changes to a new gamemode, optionally starting a map with it)
Il server può caricare al massimo una gamemode e una mappa alla volta.


'''gamemode newgamemode [newmap]''' (same as previous one)
==Attributi opzionali delle resources==
Questi attributi vanno nel tag <syntaxhighlight lang="lua">info</syntaxhighlight> della risorsa.


'''stopmode''' (stops the current mode and mode map)
*<syntaxhighlight lang="lua">name</syntaxhighlight>: Il nome pubblico della risorsa, che verrà visualizzato nella lista di gamemodes e nei messaggi del server al posto del nome del file.


'''stopmap''' (stops the current mode map)
==Comandi==
Questi comandi sono eseguibili sulla risorsa map manager:


'''maps [gamemode]''' (lists all maps in the server, optionally all maps compatible with a gamemode)
*<syntaxhighlight lang="lua">changemap nuovamappa [nuovagamemode]</syntaxhighlight> Cambia la mappa attuale, e opzionalmente anche la gamemode.
*<syntaxhighlight lang="lua">changemode nuovagamemode [nuovamappa]</syntaxhighlight> Cambia la gamemode attuale, e opzionalmente anche la mappa.
*<syntaxhighlight lang="lua">gamemode nuovagamemode [nuovamappa]</syntaxhighlight> Come sopra.
*<syntaxhighlight lang="lua">stopmode</syntaxhighlight> Stoppa la gamemode e la mappa corrente.
*<syntaxhighlight lang="lua">stopmap</syntaxhighlight> Stoppa la mappa corrente.
*<syntaxhighlight lang="lua">maps [gamemode]</syntaxhighlight> Mostra tutte le mappe del server, opzionalmente solo quelle collegate alla gamemode specificata.
*<syntaxhighlight lang="lua">gamemodes</syntaxhighlight> Mostra tutte le gamemodes.


'''gamemodes''' (lists all gamemodes)
==Impostazioni==
*<syntaxhighlight lang="lua">mapmanager.color [colore in codice hex]</syntaxhighlight> Cambia il colore dei messaggi di output del mapmanager con quello in codice esadecimale('''#RRGGBB''') (default: '''#E1AA5A''').


==Settings==
*<syntaxhighlight lang="lua">mapmanager.messages [booleano]</syntaxhighlight> '''true''' se i cambiamenti di gamemode/mappa sono abilitati, '''false''' se no (default: '''true''').
'''*mapmanager.color''' [hex color string] (changes the mapmanager's output messages' color) (default: #E1AA5A)


'''*mapmanager.messages''' [boolean] (whether map/gm changes are enabled) (default: true)
*<syntaxhighlight lang="lua">mapmanager.ASE [booleano]</syntaxhighlight> '''true''' se il mapmanager può mostrare gamemode e mappa su ASE, '''false''' se no (default: '''true''').


'''*mapmanager.ASE''' [boolean] (whether the manager will set ASE gametype / mapname) (default: true)
==Funzioni esportate==
Queste sono le funzioni del mapmanager utilizzabili tramite la funzione [[IT/call|call()]]:
*<syntaxhighlight lang="lua">bool changeGamemode ( resource nuovaGamemode, [ resource mappaDaCaricare ] )</syntaxhighlight>
Cambia la gamemode in '''nuovaGamemode''', impostando opzionalmente una mappa iniziale('''mappaDaCaricare'''); di default carica con la mappa.
*<syntaxhighlight lang="lua">bool changeGamemodeMap ( resource nuovaMappa, [ resource gamemodeDaCambiare ] )</syntaxhighlight>
Cambia la mappa in '''nuovaMappa''', impostando opzionalmente una gamemode da avviare prima di cambiare('''gamemodeDaCambiare'''); di default carica con la gamemode corrente.
*<syntaxhighlight lang="lua">table getGamemodes ( )</syntaxhighlight>
Ritorna una table con i puntatori di tutte le gamemodes.
*<syntaxhighlight lang="lua">table getGamemodesCompatibleWithMap ( resource laMappa )</syntaxhighlight>
Ritorna una table con i puntatori di tutte le gamemode compatibili con '''laMappa'''.
*<syntaxhighlight lang="lua">table getMaps ( )</syntaxhighlight>
Ritorna una table con i puntatori di tutte le mappe.
*<syntaxhighlight lang="lua">table getMapsCompatibleWithGamemode ( [ resource laGamemode ] )</syntaxhighlight>
Ritorna una table con i puntatori di tutte le mappe compatibili con '''laGamemode'''. Se il parametro non viene specificato, ritorna tutte le mappe che non sono compatibili con nessuna gamemode.
*<syntaxhighlight lang="lua">resource getRunningGamemode ( )</syntaxhighlight>
Ritorna il puntatore della gamemode attualmente in esecuzione.
*<syntaxhighlight lang="lua">resource getRunningGamemodeMap ( )</syntaxhighlight>
Ritorna il puntatore della mappa attualmente in esecuzione.
*<syntaxhighlight lang="lua">bool isGamemode ( resource laGamemode )</syntaxhighlight>
Ritorna se '''laGamemode''' è o no una gamemode.
*<syntaxhighlight lang="lua">bool isGamemodeCompatibleWithMap ( resource laGamemode, resource laMappa )</syntaxhighlight>
Ritorna se la gamemode è compatibile con la mappa o no.
*<syntaxhighlight lang="lua">bool isMap ( resource laMappa )</syntaxhighlight>
Determina se '''laMappa''' è una mappa o no.
*<syntaxhighlight lang="lua">bool isMapCompatibleWithGamemode ( resource laMappa, resource laGamemode )</syntaxhighlight>
Ritorna se la mappa è compatibile con la gamemode o no.
*<syntaxhighlight lang="lua">bool stopGamemode ( )</syntaxhighlight>
Stoppa la gamemode e la mappa correnti.
*<syntaxhighlight lang="lua">bool stopGamemodeMap ( )</syntaxhighlight>
Stoppa la mappa corrente.


==Exported functions==
==Eventi==
<syntaxhighlight lang="lua">bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )</syntaxhighlight>
Per tutti questi eventi, '''source''' è l'elemento root della risorsa.
Changes the gamemode to a new one, optionally specifying an initial map for it (will load without a map by default).
*<syntaxhighlight lang="lua">onGamemodeStart ( resource gamemodeIniziata )</syntaxhighlight>
<syntaxhighlight lang="lua">bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )</syntaxhighlight>
Si attiva prima che venga iniziata una gamemode.
Changes the GM map to a new one, optionally specifying a gamemode to change to before loading it (will load with the current gamemode by default).
*<syntaxhighlight lang="lua">onGamemodeStop ( resource gamemodeFermata )</syntaxhighlight>
<syntaxhighlight lang="lua">table getGamemodes ( )</syntaxhighlight>
Si attiva prima che venga fermata una gamemode
Returns a table of all gamemode resource pointers.
*<syntaxhighlight lang="lua">onGamemodeMapStart ( resource mappaIniziata )</syntaxhighlight>
<syntaxhighlight lang="lua">table getGamemodesCompatibleWithMap ( resource theMap )</syntaxhighlight>
Si attiva prima che venga iniziata una mappa.
Returns a table of compatible gamemode resource pointers.
*<syntaxhighlight lang="lua">onGamemodeMapStop ( resource mappaFermata )</syntaxhighlight>
<syntaxhighlight lang="lua">table getMaps ( )</syntaxhighlight>
Si attiva prima che venga fermata una mappa.
Returns a table of all map resource pointers.
<syntaxhighlight lang="lua">table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )</syntaxhighlight>
Returns a table of compatible map resource pointers. If the gamemode is left blank, it returns all maps which aren't compatible with any gamemode.
<syntaxhighlight lang="lua">resource getRunningGamemode ( )</syntaxhighlight>
Returns the currently running gamemode's resource pointer.
<syntaxhighlight lang="lua">resource getRunningGamemodeMap ( )</syntaxhighlight>
Returns the currently running GM map's resource pointer.
<syntaxhighlight lang="lua">bool isGamemode ( resource theGamemode )</syntaxhighlight>
Determines if a resource is a gamemode or not.
<syntaxhighlight lang="lua">bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )</syntaxhighlight>
Determines if a gamemode is compatible with a map or not.
<syntaxhighlight lang="lua">bool isMap ( resource theMap )</syntaxhighlight>
Determines if a resource is a map or not.
<syntaxhighlight lang="lua">bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )</syntaxhighlight>
Determines if a map is compatible with a gamemode or not.
<syntaxhighlight lang="lua">bool stopGamemode ( )</syntaxhighlight>
Stops the current gamemode and its map.
<syntaxhighlight lang="lua">bool stopGamemodeMap ( )</syntaxhighlight>
Stop the current GM map.
Determines if a map is compatible with a gamemode or not.


==Fired events==
==Impostazioni supportate dalle mappe==
''(For all these events, "source" is the resource's root element.)''
Le seguenti impostazioni tratte dal [[IT/Settings system|registro]] vengono applicate dal map manager quando una mappa inizia:
<syntaxhighlight lang="lua">onGamemodeStart ( resource startedGamemode )</syntaxhighlight>
*<syntaxhighlight lang="lua">gamespeed [numero]</syntaxhighlight>: La velocità di gioco della mappa.
Fired before a gamemode starts.
*<syntaxhighlight lang="lua">gravity [numero]</syntaxhighlight>: La gravità della mappa.
<syntaxhighlight lang="lua">onGamemodeStop ( resource stoppedGamemode )</syntaxhighlight>
*<syntaxhighlight lang="lua">time [stringa tipo 'hh:mm']</syntaxhighlight>: L'ora della mappa.
Fired before a gamemode is stopped.
*<syntaxhighlight lang="lua">weather [numero]</syntaxhighlight>: L'ID del meteo della mappa.
<syntaxhighlight lang="lua">onGamemodeMapStart ( resource startedMap )</syntaxhighlight>
*<syntaxhighlight lang="lua">waveheight [numero]</syntaxhighlight>: L'altezza delle onde della mappa.
Fired before a GM map starts.
*<syntaxhighlight lang="lua">locked_time [booleano]</syntaxhighlight>: Se l'ora sarà bloccata o meno.
<syntaxhighlight lang="lua">onGamemodeMapStop ( resource stoppedMap )</syntaxhighlight>
*<syntaxhighlight lang="lua">minplayers [numero]</syntaxhighlight>: Il numero minimo di giocatori per iniziare la mappa.
Fired before a GM map is stopped.
*<syntaxhighlight lang="lua">maxplayers [numero]</syntaxhighlight>: Il massimo numero di giocatori per iniziare la mappa.


==Supported map settings==
[[en:Resource:mapmanager]]
The following settings from the [[settings system|registry]] are applied by the map manager when a map is started:
<br>'''gamespeed''' [number]: The map's game speed.
<br>'''gravity''' [number]: The map's gravity.
<br>'''time''' [string of the form '''hh:mm''']: The map's time.
<br>'''weather''' [number]: The map's weather ID.
<br>'''waveheight''' [number]: The map's wave height.
<br>'''locked_time''' [boolean]: Whether the set time will be frozen by the manager or not.
<br>'''minplayers''' [number]: The required minimum number of players to start the map.
<br>'''maxplayers''' [number]: The allowed maximum number of players to start the map.

Revision as of 14:12, 13 June 2008

« Torna alla Pagina principale italiana .

Il map manager è una risorsa inclusa nel pacchetto server di MTA:SA DM e comprende comandi, funzioni ed eventi per le gamemodes per gestire dinamicamente le loro mappe. Ad esempio, quando un server ha bisogno di caricare diverse mappe per una race mode, invece di essere messe tutte nella risorsa della gamemode, possono essere inserite in una risorsa separata ed essere successivamente richiamate con la funzione "changeGamemodeMap" quando una nuova gara inizia.

Più specificamente, il map manager memorizza la lista di tutte le gamemodes/mappe e ne gestisce il caricamento; applica alcune impostazioni della mappa che hanno effetto sul mondo del gioco e setta le regole della mappa e il tipo di gioco su ASE. Comprende inoltre una funzione che visualizza ed aggiorna automaticamente nel browser la mode/mappa.

Un semplice tutorial

In questa sezione continueremo a lavorare sulla gamemode che abbiamo creato nella pagina introduzione allo Scripting. Aggiungeremo una semplice risorsa mappa che conterrà gli spawn dei giocatori e caricherà i dati nello script principale quando un giocatore dovrà spawnare.

Innanzitutto crea una cartella sotto

<SERVER>/mods/deathmatch/resources/

, che chiamerai mymap. Dentro

/mymap/

crea un file di testo chiamato meta.xml, che è necessario a tutte le risorse.

Inserisci questo codice all'interno di meta.xml:

<meta>
   <info type="map" gamemodes="myserver"/>
   <map src="mymap.map"/>
</meta>

Notare che questa risorsa è collegata allo script principale tramite l'attributo

gamemodes=""

, che contiene il nome della risorsa principale. Nel tag

map

è indicato il nome del file .map che contiene le informazioni sulla mappa. Ora crea un altro file di testo sotto

/mymap/

e chiamalo mymap.map, inserendovi questo codice:

<map>
   <spawnpoint id="spawnpoint1" posX="1959.5487060547" posY="-1714.4613037109" posZ="18" rot="63.350006103516" model="0"/>
</map>

Notare che

spawnpoint

è il tipo di elemento usato nella funzione getElementsByType; così come

id

è usato nella funzione getElementByID. Per caricare i dati della mappa lo script principale ha bisogno di un collegamento con la risorsa della mappa. Modifichiamo il file script.lua nella risorsa

myserver

. Inserisci il seguente codice:

function loadMap(startedMap)
	mapRoot = getResourceRootElement(startedMap)
end

addEventHandler("onGamemodeMapStart", g_root, loadMap)

In pratica, l'evento

onGamemodeMapStart

ci da l'handle della mappa ("startedMap"), che abbiamo usato per estrarre l'handle della risorsa contenente la mappa ("mapRoot"). Con l'handle della risorsa possiamo estrarne le informazioni sugli spawnpoint. Creando la funzione

joinHandler()

dentro script.lua, invece di specificare le coordinate x, y e z, possiamo usare i dati della mappa come segue:

function joinHandler()
	local spawn = getElementsByType("spawnpoint", mapRoot) --Creiamo una table (array) locale contenente gli elementi <spawnpoint>
	local x,y,z,r --Creaiamo delle variabili locali per tutte le coordinate
	for key, value in pairs(spawn) do --Inseriamo nelle variabili delle coordinate le coordinate prese dall'elemento <spawnpoint>
		x = getElementData(value, "posX")
		y = getElementData(value, "posY")
		z = getElementData(value, "posZ")
		r = getElementData(value, "rot")
	end
	spawnPlayer(source, x, y, z) --Spawniamo il giocatore alle coordinate appena prese
	fadeCamera(source, true) --E impostiamo la sua telecamera su di lui
end

Ora puoi far partire la gamemode sul tuo server avviando in console il seguente comando:

gamemode myserver mymap

Un tutorial più avanzato

In questo tutorial, invece di avviare la mappa con il comando sopra descritto quando avviamo il server, avvieremo la risorsa con qualche linea di script. Questo può tornare utile se hai molte mappe e vuoi che il server le avvii automaticamente.

Prima di tutto dobbiamo creare un handler per l'evento onResourceStart, che si attiva quando la risorsa principale viene avviata con il comando

gamemode

. Poi, con la funzione assegnata all'evento, carichiamo la risorsa mappa e inizializziamo la mappa:

function Initialize(startedResource)
	mapRes = getResourceFromName("mymap") --Otteniamo l'handle della risorsa "mymap"
	manager = getResourceFromName("mapmanager") --E quello di "mapmanager"
	startResource(mapRes) --Inizializziamo la risorsa "mymap"
	
	call(manager, "changeGamemodeMap", mapRes, getThisResource()) --E chiamiamo la funzione "changeGamemodeMap" dentro mapmanager
end

addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), Initialize) --Impostiamo Inizialize() come handler per onResourceStart

La funzione call permette, come visto, di chiamare una funzione presente in un'altra risorsa, in questo caso la funzione

changeGamemodeMap

dentro la riosrsa mapmanager.

Se provassi ad avviare il server adesso, riceveresti molti errori "access denied" (accesso negato). QUesto perché la risorsa principale, myserver, non ha ancora accesso di default alla funzione startResource. Dobbiamo aggiungere la funzione nell'Access Control List con i diritti necessari.

Vai nella cartella

<SERVER>/mods/deathmatch/

. Vedrai un file chiamato acl.xml, aprilo con un qualsiasi editor di testo ed inserisci il seguente codice:

<group name="myserver">
   <acl name="acl_myserver"/>
   <object name="resource.myserver"/>
</group>
<acl name="acl_myserver">
   <right name="function.startResource" access="true"/>
   <right name="function.stopResource" access="true"/>
   <right name="function.restartResource" access="true"/>
</acl>

Assicurati che acl.xml sia chiuso, quindi riavvia il server; esso ricaricherà il file ACL, dando i diritti di accesso della risorsa alla funzione. Ora puoi avviare la funzione con:

gamemode myserver

E lo script avvierà la mappa per voi.

Utilizzo

Per usare il map manager, le tue risorse devono essere prima marcate come gamemodes o mappe.

Devi contrassegnare le risorse gamemode con il tipo corretto nel tag

info

:

<info description="Una gamemode" type="gamemode" />

Anche le risorse mappa hanno bisogno dell'attributo

type="map"

, più un attributo

gamemodes

con una lista di gamemodes con cui sono compatibili, separate da virgole e senza spazi.

<info description="Una mappa" type="map" gamemodes="ctv,koth" />

Il server può caricare al massimo una gamemode e una mappa alla volta.

Attributi opzionali delle resources

Questi attributi vanno nel tag

info

della risorsa.

  • name
    : Il nome pubblico della risorsa, che verrà visualizzato nella lista di gamemodes e nei messaggi del server al posto del nome del file.

Comandi

Questi comandi sono eseguibili sulla risorsa map manager:

  • changemap nuovamappa [nuovagamemode]
    Cambia la mappa attuale, e opzionalmente anche la gamemode.
  • changemode nuovagamemode [nuovamappa]
    Cambia la gamemode attuale, e opzionalmente anche la mappa.
  • gamemode nuovagamemode [nuovamappa]
    Come sopra.
  • stopmode
    Stoppa la gamemode e la mappa corrente.
  • stopmap
    Stoppa la mappa corrente.
  • maps [gamemode]
    Mostra tutte le mappe del server, opzionalmente solo quelle collegate alla gamemode specificata.
  • gamemodes
    Mostra tutte le gamemodes.

Impostazioni

  • mapmanager.color [colore in codice hex]
    Cambia il colore dei messaggi di output del mapmanager con quello in codice esadecimale(#RRGGBB) (default: #E1AA5A).
  • mapmanager.messages [booleano]
    true se i cambiamenti di gamemode/mappa sono abilitati, false se no (default: true).
  • mapmanager.ASE [booleano]
    true se il mapmanager può mostrare gamemode e mappa su ASE, false se no (default: true).

Funzioni esportate

Queste sono le funzioni del mapmanager utilizzabili tramite la funzione call():

  • bool changeGamemode ( resource nuovaGamemode, [ resource mappaDaCaricare ] )

Cambia la gamemode in nuovaGamemode, impostando opzionalmente una mappa iniziale(mappaDaCaricare); di default carica con la mappa.

  • bool changeGamemodeMap ( resource nuovaMappa, [ resource gamemodeDaCambiare ] )

Cambia la mappa in nuovaMappa, impostando opzionalmente una gamemode da avviare prima di cambiare(gamemodeDaCambiare); di default carica con la gamemode corrente.

  • table getGamemodes ( )

Ritorna una table con i puntatori di tutte le gamemodes.

  • table getGamemodesCompatibleWithMap ( resource laMappa )

Ritorna una table con i puntatori di tutte le gamemode compatibili con laMappa.

  • table getMaps ( )

Ritorna una table con i puntatori di tutte le mappe.

  • table getMapsCompatibleWithGamemode ( [ resource laGamemode ] )

Ritorna una table con i puntatori di tutte le mappe compatibili con laGamemode. Se il parametro non viene specificato, ritorna tutte le mappe che non sono compatibili con nessuna gamemode.

  • resource getRunningGamemode ( )

Ritorna il puntatore della gamemode attualmente in esecuzione.

  • resource getRunningGamemodeMap ( )

Ritorna il puntatore della mappa attualmente in esecuzione.

  • bool isGamemode ( resource laGamemode )

Ritorna se laGamemode è o no una gamemode.

  • bool isGamemodeCompatibleWithMap ( resource laGamemode, resource laMappa )

Ritorna se la gamemode è compatibile con la mappa o no.

  • bool isMap ( resource laMappa )

Determina se laMappa è una mappa o no.

  • bool isMapCompatibleWithGamemode ( resource laMappa, resource laGamemode )

Ritorna se la mappa è compatibile con la gamemode o no.

  • bool stopGamemode ( )

Stoppa la gamemode e la mappa correnti.

  • bool stopGamemodeMap ( )

Stoppa la mappa corrente.

Eventi

Per tutti questi eventi, source è l'elemento root della risorsa.

  • onGamemodeStart ( resource gamemodeIniziata )

Si attiva prima che venga iniziata una gamemode.

  • onGamemodeStop ( resource gamemodeFermata )

Si attiva prima che venga fermata una gamemode

  • onGamemodeMapStart ( resource mappaIniziata )

Si attiva prima che venga iniziata una mappa.

  • onGamemodeMapStop ( resource mappaFermata )

Si attiva prima che venga fermata una mappa.

Impostazioni supportate dalle mappe

Le seguenti impostazioni tratte dal registro vengono applicate dal map manager quando una mappa inizia:

  • gamespeed [numero]
    : La velocità di gioco della mappa.
  • gravity [numero]
    : La gravità della mappa.
  • time [stringa tipo 'hh:mm']
    : L'ora della mappa.
  • weather [numero]
    : L'ID del meteo della mappa.
  • waveheight [numero]
    : L'altezza delle onde della mappa.
  • locked_time [booleano]
    : Se l'ora sarà bloccata o meno.
  • minplayers [numero]
    : Il numero minimo di giocatori per iniziare la mappa.
  • maxplayers [numero]
    : Il massimo numero di giocatori per iniziare la mappa.