IT | Update to latest commits
This commit is contained in:
parent
dc54e0786e
commit
bca09bd7ab
@ -14,9 +14,9 @@ Questo capitolo mostra come registrare nuovi biomi, come controllarne la distrib
|
||||
|
||||
- [Cosa sono i biomi?](#cosa-sono-i-biomi)
|
||||
- [Collocare un bioma](#collocare-un-bioma)
|
||||
- [Calore e umidità](#calore-e-umidita)
|
||||
- [Visualizzare i confini usando i diagrammi di Voronoi](#visualizzare-i-confini-usando-i-diagrammi-di-voronoi)
|
||||
- [Creare un diagramma di Voronoi usando Geogebra](#creare-un-diagramma-di-voronoi-usando-geogebra)
|
||||
- [Calore e umidità](#calore-e-umidità)
|
||||
- [Visualizzare i confini usando i diagrammi di Voronoi](#visualizzare-i-confini-usando-i-diagrammi-di-voronoi)
|
||||
- [Creare un diagramma di Voronoi usando Geogebra](#creare-un-diagramma-di-voronoi-usando-geogebra)
|
||||
- [Registrare un bioma](#registrare-un-bioma)
|
||||
- [Cosa sono le decorazioni?](#cosa-sono-le-decorazioni)
|
||||
- [Registrare una decorazione semplice](#registrare-una-decorazione-semplice)
|
||||
|
@ -16,15 +16,13 @@ Capire la struttura base della cartella di una mod è un requisito essenziale pe
|
||||
- [Cosa sono i giochi e le mod?](#cosa-sono-i-giochi-e-le-mod)
|
||||
- [Dove vengono salvate le mod?](#dove-vengono-salvate-le-mod)
|
||||
- [Cartella mod](#cartella-mod)
|
||||
- [Dipendenze](#dipendenze)
|
||||
- [mod.conf](#modconf)
|
||||
- [depends.txt](#dependstxt)
|
||||
- [mod.conf](#modconf)
|
||||
- [Dipendenze](#dipendenze)
|
||||
- [Pacchetti mod](#pacchetti-mod-mod-pack)
|
||||
- [Esempio](#esempio)
|
||||
- [Cartella mod](#cartella-mod-1)
|
||||
- [depends.txt](#dependstxt-1)
|
||||
- [init.lua](#initlua)
|
||||
- [mod.conf](#modconf-1)
|
||||
- [Cartella mod](#cartella-mod-1)
|
||||
- [init.lua](#initlua)
|
||||
- [mod.conf](#modconf-1)
|
||||
|
||||
|
||||
## Cosa sono i giochi e le mod?
|
||||
@ -101,7 +99,17 @@ Solo il file init.lua è necessario in una mod per eseguirla al lanciare un gioc
|
||||
tuttavia, mod.conf è consigliato e altri componenti potrebbero essere richiesti a
|
||||
seconda di quello che si vuole fare.
|
||||
|
||||
## Dipendenze
|
||||
## mod.conf
|
||||
|
||||
Questo file è utilizzato per i metadati della mod, che includono il suo nome, la descrizione e altre informazioni.
|
||||
|
||||
Per esempio:
|
||||
|
||||
name = lamiamod
|
||||
description = Aggiunge X, Y, e Z
|
||||
depends = mod1, mod2
|
||||
|
||||
### Dipendenze
|
||||
|
||||
Una dipendenza avviene quando una mod ne richiede un'altra da avviare prima di essa.
|
||||
Una mod potrebbe infatti richiedere il codice di quest'ultima, i suoi oggetti o altre risorse.
|
||||
@ -111,28 +119,11 @@ Entrambe richiedono che la mod richiesta venga caricata prima, con la differenza
|
||||
|
||||
Una dipendenza opzionale è utile se si vuole integrare opzionalmente un'altra mod; può abilitare contenuti extra se l'utente desidera usare entrambe le mod in contemporanea.
|
||||
|
||||
Le dipendenze vanno elencate in mod.conf.
|
||||
Le dipendenze sono specificate in un elenco separato da virgole in mod.conf.
|
||||
|
||||
### mod.conf
|
||||
|
||||
Questo file è utilizzato per i metadati della mod, che includono il suo nome, la descrizione e altre informazioni.
|
||||
Per esempio:
|
||||
|
||||
name = lamiamod
|
||||
description = Aggiunge X, Y, e Z.
|
||||
depends = mod1, mod2
|
||||
optional_depends = mod3
|
||||
|
||||
### depends.txt
|
||||
|
||||
Per questioni di compatibilità con le versioni 0.4.x di Minetest, al posto di specificare le dipendenze solamente in mod.conf, c'è bisogno di fornire un file depends.txt nel quale vanno elencate tutte le dipendenze:
|
||||
|
||||
mod1
|
||||
mod2
|
||||
mod3?
|
||||
|
||||
Ogni nome mod occupa una riga, e quelli seguiti da un punto di domanda indicano una dipendenza opzionale.
|
||||
|
||||
## Pacchetti mod (mod pack)
|
||||
|
||||
Le mod possono essere raggruppate in pacchetti che permettono di confezionarne e spostarne più alla volta.
|
||||
@ -155,13 +146,9 @@ Segue un esempio che mette insieme tutto ciò discusso finora:
|
||||
lamiamod
|
||||
├── textures
|
||||
│ └── lamiamod_nodo.png
|
||||
├── depends.txt
|
||||
├── init.lua
|
||||
└── mod.conf
|
||||
|
||||
### depends.txt
|
||||
default
|
||||
|
||||
### init.lua
|
||||
```lua
|
||||
print("Questo file parte al caricamento!")
|
||||
@ -178,7 +165,7 @@ minetest.register_node("lamiamod:nodo", {
|
||||
descriptions = Aggiunge un nodo
|
||||
depends = default
|
||||
|
||||
Questa mod ha come nome "lamiamod". Ha tre file di testo: init.lua, mod.conf e depends.txt.\\
|
||||
Questa mod ha come nome "lamiamod". Ha due file di testo: init.lua e mod.conf.\\
|
||||
Lo script stampa un messaggio e poi registra un nodo – che sarà spiegato nel prossimo capitolo.\\
|
||||
C'è una sola dipendenza, la [mod default](https://content.minetest.net/metapackages/default/), che
|
||||
si trova solitamente nel Minetest Game.\\
|
||||
|
@ -13,14 +13,14 @@ In questo capitolo parleremo della programmazione in Lua, degli strumenti necess
|
||||
|
||||
- [Editor di codice](#editor-di-codice)
|
||||
- [Programmare in Lua](#programmare-in-lua)
|
||||
- [Flusso del programma](#flusso-del-programma)
|
||||
- [Tipi di variabili](#tipi-di-variabili)
|
||||
- [Operatori matematici](#operatori-matematici)
|
||||
- [Selezione](#selezione)
|
||||
- [Operatori logici](#operatori-logici)
|
||||
- [Flusso del programma](#flusso-del-programma)
|
||||
- [Tipi di variabili](#tipi-di-variabili)
|
||||
- [Operatori matematici](#operatori-matematici)
|
||||
- [Selezione](#selezione)
|
||||
- [Operatori logici](#operatori-logici)
|
||||
- [Programmare](#programmare)
|
||||
- [Portata locale e globale](#portata-locale-e-globale)
|
||||
- [Local dovrebbe essere usato il più possibile](#local-dovrebbe-essere-usato-il-piu-possibile)
|
||||
- [Local dovrebbe essere usato il più possibile](#local-dovrebbe-essere-usato-il-piu-possibile)
|
||||
- [Inclusione di altri script Lua](#inclusione-di-altri-script-lua)
|
||||
|
||||
## Editor di codice
|
||||
|
@ -9,10 +9,10 @@ idx: 7.1
|
||||
|
||||
Il punto forte di Minetest è quello di poter sviluppare giochi con facilità senza il bisogno di costruirsi il proprio motore grafico voxel, i propri algoritmi voxel, o la propria parte network.
|
||||
|
||||
- [Cos'è un gioco?](#cose-un-gioco)
|
||||
- [Cos'è un gioco?](#cosè-un-gioco)
|
||||
- [Cartella di un gioco](#cartella-di-un-gioco)
|
||||
- [Compatibilità tra giochi](#compatibilita-tra-giochi)
|
||||
- [Compatibilità delle API](#compatibilita-delle-api)
|
||||
- [Compatibilità tra giochi](#compatibilità-tra-giochi)
|
||||
- [Compatibilità delle API](#compatibilità-delle-api)
|
||||
- [Gruppi e alias](#gruppi-e-alias)
|
||||
- [Il tuo turno](#il-tuo-turno)
|
||||
|
||||
|
@ -16,12 +16,12 @@ Fornire spiegazioni dettagliate non rientra tuttavia nell'ambito di questo libro
|
||||
Se si vuole approfondire, ci sono comunque molti [buoni tutorial online](http://www.photonstorm.com/art/tutorials-art/16x16-pixel-art-tutorial) disponibili, che si occupano di pixel art in modo molto più dettagliato.
|
||||
|
||||
- [Tecniche](#tecniche)
|
||||
- [Usare la matita](#usare-la-matita)
|
||||
- [Piastrellatura (tiling)](#piastrellatura-tiling)
|
||||
- [Trasparenza](#trasparenza)
|
||||
- [Usare la matita](#usare-la-matita)
|
||||
- [Piastrellatura (tiling)](#piastrellatura-tiling)
|
||||
- [Trasparenza](#trasparenza)
|
||||
- [Programmi](#programmi)
|
||||
- [MS Paint](#ms-paint)
|
||||
- [GIMP](#gimp)
|
||||
- [MS Paint](#ms-paint)
|
||||
- [GIMP](#gimp)
|
||||
|
||||
## Tecniche
|
||||
|
||||
|
@ -19,12 +19,12 @@ In questo capitolo, imparerai come usare e manipolare gli inventari, siano essi
|
||||
- [ItemStack](#itemstack)
|
||||
- [Collocazione inventari](#collocazione-inventari)
|
||||
- [Liste](#liste)
|
||||
- [Dimensione e ampiezza](#dimensione-e-ampiezza)
|
||||
- [Controllare il contenuto](#controllare-il-contenuto)
|
||||
- [Dimensione e ampiezza](#dimensione-e-ampiezza)
|
||||
- [Controllare il contenuto](#controllare-il-contenuto)
|
||||
- [Modificare inventari e ItemStack](#modificare-inventari-e-itemstack)
|
||||
- [Aggiungere a una lista](#aggiungere-a-una-lista)
|
||||
- [Rimuovere oggetti](#rimuovere-oggetti)
|
||||
- [Manipolazione pile](#manipolazione-pile)
|
||||
- [Aggiungere a una lista](#aggiungere-a-una-lista)
|
||||
- [Rimuovere oggetti](#rimuovere-oggetti)
|
||||
- [Manipolazione pile](#manipolazione-pile)
|
||||
- [Usura](#usura)
|
||||
- [Tabelle Lua](#tabelle-lua)
|
||||
|
||||
|
@ -21,12 +21,12 @@ I parametri sono infine usati per controllare come un nodo viene renderizzato in
|
||||
|
||||
- [Nodi cubici: normali e a facciate piene](#nodi-cubici-normali-e-a-facciate-piene)
|
||||
- [Nodi vitrei](#nodi-vitrei)
|
||||
- [Vitreo incorniciato](#vitreo-incorniciato)
|
||||
- [Vitreo incorniciato](#vitreo-incorniciato)
|
||||
- [Nodi d'aria](#nodi-d-aria)
|
||||
- [Luce e propagazione solare](#luce-e-propagazione-solare)
|
||||
- [Nodi liquidi](#nodi-liquidi)
|
||||
- [Nodi complessi](#nodi-complessi)
|
||||
- [Nodi complessi a muro](#nodi-complessi-a-muro)
|
||||
- [Nodi complessi a muro](#nodi-complessi-a-muro)
|
||||
- [Nodi mesh](#nodi-mesh)
|
||||
- [Nodi insegna](#nodi-insegna)
|
||||
- [Nodi pianta](#nodi-pianta)
|
||||
|
@ -13,17 +13,17 @@ Saper registrare nuovi nodi, oggetti fabbricabili e conseguenti ricette, è un r
|
||||
|
||||
- [Cosa sono i nodi e gli oggetti?](#cosa-sono-i-nodi-e-gli-oggetti)
|
||||
- [Registrare gli oggetti](#registrare-gli-oggetti)
|
||||
- [Nomi oggetto e alias](#nomi-oggetto-e-alias)
|
||||
- [Texture](#texture)
|
||||
- [Nomi oggetto e alias](#nomi-oggetto-e-alias)
|
||||
- [Texture](#texture)
|
||||
- [Registrare un nodo base](#registrare-un-nodo-base)
|
||||
- [Azioni e callback](#azioni-e-callback)
|
||||
- [on_use](#onuse)
|
||||
- [on_use](#onuse)
|
||||
- [Fabbricazione](#fabbricazione)
|
||||
- [Fisse (shaped)](#fisse-shaped)
|
||||
- [Informi (shapeless)](#informi-shapeless)
|
||||
- [Cottura (cooking) e Carburante (fuel)](#cottura-cooking-e-carburante-fuel)
|
||||
- [Fisse (shaped)](#fisse-shaped)
|
||||
- [Informi (shapeless)](#informi-shapeless)
|
||||
- [Cottura (cooking) e Carburante (fuel)](#cottura-cooking-e-carburante-fuel)
|
||||
- [Gruppi](#gruppi)
|
||||
- [Strumenti, Capacità e Friabilità](#strumenti-capacita-e-friabilita)
|
||||
- [Strumenti, Capacità e Friabilità](#strumenti-capacità-e-friabilità)
|
||||
|
||||
## Cosa sono i nodi e gli oggetti?
|
||||
|
||||
|
@ -13,11 +13,11 @@ In questo capitolo imparerai come eseguire semplici azioni sulla mappa.
|
||||
|
||||
- [Struttura della mappa](#struttura-della-mappa)
|
||||
- [Lettura](#lettura)
|
||||
- [Lettura dei nodi](#lettura-dei-nodi)
|
||||
- [Ricerca dei nodi](#ricerca-dei-nodi)
|
||||
- [Lettura dei nodi](#lettura-dei-nodi)
|
||||
- [Ricerca dei nodi](#ricerca-dei-nodi)
|
||||
- [Scrittura](#scrittura)
|
||||
- [Scrittura dei nodi](#scrittura-dei-nodi)
|
||||
- [Rimozione dei nodi](#rimozione-dei-nodi)
|
||||
- [Scrittura dei nodi](#scrittura-dei-nodi)
|
||||
- [Rimozione dei nodi](#rimozione-dei-nodi)
|
||||
- [Caricamento blocchi](#caricamento-blocchi)
|
||||
- [Cancellazione blocchi](#cancellazione-blocchi)
|
||||
|
||||
|
@ -86,18 +86,6 @@ Come mostrato nella prossima sezione, le entità possono avere delle proprietà
|
||||
Un'entità ha una tabella di definizione che ricorda quella degli oggetti (intesi come *items*).
|
||||
Questa tabella può contenere metodi di callback, proprietà iniziali e membri personalizzati.
|
||||
|
||||
Tuttavia, c'è una differenza sostanziale tra le due; perché quando un'entità appare (come quando viene creata o caricata) una nuova tabella viene generata per quell'entità, *ereditando* le proprietà dalla tabella originaria tramite una metatabella.
|
||||
Ci si riferisce solitamente a questa nuova tabella con Tabella di Entità Lua e può essere usata per immagazzinare variabili per quella specifica entità.
|
||||
|
||||
Le metatabelle rappresentano un aspetto importante di Lua, che bisogna tenere bene a mente in quanto sono una parte essenziale del linguaggio.
|
||||
|
||||
In parole povere, le metatabelle permettono di controllare come si comporta una tabella quando viene usata una certa sintassi in Lua.
|
||||
Vengono usate soprattutto per la loro abilità di usare un'altra tabella come prototipo, fungendo da valori di base di quest'ultima quando essa non contiene le proprietà e i metodi richiesti.
|
||||
|
||||
Mettiamo che si voglia accedere al campo X della tabella A.
|
||||
Se la tabella A ha quel campo, allora ritornerà normalmente.
|
||||
Tuttavia, se X non esiste ma esiste una metatabella B associata ad A, B verrà ispezionata alla ricerca di un eventuale X prima di ritornare (eventualmente) nil.
|
||||
|
||||
```lua
|
||||
local MiaEntita = {
|
||||
initial_properties = {
|
||||
@ -120,6 +108,19 @@ function MiaEntita:imposta_messaggio(msg)
|
||||
end
|
||||
```
|
||||
|
||||
Tuttavia, c'è una differenza sostanziale tra entità e oggetti; perché quando un'entità appare (come quando viene creata o caricata) una nuova tabella viene generata per quell'entità, *ereditando* le proprietà dalla tabella originaria tramite una metatabella.
|
||||
|
||||
<!--
|
||||
Questa eredità avviene usando una metatabella. Le metatabelle rappresentano un aspetto importante di Lua, che bisogna tenere bene a mente in quanto sono una parte essenziale del linguaggio.
|
||||
|
||||
In parole povere, le metatabelle permettono di controllare come si comporta una tabella quando viene usata una certa sintassi in Lua.
|
||||
Vengono usate soprattutto per la loro abilità di usare un'altra tabella come prototipo, fungendo da valori di base di quest'ultima quando essa non contiene le proprietà e i metodi richiesti.
|
||||
|
||||
Mettiamo che si voglia accedere al campo `x` della tabella `a` (`a.x`).
|
||||
Se la tabella `a` ha quel campo, allora ritornerà normalmente.
|
||||
Tuttavia, se `a.x` non esiste ma esiste una metatabella `b` associata ad `a`, `b` verrà ispezionata alla ricerca di un eventuale `b.x` da ritornare al posto di `nil`.
|
||||
-->
|
||||
|
||||
Sia la tabella di un ObjectRef che quella di un'entità forniscono modi per ottenerne la controparte:
|
||||
|
||||
```lua
|
||||
|
@ -14,13 +14,13 @@ redirect_from:
|
||||
In questo capitolo imparerai i vari modi per immagazzinare dati.
|
||||
|
||||
- [Metadati](#metadati)
|
||||
- [Cos'è un metadato?](#cos-e-un-metadato)
|
||||
- [Ottenere i metadati di un oggetto](#ottenere-i-metadati-di-un-oggetto)
|
||||
- [Lettura e scrittura](#lettura-e-scrittura)
|
||||
- [Chiavi speciali](#chiavi-speciali)
|
||||
- [Immagazzinare tabelle](#immagazzinare-tabelle)
|
||||
- [Metadati privati](#metadati-privati)
|
||||
- [Tabelle Lua](#tabelle-lua)
|
||||
- [Cos'è un metadato?](#cos-e-un-metadato)
|
||||
- [Ottenere i metadati di un oggetto](#ottenere-i-metadati-di-un-oggetto)
|
||||
- [Lettura e scrittura](#lettura-e-scrittura)
|
||||
- [Chiavi speciali](#chiavi-speciali)
|
||||
- [Immagazzinare tabelle](#immagazzinare-tabelle)
|
||||
- [Metadati privati](#metadati-privati)
|
||||
- [Tabelle Lua](#tabelle-lua)
|
||||
- [Storaggio mod](#storaggio-mod)
|
||||
- [Database](#database)
|
||||
- [Decidere quale usare](#decidere-quale-usare)
|
||||
@ -107,7 +107,7 @@ data = minetest.deserialize(minetest:get_string("foo"))
|
||||
|
||||
### Metadati privati
|
||||
|
||||
Le voci nei metadati di un nodo possono essere segnate come private, senza venire quindi inviate al client (al contrario delle normali).
|
||||
Di base, tutti i metadati dei nodi sono inviati al client. Rendendo le loro chiavi private, questo invece non succede.
|
||||
|
||||
```lua
|
||||
meta:set_string("segreto", "asd34dn")
|
||||
|
@ -29,16 +29,16 @@ Tieni presente che se non si ha bisogno di ricevere input dal giocatore, per ese
|
||||
|
||||
- [Coordinate reali o datate](#coordinate-reali-o-datate)
|
||||
- [Anatomia di un formspec](#anatomia-di-un-formspec)
|
||||
- [Elementi](#elementi)
|
||||
- [Intestazione](#intestazione)
|
||||
- [Elementi](#elementi)
|
||||
- [Intestazione](#intestazione)
|
||||
- [Esempio: indovina un numero](#esempio-indovina-un-numero)
|
||||
- [Imbottitura e spaziatura](#imbottitura-e-spaziatura)
|
||||
- [Ricevere i moduli di compilazione](#ricevere-i-moduli-di-compilazione)
|
||||
- [Contesti](#contesti)
|
||||
- [Imbottitura e spaziatura](#imbottitura-e-spaziatura)
|
||||
- [Ricevere i moduli di compilazione](#ricevere-i-moduli-di-compilazione)
|
||||
- [Contesti](#contesti)
|
||||
- [Ricavare un formspec](#ricavare-un-formspec)
|
||||
- [Formspec nei nodi](#formspec-nei-nodi)
|
||||
- [Inventario del giocatore](#inventario-del-giocatore)
|
||||
- [Il tuo turno](#il-tuo-turno)
|
||||
- [Formspec nei nodi](#formspec-nei-nodi)
|
||||
- [Inventario del giocatore](#inventario-del-giocatore)
|
||||
- [Il tuo turno](#il-tuo-turno)
|
||||
|
||||
|
||||
## Coordinate reali o datate
|
||||
@ -48,6 +48,8 @@ Il modo in cui elementi diversi venivano posizionati nel formspec variava in man
|
||||
Da Minetest 5.1.0, tuttavia, è stata introdotta una funzione chiamata Coordinate Reali (*real coordinates*), la quale punta a correggere questo comportamento tramite l'introduzione di un sistema di coordinate coerente.
|
||||
L'uso delle coordinate reali è caldamente consigliato, onde per cui questo capitolo non tratterà di quelle vecchie.
|
||||
|
||||
Usando una versione del formspec maggiore o uguale a 2, esse saranno abilitate di base.
|
||||
|
||||
## Anatomia di un formspec
|
||||
|
||||
### Elementi
|
||||
@ -72,12 +74,12 @@ L'intestazione di un formspec contiene informazioni che devono apparire prima di
|
||||
Questo include la grandezza del formspec, la posizione, l'ancoraggio, e se il tema specifico del gioco debba venir applicato.
|
||||
|
||||
Gli elementi nell'intestazione devono essere definiti in un ordine preciso, altrimenti ritorneranno un errore.
|
||||
L'ordine è dato nel paragrafo qui in alto e, come sempre, documentato inlua_api.txt.
|
||||
L'ordine è dato nel paragrafo qui in alto e, come sempre, documentato in lua_api.txt.
|
||||
|
||||
La grandezza è in caselle formspec - un'unità di misura che è circa 64 pixel, ma varia a seconda della densità dello schermo e delle impostazioni del client.
|
||||
Ecco un formspec di 2x2:
|
||||
|
||||
formspec_version[3]
|
||||
formspec_version[4]
|
||||
size[2,2]
|
||||
|
||||
Notare come è stata esplicitamente definita la versione del linguaggio: senza di essa, il sistema datato sarebbe stato usato di base - che avrebbe impossibilitato il posizionamento coerente degli elementi e altre nuove funzioni.
|
||||
@ -86,9 +88,8 @@ La posizione e l'ancoraggio degli elementi sono usati per collocare il formspec
|
||||
La posizione imposta dove si troverà (con valore predefinito al centro, `0.5,0.5`), mentre l'ancoraggio da dove partire, permettendo di allineare il formspec con i bordi dello schermo.
|
||||
Per esempio, lo si può posizionare ancorato a sinistra in questo modo:
|
||||
|
||||
formspec_version[3]
|
||||
formspec_version[4]
|
||||
size[2,2]
|
||||
real_coordinates[true]
|
||||
position[0,0.5]
|
||||
anchor[0,0.5]
|
||||
|
||||
@ -120,6 +121,7 @@ function indovina.prendi_formspec(nome)
|
||||
local testo = "Sto pensando a un numero... Prova a indovinare!"
|
||||
|
||||
local formspec = {
|
||||
"formspec_version[4]",
|
||||
"size[6,3.476]",
|
||||
"label[0.375,0.5;", minetest.formspec_escape(testo), "]",
|
||||
"field[0.375,1.25;5.25,0.8;numero;Numero;]",
|
||||
@ -295,7 +297,7 @@ minetest.register_node("miamod:tastodestro", {
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec",
|
||||
"formspec_version[3]" ..
|
||||
"formspec_version[4]" ..
|
||||
"size[5,5]"..
|
||||
"label[1,1;Questo è mostrato al premere col destro]"..
|
||||
"field[1,2;2,1;x;x;]")
|
||||
|
@ -17,7 +17,7 @@ Non c'è il modo giusto e il modo sbagliato per ideare una mod, in quanto il lor
|
||||
- [Coesione, dipendenze, e separazione degli ambiti](#coesione-dipendenze-e-separazione-degli-ambiti)
|
||||
- [Osservatore](#osservatore)
|
||||
- [Modello-Vista-Controllo](#modello-vista-controllo)
|
||||
- [API-Vista](#api-vista)
|
||||
- [API-Vista](#api-vista)
|
||||
- [Conclusione](#conclusione)
|
||||
|
||||
|
||||
|
@ -10,51 +10,26 @@ redirect_from: /it/chapters/common_mistakes.html
|
||||
|
||||
Questo capitolo illustra gli errori più comuni e come evitarli.
|
||||
|
||||
- [Non salvare mai ObjectRef (giocatori ed entità)](#non-salvare-mai-objectref-giocatori-ed-entita)
|
||||
- [Fai attenzione quando salvi gli ObjectRef in delle variabili (giocatori ed entità)](#fai-attenzione-quando-salvi-gli-objectref-in-delle-variabili-giocatori-ed-entità)
|
||||
- [Non fidarti dei campi dei formspec](#non-fidarti-dei-campi-dei-formspec)
|
||||
- [Imposta gli ItemStack dopo averli modificati](#imposta-gli-itemstack-dopo-averli-modificati)
|
||||
|
||||
## Non salvare mai ObjectRef (giocatori ed entità)
|
||||
## Fai attenzione quando salvi gli ObjectRef in delle variabili (giocatori ed entità)
|
||||
|
||||
Se l'oggetto rappresentato da un ObjectRef viene rimosso - per esempio quando il giocatore si disconnette o un'entità viene rimossa dalla memoria - chiamare metodi su quell'oggetto causerà la chiusura improvvisa del server (*crash*).
|
||||
Un ObjectRef viene invalidato quando il giocatore o l'entità che esso rappresenta abbandona il gioco.
|
||||
Ciò si verifica quando un giocatore si disconnette, o quando un'entità viene rimossa dalla memoria.
|
||||
|
||||
Sbagliato:
|
||||
Da Minetest 5.2, i metodi degli ObjectRef ritorneranno sempre `nil` quando non validi.
|
||||
In altre parole, ogni chiamata verrà ignorata.
|
||||
|
||||
Si dovrebbe evitare quanto possibile di immagazzinare gli ObjectRef in delle variabili.
|
||||
Se ciò tuttavia accade, assicurati di controllare se esiste ancora, come illustrato qui di seguito:
|
||||
|
||||
```lua
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local function func()
|
||||
local pos = player:get_pos() -- MALE!
|
||||
-- `player` viene salvato per essere utilizzato dopo.
|
||||
-- Se il giocatore si disconnette, il server crasha
|
||||
end
|
||||
|
||||
minetest.after(1, func)
|
||||
|
||||
foobar[player:get_player_name()] = player
|
||||
-- RISCHIOSO
|
||||
-- Non è consigliato fare così.
|
||||
-- Usa invece minetest.get_connected_players() e minetest.get_player_by_name().
|
||||
end)
|
||||
```
|
||||
|
||||
Giusto:
|
||||
|
||||
```lua
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local function func(name)
|
||||
-- Tenta di ottenere il riferimento
|
||||
local player = minetest.get_player_by_name(name)
|
||||
|
||||
-- Controlla che il giocatore sia online
|
||||
if player then
|
||||
-- è online, procedo
|
||||
local pos = player:get_pos()
|
||||
end
|
||||
end
|
||||
|
||||
-- Passa il nome nella funzione
|
||||
minetest.after(1, func, player:get_player_name())
|
||||
end)
|
||||
-- questo codice funziona solo da Minetest 5.2 in poi
|
||||
if obj:get_pos() then
|
||||
-- è valido!
|
||||
end
|
||||
```
|
||||
|
||||
## Non fidarti dei campi dei formspec
|
||||
|
@ -13,11 +13,11 @@ In questo capitolo, imparerai come usare uno strumento chiamato LuaCheck per sca
|
||||
LuaCheck può essere usato in combinazione con l'editor per fornire avvertimenti vari.
|
||||
|
||||
- [Installare LuaCheck](#installare-luacheck)
|
||||
- [Windows](#windows)
|
||||
- [Linux](#linux)
|
||||
- [Windows](#windows)
|
||||
- [Linux](#linux)
|
||||
- [Eseguire LuaCheck](#eseguire-luacheck)
|
||||
- [Configurare LuaCheck](#configurare-luacheck)
|
||||
- [Risoluzione problemi](#risoluzione-problemi)
|
||||
- [Risoluzione problemi](#risoluzione-problemi)
|
||||
- [Uso nell'editor](#uso-nelleditor)
|
||||
- [Controllare i commit con Travis](#controllare-i-commit-con-travis)
|
||||
|
||||
|
@ -11,21 +11,21 @@ redirect_from: /it/chapters/releasing.html
|
||||
Rilasciare (o pubblicare) una mod permette ad altre persone di poterne usufruire.
|
||||
Una volta che una mod è stata rilasciata potrebbe venir usata nelle partite locali (a giocatore singolo) o nei server, inclusi quelli pubblici.
|
||||
|
||||
- [Scegliere la licenza](#scegliere-la-licenza)
|
||||
- [LGPL e CC-BY-SA](#lgpl-e-cc-by-sa)
|
||||
- [CC0](#cc0)
|
||||
- [MIT](#mit)
|
||||
- [Scegliere una licenza](#scegliere-una-licenza)
|
||||
- [LGPL e CC-BY-SA](#lgpl-e-cc-by-sa)
|
||||
- [CC0](#cc0)
|
||||
- [MIT](#mit)
|
||||
- [Impacchettare](#impacchettare)
|
||||
- [README.txt](#readmetxt)
|
||||
- [description.txt](#descriptiontxt)
|
||||
- [screenshot.png](#screenshotpng)
|
||||
- [README.txt](#readmetxt)
|
||||
- [mod.conf / game.conf](#modconf--gameconf)
|
||||
- [screenshot.png](#screenshotpng)
|
||||
- [Caricare](#caricare)
|
||||
- [Sistemi di Controllo Versione](#sistemi-di-controllo-versione)
|
||||
- [Allegati sul forum](#allegati-sul-forum)
|
||||
- [Sistemi di Controllo Versione](#sistemi-di-controllo-versione)
|
||||
- [Allegati sul forum](#allegati-sul-forum)
|
||||
- [Rilasciare su ContentDB](#rilasciare-su-contentdb)
|
||||
- [Creare la discussione sul forum](#creare-la-discussione-sul-forum)
|
||||
- [Titolo](#titolo)
|
||||
|
||||
## Scegliere la licenza
|
||||
## Scegliere una licenza
|
||||
|
||||
Avrai bisogno di specificare una licenza per la tua mod.
|
||||
Questo è importante perché dice alle altre persone cosa possono e non possono fare col tuo lavoro.
|
||||
@ -73,18 +73,18 @@ Il README dovrebbe dichiarare:
|
||||
* Versione corrente della mod;
|
||||
* Eventualmente, dove segnalare i problemi o comunque richiedere aiuto.
|
||||
|
||||
### description.txt
|
||||
### mod.conf / game.conf
|
||||
|
||||
Questo file spiega cosa fa la mod.
|
||||
Assicurati di aggiungere una descrizione che spieghi cosa fa la mod, usando la chiave `description`.
|
||||
Cerca di essere preciso e coinciso: dovrebbe essere breve perché il contenuto verrà mostrato nell'installer del motore di gioco, che ha uno spazio limitato.
|
||||
|
||||
Per esempio, consigliato:
|
||||
|
||||
Aggiunge zuppa, torte, pane e succhi.
|
||||
description = Aggiunge zuppa, torte, pane e succhi
|
||||
|
||||
Sconsigliato:
|
||||
|
||||
Cibo per Minetest.
|
||||
description = Cibo per Minetest
|
||||
|
||||
### screenshot.png
|
||||
|
||||
@ -95,84 +95,44 @@ Lo screen verrà mostrato nel bazar delle mod (sono tutte gratuite).
|
||||
## Caricare
|
||||
|
||||
Per far sì che un potenziale utente possa scaricare la tua mod, c'è bisogno di caricarla in uno spazio pubblico.
|
||||
Ci sono svariati modi per fare ciò quindi usa l'approccio che ritieni più opportuno; l'importante è che esso rispetti i requisiti qui elencati, ed eventuale richieste aggiuntive aggiunta dai moderatori del forum:
|
||||
Ci sono svariati modi per fare ciò quindi usa l'approccio che ritieni più opportuno; l'importante è che esso rispetti i requisiti qui elencati, ed eventuale richieste aggiuntive dei moderatori del forum:
|
||||
|
||||
* **Stabile** - Il sito che conterrà il file non dovrebbe essere propenso a morire da un momento all'altro senza preavviso;
|
||||
* **Link diretto** - Dovresti essere in grado di cliccare su un link sul forum e scaricare il file senza il bisogno di dover passare per altre pagine;
|
||||
* **Stabile** - Il sito che conterrà il file non dovrebbe essere propenso a chiudere i battenti da un momento all'altro senza preavviso;
|
||||
* **Link diretto** - Dovresti essere in grado di cliccare su un link e scaricare il file senza il bisogno di dover passare per altre pagine;
|
||||
* **Senza virus** - Le mod con contenuti malevoli saranno rimosse dal forum.
|
||||
|
||||
ContentDB soddisfa questi requisiti, richiedendo giusto un file .zip.
|
||||
|
||||
### Sistemi di Controllo Versione
|
||||
|
||||
È consigliato usare un sistema di controllo versione che:
|
||||
Un Sistema di Controllo Versione (VCS, *Version Control System*) è un programma che gestisce i cambiamenti di altri programmi, spesso facilitandone la distribuzione e la collaborazione.
|
||||
|
||||
* Permetta agli altri sviluppatori di inviare le loro modifiche facilmente;
|
||||
* Permetta al codice di essere visualizzato prima di essere scaricato;
|
||||
* Permetta agli utenti di fare segnalazioni (bug, domande ecc).
|
||||
La maggior parte dei creatori di mod su Minetest usa Git e un sito per ospitare il loro codice come GitHub o GitLab.
|
||||
|
||||
La maggior parte dei creatori di mod su Minetest usa GitHub o GitLab come sito per ospitare il loro codice, ma esistono anche altre opzioni.
|
||||
|
||||
Usare siti come GitHub e GitLab può essere difficile all'inizio.
|
||||
Usare git può essere difficile all'inizio.
|
||||
Se hai bisogno di una mano e mastichi l'inglese, prova a dare un occhio a [Pro Git book](http://git-scm.com/book/en/v1/Getting-Started) - gratis da leggere online.
|
||||
|
||||
### Allegati sul forum
|
||||
## Rilasciare su ContentDB
|
||||
|
||||
Un'alternativa all'usare un sistema di controllo versione è il caricare le mod come allegati sul forum.
|
||||
Questo può essere fatto alla creazione della discussione nella sezione delle mod (spiegato sotto).
|
||||
ContentDB è il luogo ufficiale dove trovare e distribuire mod, giochi e pacchetti texture.
|
||||
Gli utenti possono manualmente andare alla ricerca di contenuti tramite il sito, o scaricarli e installarli direttamente dall'integrazione presente nel menù principale di Minetest.
|
||||
|
||||
Prima di tutto, avrai bisogno di creare uno zip con i file della mod (il procedimento varia da sistema operativo a sistema operativo, ma solitamente si parla di premere il tasto destro su uno dei file dopo averli selezionati tutti).
|
||||
|
||||
Quando crei una discussione sul forum - nella pagina "Create a Topic" illustrata sotto - vai alla "Upload Attachment" situata in basso.
|
||||
Clicca poi su "Browse", selezionando il file zip.
|
||||
È inoltre consigliato specificare la versione della mod nel campo dei commenti ("File comment").
|
||||
|
||||
<figure>
|
||||
<img src="{{ page.root }}/static/releasing_attachments.png" alt="Upload Attachment">
|
||||
<figcaption>
|
||||
La scheda Upload Attachment.
|
||||
</figcaption>
|
||||
</figure>
|
||||
Iscriviti su [ContentDB](https://content.minetest.net) e aggiungi il tuo lavoro.
|
||||
Assicurati di leggere le linee guida (in inglese) nella sezione d'aiuto (*Help*).
|
||||
|
||||
## Creare la discussione sul forum
|
||||
|
||||
Puoi anche creare una discussione sul forum per far in modo che gli utenti possano discutere ciò che hai fatto.
|
||||
|
||||
Per le mod usa la sezione ["WIP Mods"](https://forum.minetest.net/viewforum.php?f=9) (*Work In Progress*), per i giochi invece ["WIP Games"](https://forum.minetest.net/viewforum.php?f=50).
|
||||
|
||||
|
||||
Puoi ora creare la discussione nella sezione ["WIP Mods"](https://forum.minetest.net/viewforum.php?f=9) (WIP sta per *Work In Progress*, lavori in corso).\\
|
||||
Quando ritieni che la tua mod abbia raggiunto la sua prima versione ufficiale, puoi [richiedere (in inglese) che venga spostata](https://forum.minetest.net/viewtopic.php?f=11&t=10418) in "Mod Releases".
|
||||
|
||||
La discussione dovrebbe contenere contenuti simili al README, con giusto un po' più di coinvolgimento e il link per scaricare la mod.
|
||||
È buona cosa aggiungere anche degli eventuali screenshot per far capire al volo cosa fa la mod, se possibile.
|
||||
|
||||
La formattazione del forum di Minetest è in bbcode.
|
||||
Segue un esempio di una mod chiamata "superspecial" (si è tenuto l'esempio in inglese dato che bisogna scrivere appunto in inglese sul forum, NdT):
|
||||
|
||||
|
||||
Adds magic, rainbows and other special things.
|
||||
|
||||
See download attached.
|
||||
|
||||
[b]Version:[/b] 1.1
|
||||
[b]License:[/b] LGPL 2.1 or later
|
||||
|
||||
Dependencies: default mod (found in minetest_game)
|
||||
|
||||
Report bugs or request help on the forum topic.
|
||||
|
||||
[h]Installation[/h]
|
||||
|
||||
Unzip the archive, rename the folder to superspecial and
|
||||
place it in minetest/mods/
|
||||
|
||||
( GNU/Linux: If you use a system-wide installation place
|
||||
it in ~/.minetest/mods/. )
|
||||
|
||||
( If you only want this to be used in a single world, place
|
||||
the folder in worldmods/ in your world directory. )
|
||||
|
||||
For further information or help see:
|
||||
[url]https://wiki.minetest.net/Installing_Mods[/url]
|
||||
|
||||
Se hai intenzione di usare questo esempio per la tua mod, ricordati ovviamente di cambiare "superspecial" con il nome vero e proprio.
|
||||
|
||||
### Titolo
|
||||
|
||||
Il titolo della discussione deve seguire uno dei seguenti formati:
|
||||
|
||||
* [Mod] Nome mod [nomemod]
|
||||
|
@ -11,8 +11,8 @@ La sicurezza è molto importante per evitare che una mod permetta di far perdere
|
||||
|
||||
- [Concetti fondamentali](#concetti-fondamentali)
|
||||
- [Formspec](#formspec)
|
||||
- [Non fidarsi mai dei campi dei formspec](#non-fidarsi-mai-dei-campi-dei-formspec)
|
||||
- [Il momento per controllare non è il momento dell'uso (Time of Check is not Time of Use)](#il-momento-per-controllare-non-e-il-momento-delluso-time-of-check-is-not-time-of-use)
|
||||
- [Non fidarsi mai dei campi dei formspec](#non-fidarsi-mai-dei-campi-dei-formspec)
|
||||
- [Il momento per controllare non è il momento dell'uso (Time of Check is not Time of Use)](#il-momento-per-controllare-non-è-il-momento-delluso-time-of-check-is-not-time-of-use)
|
||||
- [Ambienti (non sicuri)](#ambienti-non-sicuri)
|
||||
|
||||
## Concetti fondamentali
|
||||
|
@ -13,9 +13,9 @@ Scrivere i testing d'unità per le funzioni dove vengono chiamate quelle di Mine
|
||||
|
||||
- [Installare Busted](#installare-busted)
|
||||
- [Il tuo primo test](#il-tuo-primo-test)
|
||||
- [init.lua](#initlua)
|
||||
- [api.lua](#apilua)
|
||||
- [tests/api_spec.lua](#testsapispeclua)
|
||||
- [init.lua](#initlua)
|
||||
- [api.lua](#apilua)
|
||||
- [tests/api_spec.lua](#testsapispeclua)
|
||||
- [Simulare: usare funzioni esterne](#simulare-usare-funzioni-esterne)
|
||||
- [Controllare commit con Travis](#controllare-commit-con-travis)
|
||||
- [Conclusione](#conclusione)
|
||||
|
Loading…
Reference in New Issue
Block a user