IT/Albero degli elementi
MTA usa un così chiamato albero degli elementi per memorizzare tutti gli elementi che esistono sul server e sul client. Questo è direttamente correlato al set delle risorse in esecuzione, e ai loro file delle mappe nel formato XML, anche se può essere cambiata a run-time dagli scripts.
Se si ha familiarità con il concetto di alberi in campo informatico, questo dovrebbe essere facile da capire. Se no, pensa ad esso come un albero genealogico. Ogni elemento ha un elemento genitore.
Tutti gli elementi che vengono creati all'interno di script o di file .map sono elementi secondari della risorsa a cui appartengono. Così, più elementi (ad eccezione dei client) esistono solo nei limiti delle risorse e vengono anche distrutti non appena la loro risorsa viene terminata.
Contents
Elementi dell'albero
- root: Questo è proprio alla base dell'albero - tutti gli elementi sono figli (o discendenti) di questo elemento.
- resource: Questi sono figli diretti dell'elemento root - con uno per ogni risorsa in esecuzione. Questo elemento si chiama resource root". Il suo ID contiene il nome della risorsa.
- map: Ogni elemento risorsa contiene almeno un elemento mappa, che rappresenta sia un file ".map" nella risorsa, sia quello contenente gli elementi creati dagli script (questa è chiamato mappa "dynamic"). I loro ID contengono i nomi dei file delle mappe, o dynamic per la mappa dinamica.
- I file della mappa possono contenere una serie di altri elementi ed un numero illimitato di elementi personalizzati.
Esempio
Questo è un esempio di un albero serverside scaricato in formato XML da un server in esecuzione.
<root> <console/> <player dontRespawn="false"/> <player dontRespawn="false" lastSpawnarea=""/> <resource id="resourcebrowser"/> <resource id="ajax"/> <resource id="resourcemanager"/> <resource id="spawnmanager"/> <resource id="mapmanager"/> <resource id="runcode"/> <resource id="fr"> <map id="dynamic"> <vehicle/> </map> </resource> <resource id="elementbrowser"/> <resource id="assault"> <map id="dynamic"> <team/> <team/> <blip/> <marker/> <colshape/> <blip/> <blip/> </map> </resource> <resource id="as-farm"> <map id="dynamic"/> <map id="as-farm.map"> <spawngroup req="" type="attacker"> <spawnarea posY="-8.3976354598999" posX="20.182683944702" skins="9" ... /> </spawngroup> <spawngroup req="" type="attacker"> <spawnarea posY="32.166355133057" posX="-46.90763092041" skins="9" ... /> </spawngroup> <spawngroup req="" type="attacker"> <spawnarea posY="35.214984893799" posX="-33.486911773682" skins="9" ... /> </spawngroup> <spawngroup req="" type="attacker"> <spawnarea posY="35.214984893799" posX="-33.486911773682" skins="9" ... /> </spawngroup> <objective id="first" type="checkpoint" description="Infrangi nella fattoria" ... /> <pickup type="weapon" ... /> </map> </resource> </root>
Spiegazione
Questo albero è costituito da una serie di elementi della resource root, la console del server e due giocatori, che sono figli diretti dell'elemento root. Tutte queste risorse hanno una mappa dinamica come elemento figlio (che non è indicato per la maggior parte di essi). Questi contengono gli elementi che vengono creati dinamicamente da questa risorsa utilizzando script, ad esempio un veicolo. Se la risorsa è un file di mappa, è anche un elemento figlio, che contiene in sé tutti gli elementi nel file .map.
Diamo uno sguardo più da vicino alla risorsa assault: questa contiene solo una mappa dinamica, che ha 2 squadre, 3 segnalini, 1 marcatore e 1 colshape come elementi figlio. Questi sono gli elementi che vengono creati dallo script, per esempio il marcatore, il colshape e uno dei segnalini sono probabilmente utilizzati per l'obiettivo.
La risorsa as-farm, al contrario, deve essere una mappa per la gamemode assault. La mappa dinamica è vuoto (potrebbe però contenere elementi se ci fosse uno script in essa), mentre vi è una mappa chiamata 'as-farm.map', che contiene una serie di elementi. Questi sono per lo più elementi personalizzati (come spawngroup, spawnarea, objective) ma anche alcuni elementi che MTA crea automaticamente dopo il caricamento della mappa (come il pick-up). Nelle parentesi dopo il tipo di elemento, è possibile visualizzare gli elementi in esso contenuti. Questi sono identici con gli attributi del file .map contenuti all'interno di questi elementi, mentre è anche possibile impostare e ottenere i dati di un elemento per tutti gli altri elementi (ad esempio i giocatori) con setElementData e getElementData.
Applicazione pratica
Gli elementi possono avere quanti figli vogliono. In ogni modo questo non influisce direttamente sulla mappa, ma si esprimono al meglio quando sono combinati con il sistema di scripting.
impostazione dei dati per gli elementi
Se chiami la funzione di un set su un nodo dell'albero degli elementi, la funzione influenzerà ogni elemento al suo interno.
Così, il seguente codice imposterà la dimensione di ogni marcatore (l'unico tipo di elemento della funzione setMarkerSize che può funzionare) che si trova sotto l'elemento principale, a 2.5.
setMarkerSize ( getRootElement(), 2.5 )
Lo stesso può essere fatto con ogni elemento, non è limitato all'elemento root.
Map manager
L'esempio sopra mostra il modo in cui il Map Manager usa le differenti risorse. la risorsa 'assault' è la gamemode, che gestisce cosa succede sul server usando gli script e quindi creando elementi nell'albero dinamicamente. Quando la risorsa di una mappa è stata avviata, la gamemode riceve una risorsa puntatore che fa riferimento alla risorsa avviata - in questo caso as-farm - da cui è possibile recuperare e conservare l'elemento root della risorsa. Usando questo elemento in congiunzione con funzioni come getElementsByType, getElementData] e altre, puoi accedere qualunque delle informazioni che sono state caricate nell'albero dal file 'as-farm.map' attraverso gli script nella risorsa della gamemode.
Un'altra cosa che deve essere considerata in relazione con l'albero degli elementi è il fatto che quando si modifica la mappa, non è necessario rimuovere alcun elemento che si è creato all'interno della risorsa della mappa, mentre devi rimuovere gli elementi che vengono creati all'interno della risorsa della gamemode, se sono specifici della mappa (che sarà probabilmente il caso di quegli oggetti che crei basandoti sulle informazioni lette dai file della risorsa del .map).
Browser degli elementi
Puoi avviare la risorsa elementbrowser per avere una vista dal vivo dell'albero degli elementi sul tuo server. Avvia la risorsa e sfoglia nelle pagine web del tuo server e scegli l'opzione 'Element Browser nella sidebar.