Prigione
Un game master manda un personaggio in una cella per un certo numero di giorni. Quando i giorni terminano, il detenuto torna dove è stato arrestato, paga una multa in oro e trova nello zaino una nota che indica la pena scontata e ciò che ha pagato. Ogni cella ha una cassa di pane e acqua. Giocatori e NPC vengono imprigionati allo stesso modo.
La cella scelta da un gump, la pena in giorni, la multa, la nota e le razioni sono propri di Moongate: ModernUO sceglie una cella casuale per un tempo deciso autonomamente, UOX3 prende un numero di secondi da un comando e nessuno dei due applica una multa o nutre i detenuti.
Mandare qualcuno in prigione
Section titled “Mandare qualcuno in prigione”.jail, per game master e gradi superiori, apre il gump della prigione:
JailDays: [ 3 ] Reason: [ Stole a horse ]
[>] Target: Lord PippoJail Release Go[>] Cell 1 free [>] Cell 2 Gino - 2d 4h left [x] [>][>] Cell 3 free [>] ...- Premi
Targete scegli il personaggio con il cursore: un giocatore o un NPC. Il gump si apre di nuovo con il suo nome. Fino ad allora le celle vengono solo elencate: nessuna ha un pulsante per imprigionare. - Digita i giorni della pena e, se vuoi, il motivo: fino a 60 caratteri nel gump. Scegliere un personaggio già in prigione riempie il campo con il suo motivo, quindi spostarlo in un’altra cella lo conserva.
- Premi il pulsante di una cella libera.
Il personaggio si trova subito in quella cella e riceve You have been jailed for 3 days: Stole a horse, oppure You have been jailed for 3 days. senza motivo; tu ricevi Lord Pippo is in cell 3 for 3 days. Il motivo viene conservato con la pena come una riga di testo semplice, scritta nella
console e sulla nota di scarcerazione: gli a capo
diventano spazi, < e > vengono rimossi e ciò che supera i 100 caratteri viene tagliato. Il campo del gump
ne accetta 60; i 100 sono il limite per uno script che chiama jail.send.
- Una cella contiene un detenuto. Una cella occupata mostra il suo nome e il tempo rimasto e non ha un pulsante per imprigionare.
- I giorni sono un numero intero da 1 a
ultima.jail.max_days. Qualsiasi altro valore non imprigiona nessuno e riapre il gump. - Non puoi imprigionare te stesso né un giocatore il cui account ha il tuo grado o uno superiore.
- Seleziona un personaggio già in prigione e il gump mostra la sua scarcerazione in alto; il pulsante di una cella libera lo sposta lì con una pena che inizia ora. Torna comunque dove era stato arrestato la prima volta.
- Un altro
Targetsceglie qualcun altro; un cursore chiuso con Escape conserva il personaggio che il gump aveva. Un cursore sostituito da un altro, come quello di un secondo.jail, non apre nulla. - Un clic destro chiude il gump.
Imprigionare un giocatore offline
Section titled “Imprigionare un giocatore offline”.jail Pippo cerca il giocatore con quel nome e apre il gump su di lui, che sia nel
mondo oppure no. Il nome viene digitato per intero, senza distinzione tra maiuscole e minuscole.
[>] Target: Pippo (offline)Jail Release Go[>] Cell 1 free [>] Cell 2 Gino - waits for login [x] [>]Digita i giorni e il motivo e premi il pulsante di una cella libera, come per chiunque altro. Un giocatore
online si trova subito nella cella. Uno offline non viene spostato e ricevi
Pippo will be in cell 3 for 3 days from its next login.:
- La cella viene riservata per lui: mostra
Pippo - waits for logine nessun altro può esservi mandato. - Entro dieci secondi dal suo prossimo accesso il giocatore viene portato nella cella e informato della pena. I suoi giorni iniziano allora, non nel giorno in cui hai assegnato la pena: tre giorni sono tre giorni nella cella.
- Quando i giorni terminano torna dove ha effettuato l’accesso, con la multa e la nota come ogni altro detenuto.
Releasesu una pena in attesa la elimina: nessuno è stato spostato, quindi non ci sono multa né nota.- Una pena in attesa non scade mai. Se il giocatore non torna, la cella si libera di nuovo
solo con
Release. - Premere un’altra cella libera per un giocatore con pena in attesa sposta la cella a lui riservata.
- Il grado conta anche offline: non puoi imprigionare un personaggio il cui account ha il tuo grado o uno superiore.
Quando più giocatori hanno lo stesso nome, il gump li elenca al posto delle celle:
[>] Target: nobody. Pick one of these, or press the button.[>] Pippo - account mario - online[>] Pippo - account luigi - offlinePremi il pulsante di quello desiderato: il gump si apre su di lui, con le celle. Ne vengono elencati al
massimo dieci; con più di dieci giocatori dello stesso nome il gump indica quanti ne ha esclusi, e questi possono
essere scelti solo con Target mentre sono online.
Un giocatore imprigionato mentre era online e poi disconnesso può essere spostato allo stesso modo: .jail <name>, poi una cella libera. La sua pena torna in attesa e ricomincia al prossimo accesso, e
torna comunque dove è stato arrestato la prima volta.
Un giocatore intercettato nei pochi secondi del suo accesso viene trattato come offline: la pena attende e il controllo successivo lo porta nella cella.
Gli NPC non vengono trovati per nome: imprigionali con Target.
Visitare le celle
Section titled “Visitare le celle”Go, su ogni cella del gump, ti porta al suo interno, sulla mappa della prigione, e lascia il gump
aperto; non richiede un bersaglio. È il modo di vedere un detenuto: i luoghi da Cell 1 a Cell 10 di
locations.toml esistono su Felucca e su Trammel, e
.go cell 1 prende quello della mappa su cui ti trovi, una stanza vuota ovunque tranne
sulla mappa della prigione. Le celle sono stanze chiuse: esci con .go o con un altro Go.
La pena
Section titled “La pena”I giorni sono giorni reali. Trascorrono mentre il detenuto è offline e mentre il server è fermo: una pena di 3 giorni assegnata lunedì a mezzogiorno finisce giovedì a mezzogiorno.
Il server cerca ogni dieci secondi le pene terminate.
- Un detenuto nel mondo viene liberato subito.
- Un giocatore offline viene liberato entro dieci secondi dal prossimo accesso. La sua cella è libera dal momento in cui la pena termina.
- Una pena assegnata a un giocatore offline non è iniziata: attende il suo accesso e non termina mai prima.
- La pena di un NPC rimosso nel frattempo viene eliminata.
- Un detenuto con un oggetto sul cursore attende nella cella finché non lo rilascia: l’oro sul cursore non può essere preso e sollevarlo non permette di evitare la multa.
Le pene vengono conservate nella tabella world.jail_sentences e scritte dal salvataggio del mondo, quindi un
riavvio non ne dimentica nessuna.
Un detenuto non può usare un’abilità: legge «You may not use skills in jail.» (lo staff non è mai vincolato). Non può nemmeno lanciare un incantesimo: legge «You cannot cast spells here.», quindi non può fare Recall o Teleport per uscire. Le celle sono stanze chiuse senza porta e la regione è poco illuminata.
La scarcerazione
Section titled “La scarcerazione”Quando una pena termina:
- Viene prelevata la multa: fino a
ultima.jail.fine_goldmonete, dalle pile d’oro nello zaino e nelle borse al suo interno, poi dalla cassa bancaria. Quando il detenuto ha meno, viene preso ciò che ha e lascia comunque la prigione. Un NPC senza oro non paga nulla. - Il detenuto torna dove è stato arrestato. Quando quella mappa non è più caricata va al
punto
releasedijail.toml. - Una nota di scarcerazione viene inserita nello zaino.
- Un giocatore riceve
You have served your sentence. A fine of 500 gold was taken.
Una pena viene conclusa prima che la scarcerazione venga eseguita, quindi nessuno paga due volte. Quando una scarcerazione fallisce a metà,
come un teletrasporto su un punto non più esistente, il log mostra The release of <serial> from jail failed e il detenuto può rimanere nella cella senza pena: spostalo manualmente con
.go o un teletrasporto. Anche una nota che non è stato possibile creare compare nel log.
Release nel gump conclude una pena in anticipo: nessuna multa, nessuna nota. Un detenuto nel mondo torna indietro
subito, un giocatore offline al prossimo accesso.
La nota di scarcerazione
Section titled “La nota di scarcerazione”La nota è l’oggetto jail_release_note. Un doppio clic mostra ciò che la prigione vi ha scritto:
Lord Pippo served 3 days in cell 2, from 2026-10-04 to 2026-10-07, and paid a fine of 500 gold.Jailed by Giachi. Reason: Stole a horseIl motivo compare quando è stato fornito (messaggio 30149).
La multa sulla nota è l’oro realmente prelevato. Il testo viene scritto nella lingua del server
da templates/books/jail_release_note.toml, con le date in UTC.
Il nome del destinatario è quello registrato con la pena, anche dopo una rinomina. I valori generati di
book.title, book.author e book.content rimangono fissi dopo uno scambio o una lettura. Le vecchie note jail.text
rimangono leggibili. La nota
conserva anche le proprietà jail.cell, jail.days e jail.fine per gli script; il suo script è
jail_note.lua.
La cassa delle razioni
Section titled “La cassa delle razioni”Ogni cella ha una cassa che non può essere spostata, con 2–4 pagnotte e una brocca d’acqua. Un detenuto vi mangia e beve, così una lunga pena non lo lascia affamato e assetato.
| File | Contenuto |
|---|---|
templates/items/jail.toml |
La cassa jail_chest e la nota jail_release_note |
templates/loots/jail.toml |
Le tabelle di bottino jail_bread e jail_water, una voce ciascuna, così una cassa contiene sempre entrambi |
templates/spawns/felucca/jail.toml |
Una regione di oggetti per cella: una singola casella nell’angolo nord-est della cella |
La cassa decade dopo 60 minuti, consumata oppure no, e la sua regione ne rimette una piena uno o
due minuti dopo. Per nutrire i detenuti con qualcos’altro, modifica le due tabelle del bottino. Un mondo esistente
riceve le casse al successivo controllo di spawn; .initial_spawn le riempie
subito.
Nella console e nel log
Section titled “Nella console e nel log”Il server indica chi entra e chi esce, al livello informativo:
Lord Pippo (0x00000A12) is jailed in cell 3 for 3 days by Giachi: Stole a horseAria (0x00000A40) will be jailed in cell 4 for 2 days at its next login, by Giachi: Insulted the staffThe sentence of Aria (0x00000A40) for cell 4 is dropped before it beganLord Pippo (0x00000A12) is released from cell 3 after 3 days, with a fine of 500 goldGino (0x00000B07) is released early from cell 2The sentence of an orc (0x0000E258) in cell 1 is dropped: it is no longer in the worldUn personaggio spostato in un’altra cella viene indicato come nuovamente imprigionato nella nuova cella. La multa è
l’oro realmente prelevato. L’ultima riga è un NPC rimosso mentre scontava la pena. La seconda riga è
una pena assegnata a un giocatore offline; al suo accesso il server scrive la consueta riga is jailed in cell e la terza riga è quella pena revocata prima del ritorno del giocatore.
Una pena in attesa di una cella rimossa da jail.toml, o la cui mappa non è caricata, scrive
un avviso a ogni controllo dopo l’accesso, waits for cell 4, which cannot be reached, e continua ad
attendere.
Impostazioni
Section titled “Impostazioni”[ultima.jail]fine_gold = 500 # Coins taken when a sentence ends; 0 takes nothing.max_days = 30 # The longest sentence the gump accepts.fine_gold va da 0 a 1.000.000.000 e max_days da 1 a 3650. L’oro è il template di
oggetto di ultima.items.gold_template.
Le celle
Section titled “Le celle”Le celle sono in data/jail.toml: le dieci della prigione di Felucca, le stesse
usate da ModernUO e UOX3. Per aggiungere una cella, aggiungi lì il suo [[cell]] e la regione della sua cassa in
templates/spawns/felucca/jail.toml. Senza il file la prigione è disattivata e .jail lo segnala.
Per gli script
Section titled “Per gli script”Il modulo jail è ciò che usa il gump:
if jail.send(target, 2, 3, who, "Stole a horse") == JailResultType.Ok then mobile.message(who, "Done.")end
for _, cell in ipairs(jail.cells()) do if cell.prisoner then log.info(cell.name .. " leaves cell " .. cell.number .. " in " .. cell.seconds_left .. " seconds") endendjail.max_days() dà la pena più lunga in giorni (ultima.jail.max_days); jail.send ne rifiuta una più lunga con BadDays. jail.release(serial) conclude una pena in anticipo e jail.sentence(serial) ne legge una. Una pena
che attende l’accesso del giocatore ha pending impostato in jail.sentence e nella cella a lui
riservata, e seconds_left è allora la sua intera durata. jail.send risponde JailResultType.Pending per un
giocatore offline, e solo per uno trovato da .jail <name>: uno script non può imprigionare qualsiasi seriale
che non si trova nel mondo. Il modulo
non controlla chi lo chiama: uno script per lo staff verifica prima world.is_staff, come fa lo script del gump
jail_sentence.lua. Il gump è
templates/gumps/jail_sentence.xml; entrambi possono essere modificati da te.
Cosa non fa ancora
Section titled “Cosa non fa ancora”- Vietare il viaggio con mezzi diversi da un incantesimo: un portale o una cavalcatura non chiedono della pena. Abilità e incantesimi sono vietati.
- Conservare un registro delle pene passate: il motivo vive con la pena e sulla sua nota.
- Imprigionare un intero account: una pena riguarda un solo personaggio.
Vedi anche
Section titled “Vedi anche”jail: il comando.jail.toml: le celle.- Gump e spawn degli NPC.
Durante l’aggiornamento di una directory radice esistente, mgctl init conserva i file degli oggetti e degli script della prigione. Completa le due integrazioni di file richieste prima di avviare il server aggiornato.
Creato con ❤️ da Tom
