Salta ai contenuti

Quest

Una quest è un file Lua: una tabella con un NPC che la dà, un testo, obiettivi e ricompense. Un solo motore, scripts/common/quest.lua, le esegue tutte: le offre, conta gli obiettivi, le consegna e tiene un giornale delle quest. Segue il modello delle quest di Mondain’s Legacy di ModernUO, ma una quest è un dato in Lua, non una classe in C#.

  1. Chi la dà. Un NPC che ha una quest da offrire al giocatore, da seguire o da consegnare, o con cui una quest in corso aspetta una parlata, offre la voce Quest Conversation del client nel suo menu contestuale. Il doppio clic su un NPC così fa lo stesso, da meno di 6 caselle e non da fantasma, e apre il gump delle quest al posto del paperdoll. Un NPC che non ha nulla per il giocatore tiene il suo paperdoll e il suo menu. Le altre cose che l’NPC fa (un negozio, una banca, un guaritore) non vengono toccate.
  2. Il gump di chi la dà mostra, in quest’ordine, le quest che il giocatore può consegnare, quelle in corso e le nuove che può offrire. Con una sola quest, si apre subito quella.
  3. L’offerta ha il titolo, il testo, gli obiettivi e le ricompense, con Accept e Refuse. Per accettare e consegnare il giocatore deve stare entro 6 caselle da chi la dà.
  4. In corso. Ogni uccisione o parlata scrive una riga con il contatore (“Kill ten sewer rats: 3 of 10”); quando ogni obiettivo è pieno una riga dice di tornare da chi la dà. Una scorta fa camminare dietro al giocatore l’NPC che dà la quest: sta al passo (correndo se il giocatore è molto avanti), ringrazia il giocatore quando arriva nella regione di destinazione, e la quest si consegna lì subito. Una quest che chiede una consegna mette l’oggetto nello zaino quando viene accettata: l’obiettivo è fatto quando il giocatore parla all’NPC a cui è destinato, e la quest si consegna lì. Un obiettivo con un limite di tempo mostra il tempo rimasto; quando finisce la quest fallisce: il diario la segna (failed), la consegna viene ritirata e chi la dà non ne dice nulla finché il giocatore non la abbandona e la riprende.
  5. Consegna. Il gump di chi la dà ha un pulsante Complete quando ogni obiettivo è pieno. Gli oggetti raccolti vengono tolti, le ricompense date, e la quest successiva di una catena (next) viene offerta subito se ha lo stesso NPC; una con un altro NPC diventa disponibile solo lì, e una riga lo nomina. Una quest consegnata è fatta per sempre nel momento in cui si tolgono gli oggetti: una ricompensa non si dà mai due volte.
  6. Il giornale. Il pulsante Quest del paperdoll (pacchetto 0xD7, sottocomando 0x32) apre l’elenco delle quest in corso; una quest dell’elenco mostra i suoi obiettivi con i contatori e un pulsante Abandon, che chiede conferma prima di togliere la quest e i suoi contatori. Un giocatore con una quest in corso trova anche View Quest Log nel proprio menu contestuale.

Una quest sopravvive alla morte del giocatore e al riavvio del server: i suoi progressi sono salvati sul personaggio.

scripts/quests/<id>.lua restituisce una tabella. L’id è fatto di lettere minuscole, cifre e trattini bassi. Una quest è nello shard quando il suo id è in scripts/quests/index.lua (Lua non può elencare una cartella). script reload events/quest.lua rilegge l’indice e ogni file di quest, così una quest modificata o nuova si riprende senza riavviare; i progressi dei giocatori non vengono toccati.

