Resources client-side x server-side: entenda a diferença
Um dos grandes diferenciais do MTA:SA é permitir scripts tanto no servidor quanto no cliente. Saber o que colocar em cada lado é essencial para desempenho e segurança.
Server-side
Roda uma vez, no servidor. Tem autoridade sobre o jogo.
Coloque aqui:
- Contas, login e senhas;
- Dinheiro, inventário, propriedades;
- Banco de dados;
- Punições, permissões e ACL;
- Criação de veículos e itens persistentes;
- Validação de tudo o que o cliente pede.
Client-side
Roda no PC de cada jogador.
Coloque aqui:
- Interfaces (HUD, painéis, menus) com
dxDraw, GUI ou DGS; - Efeitos visuais, shaders e sons;
- Substituição de modelos e texturas;
- Câmeras e animações locais;
- Lógica visual que não precisa ser confiável.
Shared
Scripts type="shared" rodam nos dois lados. Ideais para configurações e funções utilitárias comuns.
A regra de ouro: nunca confie no cliente
O código de cliente roda no computador do jogador — que pode ser modificado. Por isso:
❌ Errado:
-- cliente
triggerServerEvent("darDinheiro", localPlayer, 100000)
-- servidor
addEvent("darDinheiro", true)
addEventHandler("darDinheiro", root, function(valor)
givePlayerMoney(source, valor) -- o cliente decide o valor!
end)
✅ Certo:
-- servidor
addEvent("concluirEntrega", true)
addEventHandler("concluirEntrega", root, function()
local jogador = client -- quem realmente disparou o evento
if not jogador or not estaEmEntrega(jogador) then return end
if not estaPertoDoDestino(jogador) then return end
finalizarEntrega(jogador)
givePlayerMoney(jogador, VALOR_ENTREGA) -- o servidor decide
end)
O cliente só pede; o servidor verifica e decide. Veja o post "Validando eventos do cliente para evitar exploits".
Desempenho
- Processamento visual no cliente alivia o servidor;
- Lógica pesada por jogador no servidor (loops a cada frame, timers curtos) pesa muito com muitos jogadores;
- Em contrapartida, tudo que vai para o cliente precisa ser baixado — mantenha scripts e arquivos enxutos.
Proteção do código de cliente
Scripts de cliente são enviados aos jogadores. Para dificultar cópias, use cache="false" e compile com o luac do MTA — veja o post "Compilando scripts Lua com luac". Mesmo assim, não coloque segredos (senhas, chaves) em scripts de cliente.
Hospede seu servidor com a VittHost
No MTASA-BR da VittHost, seus scripts de servidor rodam com MySQL incluso e os de cliente chegam rápido aos jogadores com downloads acelerados por nginx dedicado. Servidores no Brasil, painel Pterodactyl, proteção DDoS e teste grátis de 3 dias.