Salta ai contenuti

Smembrare i cadaveri

Un giocatore con un coltello, un pugnale o una spada, portata con sé o equipaggiata, ci fa doppio clic e sceglie il cadavere di una creatura entro 2 passi: ciò che la creatura dà, come carne, pelli, lana o piume, compare dentro il cadavere. Un cadavere si lavora una sola volta. Il cadavere di un giocatore, quello di un animale domestico (addomesticato o legato) e quello di una creatura evocata non si possono lavorare.

Ciò che una creatura dà è una tabella di smembramento in templates/carves/*.toml, sottocartelle comprese. Un template di mobile nomina la sua tabella con carve, e il cadavere della creatura ne conserva il nome quando muore:

[[carve]]
id = "cow"
entries = [
{ item = "cut_of_raw_ribs", amount = "8", message = 500467 },
{ item = "pile_of_hides", amount = "12", message = 500471 },
]
[[mobile]]
id = "cow"
carve = "cow"

Ogni voce viene tirata per conto suo, quindi uno smembramento può dare tutte le voci, alcune o nessuna:

Campo Significato
id Il nome della tabella, che il carve di un template di mobile indica
entries Ciò che la tabella dà
item Un id di template di oggetto
amount Un numero o dei dadi come 1d3, da 1 a 65535; se non è impostato vale 1. Un oggetto che si impila viene creato come un’unica pila, uno che non si impila come altrettanti oggetti
chance La probabilità in percentuale che la voce dia qualcosa, da 1 a 100; se non è impostata vale 100
message Il testo del client (cliloc) che chi lavora si sente dire quando la voce ha dato qualcosa, come 500467 per la carne; voci con lo stesso numero lo dicono una volta sola. Se non è impostato non dice nulla

Il server si ferma all’avvio quando un id è vuoto o usato due volte, un item non è un template di oggetto, un amount può uscire fuori da 1 a 65535, una chance è fuori da 1 a 100, un message è sotto 0, o il carve di un template di mobile nomina una tabella inesistente. Un template di mobile senza carve prende quello del genitore, e un cadavere che non ne ha non dà nulla di utile; carve = "" toglie la tabella del genitore, come fanno i cavalcabili eterei, il destriero di fuoco, lo scarabeo gigante ed Exodus. Il cadavere di un animale domestico (una creatura con un padrone o legata) o di una creatura evocata non conserva nessuna tabella, qualunque cosa dica il suo template.

La distribuzione include due insiemi. animals.toml ha la mucca, il toro, il maiale, la pecora, la gallina e lo scarabeo di fuoco, con le quantità delle regole classiche (un maiale è un taglio di costolette e nessuna pelle, una pecora tre cosce d’agnello e la sua lana), e un template di quei nomi le nomina. uox3.toml ha le 100 tabelle di carve.dfn di UOX3, chiamate uox3_<n> e assegnate ad altre 105 creature da moongate-convert uox-carves (vedi Migrare da UOX3): carne, pelli, piume, squame e le pelli spinate, cornute e uncinate.

  1. La lama chiede al giocatore su che cosa usarla. Il cadavere deve trovarsi entro 2 passi e un piano (16 di altezza); altrimenti al giocatore viene detto che è troppo lontano. Un cadavere fuori vista, dietro un muro, non si vede.
  2. carve.corpse(corpse, user) rifiuta ciò che non è un cadavere, un cadavere che non giace a terra, il cadavere di un giocatore (ha un corpse.owner), quello di un animale domestico (ha un corpse.pet_owner) e un cadavere già lavorato.
  3. La tabella viene tirata e on_carving viene chiesto allo script del cadavere. Il cadavere viene valutato di nuovo dopo la risposta dell’hook: un hook che ha lavorato il cadavere da sé, o lo ha tolto di mezzo, non lascia più nulla da fare.
  4. Gli oggetti vengono creati dentro il cadavere, il cadavere viene segnato corpse.carved, a chi lavora viene detto il message di ogni voce che ha dato qualcosa e viene pubblicato l’evento corpse_carved.
  5. La lama mostra di nuovo il cadavere a chi lavora, così che un cadavere che aveva aperto mostri ciò che è stato trovato.

Un cadavere senza tabella, o il cui tiro non ha dato nulla, viene comunque segnato come lavorato, e a chi lavora viene detto che non c’è nulla di utile da ricavare. Un cadavere contiene 125 oggetti: ciò che non ci sta viene appoggiato a terra nella casella del cadavere e mostrato ai giocatori intorno, e una voce di un oggetto che non si impila ne crea al massimo 125.

Lo script del cadavere è scripts/items/corpse.lua. Non definisce alcun hook, e uno script tuo può aggiungere on_carving(serial, carver, items):

-- a sheep that gives a second pile of wool
function corpse.on_carving(serial, carver, items)
if item.get_prop(serial, "corpse.template") == "sheep" then
table.insert(items, { item = "pile_of_wool_2", amount = 3 })
return items
end
end

items è il tiro, un array di { item = template id, amount = n }. Restituisci false per annullare: non viene creato nulla, il cadavere non viene segnato come lavorato e chi lo lavora si sente dire che non può usare la lama su quello. Restituisci una tabella della stessa forma per sostituire il tiro; una voce mal formata o che nomina un template di oggetto inesistente viene scartata. Qualsiasi altra cosa tiene il tiro. L’hook gira dentro l’azione e non deve chiamare wait: vedi Hook degli script.

carve.corpse(corpse, user) è la funzione che uno script tuo chiama per lavorare un cadavere in altri modi; dà "carved", "nothing_useful", "already_carved", "not_carvable" o "cancelled", e la distanza e ciò che si dice al giocatore spettano allo script. Uno script che ascolta events.on("corpse_carved", ...) riceve serial (il cadavere), carver e items (quanti oggetti sono stati creati, dentro il cadavere o accanto a esso, una pila contando come uno); vedi Eventi e timer.

  • Smembrare un cadavere umano in torso e arti.
  • Una pecora che dà lana solo finché non è tosata: una pecora dà sempre la sua lana.
  • Mostrare i nuovi oggetti a un altro giocatore che ha il cadavere aperto: compaiono quando il cadavere viene riaperto.
  • Una razza, una facet o un’abilità che cambiano le quantità.
  • La tabella umana di UOX3 (torso e arti) e le voci delle sue tabelle che scelgono un oggetto da una lista.

Creato con ❤️ da Tom

Offrimi un caffè