-- scripts/quests/sewer_rats.lua
return {
title = "#40100",
giver = "healer", -- the template of the NPC that offers it
description = "#40101",
objectives = {
{ kind = "kill", target = { "sewerrat", "giantrat" }, amount = 10, text = "#40102" },
},
rewards = { { gold = 100 }, { item = "clean_bandage", amount = 5 }, { karma = 10 } },
next = "another_quest", -- optional: the quest offered after this one is turned in
repeat_hours = 24, -- optional: may be done again that many hours after it was turned in
}
Campo Significato
title, description I testi dell’offerta, dell’avanzamento e del giornale
giver Il template del mobile che offre la quest e la riceve, o un elenco di template ({ "tiana", "saril" }): va bene uno qualsiasi
objectives Un elenco; ogni obiettivo deve essere pieno, a meno che la quest abbia any = true
region, outside Facoltativi, il nome di una regione: chi la dà offre la quest solo mentre sta in region, o non sta in outside (le scorte di New Haven e delle città)
any Facoltativo, true: la quest è completa quando uno qualsiasi dei suoi obiettivi lo è, e la consegna toglie solo gli oggetti del primo pieno. I gump dicono Objectives (any one of them)
rewards Un elenco di ricompense, facoltativo; reward_text sostituisce la riga che le nomina nei gump
refusal, in_progress, completion Righe facoltative, testi come il titolo: dette quando l’offerta viene rifiutata, mostrate nel gump dell’avanzamento finché la quest è in corso, e dette quando viene consegnata
next L’id della quest che segue. Una quest che è il next di un’altra si può offrire solo dopo aver consegnato quella
repeat_hours Senza, una quest si fa una volta; con, torna dopo quel numero di ore dall’ultima consegna

kind Campi Conta
kill target (un id di template, o un elenco), amount Una morte di quel template per mano del giocatore, di un suo animale, o di un membro del suo gruppo in vista (18 caselle) che ha la quest in corso e il contatore non ancora pieno
collect item (un id di template, o un elenco: va bene uno qualsiasi), amount Gli oggetti di quel template che il giocatore porta (non quelli che indossa) quando consegna la quest, in quanti mucchi sia; vengono tolti allora
talk npc (un id di template) La prima volta che il giocatore apre l’interazione di quest di quell’NPC, da meno di 6 caselle; l’NPC non ha bisogno di uno script suo
escort region (il nome di una regione di data/regions), region_name (testo facoltativo: come lo chiama il gump) Chi dà la quest cammina dietro al giocatore (un passo a ogni sguardo, cinque al secondo, quando è molto indietro; una camminata quando è vicino) e l’obiettivo è fatto quando sta in quella regione (o in una che l’ha come genitore): ringrazia il giocatore (il testo 1042809 del client) e la quest si consegna subito. Una sola scorta alla volta e cinque minuti di riposo dopo essersi messi in cammino; non la offre un NPC già scortato, né alla sua destinazione. Un giocatore che passa un cancello, un teletrasporto o un richiamo porta con sé l’NPC che gli era accanto. La quest cade con un messaggio quando il giocatore è a più di 30 caselle per un minuto (l’NPC dice il 500902 del client e intanto continua a cercarlo), quando l’NPC muore o non c’è più, e senza messaggio quando muore il giocatore. Un giocatore che esce dal gioco lascia l’NPC ad aspettare un minuto; la quest poi fallisce alla prima interazione dopo l’accesso. Un riavvio chiude le scorte in corso allo stesso modo. In qualunque modo finisca una scorta, l’NPC viene cancellato 100 secondi dopo (una regione di spawn ne fa un altro), a meno che un’altra scorta non l’abbia preso. Un altro NPC dello stesso tipo, con un doppio clic mentre il giocatore ha una scorta in corso, dice “I see you already have an escort” (il 500896 del client)
deliver item (un id di template), amount, npc (il template a cui è destinata la consegna), npc_name (testo facoltativo: come lo chiama il gump), spawn (facoltativo, false: l’oggetto non viene fatto) Il giocatore parla a quell’NPC (da meno di 6 caselle) con la quest in corso: l’obiettivo è fatto allora, e la quest si consegna a quell’NPC, non a chi l’ha data, come ModernUO sposta la quest su di lui. Gli amount oggetti del template vengono fatti nello zaino quando la quest viene accettata (dove sta il giocatore se lo zaino non li prende) e ripresi alla consegna (un giocatore che li ha persi viene avvisato di cosa ha e non può consegnare la quest), o quando la quest viene abbandonata o fallisce
skill skill (il nome di un’abilità: "Swordsmanship"), amount (punti interi) L’abilità che il personaggio ha quando lo si chiede, in punti interi, mai sopra amount: l’obiettivo è pieno quando l’abilità ci arriva, come il GainSkillObjective di ModernUO; chi la dà non offre la quest a un giocatore che ha già l’abilità

