Servidores de Jogos

Element data: quando usar e quando evitar

Element data: quando usar e quando evitar

setElementData é uma das funções mais usadas — e mais mal usadas — do MTA:SA. Ela é prática, mas pode gerar lag e brechas de segurança.

O que é

Element data permite anexar informações a qualquer elemento (jogador, veículo, objeto):

setElementData(jogador, "emprego", "taxista")
local emprego = getElementData(jogador, "emprego")

O problema: sincronização

Por padrão, element data definida no servidor é sincronizada com todos os jogadores. Cada mudança gera tráfego de rede para todo mundo. Com muitos jogadores e dados mudando com frequência (fome, sede, XP a cada segundo), isso vira lag.

Modos de sincronização

A função aceita um parâmetro de sincronização. Nas versões atuais do MTA, os modos disponíveis incluem:

  • Sem sincronização (false): o dado fica só no servidor — ideal para informações internas;
  • Broadcast (padrão): enviado a todos os jogadores;
  • Local: enviado apenas ao próprio jogador dono do elemento;
  • Subscribe: enviado apenas a jogadores inscritos com addElementDataSubscriber.

Consulte a wiki oficial para a sintaxe exata da sua versão.

-- só o servidor precisa saber
setElementData(jogador, "idConta", 1234, false)

O problema 2: segurança

Element data sincronizada pode ser alterada pelo cliente (a mudança é enviada ao servidor), a menos que você bloqueie. Se o seu sistema confia em getElementData(jogador, "dinheiro") no servidor, um cliente modificado pode mudar esse valor.

Proteja:

  • Use dados sem sincronização para informações sensíveis;
  • Bloqueie alterações vindas do cliente com o evento onElementDataChange (verificando client), ou use as opções de proteção de element data disponíveis na configuração do servidor nas versões recentes;
  • Guarde valores importantes (dinheiro, itens) em tabelas Lua no servidor e no banco de dados.

Quando usar

✅ Informações que vários jogadores precisam ver e mudam pouco (nome da facção, cargo exibido acima da cabeça);
✅ Dados internos do servidor com sincronização desativada.

Quando evitar

❌ Valores que mudam muito rápido (a cada frame ou segundo);
❌ Dados sensíveis (dinheiro, permissões, senhas);
❌ Grandes tabelas de dados;
❌ Como substituto de banco de dados.

Alternativas

  • Tabelas Lua no servidor indexadas pelo jogador;
  • Eventos (triggerClientEvent) para enviar dados só a quem precisa, só quando mudam;
  • Banco de dados para persistência.

Hospede seu servidor com a VittHost

No MTASA-BR da VittHost, um servidor bem programado roda ainda melhor com servidores no Brasil, proteção DDoS, painel Pterodactyl, MySQL incluso, downloads acelerados por nginx dedicado 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