--- title: Chat e comandi layout: default root: ../.. idx: 4.2 description: Come registrare un comando e gestire i messaggi della chat redirect_from: /it/chapters/chat.html cmd_online: level: warning title: I giocatori offline possono eseguire comandi message:
Viene passato il nome del giocatore al posto del giocatore in sé perché le mod possono eseguire comandi in vece di un giocatore offline. Per esempio, il bridge IRC permette ai giocatori di eseguire comandi senza dover entrare in gioco.
Assicurati quindi di non dar per scontato che un giocatore sia connesso. Puoi controllare ciò tramite
minetest.get_player_by_name, per vedere se ritorna qualcosa o meno. cb_cmdsprivs: level: warning title: Privilegi e comandi message: Il privilegio shout non è necessario per far sì che un giocatore attivi questo callback. Questo perché i comandi sono implementati in Lua, e sono semplicemente dei messaggi in chat che iniziano con /. --- ## Introduzione Le mod possono interagire con la chat del giocatore, tra l'inviare messaggi, intercettarli e registrare dei comandi. - [Inviare messaggi a tutti i giocatori](#inviare-messaggi-a-tutti-i-giocatori) - [Inviare messaggi a giocatori specifici](#inviare-messaggi-a-giocatori-specifici) - [Comandi](#comandi) - [Complex Subcommands](#complex-subcommands) - [Intercettare i messaggi](#interecettare-i-messaggi) ## Inviare messaggi a tutti i giocatori Per inviare un messaggio a tutti i giocatori connessi in gioco, si usa la funzione `chat_send_all`: ```lua minetest.chat_send_all("Questo è un messaggio visualizzabile da tutti") ``` Segue un esempio di come apparirerebbe in gioco:
C'è anche una libreria scritta dall'autore di questo libro che può essere usata per creare comandi complessi senza l'utilizzo di pattern: Chat Command Builder.
## Intercettare i messaggi Per intercettare un messaggio, si usa `register_on_chat_message`: ```lua minetest.register_on_chat_message(function(name, message) print(name .. " ha detto " .. message) return false end) ``` Ritornando false, si permette al messaggio di essere inviato. In verità `return false` può anche essere omesso in quanto `nil` verrebbe ritornato implicitamente, e nil è trattato come false. {% include notice.html notice=page.cb_cmdsprivs %} Dovresti assicurarti, poi, che il messaggio potrebbe essere un comando che invia messaggi in chat, o che l'utente potrebbere non avere `shout`. ```lua minetest.register_on_chat_message(function(name, message) if message:sub(1, 1) == "/" then print(name .. " ha eseguito un comando") elseif minetest.check_player_privs(name, { shout = true }) then print(name .. " ha detto " .. message) else print(name .. " ha provato a dire " .. message .. " ma non ha lo shout") end return false end) ```