Introduzione a Lua
QUESTION
Cos’è Lua e perché si usa in FiveM?
Lua è il linguaggio di scripting usato da FiveM per la logica di gioco — eventi, comandi, interazioni con il database, UI. È leggero, veloce e facile da imparare.
Obiettivi del Modulo
Alla fine di questo modulo saprai:
- Variabili, tipi, operatori e tabelle in Lua
- Eventi client/server e thread
- Usare le Native Functions di FiveM
- Condividere funzioni tra risorse con esport/import
- Configurare database MySQL
- Creare interfacce NUI (HTML/JS/CSS)
- Ottimizzare e debuggare script
Cos’è Lua
Lua (dal portoghese lua = luna) è un linguaggio di scripting leggero e incorporabile, creato nel 1993 al PUC-Rio in Brasile.
| Versione | Anno | Novità |
|---|---|---|
| Lua 5.1 | 2006 | Module system |
| Lua 5.4 | 2020 | Usata da FiveM — const, generational GC |
INFO
FiveM usa Lua 5.4 con estensioni Citizen (Citizen.CreateThread, Citizen.Wait).
Dove si usa Lua
- FiveM / RedM — scripting server e client
- World of Warcraft — addon UI
- Roblox — game scripting
- Redis — script atomici
- LÖVE — framework 2D
Variabili e Tipi
Lua è dinamicamente tipizzato. Usa SEMPRE local.
local niente = nil -- assenza di valore
local vero = true -- boolean
local numero = 42 -- number (integer o float)
local testo = "Ciao" -- string
local tabella = {} -- table (array + dizionario)
local funz = function() endWARNING
Attenzione: in Lua gli indici degli array partono da 1, non da 0!
Falsy in Lua
Solo nil e false sono falsy. 0, stringa vuota "" e {} sono truthy!
if 0 then print("si, viene stampato") end -- vero!Hello World in FiveM
-- server.lua
RegisterCommand("ciao", function(source, args, raw)
if source == 0 then
print("Ciao amministratore!")
return
end
TriggerClientEvent("chat:addMessage", source, {
args = { "SERVER", "Ciao dal server!" }
})
end, false)Riepilogo
| Concetto | Punto chiave |
|---|---|
| Tipi | nil, boolean, number, string, table, function, thread |
| Tabelle | Unico contenitore — array e dizionario |
| Indici | Partono da 1 |
| Falsy | Solo nil e false (0 è truthy!) |
| Local | Usa SEMPRE local |
| Errori | Usa pcall / xpcall |
| Operatori | .. concatena, ~= è diverso |
Prossimo passo: 02 - Eventi e Thread