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.

VersioneAnnoNovità
Lua 5.12006Module system
Lua 5.42020Usata 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() end

WARNING

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)

ConcettoPunto chiave
Tipinil, boolean, number, string, table, function, thread
TabelleUnico contenitore — array e dizionario
IndiciPartono da 1
FalsySolo nil e false (0 è truthy!)
LocalUsa SEMPRE local
ErroriUsa pcall / xpcall
Operatori.. concatena, ~= è diverso

Prossimo passo: 02 - Eventi e Thread