Panoramica
I file dei dati dello shard descrivono il mondo eseguito dal server di gioco: mappe,
città iniziali, abilità, professioni, razze, contenitori, corpi, meteo, regioni,
messaggi e titoli di reputazione. Sono file TOML sotto data/ nella radice del server.
Il server li legge una volta all’avvio, nelle modalità game e standalone, tramite i
loader IDataLoader<T> di Moongate.Server.Ultima. Un file obbligatorio mancante o
non valido arresta il server all’avvio con un errore che indica il problema.
Il MOTD è facoltativo: un file mancante registra un avviso e non invia
alcun messaggio di benvenuto.
I file sono distribuiti accanto al binario mgserver, in data/; la copia nel
repository è moongate_root/data/. mgctl (o mgserver --initialize-root) copia
ogni file mancante in <root>/data senza mai sostituire quelli esistenti, così un
file modificato sopravvive a un aggiornamento. Dopo un aggiornamento, esegui di nuovo
mgctl init per aggiungere nuovi file e confronta i file modificati con quelli
distribuiti per recepire le modifiche upstream. Vedi Cosa crea.
Il codice C# legge le voci caricate tramite IDataLoaderService:
var cities = dataLoaderService.GetEntities<StartingCityContent>();GetEntities<T>() restituisce le voci di un file, o di una directory per regioni e
messaggi. Genera InvalidOperationException quando nessun loader è registrato per T.
Panoramica
Section titled “Panoramica”Scegli un file per aprire esempi, riferimento dei campi e regole di validazione all’avvio.
I loader vengono eseguiti nell’ordine della colonna “Ordine di caricamento”, il numero con cui ciascuno è registrato nel codice del server; un loader che controlla un altro file viene eseguito dopo di esso. I numeri hanno dei vuoti.
| Ordine di caricamento | File | Tipo di contenuto | Caricato dopo / dipende da | Usato al runtime |
|---|---|---|---|---|
| 0 | maps.toml |
MapContent |
primo; il suo weather è controllato dal loader delle regioni |
Sì, IMapService apre i file client di ogni mappa |
| 1 | starting_cities.toml |
StartingCityContent |
mappe | Sì, nell’elenco dei personaggi |
| 2 | skills.toml |
SkillContent |
città iniziali | Sì, SkillService e SkillUseService: guadagni, ritardi e script delle abilità |
| 3 | professions.toml |
ProfessionContent |
abilità (ogni abilità iniziale deve esistere) | Sì, creazione dei personaggi |
| 4 | races.toml |
RaceContent |
professioni | Sì, creazione dei personaggi e aspetto dei mobile |
| 5 | banned_names.toml |
BannedNamesContent |
razze | Sì, validazione del nome del personaggio |
| 6 | containers.toml |
ContainerContent |
nomi vietati | Sì, posizionamento degli oggetti nello zaino |
| 7 | bodies.toml |
BodyContent |
contenitori | Sì, per riconoscere il tipo di corpo di un mobile: combattimento, porte degli NPC e richieste d’uso |
| 8 | weather.toml |
WeatherContent |
corpi | Sì, IWeatherService estrae il meteo di ogni profilo e lo invia ai giocatori |
| 9 | regions/<map>.toml |
RegionContent |
meteo (ogni profilo deve esistere), mappe | Sì, IRegionService mantiene la regione di ogni giocatore per musica, meteo, stagione e luce; il flag delle guardie governa le guardie, i testi delle guardie e i venditori; le regole di abitazioni, disconnessione e viaggio non sono ancora lette |
| 10 | messages/<lang>.toml, messages/<lang>/*.toml |
MessageContent |
regioni | Sì, tramite ILocalizationService |
| 11 | names.toml |
NameList |
messaggi | Sì, tramite INameService |
| 12 | templates/items, templates/loots, templates/carves, templates/mobiles |
ItemTemplate, LootTemplate, CarveTemplate, MobileTemplate |
template oggetto per primi (12), carves (13), bottino (14), mobile (15) | Sì, tutto ciò che crea un oggetto o un mobile; vedi Template. Le decorazioni della stessa pagina si caricano da sole, tramite IDecorationsLoader |
| 16 | motd.toml |
MotdLine |
dopo template mobile e registrazione delle variabili dei plugin | Sì, a ogni ingresso del personaggio; file facoltativo |
| 17 | titles.toml |
FameKarmaTitle |
dopo MOTD | Mostrato nel titolo del paperdoll |
| 18 | npc_lists, spawns |
NpcListTemplate, SpawnTemplate |
dopo i template mobile | Sì, dagli spawn degli NPC |
| 20 | gumps |
GumpTemplate |
dopo gli spawn | Sì, dal servizio dei gump |
| 21 | moongates.toml |
MoongateFacet |
mappe | Sì, da .decorate e dallo script moongate |
| 22 | locations.toml |
NamedLocation |
facoltativo | Sì, da .go e dal suo gump |
| 23 | jail.toml |
JailFile |
facoltativo | Sì, da .jail e dal suo gump |
| 24 | templates/books/<name>.toml |
BookTemplate |
dopo i template oggetto | Pergamene personalizzate e libri nativi; gump delle pergamene, copertine/pagine dei libri e libri scrivibili |
| 25 | starting_items.toml |
StartingItemSet |
dopo template oggetto e template dei libri (ogni id referenziato deve esistere) | Sì, tramite IStartingItemsService |
| 26 | templates/shops/<name>.toml |
ShopDefinition |
dopo i template oggetto e mobile | Sì, tramite IShopService: cosa vende ogni venditore nella sua finestra del negozio |
| 27 | harvest.toml |
HarvestResource |
facoltativo; dopo i negozi | Sì, tramite IHarvestService: i pesci della pesca, per zona |
| 28 | schedule.toml |
ScheduleFile |
facoltativo | Sì, dal servizio del calendario e da .event |
| 29 | data/crafts |
CraftResourceList, CraftDefinition |
dopo i template oggetto; le liste di risorse (29) prima dei craft (30) | Sì, dal motore di crafting condiviso; vedi Falegnameria |
| 31 | taming.toml |
TamingCreature |
facoltativo; dopo i template mobile | Sì, tramite ITamingService: le creature dell’addomesticamento |
| 32 | pet_food.toml |
PetFood |
facoltativo; dopo i template oggetto | Sì, tramite IPetFoodService: cosa mangiano gli animali dell’addomesticamento |
| 33 | spells.toml |
SpellDefinition |
facoltativo; dopo i template oggetto | Sì, tramite ISpellCatalogService: i 64 incantesimi di Magery |
| 34 | portraits.toml |
PortraitContent |
facoltativo | Sì, tramite IPortraitService: l’immagine che un gump disegna per una creatura, in base al suo corpo |
| 35 | champions.toml |
ChampionSpawn |
dopo i template dei mobili; ogni onda e campione un template spedito | Sì, tramite IChampionSpawnService: gli spawn dei campioni, i cui morti l’Esorcismo dei negromanti porta via |
| 36 | champions.toml (i suoi santuari) |
ShrineLocation |
con gli spawn | I santuari dell’Esorcismo |
Un file che nessun sistema di gioco legge ancora viene comunque caricato e validato: un errore al suo interno arresta comunque il server. Le pagine dei file indicano quali campi vengono letti.
Formati dei valori
Section titled “Formati dei valori”I nomi dei campi sono snake_case. Alcuni campi usano tipi di valore con una propria forma TOML; Tipi di valore TOML elenca ogni forma accettata ed errore:
| Tipo | Forma | Esempio |
|---|---|---|
Point2D |
"(x, y)" tra virgolette |
size = "(7168, 4096)" |
Point3D |
"(x, y, z)" tra virgolette |
location = "(1602, 1591, 20)" |
Serial |
intero senza virgolette, decimale o esadecimale, oppure lo stesso tra virgolette | cliloc = 1150168 |
Rectangle2D |
"(x1, y1)..(x2, y2)" tra virgolette |
bounds = "(44, 65)..(186, 159)" |
HueSpec |
intero senza virgolette, oppure tonalità o intervallo "min-max" tra virgolette |
0x00BF, "0x03EA-0x0422" |
DiceSpec |
intero senza virgolette, oppure espressione di dadi tra virgolette | karma = -2500, strength = "1d25+95" |
| Qualsiasi enum | nome tra virgolette, maiuscole/minuscole e underscore ignorati; flag uniti da | |
map = "felucca", music = "mountn_a" |
Rectangle2D scrive due angoli: il primo incluso e il secondo escluso.
Il formato legacy "(x, y)+(width, height)" è ancora accettato in lettura.
Un valore che non corrisponde alla propria forma non viene interpretato e arresta il server.
Controllare le modifiche
Section titled “Controllare le modifiche”Prima di riavviare un server, carica i file del repository con i loader reali:
scripts/test.sh fast --filter 'FullyQualifiedName~RepositoryDataFiles'Il test carica ogni file di moongate_root/data, nell’ordine del server, e ogni lingua
distribuita. Controlla anche alcuni valori noti, come il numero di abilità e regioni,
quindi aggiornalo quando aggiungi o rimuovi voci.
Per i file della radice di un server in esecuzione, riavvia il server: i file vengono letti solo all’avvio. Un file errato interrompe l’avvio, e il log mostra l’errore.
Vedi anche
Section titled “Vedi anche”- Caricare template TOML: contratto
IDataLoader<T>, registrazione ed esecuzione dei loader e convertitori TOML. - Localizzazione: file dei messaggi e
ILocalizationService. - Preparare una radice del server con mgctl: come i file dei dati arrivano nella radice.
Creato con ❤️ da Tom
