SDK de scripts · Luau
Crie seus próprios modos de jogo.
Status: alfa inicial. A API de scripts só cresce dentro de uma versão principal, então os recursos que você escrever hoje continuam funcionando. Modelos, texturas e sons personalizados vêm a seguir.
Recursos
Um recurso é uma pasta dentro da pasta recursos/ do servidor: um manifesto resource.toml mais os seus scripts. Scripts de servidor rodam no servidor; scripts de cliente são enviados a cada jogador e rodam no PC dele. Cada modo de jogo que vem com o servidor é só um recurso — copie um, renomeie e mude o que quiser.
recursos/
hello/
resource.toml
server/main.luau
client/hud.luau -- optional: runs on each player's PCname = "hello"
version = "1.0.0"
description = "Says hello"
author = "You"
server_scripts = ["server/main.luau"]
client_scripts = [] # sent to each player and run on their PC
dependencies = [] # resources that must be running first
gamemode = false # true: this resource runs the rounds
autostart = trueSeu primeiro recurso
Cumprimente os jogadores quando entram e adicione um comando /dice. Inicie o servidor e o recurso roda; depois de editar, digite restart hello no console do servidor e ele recarrega na hora.
on("playerJoin", function(player: number)
players.message(player, "Hello, " .. (players.name(player) or "?") .. "!")
end)
registerCommand("dice", function(player: number)
chat.broadcast((players.name(player) or "?") .. " rolls " .. math.random(1, 6))
end)> resources # list what's running
> restart hello # reload after editing — no server restart
> players
> say Round starts in 1 minute
> ban 7 60 spamming # by player number, for 60 minutesO que a API cobre
A API do servidor é organizada em bibliotecas pequenas e focadas. Cada jogador é identificado por um número — o mesmo que todos veem ao lado do apelido na lista de jogadores.
Eventos
Entradas, saídas, golpes, nocautes, itens, rodadas, grafites, escolhas em menus — e seus próprios eventos entre recursos.
Chat e comandos
Chat colorido, /comandos com argumentos, sugestões e mensagens por jogador.
Temporizadores
setTimeout, setInterval e clearTimer para tudo que roda depois ou se repete.
Jogadores
Apelidos, cores e tags de nome, admins, expulsões, banimentos temporários e ids estáveis.
Lutadores
Vida, equipes, pontos de surgimento, teleporte, personagens, congelamento, invulnerabilidade e renascimento.
Policiais
Transforme qualquer lutador em policial, algeme e solte, e distribua chaves das algemas.
Gangues e ordens
Leia e dê as seis ordens de gangue, e trabalhe com as gangues do jogo e seus membros.
Itens
Dê, tire e largue armas e objetos, liste o que está no chão e ajuste o peso.
NPCs
Posicione personagens que ficam parados, com nome, ícone e animação de espera — lojistas, recrutadores, quem dá missões.
Dimensões
Rode vários mapas ao mesmo tempo, mova lutadores entre eles e faça rotação de mapas entre partidas.
Marcadores e portas
Marcadores flutuantes que mostram onde algo acontece, e controle das portas de cada mapa.
Objetos
Coloque, mova e remova objetos do mapa por script ou com o editor do jogo (até 5.000 por servidor).
Grafite
Crie paredes para pintar, trave, reinicie e reaja a cada camada terminada.
Rodadas e modos
Inicie, termine e pare rodadas — ou dispense-as para modo livre, deathmatch e roleplay.
Interface na tela
Textos, painéis, barras, imagens, anúncios grandes, menus numerados e campos de texto.
Janelas e cliques
Desenhos clicáveis, rótulos, imagens de itens e cursor livre para suas próprias janelas.
Ícones e zonas
Ícones e zonas coloridas no mapa de cada jogador.
Dados salvos
Um armazenamento chave-valor por recurso que sobrevive aos reinícios do servidor.
Senhas e banimentos
Hash de senha com sal e propositalmente lento para contas do servidor, e banimentos por id e IP com duração opcional.
Scripts de cliente
Scripts de cliente são para o que pertence a cada jogador: um HUD, menus, atalhos de teclado, comandos de chat locais, a câmera e os sons. Cada recurso roda no seu próprio ambiente isolado no PC do jogador.
Eles podem ler a briga, mas nunca alterá-la — isso faria cada PC ver uma coisa diferente e tornaria trapacear trivial. Para mudar algo, o script de cliente pede ao servidor, e o servidor decide.
-- client/hud.luau
setInterval(function()
local me = fighters.get(localPlayer.fighter() or -1)
if me then
ui.text("hp", "Health " .. math.floor(me.health), { position = "bottom-right" })
end
end, 200)
on("keyDown", function(key)
if key == "F3" then
emitServer("askStats") -- handled on the server with onClient("askStats", ...)
end
end)Isolamento e limites
Sem acesso externo
Scripts não podem mexer em arquivos, na rede ou no sistema operacional, nem substituir funções da API.
250 ms por execução
Um script que demora demais de uma vez é interrompido — um loop infinito não congela o servidor.
64 MB por recurso
Cada recurso tem seu próprio limite de memória.
Erros isolados
Os erros vão para o log do servidor com o nome do recurso; o recurso continua rodando.
Suporte no editor: o SDK traz definições de tipos para as APIs de servidor e de cliente. Adicione-as ao luau-lsp (abre em uma nova aba) (por exemplo, com uma extensão de Luau para o VS Code) para ter autocompletar e verificação de tipos.
Modelos incluídos
Todo servidor vem com estes recursos. Nada neles é especial para o jogo — os seus recursos podem fazer o mesmo e mais.
- welcome
- Cumprimenta os jogadores e conta as visitas com dados salvos.
- basic-commands
- /players e uma dica periódica no chat.
- player-hud
- Scripts de cliente: um HUD, F2 para esconder, F3 para pedir suas estatísticas ao servidor.
- scoreboard
- Uma tabela de nocautes, a rodada em letras grandes e um menu /stats.
- fight-basics
- Anuncia nocautes e vencedores da rodada, além de /heal e /where.
- deathmatch
- Um modo sem rodadas: renascimento, feed de abates, vence quem chegar a 10 primeiro.
- roleplay
- Contas, personagens, posição salva, um hospital e um metrô entre bairros.
- roleplay-chat
- Chat local, /me, /do, /shout, /ooc e companhia.
- mapvote
- Uma votação do próximo mapa ao fim de cada partida.
- mapping
- Objetos do mapa e o editor de posicionamento do jogo.
- admin
- Ferramentas de admin, como voar livremente pelo mapa.
Rodando um servidor
Hospede pelo menu do jogo para partidas rápidas, ou gere um pacote de servidor dedicado com CreateServer.bat na pasta do jogo. Ele pergunta o sistema de destino (Windows ou Linux) e os mapas, e cria uma pasta com o programa do servidor, os dados, seus recursos, um servidor.cfg e a documentação do SDK.
- Linux: Ubuntu 24.04+ ou Debian 12+, 64 bits, com as bibliotecas ALSA e udev instaladas.
- Portas: UDP 27015 para o jogo e UDP 27016 para a busca de servidores (ou a porta que você configurar e a seguinte).
- Atualizações: o servidor avisa ao iniciar quando sai uma versão nova. Atualize o jogo, gere o pacote de novo e substitua o programa e os dados — sua configuração e seus recursos ficam.
- Dados privados: a pasta
data/do pacote é gerada a partir da sua própria cópia do jogo original. Nunca a compartilhe publicamente.
Referência completa
A referência completa da API — cada função, evento e opção — vem com todo pacote de servidor em sdk/README.md, junto com as definições de tipos para o editor em sdk/types/. Ela sempre corresponde à versão que você está rodando.