Portal SAMP
[Ajuda] tiro atrás da parede - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] tiro atrás da parede (/showthread.php?tid=3082)



tiro atrás da parede - hiwyn - 16/12/2022

existe alguma lib pra detectar tiros atras da parede ou de carros?
tem uns xiters avacalhando meu servidor de dm, eles entram e matam os outros players atrás de parede, atrás de carro, sempre que eu não to online...
existe alguma lib ou jeito de detectar isso?


RE: tiro atrás da parede - Carlos Victor - 19/12/2022

Eu acho que não exista, mas você pode verificar usando plugins de mapas, tipo o CoolAndreas ou MapAndreas, não sei se a função deles é essa, mas talvez quem sabe...

Aproveitando, tente procurar os métodos do cheater para tentar achar uma solução, se ele atira em uma distância alta, faça verificações e aplica punição, etc...


RE: tiro atrás da parede - danna - 11/01/2023

Aqui está um exemplo de um plugin Pawn que detecta jogadores que matam através das paredes ou usando mod Sobeit:

Código:
#include <a_samp>
#include <YSI_Coding\ysi_hooks>

new max_wallhack_distance = 2.5;

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/wallhack", true) == 0)
    {
        new Float:x, Float:y, Float:z;
        GetPlayerPos(playerid, x, y, z);
        new Float:distance = Distance3D(x, y, z, GetPlayerPos(playerid, x, y, z));

        if(distance > max_wallhack_distance)
        {
            SendClientMessage(playerid, 0xFF0000FF, "Wallhack detectado!");
            Kick(playerid);
            return 1;
        }
    }
    return 0;
}


Este plugin usa uma variável global chamada max_wallhack_distance para definir a distância máxima permitida entre o jogador e seu alvo. Se essa distância for ultrapassada, o plugin envia uma mensagem de erro para o jogador e o expulsa do jogo.

Essa verificação sobre o mod sobeit, pode ser feita através do uso de Hooks, ou seja, funções que são executadas antes de determinadas funções nativas, e podemos usar essa funcao para verificar se o jogador esta usando algum mod.

Código:
forward OnPlayerShoot(playerid);

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/shoot", true) == 0)
    {
        new mod_sobeit;
        GetPlayerMod(playerid, mod_sobeit);
        if(mod_sobeit)
        {
            SendClientMessage(playerid, 0xFF0000FF, "Mod sobeit detectado!");
            Kick(playerid);
            return 1;
        }
    }
    return 0;
}


Esse é apenas um exemplo básico, há muitos outros tipos de cheats que podem ser detectados, e esses exemplos também podem ser aprimorados. Ele deve ser usado como base para criação de um sistema de anti-cheat completo.