A propriedade de rede é um dos aspectos mais sutis e comumente mal compreendidos do motor Roblox. Quando um jogador tem a propriedade de rede de uma parte ou montagem, ele tem autoridade total sobre a simulação física desses objetos. Por padrão, o servidor concede a propriedade de rede de partes não ancoradas a clientes com personagens de jogadores próximos para distribuir a carga da simulação física. Esse sistema melhora a capacidade de resposta, mas cria implicações de segurança significativas que todo desenvolvedor deve entender.
Entendendo a propriedade de rede
Quando um cliente tem a propriedade de rede sobre partes (incluindo seu personagem), ele tem acesso a:
Manipulação de montagem:
- Teleportar para qualquer posição.
- Isso pode ser usado para rapidamente ganhar propriedade e controle de quantas partes e montagens não ancoradas o servidor permitir.
- Manipular seu movimento e estado, como voar ou mudar sua velocidade.
- Exploradores podem definir a Humanoid WalkSpeed para qualquer valor. Propriedades podem ser modificadas localmente sem disparar eventos no cliente local, e sem que tais alterações de propriedade possam ser lidas a partir de scripts locais.
- Reproduzir animações arbitrárias e manipular o estado da animação.
- Ignorar obstáculos físicos e alterar sua colisão.
Manipulação de física
- Controlar a posição e rotação de quaisquer partes ou mecanismos não ancorados, incluindo replicar componentes Inf ou NaN em CFrames. Definir velocidades de partes para valores extremos (incluindo Inf ou NaN), o que pode interferir na física de outras partes/montagens não ancoradas, mesmo aquelas que não são de propriedade do explorador. Isso é frequentemente usado para lançar outros personagens de jogadores e partes próximas. Manipular a disparo de eventos Touched, incluindo não disparar Touched de forma alguma.
Se o seu jogo necessitar de partes ou montagens totalmente não ancoradas críticas para a jogabilidade, considere usar a API de propriedade de rede para definir manualmente a propriedade ou desativar a propriedade automática.
Validação de movimento
Em jogos competitivos, a validação do movimento do jogador do lado do servidor é crucial para a integridade da simulação, uma vez que os clientes controlam o movimento e a física do personagem. No entanto, uma solução universal não existe devido às diferentes mecânicas de jogo.
Métodos tradicionais muitas vezes falham em cenários complexos. Cálculos simples de distância ao longo do tempo podem ser suficientes para atiradores competitivos, mas falham em jogos intensivos em física que envolvem veículos, voo ou interações intrincadas. A validação também deve levar em conta a latência da rede.
Até que a autoridade do servidor esteja disponível, os desenvolvedores que implementam validação do lado do cliente devem entender que abordagens eficazes variam dramaticamente. Heurísticas básicas podem sinalizar jogadores inocentes com conexões instáveis, e cálculos de velocidade simples falham em jogos com sistemas de movimento complexos. Atualizações de posição estão sujeitas à latência da internet, exigindo média ao longo do tempo. Muitos desenvolvedores descobrem que acumuladores no estilo de balde furado funcionam bem para lidar com movimentos repentinos enquanto previnem violações sustentadas.
A implementação prática muitas vezes requer projetar o movimento em planos específicos (por exemplo, XZ para movimento baseado no solo) para evitar penalizar movimentos verticais legítimos enquanto detecta teletransportação horizontal. Jogos com mecânicas de teletransporte legítimas precisam de sistemas de isenção explícitos. A frequência de validação, níveis de tolerância e estratégias de aplicação devem ser ajustados às necessidades específicas de cada jogo.