Resource:IT/Map manager: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (Redirected page to IT/Resource:Mapmanager)
Tag: New redirect
 
Line 1: Line 1:
{{IT/MainP}}
#REDIRECT [[IT/Resource:Mapmanager]]
[[Category:100%]]
{{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.
 
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 [[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.
 
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.
 
Inserisci questo codice all'interno di ''meta.xml'':
<syntaxhighlight lang="xml">
<meta>
  <info type="map" gamemodes="myserver"/>
  <map src="mymap.map"/>
</meta>
</syntaxhighlight>
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.
 
Ora crea un altro file di testo sotto <syntaxhighlight lang="lua">/mymap/</syntaxhighlight> e chiamalo '''mymap.map''', inserendovi questo codice:
<syntaxhighlight lang="xml">
<map>
  <spawnpoint id="spawnpoint1" posX="1959.5487060547" posY="-1714.4613037109" posZ="18" rot="63.350006103516" model="0"/>
</map>
</syntaxhighlight>
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]].
 
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">
function loadMap(startedMap)
mapRoot = getResourceRootElement(startedMap)
end
 
addEventHandler("onGamemodeMapStart", g_root, loadMap)
</syntaxhighlight>
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").
 
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">
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
</syntaxhighlight>
Ora puoi far partire la gamemode sul tuo server avviando in console il seguente comando:
<syntaxhighlight lang="lua">gamemode myserver mymap</syntaxhighlight>
 
==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 [[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:
<syntaxhighlight lang="lua">
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
</syntaxhighlight>
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'''.
 
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.
 
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">
<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>
</syntaxhighlight>
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>
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 <syntaxhighlight lang="lua">info</syntaxhighlight>:
<syntaxhighlight lang="xml"><info description="Una gamemode" type="gamemode" /></syntaxhighlight>
 
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''.
<syntaxhighlight lang="xml"><info description="Una mappa" type="map" gamemodes="ctv,koth" /></syntaxhighlight>
 
Il server può caricare al massimo una gamemode e una mappa alla volta.
 
==Attributi opzionali delle resources==
Questi attributi vanno nel tag <syntaxhighlight lang="lua">info</syntaxhighlight> della risorsa.
 
*<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.
 
==Comandi==
Questi comandi sono eseguibili sulla risorsa map manager:
 
*<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.
 
==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''').
 
*<syntaxhighlight lang="lua">mapmanager.messages [booleano]</syntaxhighlight> '''true''' se i cambiamenti di gamemode/mappa sono abilitati, '''false''' se no (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''').
 
==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.
 
==Eventi==
Per tutti questi eventi, '''source''' è l'elemento root della risorsa.
*<syntaxhighlight lang="lua">onGamemodeStart ( resource gamemodeIniziata )</syntaxhighlight>
Si attiva prima che venga iniziata una gamemode.
*<syntaxhighlight lang="lua">onGamemodeStop ( resource gamemodeFermata )</syntaxhighlight>
Si attiva prima che venga fermata una gamemode
*<syntaxhighlight lang="lua">onGamemodeMapStart ( resource mappaIniziata )</syntaxhighlight>
Si attiva prima che venga iniziata una mappa.
*<syntaxhighlight lang="lua">onGamemodeMapStop ( resource mappaFermata )</syntaxhighlight>
Si attiva prima che venga fermata una mappa.
 
==Impostazioni supportate dalle mappe==
Le seguenti impostazioni tratte dal [[IT/Settings system|registro]] vengono applicate dal map manager quando una mappa inizia:
*<syntaxhighlight lang="lua">gamespeed [numero]</syntaxhighlight>: La velocità di gioco della mappa.
*<syntaxhighlight lang="lua">gravity [numero]</syntaxhighlight>: La gravità della mappa.
*<syntaxhighlight lang="lua">time [stringa tipo 'hh:mm']</syntaxhighlight>: L'ora della mappa.
*<syntaxhighlight lang="lua">weather [numero]</syntaxhighlight>: L'ID del meteo della mappa.
*<syntaxhighlight lang="lua">waveheight [numero]</syntaxhighlight>: L'altezza delle onde della mappa.
*<syntaxhighlight lang="lua">locked_time [booleano]</syntaxhighlight>: Se l'ora sarà bloccata o meno.
*<syntaxhighlight lang="lua">minplayers [numero]</syntaxhighlight>: Il numero minimo di giocatori per iniziare la mappa.
*<syntaxhighlight lang="lua">maxplayers [numero]</syntaxhighlight>: Il massimo numero di giocatori per iniziare la mappa.
 
[[en:Resource:mapmanager]]

Latest revision as of 11:40, 11 June 2023