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(verificandoclient), 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.