Un obiettivo kill può essere limitato a una regione: area = "Sanctuary" (il nome di una regione di data/regions, su qualsiasi mappa) conta solo una morte il cui cadavere giace in quella regione o in una regione che l’ha come genitore (world.in_region); una morte senza un posto noto non conta. area_name è il testo che i gump usano per essa (un messaggio come "#1074807"), altrimenti il nome della regione: “Kill 3 (rats) in Sanctuary”.

Ogni obiettivo può avere un limite di tempo, seconds = 600: la quest fallisce quando finisce, o, per una quest che chiede any uno dei suoi obiettivi, quando sono finiti tutti (un obiettivo senza limite non finisce mai). Il tempo viene controllato a ogni interazione con la quest (un’uccisione, una parlata, una consegna, il diario) e da un timer avviato quando la quest viene accettata; se è finito mentre il giocatore era via, lo si nota alla prossima interazione. Una quest fallita resta nel diario finché non viene abbandonata, non conta nulla e non si può consegnare.

Ogni obiettivo può avere un text (l’intera riga per il gump) o un noun (la cosa che conta, che il motore mette nelle sue righe: “Kill 10 (rabbits)”, “rabbits: 3 of 10”); senza nessuno dei due, il gump nomina la quantità e il template. I template corrispondono esattamente: un id non vale per i template che lo ereditano. Una morte conta per una quest solo quando chi uccide è un giocatore o l’animale di uno: una guardia, un incantesimo o un veleno senza un giocatore dietro non contano per nessuno.

{ gold = n }, { item = "<template>", amount = n } (un amount sopra 1 solo per un oggetto che si impila), { skill = "<name>", points = n } (alza l’abilità fino al suo massimo), { fame = n } e { karma = n } (tenuti nei limiti del client, senza messaggio), e { loot = "<table>", rolls = n, bag = "<template>" }: si crea una borsa (il template bag, salvo un altro nominato) nello zaino e ci si tira dentro la tabella di bottino di templates/loots rolls volte (1 se manca); occupa un posto dello zaino, qualunque cosa contenga, e i gump la chiamano “a bag of rewards”. { flag = "<name>" } dà al giocatore un flag per sempre (la prop quest.flag.<name>, che si legge con quest.has_flag): non dice nulla e non prende posto; per ora nessuno legge i flag (la capacità di evocare le fate, di imparare lo Spellweaving), aspettano le funzioni che lo faranno. Oro, quantità, fama e karma sono numeri interi; una quest con un altro tipo di valore viene esclusa.

Prima che qualsiasi cosa si muova, la consegna controlla che lo zaino abbia posto per tutti gli oggetti della ricompensa insieme (item.has_room_for_all: ciò che si somma a un mucchio non occupa un posto, il resto ne occupa uno ciascuno); senza posto il giocatore lo sa e non si toglie né si segna nulla. Poi si tolgono gli oggetti raccolti, la quest viene segnata come fatta ed esce dal giornale, e solo dopo si danno le ricompense: nello zaino, o dove sta il giocatore quando lo zaino non le può prendere. Una ricompensa che non si può dare affatto viene detta con una riga e la quest resta fatta.

Altri due campi di una quest: reward_message, un testo (come il titolo) detto al giocatore quando la quest viene consegnata, dopo le ricompense (i doni delle quest dell’Heritage), e accept_flags, un elenco di nomi di flag dati quando la quest viene accettata e tenuti se la si abbandona (l’accesso a Bedlam).

