Resource:IT/Map manager
From Multi Theft Auto: Wiki
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.
Contents |
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/
/mymap/
Inserisci questo codice all'interno di meta.xml:
<meta> <info type="map" gamemodes="myserver"/> <map src="mymap.map"/> </meta>
gamemodes=""
map
/mymap/
<map> <spawnpoint id="spawnpoint1" posX="1959.5487060547" posY="-1714.4613037109" posZ="18" rot="63.350006103516" model="0"/> </map>
spawnpoint
id
myserver
function loadMap(startedMap) mapRoot = getResourceRootElement(startedMap) end addEventHandler("onGamemodeMapStart", g_root, loadMap)
onGamemodeMapStart
joinHandler()
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 comandogamemode
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
changeGamemodeMap
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/
<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 taginfo
<info description="Una gamemode" type="gamemode" />
type="map"
gamemodes
<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 taginfo
- : Il nome pubblico della risorsa, che verrà visualizzato nella lista di gamemodes e nei messaggi del server al posto del nome del file.
name
Comandi
Questi comandi sono eseguibili sulla risorsa map manager:
- Cambia la mappa attuale, e opzionalmente anche la gamemode.
changemap nuovamappa [nuovagamemode]
- Cambia la gamemode attuale, e opzionalmente anche la mappa.
changemode nuovagamemode [nuovamappa]
- Come sopra.
gamemode nuovagamemode [nuovamappa]
- Stoppa la gamemode e la mappa corrente.
stopmode
- Stoppa la mappa corrente.
stopmap
- Mostra tutte le mappe del server, opzionalmente solo quelle collegate alla gamemode specificata.
maps [gamemode]
- Mostra tutte le gamemodes.
gamemodes
Impostazioni
- Cambia il colore dei messaggi di output del mapmanager con quello in codice esadecimale(#RRGGBB) (default: #E1AA5A).
mapmanager.color [colore in codice hex]
- true se i cambiamenti di gamemode/mappa sono abilitati, false se no (default: true).
mapmanager.messages [booleano]
- true se il mapmanager può mostrare gamemode e mappa su ASE, false se no (default: true).
mapmanager.ASE [booleano]
Funzioni esportate
Queste sono le funzioni del mapmanager utilizzabili tramite la funzione call():
Cambia la gamemode in nuovaGamemode, impostando opzionalmente una mappa iniziale(mappaDaCaricare); di default carica con la mappa.
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.
Ritorna se laGamemode è o no una gamemode.
Ritorna se la gamemode è compatibile con la mappa o no.
Determina se laMappa è una mappa o no.
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:
- : La velocità di gioco della mappa.
gamespeed [numero]
- : La gravità della mappa.
gravity [numero]
- : L'ora della mappa.
time [stringa tipo 'hh:mm']
- : L'ID del meteo della mappa.
weather [numero]
- : L'altezza delle onde della mappa.
waveheight [numero]
- : Se l'ora sarà bloccata o meno.
locked_time [booleano]
- : Il numero minimo di giocatori per iniziare la mappa.
minplayers [numero]
- : Il massimo numero di giocatori per iniziare la mappa.
maxplayers [numero]