Vai al contenuto
ShadowMC

Configurazione

ShadowQuests

Missioni infinite con premi di qualunque tipo, e un editor che si usa in gioco.

Gratuito con Premium v1.0.4

Dove sono i file

plugins/ShadowQuests/

Il plugin li crea al primo avvio e li aggiorna da solo alle nuove versioni, senza toccare le tue modifiche.

Applicare le modifiche

/sqa reload

Rilegge i file senza riavviare il server.

Cosa c’è dentro

18 file · 232 impostazioni

Da dove partire: config.yml

Impostazioni

I file che decidono come si comporta il plugin. Si parte da qui.

config.yml

Impostazioni generali
63 impostazioni
plugins/ShadowQuests/config.yml
Note del file

Con un aggiornamento i tuoi file (questo, quests/, lang/, menus/ e gli altri qui sotto) vengono portati alla nuova versione in automatico: ogni valore che hai cambiato o aggiunto resta, le nuove opzioni arrivano con i loro commenti, e quello che hai cancellato resta cancellato. Le vecchie copie sono in backup/<date>/; se qualcosa richiede la tua attenzione troverai PORTING-<version>.txt nella cartella del plugin.

Un valore sbagliato non blocca mai niente: viene sostituito da quello di fabbrica e segnalato in console all'avvio, con il percorso e cosa ci si aspettava.

LINGUA. Tutto quello che configuri è scritto in inglese - chiavi, sezioni, valori, e queste note - perché questo file lo leggono proprietari di server in tutto il mondo. Quello che legge un GIOCATORE è un'altra faccenda e resta traducibile: vedi lang/ qui sotto, che arriva in inglese e in italiano, e messages.default-locale qualche sezione più giù.

Dove stanno le cose:

config.yml        questo file: storage, regole, messaggi, integrazioni
quests/*.yml      le quest, un file per gruppo
rewards.yml       bundle di ricompense riutilizzabili
npcs.yml          quale NPC consegna quale quest
lang/*.yml        i messaggi che leggono i giocatori
menus/*.yml       la disposizione delle finestre
license.yml       la licenza (creata al primo avvio, tenuta a parte
                  apposta: un "mandami il tuo config" non deve mai arrivare
                  con dentro la licenza di qualcuno)
config-version1

Salvataggio dati

storage8 chiavi
storage.mysql7 chiavi
enabledfalse

false = database H2 locale dentro plugins/ShadowQuests/data/. Niente da installare: il plugin funziona appena lo copi. Metti qui le tue credenziali e riavvia: le tabelle vengono create per te e nel file locale non viene toccato nulla.

MySQL è una funzione Premium. Nella versione gratuita questa riga viene ignorata (e la console lo dice) e il file locale resta dov'è: il giorno in cui arriva una licenza, il passaggio avviene da solo.

host127.0.0.1
port3306
databaseshadowquests
usernameroot
password""
parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"
storage
table-prefix"sq_"

Prefisso delle tabelle. Se lo cambi, il plugin crea un set nuovo e riparte da zero: utile per due server sullo stesso database che devono restare separati.

fallback-to-localtrue

MySQL configurato ma irraggiungibile: con true il plugin lo segnala in console e parte sul file locale, così il server si avvia comunque. Con false si rifiuta di partire, il che ha senso solo se preferisci un server spento a un server che scrive in un posto inatteso.

flush-interval"30s"

Ogni quanto i progressi tenuti in memoria vengono scritti.

NON è "ogni quanto salviamo": un giocatore che esce viene sempre scritto, e lo stesso vale per uno spegnimento. È ogni quanto viene scaricato ciò che si accumula mentre la gente gioca. Più basso = più scritture; più alto = più progressi da rifare dopo un crash del server.

storage.pool5 chiavi
maximum-pool-size10
minimum-idle2
connection-timeout-ms10000
idle-timeout-ms600000
max-lifetime-ms1800000
storage.h21 chiave
auto-serverfalse

Permette a un altro processo (un pannello web, per dire) di aprire lo stesso file H2 mentre il server è acceso. Serve di rado.

storage.history2 chiavi
enabledtrue

Il registro di chi ha ricevuto cosa, e perché.

Ti serve il giorno in cui qualcuno dice di non aver mai ricevuto una ricompensa - e quel giorno arriva. Una ricompensa che è un comando non lascia altre tracce: la console lo esegue e da lì in poi non resta nulla che dica se è successo davvero.

keep-days90

Più server su un solo database

Serve solo se gestisci un network (lobby + survival + ...) che condivide un unico MySQL. I server si passano le novità attraverso il database: nessuna porta da aprire, nessun plugin sul proxy.

Continua a leggere

Quello che viaggia è un AVVISO, mai un valore: un messaggio dice "le quest sono cambiate", non "le quest ora sono queste". Chi lo riceve va a leggere la verità dal database.

I progressi di un giocatore non hanno bisogno di viaggiare: una persona sta su un server alla volta. L'unico caso in cui due server toccano davvero la stessa riga - una ricompensa data dalla console mentre il giocatore è altrove - è coperto dall'incremento atomico, che non ha bisogno di alcun messaggio.

Questa è una funzione Premium.

storage.sync5 chiavi
modeAUTO

AUTO = attivo quando usi MySQL, spento sul database locale. ON | OFF per decidere tu.

primarytrue

IMPORTANTE: in un network UN SOLO server deve avere primary: true. È quello che ripulisce il registro dei messaggi.

server-idauto

Un nome per questo server. "auto" usa hostname + porta. Due server non devono mai avere lo stesso.

poll-interval"3s"
keep-messages"1h"

Cicli

Quando si azzerano le quest giornaliere, settimanali, mensili e annuali.

Continua a leggere

Un reset NON è un timer: è un confronto tra il nome del ciclo attuale e quello salvato accanto ai progressi. Il che significa che un server spento a mezzanotte si riaccende in ordine - il primo giocatore che entra la mattina dopo trova le quest nuove - e non esiste un appuntamento che si possa mancare.

I cicli automatici sono una funzione Premium. Nella versione gratuita le quest ci sono e funzionano, semplicemente non si rinnovano da sole.

cycles3 chiavi
timezone"system"

Il fuso orario che decide che giorno è. "system" usa quello della macchina. Scrivilo per esteso se il tuo server sta in un datacenter in un altro paese: è in assoluto l'errore più comune, e si vede dalle giornaliere che si azzerano a un'ora strana.

reset-at"04:00"

A che ora cambia il giorno. Le 04:00 invece della mezzanotte sono la scelta a cui arriva quasi ogni server vero: chi gioca all'una di notte sta ancora giocando la sera prima, e vedere le proprie quest sparire a metà sessione è la cosa che genera più ticket.

week-starts-onMONDAY

Dove inizia la settimana, per le settimanali.

Mondi

Dove contano le quest. Lascia vuote entrambe le liste e contano ovunque.

"only" vince quando è impostato: dire dove valgono le quest è più breve e più chiaro che dire dove non valgono, per chiunque gestisca una lobby, una survival e otto mondi di minigiochi.

worlds2 chiavi
only[ ]
except[lobby]

Quest

quests3 chiavi
auto-claimfalse

Con true la ricompensa arriva da sola appena la quest è finita, senza che nessuno debba andare a ritirarla.

Il valore predefinito è false, e non è pigrizia: ritirare una ricompensa è il momento in cui qualcuno apre il menu, vede le altre quest e ne inizia un'altra. Una ricompensa che arriva mentre è impegnato a minare passa inosservata.

Ogni quest può decidere per conto suo con "auto-claim: true".

quests.deliver1 chiave

Le quest che chiedono al giocatore di CONSEGNARE oggetti (tipo di obiettivo "item_deliver") tolgono cose vere da un inventario vero. Questa impostazione decide cosa succede a quegli oggetti quando una quest del genere si chiude senza aver mai pagato: abbandonata, scaduta o cancellata dal cambio di ciclo.

Continua a leggere
true  - tornano indietro. Il plugin ricorda ogni consegna esattamente com'era,
        così un item personalizzato torna identico, nome e incantesimi
        compresi. È l'impostazione che non genera ticket:
        una giornaliera che si azzera alle 04:00 non può bruciare una serata
        di raccolta.
false - consegnato è consegnato, come fa la maggior parte dei plugin di quest.

In entrambi i casi, una quest che HA pagato si tiene gli oggetti: la ricompensa era lo scambio.

refund-on-canceltrue
quests
keep-history-days30

Dopo quanti giorni le quest finite e ritirate spariscono dal database. Zero = non si cancella mai nulla.

Le quest non ritirate non vengono mai toccate da questa pulizia, qualunque sia il numero: una ricompensa guadagnata e non ritirata resta dov'è.

Anti abuso

Non è un anticheat. Tre regole di buon senso che escludono i modi più ovvi di far avanzare una quest senza giocarla.

anti-abuse6 chiavi
ignore-afktrue

Chi ha il client inattivo da un po' non fa avanzare nulla. Stare fermi dentro una mob farm è comunque giocare; aver cambiato finestra un'ora fa no.

afk-after"5m"
max-events-per-second60

Quanti eventi al secondo possono contare, per giocatore. Esiste perché una macchina che rompe quattromila blocchi al secondo non diventi quattromila avanzamenti e quattromila righe nel database. Ciò che supera il limite viene scartato ai fini delle quest e non cambia nulla nel gioco. Zero = nessun limite.

ignore-spawner-mobstrue

I mob nati da uno spawner non contano per gli obiettivi di uccisione. È l'unica vera difesa contro le farm industriali: senza, "uccidi 200 zombie" è una leva da tirare per venti minuti. Ogni obiettivo può decidere per conto suo con "no-spawner-mobs".

ignore-placed-blockstrue

Un blocco che hai piazzato e poi rotto non conta. Senza questa regola, "mina 500 minerali" si risolve piazzando e rompendo lo stesso blocco.

placed-blocks-memory20000

Quante posizioni di blocchi piazzati vengono ricordate. Il caso da coprire è breve - piazzarlo e romperlo nello stesso minuto - quindi non serve un numero enorme: oltre il limite, le più vecchie vengono scartate.

Messaggi

Questo è l'unico posto dove la lingua è un'impostazione e non una regola. Tutto ciò che legge un giocatore viene da lang/, che arriva in inglese e in italiano; aggiungi lang/<tag>.yml per qualsiasi altra lingua e scrivine il nome qui.

messages11 chiavi
default-locale"en_US"

La lingua usata quando quella di un giocatore non è in lang/, e dalla console. Metti "it_IT" qui per un server italiano.

follow-client-localetrue

Con true ogni giocatore vede i messaggi nella lingua del proprio client, quando esiste un file per quella lingua.

announce-progresstrue

I progressi vengono scritti nella barra sopra la hotbar, non in chat. Una quest da mille blocchi produce mille avanzamenti: stamparli tutti inonderebbe la chat, non stamparne nessuno farebbe sembrare che la quest non conti nulla.

progress-cooldown"2s"
announce-resettrue
announce-rewardstrue
announce-on-jointrue
complete-titletrue
complete-sound"entity.player.levelup 0.7 1.2"
messages.bar3 chiavi
length20
full"|"
empty"|"
messages
free-credit-linetrue

La riga di credito della versione gratuita: una riga, una volta per sessione, dopo che è stata ritirata una ricompensa. Con una licenza Premium non compare mai.

Editor in gioco

editor3 chiavi
enabledtrue

Con false il comando dell'editor risponde che è disattivato. Le quest continuano a funzionare: si scrivono a mano nei file, come sempre.

file"editor"

Il gruppo (e quindi il file) in cui finiscono le quest create dall'editor quando non ne viene scelto un altro.

answer-timeout"2m"

Quanto tempo c'è per rispondere a una domanda fatta in chat prima che l'editor rinunci e riapra la finestra com'era.

Integrazioni

Tutte opzionali. Ognuna è subordinata a un controllo di presenza, e quando un pezzo si disattiva perché manca un plugin viene scritto in console una volta, indicando cosa manca.

integrations3 chiavi
integrations.suite1 chiave
enabledtrue

Ci presentiamo a ShadowEssentials, così il pannello della suite ci elenca con la versione giusta.

integrations.crates1 chiave
give-command""

Il comando che il tuo plugin di casse usa per consegnare una chiave. Lascialo vuoto: ShadowCrazyChest, CrazyCrates, ExcellentCrates e SpecializedCrates vengono riconosciuti da soli.

Placeholder: <player> <crate> <amount>

integrations.permissions1 chiave
grant-command""

Il comando che il tuo gestore dei permessi usa per assegnarne uno. Lascialo vuoto: ShadowPermissions e LuckPerms vengono riconosciuti da soli, permessi temporanei compresi.

Placeholder: <player> <node> <duration>

Licenza

La chiave NON va qui. Il suo posto è license.yml, che il plugin crea per te al primo avvio: così una richiesta di supporto che dice "mandami la tua config" non arriva con dentro la tua licenza.

Continua a leggere

Il modo più semplice per attivarla è:

/quest license claim <code>

Il server chiede da solo la licenza al servizio di attivazione e la annota. Un secondo, senza coinvolgere nessuno.

license3 chiavi

LA CHIAVE VIVE IN license.yml (stessa cartella di questo file), oppure nel file centrale plugins/ShadowControl/licenses.yml per tutta la suite. La 'key' qui sotto è solo un ripiego per i sistemi di deploy che generano config.yml: lasciala vuota.

La chiave NON sta qui: sta in license.yml, in questa cartella, creato al primo avvio (oppure in plugins/ShadowControl/licenses.yml per tutta la suite). Ultima risorsa: se vuoi proprio tenerla qui, funziona. Viene letta dopo license.yml e prima dell'elenco di ShadowControl.

activation-url'https://shadow-licences.riccardobotins.workers.dev'

L'indirizzo BASE del servizio di attivazione: /claim e /check vengono aggiunti dal plugin. Vuoto = solo attivazione manuale.

grace-days7

Quanti giorni di tolleranza prima di tornare alla versione gratuita quando un abbonamento è appena scaduto o gli indirizzi non corrispondono. Quel secondo caso è molto più spesso un NAT o un proxy che un ladro.

resolve-public-iptrue

Chiedi al servizio licenze (activation-url + /ip) come si vede questo server da fuori: risponde con l'indirizzo che vede, e del server non viene inviato niente. È l'unico modo affidabile per conoscere un indirizzo pubblico da dietro un NAT, ed è il motivo per cui una licenza venduta per "play.example.net" funziona su una macchina i cui indirizzi locali sono tutti 10.x. Solo con una licenza installata: un server senza chiave non chiede niente a nessuno. false = non chiedere mai.

Statistiche anonime (bStats)

Servono a un solo scopo: sapere quanti server usano questo plugin e con quale versione, così possiamo capire quando è sicuro smettere di portarci dietro codice di compatibilità per una versione vecchia.

Continua a leggere

Cosa viene inviato, ogni 30 minuti: un id casuale del server (serverUuid, non derivato da nulla), la versione del plugin, le versioni di Minecraft/Paper e di Java, il sistema operativo e il numero di core, la modalità online, quanti giocatori sono online (solo un numero), l'edizione (free/premium/creator) e l'archiviazione in uso (H2 locale o MySQL). NULLA sui giocatori: niente nomi, niente UUID, niente indirizzi, niente progressi.

false disattiva solo questo plugin. enabled: false in plugins/bStats/config.yml disattiva in un colpo tutti i plugin bStats del server.

metrics2 chiavi
enabledtrue
plugin-id0

L'id che bstats.org ha assegnato a questo plugin. 0 = usa l'id incorporato nel jar; un numero maggiore di 0 scritto qui prende il suo posto. Finché entrambi sono 0 non viene inviato nulla e non si apre nessuna connessione.

Diagnostica

debug1 chiave
log-sqlfalse

Scrive in console ogni istruzione SQL. Utile a chi sta cercando un guasto, e a nessun altro: su un server trafficato riempie il log in fretta.

npcs.yml

Gli NPC
5 impostazioni
plugins/ShadowQuests/npcs.yml
Note del file

Quale NPC assegna quale quest.

Gli NPC veri e propri vengono da ShadowEssentials: questo file dice solo, per ognuno di loro, cosa ha da offrire. Senza ShadowEssentials il file non fa nulla e non genera errori.

Ci sono due modi per legare una quest a un NPC, e vanno bene entrambi:

1. dentro la quest, con "npc: blacksmith" - il posto giusto per
   chi scrive lo YAML a mano, perché tiene il legame accanto
   al resto della quest;
2. qui - il posto in cui scrive l'editor in gioco, e l'unico modo per
   far offrire a un NPC più di una quest.

Le due fonti si sommano.

L'ORDINE CONTA: l'NPC offre la prima quest dell'elenco che il giocatore può ancora prendere. È così che un personaggio racconta una storia un capitolo alla volta invece di scaricare sei offerte tutte insieme.

Si può fare anche da comando:

/sqa npc bind <npc> <quest>
/sqa npc unbind <npc> <quest>
/sqa npc list

Cosa è già collegato qui

Un personaggio per catena, ognuno con tutta la sua storia in ordine:

Continua a leggere
miner      quests/miner-chain.yml      4 capitoli
builder    quests/builder-chain.yml    5 capitoli
warrior    quests/warrior-chain.yml    6 capitoli
fisher     quests/sea-chain.yml        5 capitoli

I collegamenti sono reali e funzionano appena quei quattro NPC esistono. Per ora non esistono, perché un NPC è una posizione nel tuo mondo e nessun file può indovinarla. Quattro comandi, una volta sola:

/npc create miner     Il Minatore
/npc create builder   Il Costruttore
/npc create warrior   Il Guerriero
/npc create fisher    Il Pescatore

L'id è il primo argomento e resta in inglese come ogni altro id di questo plugin; il secondo argomento è il nome sopra la testa, ed è la parte che legge un giocatore. Poi "/npc skin <id> <player>" per dargli un volto. Un id scritto qui che non ha ancora un NPC non costa nulla: nessuno può cliccare su ciò che non c'è.

TRASFORMARLI IN VERI QUESTGIVER. Di serie un capitolo parte da solo, quindi un NPC su cui clicchi dice "ce l'hai già" - è un cartello indicatore, e conta comunque per gli obiettivi "talk_npc". Scrivi "auto-start: false" sul PRIMO capitolo di una catena e quel capitolo smette di essere assegnato da solo: da lì in poi l'unico modo per iniziarlo è andare dal personaggio e dire di sì. È una riga per catena, ed è la differenza tra una lista di quest e un mondo abitato da persone.

config-version1
npcs4 chiavi
miner[miner_1, miner_2, miner_3, miner_4]

"La via del minatore" - quests/miner-chain.yml

builder
[builder_1, builder_2, builder_3, builder_4, builder_5]+2

"La mano del costruttore" - quests/builder-chain.yml

warrior
[warrior_1, warrior_2, warrior_3, warrior_4, warrior_5, warrior_6]+3

"Il sentiero del guerriero" - quests/warrior-chain.yml

fisher[sea_1, sea_2, sea_3, sea_4, sea_5]

"Il richiamo del mare" - quests/sea-chain.yml

rewards.yml

Le ricompense
13 impostazioni
plugins/ShadowQuests/rewards.yml
Note del file

Bundle di ricompense riutilizzabili.

Un bundle si definisce qui una volta sola e si richiama da qualsiasi quest con "bundle: <name>". Cambiarlo qui cambia ogni quest che lo usa, senza toccare un solo file di quest: è la differenza tra ritarare le ricompense di un server in un minuto e riaprire trenta file.

Dentro un bundle scrivi esattamente quello che scriveresti dentro una quest, quindi non c'è una seconda sintassi da imparare.

LA SCALA, E PERCHÉ I NUMERI SONO QUESTI

Sono prezzati sullo shop.yml di ShadowEconomy, dove un diamante si vende a 10 e costa 1000, un lingotto di ferro si vende a 4 e un tronco a 2. Una quest che paga mille volte quello che chiede rompe l'economia il primo giorno, quindi tutta la scala è scritta qui in un unico posto e ogni quest sceglie un gradino invece di inventarsi un numero:

starter-reward      400     il primo capitolo di una catena
small-reward        500     una giornaliera normale
medium-reward     5.000     una settimanale
weekly-reward     7.500     una settimanale difficile, con una chiave di crate
big-reward       25.000     la fine di una catena, o una mensile
monthly-reward   35.000     una mensile che ha richiesto tutto il mese
legend-reward    60.000     l'ultimo capitolo di una catena lunga

Sessantamila sono quattro lingotti di netherite a prezzo di shop. È il tetto apposta: una ricompensa che compra più di quanto un giocatore potrebbe mai minare trasforma lo shop in scenografia.

LE CHIAVI DELLE CRATE sono quelle con cui arriva ShadowCrazyChest - basic, vote, daily, magic, epic. Su un server senza un plugin di crate la chiave non viene consegnata e la console lo dice una volta: ogni bundle che ne contiene una contiene anche soldi, quindi nessuno resta a mani vuote.

Nomi, chiavi e valori sono in inglese, e lo è anche quello che vede un giocatore - "display": cambialo, è tuo. Una versione italiana di questo file è in esempi/it_IT/rewards.yml. Non viene caricata: copiala al posto di questo per usarla.

config-version1
bundles12 chiavi

La scala

bundles
starter-reward["money: 400", "xp: 25"]

Il primo gradino di una catena: abbastanza da sentirsi pagati, non abbastanza da saltare il capitolo che viene dopo.

small-reward["money: 500", "xp: 50"]

La ricompensa di una giornaliera normale.

medium-reward["money: 5000", "xp: 200", "item: DIAMOND 3"]

La ricompensa di una settimanale.

weekly-reward["money: 7500", "xp: 300", "crate: daily 1"]

Una settimanale che ha chiesto un'intera settimana.

big-reward
["money: 25000", "item: NETHERITE_INGOT 1", "broadcast: <gold><player> finished a legendary quest!", "firework: yes"]+2

Fine di una catena, o una mensile.

monthly-reward
["money: 35000", "xp: 1200", "item: DIAMOND_BLOCK 2", "crate: magic 1", "firework: yes"]+3

Una mensile che ha richiesto il mese intero.

legend-reward
["money: 60000", "xp: 2000", "item: NETHERITE_INGOT 2", "crate: epic 1", "title: <gold><bold>Feat accomplished|<gray>The road ends here", "broadcast: <gradient:#FFD54F:#FF8F00><player> completed a legendary chain!</grad …+5

L'ultimo capitolo di una catena lunga. L'unico gradino sopra big-reward, e l'unico che mette un titolo sullo schermo: è l'ultima cosa che alcuni giocatori vedranno di questo plugin, e deve essere all'altezza.

Le casse dei mestieri

Una SCELTA apre una piccola finestra e lascia prendere al giocatore una cosa. Vale più del suo contenuto: un giocatore che sceglie si sente pagato due volte. Se la chiude senza scegliere, la scelta torna al suo accesso successivo - la ricompensa è sua e nessuno gliela toglie.

bundles
builder-crate[{ type: CHOICE, display: "<green>The builder'…]

Per il costruttore: materiali, non attrezzi. Chi costruisce vuole quantità.

hunter-crate[{ type: CHOICE, display: "<red>The hunter's t…]

Per il combattente: ciò che si consuma in uno scontro.

sea-crate[{ type: CHOICE, display: "<aqua>The fisherman…]

Per chi vive sull'acqua.

mystery-box[{ type: RANDOM, display: "<light_purple>Myste…]

Una ricompensa estratta a caso. La forma estesa serve solo quando vuoi le opzioni: sta nel file, perché un editor annidato dentro un editor sarebbe più difficile da usare che scriverla a mano.

your-choice[{ type: CHOICE, display: "<gold>Pick your rew…]

Una ricompensa scelta dal giocatore: si apre una piccola finestra e prende quello che vuole. Se la chiude senza scegliere, la scelta torna al suo accesso successivo - la ricompensa è sua e nessuno gliela toglie.

Lingue

I testi che il plugin mostra ai giocatori, un file per lingua.

lang/

Testi e messaggi
2 file
plugins/ShadowQuests/lang/
Note del file

Formato MiniMessage. I placeholder si scrivono <come_questo>.

TRE PLACEHOLDER SONO SEMPRE DISPONIBILI, OVUNQUE:

<prefix>      il prefisso qui sotto
<label>       l'etichetta con cui il comando del giocatore è stato DAVVERO
              registrato su questo server
<adminlabel>  la stessa cosa per il comando dello staff

I comandi non si scrivono mai a mano in un messaggio. Un alias corto come /sq può già appartenere a un altro plugin, e chi lo chiede per secondo non lo ottiene: un aiuto in chat che nomina un comando che qui non risponde manda la gente a scrivere qualcosa che non funziona, e sembra colpa del plugin. Con <label> non può succedere.

Con un aggiornamento questo file viene portato automaticamente alla nuova versione: le righe che hai riscritto restano come le hai scritte, le nuove chiavi vengono aggiunte, e la copia vecchia viene tenuta in backup/<date>/. Se qualcosa richiede la tua attenzione troverai PORTING-<version>.txt nella cartella del plugin.

Tutti i messaggi che il plugin mostra ai giocatori, un file per lingua. Le chiavi non sono elencate una per una: qui ci sono i file, quanti testi contengono e i segnaposto che usano.

FileLinguaTesti
lang/en_US.yml riferimento English 642
lang/it_IT.yml Italiano 642

Segnaposto più usati

Il plugin li sostituisce con il valore giusto: vanno lasciati scritti così.

  • <prefix>
  • <value>
  • <quest>
  • <id>
  • <amount>
  • <label>
  • <type>
  • <count>
  • <adminlabel>
  • <player>
  • <group>
  • <npc>
  • <what>
  • <bar>

Gruppi di messaggi

  • prefix 1
  • common 19
  • command 10
  • input 4
  • condition 22
  • objective 144
  • quest 60
  • chain 5
  • reward 62
  • npc 4
  • branding 1
  • license 41
  • admin 70
  • editor 172
  • menu 27

Altro

Contenuti pronti, esempi, importazioni: i file che si copiano e si modificano come modello.

quests/

Le missioni, un gruppo per file
9 file
plugins/ShadowQuests/quests/

9 file con la stessa forma. Qui sotto 4 esempi per intero, uno per ogni forma diversa; gli altri sono elencati per nome.

  • builder-chain.yml
  • daily.yml
  • examples.yml
  • miner-chain.yml
  • monthly.yml
  • sea-chain.yml
  • suite.yml
  • warrior-chain.yml
  • weekly.yml

Esempio quests/examples.yml

Note del file

Due quest scritte per essere lette, non giocate.

La prima mostra COSA PUÒ ANDARE DENTRO un obiettivo: filtri su mondo, bioma e altezza, requisiti, testo personalizzato, un limite di tempo, quante volte si può ripetere.

La seconda è il senso di questo plugin, in sei righe: incrocia tre plugin della suite. Nessun concorrente può scriverla, perché scriverla vuol dire possedere quei tre plugin. Arriva spenta dietro un requisito che nessuno ha finché non la accendi.

Chiavi e valori sono in inglese, e lo sono anche "display" e "description", quello che legge il giocatore: cambiali, sono tuoi. Una versione italiana di questo file è in esempi/it_IT/quests/examples.yml. Non viene caricata: copiala al posto di questo per usarla.

config-version1
group7 chiavi
idexamples
display"<gray>Examples"
description["<gray>To be read and copied."]
iconWRITABLE_BOOK
order99
periodNEVER
sizeall
quests2 chiavi
quests.example_full10 chiavi
display"<white>Example: everything that can be written"
description["<gray>Open the file to see how it is made."]
quests.example_full.icon3 chiavi
materialENCHANTED_BOOK
name"<white>Example"
glowtrue
quests.example_full
difficultyHARD
time-limit"2h"

Quanto tempo c'è per finirla, contato da quando viene assegnata. Allo scadere la quest riparte da capo invece di restare a metà per sempre.

max-completions3

Quante volte si può fare in totale. 0 = una volta per ciclo.

objectives
[{ type: ore_mine, target: […], amount: 10, world: […], min-y: -64, max-y: 16, description: "<gray>Mine diamonds deep down" }, { type: mob_kill, target: […], amount: 25, biome: […], hostile-only: true }]+1
description

La riga che legge il giocatore. Senza, ne viene costruita una dal tipo e dal bersaglio.

modeall

Servono entrambi gli obiettivi. "any" ne renderebbe sufficiente uno.

conditions
["permission: shadowquests.use", "level: >= 5", "not-world: lobby"]+1

Chi può vederla e prenderla. Un solo linguaggio, imparato una volta: lo stesso che usa ShadowCommand quando una riga inizia con "scmd:".

rewards
["money: 10000", "item: DIAMOND_BLOCK 2", "command: give <player> golden_apple 3", "broadcast: <gold><player> finished the full example!", "bundle: mystery-box"]+3
quests.example_suite7 chiavi
display"<white>Example: the quest that crosses three plugins"
description
["<gray>Win, earn, open a crate.", "<dark_gray>Remove 'conditions' to switch it on."]+1
icon-materialNETHER_STAR
difficultyEPIC
objectives
[{ type: game_win, amount: 3 }, { type: money_earn, amount: 500 }, { type: crate_open, target: […], amount: 1 }]+2
type

ShadowGames

type

ShadowEconomy

type

ShadowCrazyChest

conditions["permission: shadowquests.example.suite"]

Disattivata apposta: è un esempio, e su un server senza quei tre plugin non potrebbe mai essere completata. Togli questa riga per attivarla.

rewards["bundle: your-choice", "pass-xp: 500"]
Una quest di consegna, pronta da decommentare

Arriva spenta così un server gratuito carica comunque tutte le quest della confezione: la versione gratuita si ferma a dieci, e dieci sono esattamente quelle di questi tre file. Togli il "#" dal blocco qui sotto e diventa l'undicesima.

Continua a leggere

Il tipo di obiettivo è "item_deliver". Non ascolta niente: avanza quando il giocatore preme il pulsante Consegna dentro la quest, e il plugin prende dall'inventario ciò che corrisponde, fino a quanto manca ancora. Consegnarne 200 su 5000 è normale - il contatore li tiene e aspetta il viaggio successivo.

Qui funziona ogni filtro degli item, quindi un item custom si indica allo stesso modo in cui si indica in una ricompensa:

target: [ DIAMOND ]          il materiale
item-name: "Ancient heart"   il nome visualizzato, o una sua parte
item-lore: "Relic"           una riga della lore
model-data: 1201             il custom model data
enchant: [ sharpness ]       un incantesimo che deve avere

Insieme bastano per distinguere un item di Oraxen, Nexo, ItemsAdder, MMOItems o ShadowCustomizer da uno normale dello stesso materiale.

Cosa succede agli item già consegnati, se il giocatore rinuncia o un ciclo si rinnova, lo decide quests.deliver.refund-on-cancel in config.yml.

example_delivery:
  display: "<white>The village collection"
  description:
    - "<gray>The village needs stone. Lots of it."
    - "<dark_gray>You can hand it in a little at a time."
  icon-material: CHEST_MINECART
  difficulty: MEDIUM
  objectives:
    - type: item_deliver
      target: [ STONE, COBBLESTONE ]
      amount: 5000
      description: "<gray>Hand stone in to the village"
    - type: item_deliver
      target: [ DIAMOND ]
      amount: 8
      item-name: "Heart diamond"
      description: "<gray>Hand in a special diamond"
  rewards:
    - "bundle: big-reward"

Esempio quests/suite.yml

Note del file

LE QUEST CHE NESSUN CONCORRENTE PUÒ SCRIVERE.

Tutto quello che c'è in questo file incrocia almeno un altro plugin della suite. "Vinci cinque partite", "guadagna ventimila", "apri dieci casse", "fai profitto al market": nessuno di questi è un evento di Minecraft, quindi nessun plugin di quest in commercio può contarli. Questo sì, perché gli eventi arrivano da ShadowGames, ShadowEconomy, ShadowCrazyChest e ShadowBattlePass, e perché gli id degli obiettivi sono gli stessi che usa il battle pass - un solo vocabolario, imparato una volta, per tutta la suite.

COSA SERVE A CIASCUNA, in chiaro:

game_win / game_kill / game_play     ShadowGames
money_earn / money_spend             ShadowEconomy
shop_sell                            ShadowEconomy
crypto_profit / crypto_sell          ShadowEconomy (market)
token_earn                           ShadowEconomy (token)
crate_open                           ShadowCrazyChest
pass-xp (ricompensa)                 ShadowBattlePass

SE NON USI QUEI PLUGIN, cancella questo file, oppure scrivi "auto-assign: false" nel blocco del gruppo qui sotto: le quest restano leggibili e smettono di essere assegnate. Nient'altro nel plugin dipende da loro. Arrivano ACCESE perché una quest che arriva già spenta non è contenuto, sono compiti a casa.

I TARGET. I nomi delle casse sono quelli con cui arriva ShadowCrazyChest (basic, vote, daily, magic, epic) e i nomi dei giochi sono i nomi dei file nella cartella games/ di ShadowGames (bedwars, skywars, eggwars, ...). Dove non è scritto nessun target, l'obiettivo li conta tutti.

Chiavi e valori sono in inglese, e così anche "display" e "description", quello che legge il giocatore: cambiali, sono tuoi. Una versione italiana di questo file è in esempi/it_IT/quests/suite.yml. Non viene caricata: copiala al posto di questo per usarla.

config-version1
group8 chiavi
idsuite
display"<dark_purple>Suite feats"
description
["<gray>Quests that cross more than one plugin.", "<gray>Three at a time, renewed every Monday."]+1
iconNETHER_STAR
order4
periodWEEKLY
size3
completion-rewards
["money: 20000", "pass-xp: 3000", "crate: epic 1", "broadcast: <dark_purple><player> finished this week's feats."]+2
quests12 chiavi
ShadowGames
quests.arena_champion7 chiavi
display"<white>Five wins"
description["<gray>In the arena, not in the world."]
icon-materialGOLDEN_HELMET
difficultyMEDIUM
weight1.2
objectives[{ type: game_win, amount: 5, description: "<g…]
rewards
["money: 8000", "pass-xp: 1500", "crate: magic 1"]+1
Ancora 9 voci con la stessa forma di arena_champion: arena_blood, war_games, bed_breaker, merchant_week, big_spender, investor, token_hunter, crate_week, lucky_hands
ShadowEconomy
quests.rich_week7 chiavi
display"<white>Twenty thousand in seven days"
description
["<gray>How you earn it is nobody's business.", "<dark_gray>Quest rewards do not count."]+1
icon-materialGOLD_INGOT
difficultyMEDIUM
weight1.2
objectives[{ type: money_earn, amount: 20000, descriptio…]
type

Senza target conta qualsiasi valuta. I pagamenti fatti da questo stesso plugin sono esclusi apposta: una quest che avanza da sola pagando la propria ricompensa non è una quest.

rewards["money: 5000", "pass-xp: 1500"]
ShadowCrazyChest
Tutti e tre insieme
quests.triple_crown8 chiavi
display"<gradient:#B388FF:#4527A0>The triple crown</gradient>"
description
["<gray>Win, earn, open.", "<dark_gray>Three different plugins in a single quest."]+1
quests.triple_crown.icon3 chiavi
materialNETHER_STAR
name"<gradient:#B388FF:#4527A0>The triple crown</gradient>"
glowtrue
quests.triple_crown
difficultyEPIC
weight0.5
modeall
objectives
[{ type: game_win, amount: 3, description: "<gray>Win 3 matches" }, { type: money_earn, amount: 5000, description: "<gray>Earn 5,000 coins" }, { type: crate_open, target: […], amount: 1, description: "<gray>Open a Magic …+2
type

ShadowGames

type

ShadowEconomy

type

ShadowCrazyChest

rewards
["money: 15000", "pass-xp: 3000", "crate: epic 1", "bundle: your-choice", "broadcast: <gradient:#B388FF:#4527A0><player> took the triple crown.</gradient>"]+3

Esempio quests/daily.yml

Note del file

UN FILE = UN GRUPPO. Il gruppo dà il ritmo: ogni quanto si rinnovano le sue quest, e quante ne vengono assegnate alla volta.

Quindici giornaliere, tre assegnate al giorno. È questo che tiene un server interessante per mesi senza chiedere a nessuno di scrivere mesi di contenuti: l'estrazione è per peso e ripetibile, così due giocatori nello stesso giorno ricevono quest diverse e lo stesso giocatore tiene le sue anche dopo un riavvio.

LA MISURA DI UNA GIORNALIERA. Ogni quest qui è pensata per essere finita in una serata da qualcuno che avrebbe giocato comunque. Trecento di pietra, quaranta mob, quindici pesci: il numero è quello che produce un'ora di gioco normale, mai un obiettivo che richiede una farm. Le tre difficili in fondo hanno apposta un peso basso - devono comparire come un cambio di ritmo, non come i compiti per stasera.

I cicli automatici sono una funzione Premium. Nella versione gratuita queste quest esistono e funzionano, semplicemente non si rinnovano da sole.

UNA NOTA SULLA LINGUA. Ogni chiave, sezione e valore in questo file è in inglese, perché il file lo leggono proprietari di server di tutto il mondo. Quello che un giocatore vede a schermo - "display" e "description" - arriva anche lui in inglese: cambialo, è tuo. Una versione italiana di questo file è in esempi/it_IT/quests/daily.yml. Non viene caricata: copiala al posto di questo per usarla.

config-version1
group8 chiavi
iddaily
display"<aqua>Dailies"
description["<gray>Renewed every day."]
iconCLOCK
order1
periodDAILY

DAILY | WEEKLY | MONTHLY | YEARLY | NEVER

size3

Quante ne vengono assegnate alla volta. "all" = tutte le quest del file.

Con un numero, ogni giocatore ne riceve altrettante, estratte per peso - e l'estrazione è ripetibile: lo stesso giocatore riceve sempre le stesse quest per lo stesso giorno, anche se il server si riavvia a metà mattina. Senza questa garanzia un riavvio potrebbe rimescolare le quest di qualcuno e portarsi via i suoi progressi.

completion-rewards
["money: 2500", "xp: 150", "crate: daily 1", "message: <gold>You finished every daily!"]+1

Una ricompensa extra per aver finito tutte le quest del giorno.

quests15 chiavi
Gli scambi. Il grosso del mazzo: peso alto, niente sorprese
quests.mine_stone7 chiavi
display"<white>An everyday miner"
description["<gray>Stone does not dig itself."]
icon-materialSTONE
difficultyEASY
weight2.0
objectives[{ type: block_break, target: […], amount: 300…]
rewards["bundle: small-reward"]
quests.night_hunt7 chiavi
display"<white>Night hunt"
description["<gray>Whatever comes out when the sun goes d…]
icon-materialBONE
difficultyMEDIUM
weight2.0
objectives[{ type: mob_kill, target: […], amount: 40 }]
rewards["money: 1200", "xp: 100"]

I mob nati da uno spawner non contano: è l'impostazione globale in config.yml, e qui si potrebbe sovrascrivere con "no-spawner-mobs: false" se una quest dovesse contare anche dentro una mob farm.

Ancora 11 voci con la stessa forma di mine_stone: evening_fishing, furnace_running, field_work, craft_bench, ore_day, shearing_day, animal_pen, builder_day, long_walk, nether_patrol, full_day
quests.wood_run7 chiavi
display"<white>Firewood for tonight"
description["<gray>A forest, an axe, an hour."]
icon-materialIRON_AXE
difficultyEASY
weight2.0
objectives[{ type: log_chop, amount: 128, no-placed-bloc…]
no-placed-blocks

Un tronco che hai piantato stamattina non conta. È il freno anti-farm generale, scritto esplicitamente qui perché questa è proprio la scorciatoia a cui qualcuno penserebbe.

rewards["bundle: small-reward"]
Il cambio di ritmo

Peso basso: devono capitare, non essere attese.

quests.any_way8 chiavi
display"<white>Your way"
description
["<gray>Any one of these things.", "<dark_gray>One is enough."]+1
icon-materialCOMPASS
difficultyMEDIUM
weight0.9
modeany

"any" invece del predefinito "all": il primo obiettivo completato chiude la quest. È la giornaliera che non dice a nessuno come deve passare la serata.

objectives
[{ type: ore_mine, amount: 100 }, { type: mob_kill, amount: 60 }, { type: item_fish, amount: 30 }, { type: crop_harvest, amount: 250 }]+3
rewards["money: 1300", "xp: 120"]

Esempio quests/weekly.yml

Note del file

LE SETTIMANALI: la stessa forma delle giornaliere, una taglia in più.

Una settimanale non è una giornaliera con un numero più grande. Una giornaliera è qualcosa che finisci stasera; una settimanale è qualcosa a cui torni. Cinquecento minerali, mille raccolti, un drago: nessuno sta in una serata, tutti stanno in una settimana, ed è tutta qui la differenza.

Dodici in tutto, tre assegnate il lunedì. Chi le finisce tutte e tre riceve la ricompensa di gruppo in fondo al blocco "group" - e con dodici nel file, la settimana dopo le tre sono diverse.

DOVE CAMBIA LA SETTIMANA lo decidono cycles.week-starts-on e cycles.reset-at in config.yml, non questo file. L'impostazione di fabbrica è lunedì alle 04:00, perché chi gioca all'una di notte sta ancora giocando la domenica sera.

I cicli automatici sono una funzione Premium. Nella versione gratuita queste quest esistono e funzionano, semplicemente non si rinnovano da sole.

Chiavi e valori sono in inglese, e lo sono anche "display" e "description", cioè ciò che legge il giocatore: cambiali, sono tuoi. Una versione italiana di questo file è in esempi/it_IT/quests/weekly.yml. Non viene caricata: copiala al posto di questo per usarla.

config-version1
group8 chiavi
idweekly
display"<gold>Weeklies"
description["<gray>Three at a time, renewed on Monday."]
iconGOLDEN_APPLE
order2
periodWEEKLY
size3
completion-rewards
["money: 15000", "xp: 500", "crate: magic 1", "broadcast: <gold><player> finished every weekly."]+1
quests12 chiavi
Sottosuolo
quests.deep_miner7 chiavi
display"<white>In the depths"
description["<gray>Below sea level, where it is worth it."]
icon-materialDEEPSLATE
difficultyMEDIUM
weight1.5
objectives[{ type: ore_mine, amount: 500, max-y: 0, no-p…]
rewards["bundle: medium-reward"]
Ancora 10 voci con la stessa forma di deep_miner: stone_week, clear_cut, great_harvest, architect, foundry, tough_skin, boss_week, sea_week, enchanter, trader_week
In superficie
Combattimento
quests.exterminator7 chiavi
display"<white>Exterminator"
description["<gray>Five hundred monsters, and monsters on…]
icon-materialNETHERITE_SWORD
difficultyMEDIUM
weight1.2
objectives[{ type: mob_kill, amount: 500, hostile-only:…]
hostile-only

Solo creature ostili: uccidere mucche non è combattere.

rewards["money: 6000", "bundle: hunter-crate"]

Tutta la documentazione