Un testo che inizia con # è un numero di messaggio: "#40100" è il messaggio 40100 nella lingua del server (il testo inglese dove la lingua non lo ha). Ogni altro testo si mostra com’è scritto. I messaggi possono avere valori {0}, {1}. I messaggi delle quest stanno nel loro file, data/messages/<language>/quests.toml, uno per lingua distribuita, con numeri da 40000: le righe del motore e dei suoi gump, e i testi delle quest di esempio. Vedi Localizzazione.

Cinque quest di esempio a New Haven sono in scripts/quests: Rats in the cellar (uccisione, il guaritore), Hides for the tanner (raccolta), una catena di due dello scriba (A word with the innkeeper e A word with the tanner, ciascuna un obiettivo di parlata) e Eggs for the herbalist (raccolta, ripetibile ogni 24 ore).

  • Lo stato è un insieme di proprietà sul personaggio, salvate con lui: quest.active (gli id in corso), quest.<id>.p<i> (i contatori), quest.<id>.at e quest.<id>.done (i momenti), quest.<id>.t<i> (quando finisce il tempo di un obiettivo) e quest.<id>.failed.
  • scripts/events/quest.lua avvia il motore, conta le morti dell’evento mobile_died (il template della vittima si legge dal suo cadavere) e risponde alle chiamate del server: quest.on_npc_used(player, npc) per il doppio clic, quest.is_giver(npc) e quest.has_active(player) per i menu contestuali, quest.on_journal(player) per il pulsante Quest.
  • I gump stanno in scripts/common/quest_ui.lua, costruiti con l’API dei gump di Lua.
  • Un file di quest con un errore (nessun giver, un kind sconosciuto, un obiettivo senza amount, una ricompensa non intera, un next che non esiste o che riporta alla quest, due quest che portano alla stessa) viene escluso e scritto nel log; le altre si caricano lo stesso. Se i template che nomina esistono non si controlla al caricamento: lo fanno i test delle quest distribuite.

