IT | Update to latest commits

This commit is contained in:
Zughy 2020-12-24 18:40:59 +00:00
parent dc54e0786e
commit bca09bd7ab
18 changed files with 144 additions and 219 deletions

View File

@ -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)

View File

@ -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.\\

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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?

View File

@ -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)

View File

@ -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

View File

@ -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")

View File

@ -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;]")

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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]

View File

@ -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

View File

@ -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)