Node Timers and ABMs - Italian translation added

This commit is contained in:
Marco 2020-06-18 21:37:44 +02:00 committed by rubenwardy
parent 1c3dc8b070
commit 073bdaeb56
2 changed files with 52 additions and 66 deletions

View File

@ -1,5 +1,5 @@
--- ---
title: Scriptare in Lua title: Programmare in Lua
layout: default layout: default
root: ../.. root: ../..
idx: 1.2 idx: 1.2
@ -9,7 +9,7 @@ redirect_from: /it/chapters/lua.html
## Introduzione <!-- omit in toc --> ## Introduzione <!-- omit in toc -->
In questo capitolo parleremo dello scripting in Lua, degli strumenti necessari, In questo capitolo parleremo della programmazione in Lua, degli strumenti necessari,
e tratteremo alcune tecniche che troverai probabilmente utili. e tratteremo alcune tecniche che troverai probabilmente utili.
- [Editor di codice](#editor-di-codice) - [Editor di codice](#editor-di-codice)

View File

@ -1,120 +1,106 @@
--- ---
title: Node Timers and ABMs title: Timer dei nodi e ABM
layout: default layout: default
root: ../.. root: ../..
idx: 3.2 idx: 3.2
description: Learn how to make ABMs to change blocks. description: Impara come creare ABM e timer per modificare i blocchi.
redirect_from: redirect_from:
- /en/chapters/abms.html - /it/chapters/abms.html
- /en/map/abms.html - /it/map/abms.html
--- ---
## Introduction <!-- omit in toc --> ## Introduzione <!-- omit in toc -->
Periodically running a function on certain nodes is a common task. Eseguire periodicamente una funzione su certi nodi è abbastanza comune.
Minetest provides two methods of doing this: Active Block Modifiers (ABMs) and node timers. Minetest fornisce due metodi per fare ciò: gli ABM (*Active Block Modifiers*, Modificatori di blocchi attivi) e i timer associati ai nodi.
ABMs scan all loaded MapBlocks looking for nodes that match a criteria. Gli ABM scansionano tutti i Blocchi Mappa alla ricerca dei nodi che rientrano nei canoni:
They are best suited for nodes which are frequently found in the world, essi sono quindi ottimali per quei nodi che si trovano con frequenza in giro per il mondo, come l'erba.
such as grass. Possiedono un alto consumo della CPU, senza invece pressoché impattare sulla memoria e lo storage.
They have a high CPU overhead, but a low memory and storage overhead.
For nodes that are uncommon or already use metadata, such as furnaces Per i nodi invece non troppo comuni o che già usano metadati, come le fornaci e i macchinari, dovrebbero venire impiegati i timer.
and machines, node timers should be used instead. I timer dei nodi tengon traccia dei timer accodati in ogni Blocco Mappa, eseguendoli quando raggiungono lo zero.
Node timers work by keeping track of pending timers in each MapBlock, and then Ciò significa che non hanno bisogno di cercare tra tutti i nodi caricati per trovare un match, bensì, richiedendo un po' più di memoria e storage, vanno alla ricerca dei soli nodi con un timer in corso.
running them when they expire.
This means that timers don't need to search all loaded nodes to find matches,
but instead require slightly more memory and storage for the tracking
of pending timers.
- [Node Timers](#node-timers) - [Timer dei nodi](#timer-dei-nodi)
- [Active Block Modifiers](#active-block-modifiers) - [ABM: modificatori di blocchi attivi](#abm-modificatori-di-blocchi-attivi)
- [Your Turn](#your-turn) - [Il tuo turno](#il-tuo-turno)
## Node Timers ## Timer dei nodi
Node timers are directly tied to a single node. A ogni nodo è associato un timer.
You can manage node timers by obtaining a NodeTimerRef object. Questi timer possono essere gestiti ottenendo un oggetto NodeTimerRef (quindi un riferimento, come già visto per gli inventari).
```lua ```lua
local timer = minetest.get_node_timer(pos) local timer = minetest.get_node_timer(pos)
timer:start(10.5) -- in seconds timer:start(10.5) -- in secondi
``` ```
You can also check the status or stop the timer: Nell'esempio sottostante controlliamo che un timer sia attivo (`is_started()`), da quanto (`get_elapsed()`), quanto manca (`get_timeout()`) e infine lo fermiamo (`stop()`)
```lua ```lua
if timer:is_started() then if timer:is_started() then
print("The timer is running, and has " .. timer:get_timeout() .. "s remaining!") print("Il timer sta andando, e gli rimangono " .. timer:get_timeout() .. " secondi!")
print(timer:get_elapsed() .. "s has elapsed.") print("Sono passati " .. timer:get_elapsed() .. " secondi")
end end
timer:stop() timer:stop()
``` ```
When a node timer is up, the `on_timer` method in the node's definition table will Quando un timer raggiunge lo zero, viene eseguito il metodo `on_timer`, che va dichiarato dentro la tabella di definizione del nodo.
be called. `on_timer` richiede un solo parametro, ovvero la posizione del nodo.
The method only takes a single parameter, the position of the node.
```lua ```lua
minetest.register_node("autodoors:door_open", { minetest.register_node("porteautomatiche:porta_aperta", {
on_timer = function(pos) on_timer = function(pos)
minetest.set_node(pos, { name = "autodoors:door" }) minetest.set_node(pos, { name = "porteautomatiche:porta_chiusa" })
return false return false
end end
}) })
``` ```
Returning true in `on_timer` will cause the timer to run again for the same interval. Ritornando true, il timer ripartirà (con la stessa durata di prima).
You may have noticed a limitation with timers: for optimisation reasons, it's Potresti aver tuttavia notato una limitazione: per questioni di ottimizzazione, infatti, è possibile avere uno e un solo timer per tipo di nodo, e solo un timer attivo per nodo.
only possible to have one type of timer per node type, and only one timer running per node.
## Active Block Modifiers ## ABM: modificatori di blocchi attivi
Alien grass, for the purposes of this chapter, is a type of grass which
has a chance to appear near water.
Erba aliena, a scopo illustrativo del capitolo, è un tipo d'erba che ha una probabilità di apparire vicino all'acqua.
```lua ```lua
minetest.register_node("aliens:grass", { minetest.register_node("alieni:erba", {
description = "Alien Grass", description = "Erba Aliena",
light_source = 3, -- The node radiates light. Min 0, max 14 light_source = 3, -- Il nodo irradia luce. Min 0, max 14
tiles = {"aliens_grass.png"}, tiles = {"alieni_erba.png"},
groups = {choppy=1}, groups = {choppy=1},
on_use = minetest.item_eat(20) on_use = minetest.item_eat(20)
}) })
minetest.register_abm({ minetest.register_abm({
nodenames = {"default:dirt_with_grass"}, nodenames = {"default:dirt_with_grass"}, -- nodo sul quale applicare l'ABM
neighbors = {"default:water_source", "default:water_flowing"}, neighbors = {"default:water_source", "default:water_flowing"}, -- nodi che devono essere nei suoi dintorni (almeno uno)
interval = 10.0, -- Run every 10 seconds interval = 10.0, -- viene eseguito ogni 10 secondi
chance = 50, -- Select every 1 in 50 nodes chance = 50, -- possibilità di partire su un nodo ogni 50
action = function(pos, node, active_object_count, action = function(pos, node, active_object_count,
active_object_count_wider) active_object_count_wider)
local pos = {x = pos.x, y = pos.y + 1, z = pos.z} local pos = {x = pos.x, y = pos.y + 1, z = pos.z}
minetest.set_node(pos, {name = "aliens:grass"}) minetest.set_node(pos, {name = "alieni:erba"})
end end
}) })
``` ```
This ABM runs every ten seconds, and for each matching node, there is Questo ABM viene eseguito ogni 10 secondi, e per ogni nodo d'erba (`default:default_with_grass`) c'è una possibilità su 50 che l'ABM parta.
a 1 in 50 chance of it running. Quando ciò accade, un nodo di erba aliena (`alieni:erba`) gli viene piazzato sopra (attenzione, tuttavia, che così facendo, il nodo che c'era prima verrà cancellato, quindi sarebbe meglio controllare prima che sopra ci sia dell'aria)
If the ABM runs on a node, an alien grass node is placed above it.
Please be warned, this will delete any node previously located in that position.
To prevent this you should include a check using minetest.get_node to make sure there is space for the grass.
Specifying a neighbour is optional. Specificare dei vicini (*neighbors*) è opzionale.
If you specify multiple neighbours, only one of them needs to be Se ne vengono specificati più di uno, basterà che uno solo di essi sia presente per soddisfare la condizione.
present to meet the requirements.
Specifying chance is also optional. Anche le possibilità (*chance*) sono opzionali.
If you don't specify the chance, the ABM will always run when the other conditions are met. Se non vengono specificate, l'ABM verrà sempre eseguito quando le altre condizioni sono soddisfatte.
## Your Turn ## Il tuo turno
* Midas touch: Make water turn to gold blocks with a 1 in 100 chance, every 5 seconds. * Tocco di Mida: tramuta l'acqua in oro con una possibilità di 1 su 100, ogni 5 secondi;
* Decay: Make wood turn into dirt when water is a neighbour. * Decadimento: fai che il legno diventi terra quando questo confina con dell'acqua.
* Burnin': Make every air node catch on fire. (Tip: "air" and "fire:basic_flame"). * Al fuoco!: fai prendere fuoco a ogni blocco d'aria (suggerimento: "air" e "fire:basic_flame"). Avvertenza: aspettati un crash del gioco
Warning: expect the game to crash.