Le 257 quest di Mondain’s Legacy di ModernUO (il suo elenco ha 265 voci: sette sono commentate nel suo sorgente, perché i mostri che chiedono non sono mai stati aggiunti, e una è il registro dell’eredità umana, non una quest) vengono portate in questo formato dal convertitore modernuo-quests di tools/convert, a fette. Le quest convertite sono i file scripts/quests/ml_*.lua (finora 224: le quest di uccisione, di raccolta, di abilità, di consegna e di scorta, e quelle il cui codice C# dice solo un testo o dà un flag, le cui creature, i cui oggetti e i cui NPC hanno un template) con un elenco loro, scripts/quests/ml_index.lua, e i loro testi sono messaggi numerati come li numera il client, in data/messages/<language>/ml_quests.toml. La cosa che un obiettivo conta è il suo noun; un’arma o un’armatura da raccogliere nomina i template che un venditore vende e un mestiere produce, così conta ciò che il giocatore ha fabbricato. Un oggetto di quest (la coda di un boss, una briglia) viene associato solo a un template dal nome suo: non è mai scambiato per la cosa comune che ne condivide il grafico, e una quest che ne chiede uno senza template viene esclusa.

Sono accese: scripts/quests/index.lua aggiunge gli id di ml_index.lua ai cinque esempi. Chi le dà e gli NPC a cui vanno le consegne, 99 NPC, viene fatto dal convertitore modernuo-quest-givers a partire dalle classi C# di ModernUO (il nome, il titolo, la razza e il sesso, i colori e i capelli quando la classe li fissa, e ciò che l’NPC indossa) in templates/mobiles/ml_quest_givers.toml: NPC invulnerabili che restano dove sono, con l’id della classe in minuscolo (tiana, lyle). Stanno dove li mettono i file di spawn di ServUO (templates/spawns/<map>/ml_quest_givers.toml, 156 posti: Heartwood e il Sanctuary su Trammel e Felucca, New Haven su Trammel, due a Malas e due a Ilshenar), un NPC per posto, di ritorno dopo 5-10 minuti quando uno manca. Hanno le abilità che le loro classi impostano e le insegnano come i venditori (le voci Train del menu contestuale, la parola train, l’oro lasciato su di loro), e quando un giocatore entra nel loro raggio di percezione (8 tile) e ha una quest da prendere da uno di loro, l’NPC si volta e dice una delle sue frasi a quel giocatore soltanto (i testi del client, da scripts/quests/ml_shouts.lua), al massimo una volta al minuto: lo script è quest_giver (script inclusi). Indossano il martello da fabbro e la scimitarra radiante delle loro classi. Le loro ricompense sono le borse e i sacchi di bottino casuale (135 delle 224 quest): { loot = "ml_bag_of_treasure" } e simili, con le tabelle in templates/loots/ml_rewards.toml (una categoria delle liste di ModernUO è una tabella dei template dei suoi tipi messi insieme, ognuno degli oggetti della borsa è una delle cinque categorie a caso; un sacco dei mestieri è un oggetto delle liste di Mondain’s Legacy del suo mestiere). Ciò che ModernUO aggiunge agli oggetti (proprietà magiche, talismani, pergamene di ricette) non viene fatto, e una ricompensa con nome che non ha template, né l’oggetto semplice da cui deriva, viene scartata. Restano per le fette successive: le proprietà degli artefatti e il resto delle ricompense, e le quest il cui codice fa più di questo. Una differenza da sapere: ModernUO offre da sola la quest che ne segue un’altra quando la catena non dice altro; qui una quest che ne segue un’altra si offre solo dopo di essa, e una quest che si ripete lo fa dopo il suo ritardo (pochi minuti dove ModernUO ha un ritardo di ripartenza).

I mostri che quelle quest chiedono di uccidere e che i dati di UOX3 non hanno (38: le bestie della peste, i demoni di cristallo, i boss di Bedlam, il Blighted Grove…) vengono fatti dal convertitore modernuo-creatures dalle classi di ModernUO in templates/mobiles/ml_creatures.toml: le statistiche, le abilità (al massimo 120), le resistenze, i suoni e l’oro della creatura, e i cerchi di incantesimi di un incantatore come l’IA dei maghi di ModernUO. I tipi di danno, le abilità d’arma, le immunità, il veleno, ciò che la creatura indossa, il suo titolo e gli altri hook di una classe non vengono fatti, e nemmeno gli oggetti magici del suo bottino; una creatura senza armatura propria prende metà della sua resistenza fisica. Compaiono dove li mettono i file di spawn di ServUO (templates/spawns/<map>/ml_creatures.toml, 446 posti, con il MaxCount di ogni spawner diviso tra le sue creature; un mostro che una quest chiede in una regione, un orco o un titano nel Sanctuary, viene messo dagli spawner di ServUO dentro quella regione, così ogni quest ad area si può fare); una creatura che i file di spawn di una mappa hanno già (la maggior parte di quelle di Malas, Tokuno e Ter Mur vengono dagli spawner di ModernUO) non viene messa una seconda volta. Otto creature che i dati hanno con un altro nome (gli elementali, il guerriero terathan, il cavaliere e il vendicatore ofidiano) sono associate a quello. Le 26 quest di addestramento di New Haven (porta Swordsmanship, Chivalry, Mining… a 50: un obiettivo di abilità ciascuna) sono convertite; gli oggetti che danno sono artefatti con nome di ModernUO che derivano da un oggetto comune, e la ricompensa è quell’oggetto semplice (un gambale di maglia d’anelli per i Bulwark Leggings, un martello da fabbro per l’Hammer of Hephaestus): le proprietà non vengono fatte; nemmeno la crescita accelerata dell’abilità che avviano per 15 minuti. Gli istruttori che derivano da altre classi di NPC (un mago, un fabbro, un venditore) sono fatti dal loro costruttore e dal loro InitOutfit, come NPC semplici senza il negozio. Quattro ricompense non sono un oggetto semplice e si fanno a mano: il sacco di reagenti del negromante sono i suoi cinque reagenti (50 ciascuno), il sacco di bombe fumogene sono 20 bombe fumogene (un oggetto che per ora non fa nulla), il Clasp of Concentration è un semplice braccialetto d’argento e il libro di incantesimi del negromante è il libro dei dati; ogni altro sacco che una classe riempie viene scartato, perché il genitore semplice è vuoto. Un obiettivo di abilità è completo nel momento in cui l’abilità ci arriva, ma nessun messaggio lo dice: il server non ha un gancio per un aumento di abilità, quindi il giocatore lo vede nel diario delle quest, o quando chiede di nuovo al mandante. Questa fetta ha portato 18 quest: 12 con una consegna o un limite di tempo e 6 quest di raccolta che aspettavano un anello della loro catena. Le 12 sono la catena di Frederic e Leon (una consegna a tempo di dieci minuti), l’anello e la lettera di Regina, i moduli di rimborso di Aernya e Gorrow, il corno d’oro, il regalo per Arielle, i frammenti di mappa, la lettera per Ahie e la caccia ai ratti del Sanctuary contro il tempo (un’ora). Gli NPC a cui va una consegna vengono fatti dal convertitore dei mandanti come i mandanti (legge l’npc delle consegne), chiamati come li chiamano le quest (QuesterName, “Emilio (Britain)”). Cinque quest restano fuori perché Iosep, lo scheletro di Szandor e il secchio ammaccato non stanno in nessun file di spawn di ModernUO o di ServUO, tre hanno codice C# proprio, Patience chiede funghi in miniatura che nessuna fonte dà, e due catene aspettano una prima quest non ancora migrata; la catena dell’Arcanista di Heartwood aspetta Patience, i cui funghi nessuna fonte dà, e quella del Sanctuary finisce con The Human Blight, che dà il flag spellweaving. Arielle, un folletto che non si può ferire, qui è un NPC e non lascia nulla. Le 24 quest di scorta sono convertite: le 12 delle città (Yew, Vesper, Trinsic, Skara Brae, Serpent’s Hold, Nujel’m, Moonglow, Minoc, Magincia, Jhelom, Cove e Britain) e le 12 di New Haven (l’alchimista, il bardo, il falegname, il sarto, la banca, il guerriero, il mago, il cartografo, la locanda, la fattoria, i moli e l’arcaio), 500 monete d’oro ciascuna. ModernUO le dà ai cittadini scortabili che fa nascere; qui le danno i Cercatori d’Avventura dei dati (m_seeker e f_seeker, che gli spawn delle città nominano con le loro liste, e seeker, che nominano gli spawn di New Haven: le scorte delle città a chi sta fuori dall’isola di New Haven, quelle dell’isola a chi ci sta), come un elenco di destinazioni. La scorta a Ocllo non c’è, perché gli scortabili di ModernUO non la offrono. Responsibility, la scorta di Lissbet alla fattoria delle pecore, aspetta: Lissbet non sta in nessun file di spawn di ModernUO o di ServUO. Le scorte delle città (non quelle di New Haven) danno il flag human_in_need e dicono il 1074949 del client, come fa “a human in need” di ModernUO. Ciò che ModernUO aggiunge a una scorta e non viene fatto: la virtù della compassione, la fama che riceve un giocatore giovane e gli scortabili che non sono Cercatori (nobili, mercanti, maghi, una sposa e un prigioniero). La regione della fattoria di New Haven mancava in data/regions/trammel.toml ed è aggiunta. Le sostituzioni (override) delle classi di quest di ModernUO si leggono con schemi rigidi: un GetRewards che dice solo un testo del client (SendLocalizedMessage), dà un flag (Spellweaving.AwardTo, PlayerContext.SummonFey = true) o salta il gump delle ricompense (ClaimRewards) è dato, come un OnAccepted che imposta un flag (BedlamAccess) e RecordCompletion (il motore registra ogni consegna); Generate, che mette decorazioni, viene contato e non fatto; ogni altra istruzione (Eureka insegna una ricetta di fabbro) lascia la quest fuori come codice. Così sono arrivate 11 quest: i doni di Maul, del Cacciatore e del branco di Bravehorn, i doni umani (Ingenuity, Heave Ho, All Season Adventurer), la fine della catena del Sanctuary e Alliance, e le quest di Bedlam (Not Quite That Easy, Convince Me, Tuition Reimbursement). La pergamena di Summon Fey che dà Alliance non ha template e viene scartata, come il libro di Spellweaving di The Human Blight (il libro semplice del suo genitore è un libro di magia). La sbarra di ferro che porta dentro Bedlam, che in ModernUO mette Not Quite That Easy, è una decorazione a parte (templates/decorations/malas/bedlam.toml, lo script bedlam_teleporter.lua): lascia entrare chi ha accettato quella quest. Gli NPC che derivano da un mostro (Maul, Strongroot, il Cacciatore, Arielle) prendono il corpo della sua classe. Restano fuori: le quest che aspettano un oggetto che nessuna fonte dà (i funghi in miniatura, la linfa di Sosaria, la cianfrusaglia, l’ambra prismatica, i campanelli a vento, l’artefatto del minotauro, i campioni d’acqua corrotta), Wisdom of the Sphynx (la sua brocca deve contenere acqua), le catene dello Spellweaving che partono da un oggetto così, Fiendish Friends (un testo che il client non ha) e le quest dei mandanti che non stanno da nessuna parte. Per aggiornare tutta la migrazione si eseguono, in quest’ordine, modernuo-creatures, modernuo-quest-items, modernuo-quests e modernuo-quest-givers, poi modernuo-spawns per le mappe di ModernUO (Convertitori).

Le cose che le quest di raccolta chiedono e che nessun dato ha (15: la coda di un Thrasher, i corni di Gaman, una zampa di pixie, la briglia di Red Death…) vengono fatte dal convertitore modernuo-quest-items dalle classi di ModernUO in templates/items/ml_quest_items.toml (grafica, colore, pila, peso, il nome del testo del client, e loot_type = "blessed" dove la classe è benedetta, così l’oggetto resta al suo proprietario quando muore): solo quelle che un mostro dei dati lascia cadere, perché una quest il cui oggetto non si può ottenere non viene convertita (alcune delle 15 le chiedono solo quest di ModernUO non ancora convertite, e i loro mostri le lasciano cadere lo stesso, come quelli di ModernUO, anche un animale legato che muore e viene rialzato). I mostri che le lasciano cadere (l’OnDeath(Container c) di ModernUO, con la sua probabilità e quantità, e ciò che un mostro eredita dalla classe da cui deriva quando il suo OnDeath chiama la base) hanno una tabella di bottino ciascuno in templates/loots/ml_quest_drops.toml, nominata da scripts/quests/ml_drops.lua: quando muore un mostro di quel template, scripts/events/quest.lua tira le sue tabelle nel cadavere, chiunque l’abbia ucciso. Gli attrezzi da inventore, la sedia di bambù (la sedia di paglia della falegnameria) e la pozione di rinfresco (la pozione rossa dell’alchimia) sono dei dati. Gli oggetti fabbricati, estratti o trovati, un oggetto di quest senza fonte nota, non vengono fatti, e le quest che li chiedono vengono saltate. Gli oggetti che una quest consegna vengono fatti comunque (35 oggetti di quest in tutto), che un mostro li lasci cadere o no.

“Vai in un posto”, la marcatura degli oggetti di quest, la freccia di quest per un obiettivo, e le 33 quest di ModernUO non ancora migrate (vedi sopra).

Creato con ❤️ da Tom

Offrimi un caffè