Portal SAMP
[Include] Cbug Detection - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] Cbug Detection (/showthread.php?tid=5018)



Cbug Detection - Calasans - 17/05/2025

Cbug Detection

Introdução

O Cbug Detection é um include desenvolvido para SA-MP (San Andreas Multiplayer) e open.mp, tendo como finalidade primária a detecção do C-Bug. Essa técnica permite que jogadores efetuem disparos em cadências mais rápidas que o convencional ao explorar mecânicas de animação e troca rápida de estado (como agachar).

O foco principal deste include é identificar padrões de comportamento que configuram o uso do C-Bug. Ele age como uma ferramenta de monitoramento e sinalização, acionando um callback específico em seu script quando detecta tal atividade.

É crucial salientar: O Cbug Detection não bane, kicka ou toma qualquer outra medida punitiva automaticamente. A decisão e implementação das ações subsequentes à detecção (como advertir, registrar, penalizar) são de total responsabilidade e discricionariedade do desenvolvedor do servidor, permitindo integração flexível com sistemas existentes.



Recursos Principais
  • Detecção Ampla: Capaz de identificar várias variantes comuns do C-Bug (Classic, Rollbug, Quick C-switch, etc.).
  • Controle por Jogador: Habilite ou desabilite a detecção individualmente para jogadores específicos via funções dedicadas.
  • Ajuste de Latência (Ping): Parâmetros de detecção são adaptados com base no ping do jogador para maior precisão e redução de falsos positivos em conexões variadas.
  • Validações Internas: Considera o estado atual do jogador (a pé, animações de corrida/pulo), arma equipada e munição disponível para refinar a detecção.
  • Otimizado: Opera com baixo impacto no desempenho, utilizando primariamente os callbacks nativos OnPlayerKeyStateChange e OnPlayerWeaponShot.
  • Callback de Detecção Customizável: O callback CbugDetection_OnDetected permite executar qualquer lógica de script desejada ao ocorrer uma detecção.


Princípio de Funcionamento

O sistema monitora a sequência de eventos de tecla e disparos do jogador. Utiliza um sistema interno de pontuação que aumenta quando ações típicas do C-Bug são detectadas em curtos intervalos após um disparo (ex: agachar rapidamente, trocar de arma, múltiplos disparos rápidos). Essa pontuação decai com o tempo.

Ao atingir um limiar configurado e respeitar períodos de cooldown para evitar detecções repetidas da mesma ação, o include considera a ocorrência de C-Bug potencial e invoca o callback CbugDetection_OnDetected(playerid), fornecendo o ID do jogador detectado.

Validadores adicionais impedem detecções enquanto o jogador está correndo, pulando ou em veículos, ou usando armas que não são associadas a técnica.



Instalação

1.  Obtenha o arquivo "cbug-detection.inc".
2.  Mova o arquivo para a subpasta "pawno/include" do seu servidor.
3.  Edite seu script principal (gamemode ou filterscript). Adicione a linha para incluir o arquivo APÓS as includes primárias (a_samp ou open.mp) e outras includes básicas:
Código:
#include <a_samp> // Ou <open.mp>
// Outras includes aqui...
#include <cbug-detection> // Adicionar ESTA include AQUI!

4.  Compile seu script.

Importante: A inclusão de "<cbug-detection>" deve ser feita após "<a_samp>" ou "<open.mp>" para evitar erros de compilação relacionados a definições duplicadas ou inexistentes.



Uso Básico

Para utilizar a detecção, é necessário implementar a ação desejada no callback de detecção e ativar o sistema para os jogadores.

1.  Implemente o Callback CbugDetection_OnDetected: Esta função será chamada sempre que a detecção identificar um padrão de C-Bug para um jogador:
Código:
// O 'forward' para este callback é declarado na include,
// mas você precisa definir a função 'public' no seu script:
// public CbugDetection_OnDetected(playerid) { // etc }

public CbugDetection_OnDetected(playerid)
{
    new nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, sizeof(nome));

    printf("[Cbug Detection]: Jogador "%s" (ID: %d) possivelmente usou C-Bug.", nome, playerid); // Exemplo: printar no console do servidor

    // --- Defina AQUI as acoes a serem executadas apos a deteccao ---
    // Exemplos comuns incluem:
    // SendClientMessage(playerid, -1, "Evite o uso de tecnicas rapidas de disparo."); // Aviso ao jogador
    // Criar uma funcao baseado em "anti-cheat" para lidar com isso, como congelar o jogador, ou algo do genero
    // Punições (geralmente graduais: aviso -> kick -> ban); tenha em mente que "kick" ou "ban" nao é recomendavel
    // ---------------------------------------------------------------

    return 1;
}

2.  Controle por Jogador: A detecção não inicia automaticamente para nenhum jogador. Use a função CbugDetection_Player para ativar ou desativar o sistema individualmente:
Código:
// Ativar a detecção para um jogador:
// CbugDetection_Player(playerid, true);

// Desativar a detecção para um jogador:
// CbugDetection_Player(playerid, false);

// Verificar se a detecção está ativa para um jogador:
// CbugDetection_IsActive(playerid);

// Exemplos de uso:
// No inicio de um round/minigame: CbugDetection_Player(playerid, true);
// Ao sair do combate/entrar em area segura: CbugDetection_Player(playerid, false);
// Em OnPlayerConnect (se seu servidor é focado em DM): CbugDetection_Player(playerid, true);



Considerações
  • O desempenho e a precisão podem ser influenciados por scripts que modificam ou interceptam de forma não padrão os callbacks OnPlayerKeyStateChange e OnPlayerWeaponShot.
  • Embora ajustes baseados no ping sejam aplicados, latências significativamente altas podem impactar a detecção.
  • Detecções baseadas em heurística, como esta, inerentemente podem apresentar casos falsos positivos sob circunstâncias atípicas ou ações legítimas muito rápidas em sequência. É recomendado que a resposta configurada no callback leve isso em consideração (ex: aplicar advertências cumulativas em vez de punição imediata no primeiro aviso).
  • O include possui configurações ajustáveis via defines, mas a modificação dos valores padrão é desencorajada devido ao risco de desequilibrar a precisão ou aumentar falsos positivos.


Informações Adicionais

Para um entendimento completo do include, detalhes técnicos sobre os defines, lógica de detecção, testes e licença, por favor, consulte a documentação completa (README) no repositório oficial.

Desenvolvedor: Calasans
Repositório: https://github.com/ocalasans/cbug-detection