Portal SAMP
[Ajuda] HACKER DANO DE LONGE - 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] HACKER DANO DE LONGE (/showthread.php?tid=2625)



HACKER DANO DE LONGE - diggao - 05/08/2022

Oi pessoal, tenho um servidor roleplay com 10 a 15 player todo dia e recentemente começou a entrar hack no meu servidor muito chato.

Ele simplesmente de longe consegue sair matando qualquer pessoal usando as mãos sem arma mesmo só no soco , o hack está matando todos do servidor até claro eu banir.

Tem como criar algo pra verificar se ele ta dando tipo muito dano em 1 hit  na OnPlayerUpdate com um soco ou algo do tipo pra parar esse hack?

Tentei algumas coisas mas só falhas, servidor de alguns amigos está sofrendo com o mesmo problema!


RE: HACKER DANO DE LONGE - Dr Editor - 05/08/2022

Uma alternativa super simples seria verificar a distância entre os jogadores, bem como validar se o jogador 1 realmente causou dano no jogador 2.
A forma mais simples (e lógica) neste caso seria verificar a distância.


RE: HACKER DANO DE LONGE - Carlos Victor - 05/08/2022

Exatamente, além de verificar a distãncia, é bom ver se o seu servidor usa a arma Sniper, ela consegue acertar tiros a longa distância e poderia acusar de forma falsa um jogador legit.

Recomendo fazer testes antes de começar a usar tal anti-cheater.


RE: HACKER DANO DE LONGE - diggao - 05/08/2022

como faço isso?


RE: HACKER DANO DE LONGE - Sants - 05/08/2022

Código:
CheckKill(playerid, killerid) {
    new Float:x, Float:y, Float:z, Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, Float:x, Float:y, Float:z);
    GetPlayerPos(killerid, Float:X, Float:Y, Float:Z);

    if(!IsPlayerInRangeOfPoint(killerid, 300, Float:x, Float:y, Float:z)) {
        SendClientMessage(playerid, -1, "Morte acima de 300 metros de distância");
    }
}

Código:
public OnPlayerDeath(playerid, killerid, reason)
{
CheckKill(playerid,killerid);
return 1;
}


A princípio eu faria assim, espero que te dê um norte.


RE: HACKER DANO DE LONGE - White_Blue - 05/08/2022

Eu sugiro que verifique o tempo entre as kills.

Código PHP:
new FloodAlert[MAX_PLAYERS],
 
FloodTimer[MAX_PLAYERS];
#define TimerFlood 100
#define AlertFlood 4
public OnPlayerDeath(playeridkilleridreason) {
 if(
GetTickCount() > FloodTimer[playerid]) FloodAlert[playerid] = 0;
    
FloodTimer[playerid] = GetTickCount() +TimerFlood;
    
FloodAlert[playerid]++;
    
    if(
FloodAlert[playerid] == FloodTimer) {
        
Kick(playerid);
        return 
1;
    }
   return 
1;