Configurazione
ShadowQuests
Missioni infinite con premi di qualunque tipo, e un editor che si usa in gioco.
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.
Nessuna impostazione trovata
Prova con un’altra parola, oppure cerca in tutti i plugin.
Impostazioni
I file che decidono come si comporta il plugin. Si parte da qui.
config.yml
Impostazioni generali 63 impostazioni
config.ymlplugins/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-version1Salvataggio dati
storage8 chiavistorage.mysql7 chiavienabledfalsefalse = 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.1port3306databaseshadowquestsusernamerootpassword""parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"storagetable-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-localtrueMySQL 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 chiavimaximum-pool-size10minimum-idle2connection-timeout-ms10000idle-timeout-ms600000max-lifetime-ms1800000storage.h21 chiaveauto-serverfalsePermette a un altro processo (un pannello web, per dire) di aprire lo stesso file H2 mentre il server è acceso. Serve di rado.
storage.history2 chiavienabledtrueIl 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-days90Più 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 chiavimodeAUTOAUTO = attivo quando usi MySQL, spento sul database locale. ON | OFF per decidere tu.
primarytrueIMPORTANTE: in un network UN SOLO server deve avere primary: true. È quello che ripulisce il registro dei messaggi.
server-idautoUn 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 chiavitimezone"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-onMONDAYDove 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 chiavionly[ ]except[lobby]Quest
quests3 chiaviauto-claimfalseCon 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 chiaveLe 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-canceltruequestskeep-history-days30Dopo 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 chiaviignore-afktrueChi 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-second60Quanti 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-mobstrueI 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-blockstrueUn 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-memory20000Quante 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 chiavidefault-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-localetrueCon true ogni giocatore vede i messaggi nella lingua del proprio client, quando esiste un file per quella lingua.
announce-progresstrueI 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-resettrueannounce-rewardstrueannounce-on-jointruecomplete-titletruecomplete-sound"entity.player.levelup 0.7 1.2"messages.bar3 chiavilength20full"|"empty"|"messagesfree-credit-linetrueLa 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 chiavienabledtrueCon 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 chiaviintegrations.suite1 chiaveenabledtrueCi presentiamo a ShadowEssentials, così il pannello della suite ci elenca con la versione giusta.
integrations.crates1 chiavegive-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 chiavegrant-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 chiaviLA 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-days7Quanti 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-iptrueChiedi 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 chiavienabledtrueplugin-id0L'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 chiavelog-sqlfalseScrive 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
npcs.ymlplugins/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-version1npcs4 chiaviminer[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
rewards.ymlplugins/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-version1bundles12 chiaviLa scala
bundlesstarter-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.
bundlesbuilder-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
lang/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 staffI 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.
| File | Lingua | Testi |
|---|---|---|
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
prefix1common19command10input4condition22objective144quest60chain5reward62npc4branding1license41admin70editor172menu27
Altro
Contenuti pronti, esempi, importazioni: i file che si copiano e si modificano come modello.
quests/
Le missioni, un gruppo per file 9 file
quests/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.ymldaily.ymlexamples.ymlminer-chain.ymlmonthly.ymlsea-chain.ymlsuite.ymlwarrior-chain.ymlweekly.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-version1group7 chiaviidexamplesdisplay"<gray>Examples"description["<gray>To be read and copied."]iconWRITABLE_BOOKorder99periodNEVERsizeallquests2 chiaviquests.example_full10 chiavidisplay"<white>Example: everything that can be written"description["<gray>Open the file to see how it is made."]quests.example_full.icon3 chiavimaterialENCHANTED_BOOKname"<white>Example"glowtruequests.example_fulldifficultyHARDtime-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-completions3Quante 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
descriptionLa riga che legge il giocatore. Senza, ne viene costruita una dal tipo e dal bersaglio.
modeallServono 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 chiavidisplay"<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_STARdifficultyEPICobjectives[{ type: game_win, amount: 3 }, { type: money_earn, amount: 500 }, { type: crate_open, target: […], amount: 1 }]+2
typeShadowGames
typeShadowEconomy
typeShadowCrazyChest
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-version1group8 chiaviidsuitedisplay"<dark_purple>Suite feats"description["<gray>Quests that cross more than one plugin.", "<gray>Three at a time, renewed every Monday."]+1
iconNETHER_STARorder4periodWEEKLYsize3completion-rewards["money: 20000", "pass-xp: 3000", "crate: epic 1", "broadcast: <dark_purple><player> finished this week's feats."]+2
quests12 chiaviShadowGames
quests.arena_champion7 chiavidisplay"<white>Five wins"description["<gray>In the arena, not in the world."]icon-materialGOLDEN_HELMETdifficultyMEDIUMweight1.2objectives[{ type: game_win, amount: 5, description: "<g…]rewards["money: 8000", "pass-xp: 1500", "crate: magic 1"]+1
arena_champion:
arena_blood, war_games, bed_breaker, merchant_week, big_spender, investor, token_hunter, crate_week, lucky_handsShadowEconomy
quests.rich_week7 chiavidisplay"<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_INGOTdifficultyMEDIUMweight1.2objectives[{ type: money_earn, amount: 20000, descriptio…]typeSenza 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 chiavidisplay"<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 chiavimaterialNETHER_STARname"<gradient:#B388FF:#4527A0>The triple crown</gradient>"glowtruequests.triple_crowndifficultyEPICweight0.5modeallobjectives[{ 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
typeShadowGames
typeShadowEconomy
typeShadowCrazyChest
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-version1group8 chiaviiddailydisplay"<aqua>Dailies"description["<gray>Renewed every day."]iconCLOCKorder1periodDAILYDAILY | WEEKLY | MONTHLY | YEARLY | NEVER
size3Quante 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 chiaviGli scambi. Il grosso del mazzo: peso alto, niente sorprese
quests.mine_stone7 chiavidisplay"<white>An everyday miner"description["<gray>Stone does not dig itself."]icon-materialSTONEdifficultyEASYweight2.0objectives[{ type: block_break, target: […], amount: 300…]rewards["bundle: small-reward"]quests.night_hunt7 chiavidisplay"<white>Night hunt"description["<gray>Whatever comes out when the sun goes d…]icon-materialBONEdifficultyMEDIUMweight2.0objectives[{ 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.
mine_stone:
evening_fishing, furnace_running, field_work, craft_bench, ore_day, shearing_day, animal_pen, builder_day, long_walk, nether_patrol, full_dayquests.wood_run7 chiavidisplay"<white>Firewood for tonight"description["<gray>A forest, an axe, an hour."]icon-materialIRON_AXEdifficultyEASYweight2.0objectives[{ type: log_chop, amount: 128, no-placed-bloc…]no-placed-blocksUn 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 chiavidisplay"<white>Your way"description["<gray>Any one of these things.", "<dark_gray>One is enough."]+1
icon-materialCOMPASSdifficultyMEDIUMweight0.9modeany"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-version1group8 chiaviidweeklydisplay"<gold>Weeklies"description["<gray>Three at a time, renewed on Monday."]iconGOLDEN_APPLEorder2periodWEEKLYsize3completion-rewards["money: 15000", "xp: 500", "crate: magic 1", "broadcast: <gold><player> finished every weekly."]+1
quests12 chiaviSottosuolo
quests.deep_miner7 chiavidisplay"<white>In the depths"description["<gray>Below sea level, where it is worth it."]icon-materialDEEPSLATEdifficultyMEDIUMweight1.5objectives[{ type: ore_mine, amount: 500, max-y: 0, no-p…]rewards["bundle: medium-reward"]deep_miner:
stone_week, clear_cut, great_harvest, architect, foundry, tough_skin, boss_week, sea_week, enchanter, trader_weekIn superficie
Combattimento
quests.exterminator7 chiavidisplay"<white>Exterminator"description["<gray>Five hundred monsters, and monsters on…]icon-materialNETHERITE_SWORDdifficultyMEDIUMweight1.2objectives[{ type: mob_kill, amount: 500, hostile-only:…]hostile-onlySolo creature ostili: uccidere mucche non è combattere.
rewards["money: 6000", "bundle: hunter-crate"]