Salta ai contenuti

Messaggio del giorno

Modifica <root>/data/motd.toml per mostrare un messaggio privato ogni volta che un personaggio entra nel mondo. Il repository distribuisce un esempio in moongate_root/data/motd.toml. Riavvia il server di gioco per applicare le modifiche.

lines = [
"Welcome ${player_name} to ${server_name} (${codename} ${version})!",
"Realm: ${realm_name} — players online: ${users_online}",
]

Per impostazione predefinita, il client apre la pergamena nativa Updates dopo la sequenza di ingresso nel mondo, con le righe elaborate nell’ordine del file. Succede a ogni login, incluso il primo ingresso di un nuovo personaggio. Gli altri giocatori non possono vederla e non viene aggiunto alcun oggetto allo zaino.

Scegli la modalità di visualizzazione in <root>/config/moongate.toml:

[ultima]
show_motd_gump = true

true è il valore predefinito, anche quando la chiave è assente. Impostala a false per mantenere nel journal un messaggio Unicode di sistema privato per ogni riga non vuota. Riavvia il server di gioco dopo aver cambiato il flag.

La pergamena nativa supporta testo Windows-1252, inclusi gli accenti italiani e la punteggiatura come — e €. Se il messaggio completo elaborato usa altri caratteri o supera 65,525 byte, il server invia invece tutte le righe valide al journal Unicode e registra un avviso. Il testo non viene mai sostituito o troncato silenziosamente. Un MOTD vuoto non apre alcuna finestra.

I nomi delle variabili sono in inglese snake_case e usano la sintassi ${name}.

Variabile Valore
${version} Versione del server, senza metadati di compilazione
${codename} Nome in codice della versione del server
${server_name} shard.shard_name da config/moongate.toml
${realm_name} Nome del realm di gioco attuale mostrato al client
${player_name} Nome del personaggio che entra nel mondo
${users_online} Personaggi connessi nel mondo su questo processo di gioco, incluso chi entra

users_online non conta sessioni solo di accesso, sessioni disconnesse, personaggi non ancora nel mondo o giocatori su un altro processo di gioco.

Il ruolo game carica e valida il file all’avvio. Un file mancante registra un avviso e non invia alcun MOTD. TOML malformato, un array lines mancante, nomi di variabile non validi, variabili sconosciute, una voce che non è una stringa, una voce con un carattere NUL e una voce che non entra in una riga di parlato Unicode interrompono l’avvio; gli errori includono il percorso del file e l’indice della riga quando pertinente. Le voci vuote o composte solo da spazi vengono saltate. Il testo fuori da un token ${...} completo è letterale.

Un resolver di plugin che fallisce, oppure una riga che supera la dimensione di un pacchetto di parlato Unicode una volta sostituite le sue variabili, fa saltare quella riga e registra un avviso senza memorizzare il testo generato. Le righe successive vengono comunque inviate. Se la sessione originale del personaggio si chiude o viene sostituita, la consegna si interrompe.

Un plugin C# può registrare variabili in IMoongatePlugin.Register. Dichiara una dipendenza da com.github.moongate-community.moongate.plugins.ultima affinché il plugin Ultima abbia registrato prima il registro delle variabili. Aggiungi un riferimento a Moongate.Server.Ultima e importa Moongate.Server.Ultima.Extensions.

container.RegisterMotdVariable(
"season_name",
(context, cancellationToken) => ValueTask.FromResult("Summer")
);

Poi usa ${season_name} in motd.toml. I nomi devono corrispondere a [a-z][a-z0-9_]*; i nomi duplicati, compresi quelli predefiniti, fanno fallire la registrazione del plugin. La registrazione si chiude prima della validazione del file, quindi non è possibile aggiungere variabili a runtime. L’output del resolver viene inserito come testo letterale e non viene mai espanso di nuovo.

Creato con ❤️ da Tom

Offrimi un caffè