A maioria dos programadores iniciantes enfrenta desafios relacionados à lógica de código. O debug é uma habilidade essencial que ajuda a resolver esses problemas, permitindo não apenas correções imediatas, mas também a construção de sistemas robustos, como um anticheat. Depurar seu código de forma eficiente pode evitar muitos problemas futuros.
Este guia foi cuidadosamente simplificado para facilitar o entendimento, mas cobre os pontos mais importantes do processo de depuração.
O Que é Debug? Uma Introdução
Debugar é como ser um detetive dentro do mundo da programação. Quando depuramos um código, estamos essencialmente caçando bugs ocultos que podem comprometer o funcionamento do sistema. A depuração é uma parte vital do desenvolvimento, pois ajuda a garantir que seu código esteja funcionando da maneira esperada, sem erros, o que melhora a experiência do usuário final.
Técnicas Essenciais de Debug
Logs de Mensagens:
Adicionar `print` ou `printf` no seu código é como adicionar sinais que indicam o que está acontecendo "nos bastidores". Essas mensagens fornecem um rastro que facilita o rastreamento dos eventos no servidor. Isso permite que você monitore o fluxo de execução e identifique rapidamente onde algo pode ter saído errado.
Exemplo:
Código PHP:
public OnPlayerConnect(playerid) { printf("Player %d conectou-se ao servidor.", playerid);
// Simulando um possível erro if(playerid == INVALID_PLAYER_ID) { print("Erro: Player inválido!"); } return true; }
Aqui, toda vez que um jogador se conecta, a mensagem "Player 0 conectou-se ao servidor" será exibida. Se houver algum problema com o ID do jogador, o `print` de erro alertará sobre o problema no console imediatamente. Com essa técnica, é possível identificar rapidamente onde os erros estão surgindo.
Debug em Tempo Real:
Usar breakpoints é como congelar o tempo no seu código, permitindo que você examine o que está acontecendo naquele exato ponto. Ao parar a execução em pontos específicos, você pode verificar o estado das variáveis e entender o fluxo do código de forma granular, ideal para localizar bugs complexos.
Reinicialização de Componentes:
Quando o código é muito grande ou complexo, erros podem surgir em lugares inesperados. Dividir o código em componentes menores e testá-los individualmente pode ajudar a identificar problemas que seriam difíceis de encontrar de outra maneira. Essa técnica pode ser valiosa em scripts grandes ou sistemas complexos.
Logs Detalhados:
É sempre uma boa prática adicionar o máximo de detalhes possível nos logs. Detalhes extras fornecem uma visão clara do que está acontecendo no código em tempo real. Eles são particularmente úteis quando se trabalha com sistemas complexos ou quando é necessário identificar problemas específicos no comportamento do servidor.
Isolamento dos Problemas:
Quando um bug é identificado, uma das melhores estratégias é isolar a parte do código onde ele ocorre. Isso permite focar diretamente na raiz do problema, sem perder tempo navegando por áreas do código que não estão relacionadas ao erro.
Teste em Ambiente Controlado:
Manter um ambiente de teste isolado é fundamental para garantir que novas funcionalidades e correções de bugs funcionem corretamente antes de serem implementadas no servidor principal. Testar em um servidor separado evita que problemas imprevistos afetem a experiência dos jogadores em um ambiente de produção.
(Imagine colocar um código mal testado no servidor principal e acabar com bugs que prejudicam o gameplay dos jogadores? Isso pode ter um impacto negativo na imagem do servidor.)
~~
O que é um Breakpoint? Um breakpoint é um ponto no código onde a execução é temporariamente interrompida. Quando a execução do programa atinge um breakpoint, o código pausa, permitindo que o desenvolvedor examine o estado atual do programa. Isso inclui verificar o valor das variáveis, o fluxo de execução e quaisquer condições que possam estar causando erros ou comportamentos inesperados. Breakpoints são uma ferramenta essencial no processo de depuração, pois oferecem uma visão detalhada do comportamento do código em tempo real, facilitando a identificação de problemas.
meu objetivo é simplesmente criar um comando para utilizar as funções do veículo, mas eu não entendo nem 20%, por isso gostaria de saber se o codigo que criei está correto? Obrigado.
outra coisa, se estiver tuido ok, como faz pra desligar o veiculo?
Apresento a vocês o mais novo cliente anti-cheat composto pelo Viper Launcher AC e Viper Server AC.
Este é diferente de todos até então desenvolvidos e possui uma performance muito superior.
Agora o servidor do jogo não precisa utilizar a biblioteca sockets, pois a comunicação é intermediada por um servidor executado a parte.
O servidor é multi-threaded, logo os pacotes são recebidos de forma assíncrona, proporcionando uma comunicação mais saudável.
A proposta é um launcher que divulga os servidores que o utilizam para que os jogadores possam ter acesso fácil a eles simplesmente através de um clique e com uma garantia maior de que sua jogabilidade não será afetada por consequência de hackers.
Como funciona:
- Servidor:
Basicamente, quando executar o servidor na VPS automaticamente vai liberar o acesso a determinada porta e autorizar as conexões dos clientes.
A comunicação entre o servidor e o cliente acontece de forma criptografada, de forma que mesmo que os dados sejam interceptados, não seja possível manipulá-los.
- Cliente:
Ao executar o cliente, o mesmo irá baixar a lista de servidores que possuem o anti-cheat.
Após selecionar o servidor, basta escolher um nome e clicar em "PLAY" para que o launcher inicie sua comunicação com o servidor e execute o jogo automaticamente.
O cliente efetua análises periódicamente e envia ao servidor de forma criptografada.
- Servidor SA:MP:
O servidor utiliza uma biblioteca que apenas facilita a interpretação dos resultados do anti-cheat.
Na pasta scriptfiles deve haver uma pasta chamada "VAC" e dentro dela deve haver a pasta "Connected" (são criadas automaticamente pelo Viper Server).
"Connected" - Contém os jogadores conectados com o launcher, contendo a análise do jogador. Ao desconectar o arquivo é removido automaticamente.
Na biblioteca que gerencia as análises, haverão as seguintes funções:
- Cliente:
Apesar de ser leve, seu código-fonte não possui nativamente nenhum padrão de dados para análise. Não é necessário atualizar o banco de dados, visto que o mesmo baixa estes dados diretamente do servidor e a partir daí usa como base estas informações para análise.
- Servidor:
O servidor também não necessita muita manutenção, visto que ele possui um arquivo de configuração que serve para enviar aos clientes usar como banco de dados para análise e o mesmo pode ser alterado em tempo real, sem necessidade de reiniciá-lo.
Este arquivo é enviado toda vez que uma nova conexão é solicitada.
Tanto o servidor quanto o launcher possuem atualizações obrigatórias. É necessário baixar e atualizar os arquivos para poder seguir com a execução. (novo)
Segurança e privacidade:
O cliente deve ser inserido dentro da pasta do jogo, pois ele é um launcher e o jogo será executado através dele.
Pra maior segurança, o cliente nunca efetua quaisquer análises fora da pasta em que foi designado para operar. Única busca fora do ambiente é na lista de processos, exceto isso não existem outros mecanismos de busca.
O cliente armazena apenas informações referente a suspeitas. Nunca fará envio de arquivos, apenas NOMES de arquivos, pastas ou processos.
Configurações e análise:
O arquivo de configuração do servidor está em constante desenvolvimento, mas até então o que se encontra possível:
Verificar as propriedades para garantir a segurança e se alguma propriedade for diferente, o cliente será automaticamente desconectado
Permite autorizar determinada versão do anti-cheat
Permite autorizar determinado hash MD5 do cliente anti-cheat
Bloquear processos suspeitos
Bloquear início de nome (cheat*)
Bloquear final de nome (*engine)
Bloquear entre o nome (*engine*)
Bloquear nome extato (cheatengine)
Autorizar versões do SA:MP
Autoriza versões do SA:MP baseados no hash MD5 do executável
Autorizar arquivos (mods, data...) baseado em hash MD5
Autoriza um arquivo utilizando nome (mod.*), extensão (*.cs) ou ambos (mod.cs) juntamente com o hash MD5 do mesmo
Bloquear arquivos ou extensões de arquivos (revertido com a autorização de arquivos)
Bloqueia um arquivo através do nome (mod.*), extensão (*.cs) ou ambos (mod.cs)
Bloquear pastas
Bloqueia uma pasta através do nome (cleo)
Autorizar arquivos injetados
Autoriza um arquivo injetado utilizando nome (mod.*), extensão (*.asi) ou ambos (mod.asi) juntamente com o hash MD5 do mesmo
Bloquear arquivos ou extensões de arquivos injetados no jogo (revertido com a autorização de arquivos injetados)
Bloqueia um arquivo injetado através do nome (mod.*), extensão (*.dll) ou ambos (mod.dll)
Bloquear arquivos ou extensões de arquivos injetados no jogo (baseado em hash MD5 e revertido com a autorização de arquivos injetados)
Bloqueia um arquivo injetado através do hash MD5 do arquivo (os arquivos injetados podem ter seus nomes alterados)
OBS.: As análises de comparação de texto não diferenciam letras maiúsculas de minúsculas.
Exemplo de configurações de propriedade do cliente:
O arquivo é atualizado automaticamente durante a execução. (novo)
Atualmente não é possível agregar usuários de dispositivos móveis ou sistema operacional diferente de Windows para executar o Launcher.
Uma alternativa para manter todas as plataformas, é incentivar o uso deste launcher para quem utiliza Windows, de forma que possa ser beneficiado pelo servidor. Desta forma não há necessidade de expulsar jogadores que não o utilizam, mas sim compensar quem utiliza.
Agora o Viper Server possui suporte para Linux. (Novo)
Atualizações futuras:
Verificação de data modificada
Verificação de arquivos requeridos por parte do servidor (como data modificada ou mods necessários para pode jogar)
Proteção contra caixa de areia (OK)
Proteção contra bypass do cliente (OK)
Otimização geral (OK)
Instalação:
- Cliente:
Copie o programa para a pasta do gta que contenha o SA:MP instalado
Execute o programa
Selecione o servidor
Digite seu nickname
Clique em "PLAY" e o jogo abrirá diretamente no servidor selecionado
- Servidor:
Crie uma pasta com o nome "VAC" dentro do servidor do SA:MP
Copie o Viper Server e seus arquivos dentro desta pasta
Configure os arquivos "config.json" e "config.cfg"
Execute o servidor
- Biblioteca "vac.inc":
Copie o arquivo "vac.inc" para o diretório de includes
Adicione a seguinte linha abaixo da include a_samp: #include <vac>
Compile o servidor
Utilize as funções da include para trabalhar com o anti-cheat
Como funciona a comunicação:
Screenshots:
O layout está passando por ajustes e pode ser diferente das fotos abaixo, porém as instruções e objetos seguem iguais.
Servidor:
Cliente:
Em conexão:
Conclusão:
O projeto ainda está em desenvolvimento, porém os softwares já estão rodando normalmente, bem como a biblioteca para o SA:MP.
Precisa ainda lapidar a conexão e a segurança para garantir a integridade dos programas e da comunicação entre cliente e servidor.
Testes:
Estou firmando uma parceria com um servidor para por o primeiro lançamento em teste e, em breve, divulgarei IP e compilação do launcher.
Para demais interessados, posso conceder um acesso antecipado e suporte total para implementação.