Salta ai contenuti

Pietre incise

Un giocatore compra una pietra da un architetto per 10000 monete d’oro, la posa a terra e ci scrive un titolo e un breve testo. Chiunque passi può leggerla con un doppio clic; solo il proprietario può sollevarla di nuovo.

  1. Compra una pietra incisa da un architetto. L’acquirente ne diventa il proprietario.
  2. Posala a terra dove vuoi. Nessun altro può sollevarla: possono farlo il proprietario e lo staff.
  3. Scrivi .write e seleziona la pietra. Si apre un gump con un campo per il titolo (40 caratteri) e sei righe di testo (60 caratteri ciascuna), già riempiti con quello che c’è scritto. Save conserva la risposta, Cancel chiude il gump.
  4. Chiunque fa doppio clic sulla pietra per leggerla in un gump a parte. Una pietra su cui nessuno ha scritto lo dice.

Il titolo diventa il nome della pietra, così il client lo mostra al passaggio del mouse; un titolo vuoto restituisce alla pietra il suo nome. I caratteri di controllo vengono tolti e i testi più lunghi dei limiti vengono tagliati. I testi sono mostrati come testo semplice: nulla di quello che scrive un giocatore viene letto come HTML.

Il tag owner_on_buy = "true" su un template di oggetto fa sì che il venditore assegni la prop owner (il serial dell’acquirente) a ogni oggetto che crea per un acquisto. È generico: qualunque template può usarlo, la pietra incisa è la prima. Una pietra creata con .add engraved_stone non ha proprietario, quindi solo lo staff può sollevarla o scriverci.

La prop resta con la pietra. Lo script della pietra rifiuta ogni sollevamento tranne quello del proprietario e dello staff (can_pick_up), e ogni rilascio in un contenitore che non è del proprietario (can_drop, a cui viene detto il serial che il rilascio indica): una pietra può andare a terra, sul suo proprietario, o in una borsa o nella banca che il proprietario porta con sé, mentre una borsa a terra, la borsa di un altro giocatore o un altro personaggio la rifiutano, così nessuno può portarla via dentro una borsa. Anche rilasciarla su un oggetto a terra viene rifiutato: rilasciala su una casella vuota. Lo staff può metterla dove vuole. Il template è benedetto, quindi un proprietario morto tiene la pietra fuori dal cadavere, e a terra non svanisce mai. Quello che lo script non vede è uno spostamento fatto dallo staff o da un altro script, di cui non viene interrogato.

Testi: il titolo non può contenere <, > né un # iniziale (il titolo è il nome dell’oggetto, che i tooltip mostrano), e quello che è scritto viene conservato come digitato, quindi ${name} in una riga è una riga e non un segnaposto.

File Cos’è
templates/items/misc/engraved-stones.toml il template engraved_stone: una lapide (0x1165), non impilabile, spostabile (la sua grafica ha il peso 255 del tiledata, che conterebbe come fissa), senza decadimento, benedetta, script_id = "engraved_stone", il tag owner_on_buy
templates/shops/architect.toml la riga di acquisto: 10000 monete, cinque pezzi in magazzino
scripts/items/engraved_stone.lua on_use apre il gump di lettura, can_pick_up lascia sollevare il proprietario e lo staff
scripts/common/engraved_stone.lua i limiti e le regole condivise da script e gump
templates/gumps/stone_read.xml il gump di sola lettura
templates/gumps/stone_write.xml e scripts/gumps/stone_write.lua il gump per scrivere; lo script costruisce i campi e salva

Il testo sta nelle prop stone.title e stone.text (le righe unite da un a capo), salvate con l’oggetto. I limiti sono le costanti TITLE_MAX, LINES e LINE_MAX in scripts/common/engraved_stone.lua: cambiale lì e i campi le seguono.

Il salvataggio non si fida della risposta del client: ricontrolla che la pietra sia una pietra incisa e che il giocatore ne sia il proprietario, o lo staff, e ripulisce e taglia ogni testo prima di conservarlo.

Creato con ❤️ da Tom

Offrimi un caffè