Servidores de Jogos

Resources client-side x server-side: entenda a diferença

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.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS