Creare contenuti TOML
Scrivi i contenuti dello shard in file TOML sotto templates/ nella root del server.
Il server legge questi file all’avvio; aggiungere contenuti a una cartella esistente
richiede un riavvio. mgctl copia i template distribuiti in quella root.
Puoi aggiungere i tuoi file accanto a quelli distribuiti con id univoci. Sono sufficienti
le basi di TOML; Tipi di valore TOML spiega dadi, intervalli, tinte ed enum.
Creare il primo oggetto
Section titled “Creare il primo oggetto”Usa uno shard game o standalone e un personaggio con accesso GameMaster o Administrator.
Crea templates/items/tutorial_blue_stone.toml relativamente alla root del server:
[[item]]id = "tutorial_blue_stone"name = "blue greeting stone"item_id = 0x0ED4hue = 0x0055movable = trueweight = 1.0- Riavvia il server. Deve completare l’avvio senza errori di template.
- Nel client di gioco, pronuncia
.add tutorial_blue_stonee seleziona una casella di terreno vicina. Il comando deve segnalareAdded blue greeting stonecon il seriale e la posizione. - Fai un clic sulla pietra per vedere il nome, poi trascinala nello zaino. Non ha ancora un’azione personalizzata al doppio clic; Script degli oggetti aggiunge un’interazione con un tutorial completo separato.
add spiega permessi e selezione. Se segnala Unknown item template,
verifica il percorso del file, [[item]], l’esatto id e gli errori di avvio.
Modificare un template o eseguire script reload non sostituisce il riavvio.
Per un NPC usa un file sotto templates/mobiles/ e il comando spawn.
Il riferimento qui sotto elenca le chiavi TOML che puoi aggiungere.
Cosa esiste oggi
Section titled “Cosa esiste oggi”Oggetti, mobile, tabelle del bottino e di smembramento, liste di NPC, regioni di spawn e decorazioni
vengono caricati all’avvio game e standalone. File di dati dello shard descrive i
file separati sotto data/. Migrare da UOX3 converte contenuti
esistenti. Vedi Stato dell’implementazione per i limiti rimanenti.
Template di oggetto a runtime
Section titled “Template di oggetto a runtime”Il server legge ogni *.toml sotto templates/items/, comprese le
sottocartelle, quando il server di gioco si avvia e risolve base_id una volta sola:
- un campo che può rimanere non impostato (
name,layer,weight,amount,stackable, …) e non è impostato prende il valore del genitore, risalendo la catena; item_id = 0prende la grafica del genitore;hueviene ereditato quando non impostato; senza un valore in tutta la catena, usa 0;rarityha sempre un valore, quindi viene mantenuto quello del template;tags, quando impostato, sostituisce quello del genitore; non vengono uniti.
Il server si arresta quando un id è vuoto o usato due volte (il messaggio indica entrambi i file),
un base_id non indica alcun template, base_id crea un ciclo (a → b → a), oppure un template
risolto ha un campo non valido.
Per i servizi C# e il ciclo di vita delle factory, vedi Riferimento dei caricatori.
Template di mobile a runtime
Section titled “Template di mobile a runtime”Il server legge ogni *.toml sotto templates/mobiles/, comprese le
sottocartelle, dopo i template di oggetto e risolve base_id una volta sola, come fa GET di UOX3
(il figlio eredita tutto e sostituisce ciò che imposta):
- un campo non impostato prende il valore del genitore, risalendo la catena;
skills,resistancesesoundsvengono ereditati chiave per chiave: le voci del figlio sostituiscono quelle corrispondenti, le altre del genitore rimangono;tagsvengono uniti: le chiavi del figlio aggiungono e sostituiscono quelle del genitore;equipmenteloot, quando impostati, sostituiscono quelli del genitore;carve, quando non impostato, è quello del genitore, ecarve = ""non ne ha nessuno;- tutto ciò che viene ereditato viene copiato, mai condiviso tra template.
Il server si arresta quando un id è vuoto o usato due volte, un base_id non indica alcun template o
crea un ciclo, un template ha un campo non valido, un name_list non indica alcuna lista di
data/names.toml ({gender} richiede le liste male e female), un oggetto di equipaggiamento non è
un template di oggetto, un id loot non è una tabella del bottino oppure un id carve non è una tabella di smembramento.
Per i servizi C# e il ciclo di vita delle factory, vedi Riferimento dei caricatori.
Tabelle del bottino a runtime
Section titled “Tabelle del bottino a runtime”Il server legge ogni *.toml sotto templates/loots/, comprese le sottocartelle,
prima dei template di mobile. Il server si arresta quando un id è vuoto o usato due volte, una voce
imposta sia item_id sia loot_template_id, un item_id non è un template di oggetto, un
loot_template_id non indica alcuna tabella, un weight è inferiore a 1, un amount può produrre valori fuori dall’intervallo da 1
a 65535, le tabelle annidate creano cicli oppure il loot di un template di oggetto indica una tabella inesistente. Una tabella senza voci viene conservata, registrata come avviso e non produce
nulla: due tabelle UOX3 distribuite (randomwands, random_useless_junk) sono vuote nei
dati stessi di UOX3.
Per i servizi C# e il ciclo di vita delle factory, vedi Riferimento dei caricatori.
Tabelle di smembramento a runtime
Section titled “Tabelle di smembramento a runtime”Il server legge ogni *.toml sotto templates/carves/, comprese le sottocartelle, dopo i template di
oggetto e prima dei template di mobile, che indicano le tabelle con carve. Il server si arresta quando un id è vuoto
o usato due volte, l’item di una voce non è un template di oggetto, un amount può produrre valori fuori da 1 a 65535, una chance è
fuori da 1 a 100 o un message è sotto 0. Una tabella senza voci viene conservata e non dà nulla. Cosa
significano le tabelle, e cosa accade a un cadavere, è in Smembrare i cadaveri.
Per i servizi C# e il ciclo di vita delle factory, vedi Riferimento dei caricatori.
Le strutture dei template
Section titled “Le strutture dei template”Un oggetto è una voce [[item]] sotto templates/items/. La tabella usa le chiavi TOML:
| Campo | Scopo |
|---|---|
id |
Il nome stabile con cui una tabella del bottino, uno spawn o add indica questo template |
base_id |
L’id di un altro template da cui ereditare i campi non impostati; il caricatore risolve la catena |
item_id |
La grafica base del client; le proprietà fisiche a runtime provengono da i tiledata del client salvo sostituzioni |
name, comment |
Una sostituzione del nome visualizzato e una nota dell’autore che nessuno legge a runtime |
rarity |
common, uncommon, rare, epic, legendary, random_of o random_of:rare,epic; ogni nuovo oggetto ne sceglie uno con la stessa probabilità, quindi un nome scritto due volte pesa il doppio (random_of:common,common,rare è comune due volte su tre). Le gemme lo usano. I venditori pagano di più un oggetto più raro, vedi Venditori |
script_id |
La tabella Lua globale, definita da scripts/items/<script_id>.lua, le cui funzioni gestiscono ciò che accade all’oggetto (on_use, on_move_over, on_npc_move_over, on_speech, on_equip, on_unequip, on_pickup, on_drop, on_create, on_timer, on_darkness) e rispondono alle domande poste prima di un movimento (can_pick_up, can_drop, can_equip, can_insert); un identificatore Lua minuscolo, vuoto per nessuno. Vedi Script degli oggetti |
movable |
Se non impostato usa i tiledata: spostabile salvo che il peso tiledata sia 255, il “non può essere sollevato” del client. I giocatori non possono raccogliere ciò che non è spostabile; i game master e gli amministratori possono |
weight |
Stone con due decimali (weight = 0.02 per una moneta); se non impostato usa il peso in stone intere dei tiledata |
amount |
Un intero o un intervallo inclusivo tra virgolette: la dimensione della pila di un nuovo oggetto, fissa oppure "10-20"; se non impostato è 1 |
stackable |
Se non impostato usa il flag tiledata Generic |
layer |
Un nome LayerType come one_handed; se non impostato usa il layer dei tiledata |
two_handed_weapon |
two_handed_weapon = true su un’arma impugnata con entrambe le mani (archi, armi in asta, bastoni), come TwoHanded di POL: indossata su two_handed, non lascia alcuna mano libera. Qualsiasi altra cosa su two_handed (scudi, torce) va nell’altra mano, con un’arma a una mano. I tiledata non possono distinguerli: contrassegnano gli scudi come armi e gli archi come a una mano |
weapon_type, damage_min, damage_max, speed |
I campi delle armi del combattimento: weapon_type è sword, axe, pole_arm, mace, staff, fencing, bow, crossbow o thrown, come UOX3 classifica un’arma per grafica, e determina abilità, suoni e colpo; damage_min e damage_max (da 0 a 65535) sono il danno di un colpo prima dei bonus; speed (da 1 a 500) determina il ritardo tra i colpi 15000 / ((stamina + 100) * speed). Un oggetto indossato con damage_max superiore a 0 è un’arma. Ereditati tramite base_id |
armor_rating, strength_required, max_hits |
armor_rating (da 0 a 500) è l’armatura di un pezzo di armatura (quella di uno scudo non conta ancora); max_hits (durabilità) dà a un pezzo indossato i punti da cui parte, vedi Durabilità; strength_required viene letto e conservato, ma non ancora usato. Ereditati tramite base_id |
dyeable |
dyeable = true su ciò a cui una vasca di tintura può assegnare la propria tinta, come dyeable di UOX3: gli abiti convertiti lo ricevono da base_clothing e un template lo rimuove con dyeable = false (una veste da morto). Se non impostato non è tingibile. Vedi dyes.lua e dye_tub.lua |
buy_price, sell_price |
Letti e validati (0 o più, ereditati tramite base_id), ma nessun servizio li usa ancora: i prezzi di un venditore vengono dal suo template di negozio, vedi venditori |
decays, decay_minutes |
Se l’oggetto decade a terra e dopo quanti minuti; se non impostato decade quando spostabile, dopo 60 minuti, come in ModernUO. Un oggetto che non può essere raccolto decade solo quando il suo template ha sia decays = true sia decay_minutes, come le casse del tesoro. Un oggetto decade quando si trova a terra, è spostabile (oppure ha entrambi quei valori) e il suo template è visibile ai giocatori. Il conto alla rovescia (DecayAt, salvato con l’oggetto, quindi il tempo di fermo conta) inizia quando atterra a terra, di nuovo quando un oggetto sollevato viene respinto lì e si ferma quando viene raccolto, spostato in un contenitore o indossato; il resto di una pila divisa mantiene il tempo della pila. Un controllo ogni 5 secondi elimina gli oggetti scaduti, un contenitore con il suo contenuto, indipendentemente dalla presenza di un giocatore vicino |
use_range |
Da quante caselle di distanza un giocatore può fare doppio clic sull’oggetto a terra per eseguirne l’on_use, da 1 a 24; non impostato vale 2, come la portata di un oggetto in ModernUO. Il bersaglio per tiro con l’arco ha 6, perché si tira da cinque o sei caselle. Quello di un template base è ereditato |
watch_range |
Quante caselle attorno a sé l’oggetto controlla per i mobile, da 0 a 8: un giocatore o un NPC che entra in questa portata dall’oggetto fa scattare on_mobile_near del suo script, una volta per ogni ingresso. Non impostato e 0 non controllano nulla e non costano nulla; il server tiene un indice degli oggetti che controllano per settore e lo interroga solo quando un mobile si muove. Solo gli oggetti a terra controllano. Quello di un template base viene ereditato. La portata viene letta dal template quando l’oggetto viene posato a terra, il che comprende il suo caricamento all’avvio del server: i template vengono letti all’avvio, quindi una modifica si vede dopo un riavvio, e un oggetto già a terra conserva la portata che aveva finché non viene raccolto e posato di nuovo o il server si riavvia |
loot, gold |
Ciò che un contenitore contiene quando una regione di spawn di oggetti lo crea: loot = ["reagents", "reagents"] tira ogni tabella del bottino una volta (elencane una due volte per tirarla due volte) e gold = "1d100+29" inserisce quella quantità di oro, in pile di al massimo 65.535. Se non impostato prende quello del template base, altrimenti nulla. Una regione di spawn e il comando .add riempiono il contenitore; item.create e item.give di Lua lo creano vuoto |
loot_type |
regular, newbied, blessed o cursed: cosa accade quando il proprietario muore; se non impostato è regular |
tags |
Valori liberi per gli script in una tabella [item.tags]; i tag espliciti di un figlio sostituiscono l’intera mappa base |
visibility |
Il tipo minimo di account che vede l’oggetto: regular, game_master o administrator, come realm_directory.minimum_account_type. Non impostato per default, quindi un template lo eredita tramite base_id; un oggetto che non ne ha in tutta la catena è visibile a tutti. |
hue |
HueSpec, 0 indica la colorazione nativa della grafica; un intervallo "min-max" tra virgolette ne sceglie una per spawn |
max_items, max_weight |
Facoltativi; impostati solo su un template di contenitore. max_weight è il peso in stone che un giocatore può inserire nel contenitore, contando ciò che è nei contenitori al suo interno: 400 se non impostato, nessun limite con 0. Lo staff non è limitato, né una cassa bancaria; un oggetto già all’interno si sposta indipendentemente dal peso del contenitore. max_items è il numero di oggetti che un giocatore può inserire nel contenitore, contati con ciò che è dentro le sue borse e rispetto a ogni contenitore che lo racchiude; unirsi a una pila non ne aggiunge, lo staff è esente e non impostato significa nessun limite. Una cassa bancaria usa invece ultima.bank.max_items. |
I campi presenti anche nel tiledata.mul del client (peso, impilabilità, layer,
spostabilità) sono sostituzioni: non impostato significa tiledata, come in POL e ModernUO. La validazione del template rifiuta peso o prezzo
negativi, un peso con più di due decimali, una quantità inferiore a 1, oro che può produrre valori sotto 0, un tempo di decadimento
inferiore a un minuto, un use_range fuori da 1 al massimo, un watch_range fuori da 0 a 8, un damage_min o damage_max fuori dal proprio intervallo (o damage_min sopra damage_max), uno speed, armor_rating, strength_required o max_hits fuori dal proprio intervallo, una chiave tag vuota e uno script_id malformato.
Gli spawner, per esempio, sono solo per lo staff e i loro figli lo ereditano:
[[item]]id = "base_spawner"base_id = "base_item"item_id = 7956visibility = "game_master"
[[item]]id = "orcspawn"base_id = "base_spawner"item_id = 7956name = "Orc Spawner"Un mobile, creatura o NPC umano, è una voce [[mobile]]
sotto templates/mobiles/. Ogni campo tranne id può essere non impostato: viene ereditato tramite
base_id e, se assente in tutta la catena, si applica il valore predefinito sotto. I numeri che variano per
mobile sono dadi (DiceSpec): strength = "1d25+95" produce da 96
a 120; una costante è un intero senza virgolette.
| Campo | Scopo |
|---|---|
id, base_id, comment |
Come per gli oggetti |
name |
Un nome fisso come an orc; se non impostato ne estrae uno da name_list |
name_list |
Un id di lista in data/names.toml; {gender} diventa male o female, il genere assegnato al mobile |
title |
Mostrato dopo il nome, come the guard |
body |
Il corpo disegnato dal client; se non impostato usa il corpo della race per il genere |
gender |
male, female o random (50/50 per ogni mobile); se non impostato è male |
race |
human, elf o gargoyle: pelle, capelli e barba provengono da races.toml salvo impostazione qui; non impostato per una creatura |
skin_hue, hair_hue, beard_hue |
HueSpec; se non impostati usano le tinte della razza |
hair, beard |
Id di oggetto, uno scelto; se non impostati usano gli stili della razza per il genere e le femmine non hanno barba |
strength, dexterity, intelligence |
Dadi; se non impostati sono 10 |
hits, mana, stamina |
Dadi; se non impostati sono forza, intelligenza e destrezza |
damage, armor |
Dadi per un colpo disarmato e l’armatura naturale; se non impostati sono 1d4 e 0 |
resistances |
[mobile.resistances] con physical, fire, cold, poison, energy, dadi in percentuale; se non impostate sono 0 |
skills |
[mobile.skills], nomi delle abilità come resisting_spells o tactics, dadi in punti interi da 0 a 120 |
notoriety |
innocent, ally, attackable, criminal, enemy, murderer o invulnerable, il colore del nome; se non impostata è innocent per un umano e attackable per qualsiasi altro corpo |
karma, fame |
Dadi; il karma può essere negativo |
equipment |
Voci [[mobile.equipment]]: items (id di template di oggetto, uno scelto), hue e gender per equipaggiare un solo genere |
loot, gold |
Id di template del bottino e dadi dell’oro tirati nello zaino allo spawn; alla morte, il cadavere riceve il bottino; vedi Morte e bottino |
carve |
L’id di una tabella di smembramento di templates/carves/: ciò che un coltello toglie dal cadavere di questo mobile; non impostato prende quella del template base, altrimenti nulla; una stringa vuota toglie la tabella del template base. Il cadavere di un animale domestico o di una creatura evocata non ne ha nessuna |
sounds |
[mobile.sounds] con start_attack, idle, attack, hurt, death; uno script di mobile li riproduce per tipo con npc.play_sound(serial, "idle") |
blood_hue |
Il colore del sangue che la creatura lascia quando è colpita: 0 per il rosso, -1 per una che non sanguina, come il blood_hue di ServUO e il BLOODCOLOR di Source-X; quello di un template base è ereditato. Non impostato: rosso. I non morti e i golem hanno -1. Vedi Combattimento |
flee_at |
La percentuale dei suoi punti vita (da 0 a 100) sotto cui una creatura che combatte scappa dallo scontro, -1 per una che non scappa mai, come FLEEAT di UOX3; quella di un template base viene ereditata. Non impostato: quella dello script, 20 per un mostro e 10 per un animale. Vedi Script delle creature |
spell_circles |
Il circolo più alto di Magery (da 1 a 8) da cui la creatura lancia, come SPATTACK di UOX3; non impostato o 0: non lancia nulla. Una creatura che lo ha, con un po’ di Magery, un po’ di mana e uno script che usa common/creature.lua (monster, animal, scared_animal) lancia contro ciò che combatte fino a 12 caselle di distanza, con il suo mana e senza reagenti; una creatura senza script, uno shopkeeper o un mana di 0 non lancia nulla; quello di un template base viene ereditato. Vedi Script delle creature |
low_health_at |
La percentuale dei suoi punti vita (da 0 a 100) sotto cui lo script dell’NPC viene chiamato con on_health_low, 0 per uno che non lo è mai; quella di un template base viene ereditata. Non impostato: 25. Vedi Script dei mobile |
control_slots |
Quanti seguaci la creatura conta una volta che un giocatore la possiede, da 1 a 10, come CONTROLSLOTS di UOX3. Solo le creature che gli incantesimi di Magery evocano (templates/mobiles/magicsummon.toml) lo impostano; una creatura addomesticabile prende i suoi slot da data/taming.toml. Quello di un template base viene ereditato. Non impostato: 1. Vedi Magery |
npc_guild |
La gilda per cui questo maestro di gilda accetta membri: mages, warriors, thieves, rangers, healers, miners, merchants, tinkers, tailors, fishermen, bards o blacksmiths. Non impostato: il PNG non è un maestro di gilda. Vedi Maestri di gilda |
script_id |
La tabella Lua globale, definita da scripts/mobiles/<script_id>.lua, i cui on_think, on_speech, on_spawn, on_mobile_in_range, on_death e on_drag_drop gestiscono l’NPC; un identificatore Lua minuscolo. Vedi Script dei mobile |
visibility |
Come per gli oggetti |
opens_doors |
Se apre le porte chiuse sul suo cammino quando va in un luogo. Non impostato: un corpo umano o di mostro lo fa, un animale o una creatura marina no |
movement |
land, water (un delfino: viene generato e nuota solo in acqua) o both (un tricheco: cammina e nuota, e viene generato a terra altrimenti in acqua); se non impostato è land |
tags |
Valori liberi per gli script; le chiavi del figlio aggiungono e sostituiscono quelle del genitore |
resistances, sounds, skills e tags vengono ereditati chiave per chiave, quindi una base come
base_orc imposta i cinque suoni una volta sola e ogni orco li conserva; ogni altro campo impostato da un
figlio sostituisce quello della base. La validazione del template rifiuta dadi che possono produrre valori sotto 0 (tranne il karma),
un’abilità sconosciuta, un’abilità sopra 120, una resistenza sopra 100, un suono negativo, una
voce di equipaggiamento senza oggetto o con id di oggetto vuoto, una chiave tag vuota, un blood_hue fuori da -1 a 65535, un flee_at fuori da -1 a 100, un low_health_at fuori da 0 a 100, uno spell_circles fuori da 0 a 8, un control_slots fuori da 1 a 10 e uno script_id malformato.
[[mobile]]id = "base_orc"body = 0x11name = "an orc"notoriety = "murderer"
[mobile.sounds]start_attack = 0x1B0idle = 0x1B1attack = 0x1B2hurt = 0x1B3death = 0x1B4
[[mobile]]id = "orc"base_id = "base_orc"strength = "1d25+95"karma = -2500loot = ["randomgems"]
[mobile.skills]tactics = "1d26+54"
[[mobile]]id = "guard"gender = "random"race = "human"name_list = "{gender}"title = "the guard"notoriety = "invulnerable"script_id = "wander"
[[mobile.equipment]]items = ["skirt", "short_pants"]gender = "female"Il templates/mobiles/ distribuito contiene gli NPC di UOX3, convertiti da
moongate-convert uox. Vengono caricati all’avvio game e
standalone .
Una tabella del bottino è una voce [[loot]] sotto templates/loots/; i suoi risultati sono voci [[loot.entries]]:
| Campo | Scopo |
|---|---|
id |
Il nome stabile con cui un loot_template_id o il bottino alla morte di un NPC indica questa tabella |
comment |
Una nota dell’autore che nessuno legge a runtime |
entries |
I risultati ponderati della tabella |
weight |
La quota di questa voce nella tabella, relativa a ogni altra voce; 1 per impostazione predefinita |
item_id |
L’id da produrre; non impostato quando viene invece impostato loot_template_id |
loot_template_id |
L’id di un’altra tabella da cui scegliere invece di un oggetto diretto |
comment |
Cos’è item_id o loot_template_id, per una persona che legge il file |
amount |
Un intero o un intervallo inclusivo tra virgolette, quanti item_id creare |
Per produrre questi file da uno shard UOX3 esistente, vedi Migrare da UOX3.
Liste di NPC e spawn
Section titled “Liste di NPC e spawn”templates/npc_lists/ contiene liste di template di mobile da cui uno spawn sceglie, convertite dai blocchi
[NPCLIST name] di UOX3. Una voce indica un template di mobile o un’altra lista e viene scelta in
proporzione al suo weight (1 per impostazione predefinita); una voce che indica una lista sceglie poi da quella lista:
[[npc_list]]id = "jungle"entries = [{ mobile_id = "gorilla", weight = 20 }, { npc_list_id = "all_trolls", weight = 7 }]templates/spawns/<map>/ contiene le regioni di spawn, convertite dai blocchi [REGIONSPAWN n] di UOX3,
più gli spawner di ModernUO (modernuo_*.toml e trammel/town_new_haven.toml); la cartella è la
mappa e una chiave map in una regione viene ignorata. Uno spawn sceglie da un unico insieme, come UOX3: i suoi mobile_ids (peso 1 ciascuno) e
le voci dei suoi npc_list_ids con i relativi pesi:
[[spawn]]id = "felucca_0" # uniquename = "The Hammer And Anvil"mobile_ids = ["weaponsmith"] # mobile templates, picked at random with the lists' entriesnpc_list_ids = [] # npc lists# item_ids = [] # item templates spawned on the ground instead of NPCs; see Spawnsmax = 1 # NPCs alive at oncemin_minutes = 480 # a new one every min_minutes to max_minutesmax_minutes = 600call = 1 # NPCs that come at a timeareas = [{ x1 = 1422, y1 = 1547, x2 = 1426, y2 = 1550 }] # both corners includedexclude = [] # parts of the areas where nothing spawnsonly_outside = false # true: never under a roof# pref_z = 18 # how high above the ground a spot may be# z = 36 # the highest a spot may be, instead of ground + pref_zEntrambi vengono caricati all’avvio, dopo i template di mobile, e un errore al loro interno ferma il server. Il comportamento dello spawn delle regioni a runtime, compresi i mobile acquatici, è in Spawn degli NPC.
Decorazioni
Section titled “Decorazioni”templates/decorations/ contiene le decorazioni del mondo assenti dai file di mappa del client: porte, insegne,
luci, mobili, teletrasporti e simili, circa 32.800 posizionamenti nei 108 file caricati (115 file complessivi). È stato
convertito una volta da Data/Decoration di ModernUO, più New Haven di ServUO (trammel/newhaven.toml,
havenisland.toml, havenmine.toml, assenti in ModernUO), le insegne dei negozi e del mondo da
signs.cfg di ModernUO (signs.toml, scritto da
moongate-convert modernuo-signs) e i teletrasporti del mondo e dei dungeon
dal suo teleporters.json (teleporters.toml, scritto da
moongate-convert modernuo-teleporters), un file TOML per file sorgente, in una cartella
per mappa: britannia/ (Trammel e Felucca), trammel/, felucca/, ilshenar/, malas/,
tokuno/, termur/ e gli insiemi speciali _ruined_magincia_tram/, _ruined_magincia_fel/,
_old_magincia/ e _bounty_boards/. Una cartella o un file il cui nome inizia con _ non viene caricato: rinominalo
senza _ per collocare la sua decorazione. _old_magincia/ è l’arredamento di Magincia com’era
prima della distruzione: la mappa di un client attuale contiene New Magincia, ricostruita senza quegli
edifici, quindi l’insieme rimane escluso; con un vecchio client, sposta il suo file in britannia/.
La vecchia Haven di Trammel è accantonata allo stesso modo: trammel/_haven.toml,
trammel/_haven_additions.toml e trammel/_signs.toml, 631 posizionamenti. Sulla mappa di un client
attuale quella città è una rovina, con un terzo dei suoi edifici scomparso o danneggiato, quindi porte, casse e
librerie starebbero senza muri attorno; Felucca conserva la città nello stesso luogo. Con un
vecchio client, rinomina i tre file senza _. ModernUO nomina alcuni suoi file con un
trattino basso iniziale (_covetous.cfg): qui sono covetous.toml, oppure despise_additions.toml dove esiste anche un
semplice despise.toml, così il trattino basso significa sempre solo “non caricato”. Un mondo decorato
in precedenza conserva gli oggetti che ha già: .decorate riconosce ciò che è collocato dal luogo in cui si trova, non dal
file, quindi i file rinominati non collocano nulla due volte e gli oggetti della vecchia Haven rimangono finché non vengono
rimossi oppure il mondo viene decorato nuovamente.
[[decoration]]comment = "metal door"type = "MetalDoor" # the kind, kept as ModernUO names ititem_id = 0x0675props = { facing = "west_cw" } # the kind's settings; facing is a DoorFacingTypelocations = [[1411, 1621, 30], [1411, 1622, 30]]Un blocco senza item_id è un addon costruito da più grafiche. extras, presente in alcuni
file distribuiti, non viene letto: le impostazioni di un blocco sono le sue props, le stesse per ogni posizione.
.decorate le colloca con i template di
templates/items/decorations.toml: decoration, fisso e mai soggetto a decadimento, per la maggior parte dei tipi;
decoration_door, lo stesso con script_id = "door", per i tipi il cui nome contiene Door
o Gate; decoration_light, con script_id = "light", per i tipi di luce di ModernUO
(candele, candelabri, lanterne, lampioni, applique, torce, bracieri); e
decoration_teleporter, con script_id = "teleporter" e visibility = "game_master", per
il tipo Teleporter. Ogni oggetto prende la
grafica, hue e name del blocco; le altre impostazioni rimangono nelle proprietà dell’oggetto, con
decoration_type = il tipo per una porta o una luce. Una luce riceve anche la propria forma light (quella del
blocco o del tipo) e protected salvo che il blocco indichi unprotected; la grafica
indica già se è accesa. Un blocco di porta con locked = true nelle proprietà colloca porte apribili solo dallo
staff. Un oggetto con una proprietà label_number, come un LocalizedSign, mostra quel testo del
client come nome, salvo che l’oggetto abbia un nome proprio. Il point_dest = [x, y, z] di un teletrasporto diventa le proprietà teleport.x,
teleport.y e teleport.z, e il suo map_dest la proprietà teleport.map, un numero MapType.
Un KeywordTeleporter prende il template decoration_keyword_teleporter, con
script_id = "keyword_teleport" e visibility = "game_master", e conserva substring, keyword, range e delay come proprietà.
Un BulletinBoard prende il template bulletin_board, con script_id = "bulletin_board", e
si apre con un doppio clic: vedi Bacheche. Un Clock prende il template decoration_clock, con script_id = "clock", e comunica l’ora con un
doppio clic; uno collocato come semplice decorazione da un’esecuzione precedente diventa un orologio dove si trova. Un
Blocker è una semplice decorazione la cui grafica non disegna nulla e non può essere attraversata: i giocatori
vengono fermati da esso senza vederlo e i game master e gli amministratori vedono al suo posto una lapide, come
lo mostra ModernUO.
Un tipo Fillable... (cassa, scatola, forziere, barile) o un LibraryBookcase prende il template
decoration_fillable, con script_id = "fillable": un
contenitore che si riempie quando viene aperto. Il suo content_type
(Inn, ThiefGuild) viene conservato come nome della sua tabella (inn, thief_guild), una libreria è una
library e uno collocato come semplice decorazione da un’esecuzione precedente diventa riempibile dove si trova.
Un PublicMoongate prende il template decoration_public_moongate, con
script_id = "public_moongate" e la luce circle300 nelle proprietà salvo che i dati ne indichino
un’altra; .decorate ne colloca anche uno su ogni destinazione di
moongates.toml.
Un TrainingDummy e un ArcheryButte prendono i template decoration_training_dummy e decoration_archery_butte, con gli script che li fanno allenare un’arma.
Spawner, contenitori di marcatura, addon e ogni altro tipo il cui nome termina in
Teleporter, quelli che richiedono un’abilità, una quest o un doppio clic (SkillTeleporter,
InteractionTeleporter, …), non vengono ancora collocati. Le porte delle città non sono in alcun file:
.decorate le legge dai telai delle porte della mappa.
Il contratto del caricatore
Section titled “Il contratto del caricatore”Per i dettagli di implementazione C#, vedi Il contratto del caricatore.
Registrare un caricatore
Section titled “Registrare un caricatore”Per i dettagli di implementazione C#, vedi Registrare un caricatore.
Eseguire i caricatori
Section titled “Eseguire i caricatori”Per i dettagli di implementazione C#, vedi Eseguire i caricatori.
Campi risolti casualmente
Section titled “Campi risolti casualmente”Per i dettagli di implementazione C#, vedi Campi risolti casualmente.
Campi risolti in un nuovo numero
Section titled “Campi risolti in un nuovo numero”Per i dettagli di implementazione C#, vedi Campi risolti in un nuovo numero.
Registrare un convertitore TOML
Section titled “Registrare un convertitore TOML”Per i dettagli di implementazione C#, vedi Registrare un convertitore TOML.
Creato con ❤️ da Tom
