Speed hack (Anti)
#1

Como dice el titulo, їAlguien sabe de algun anticheat que detecte el speedhack? Que no sea junkebuster?
Reply
#2

Prueba asi.

pawn Код:
stock GetPlayerSpeed(playerid)
{
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid))
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 179.28625;
    return floatround(ST[3]);
}

pawn Код:
public OnPlayerUpdate(playerid)
{
    if(GetPlayerSpeed > 1000) return Kick(playerid);
    return 1;
}
no estoy seguro, recien estoy entendiendo esto del pawno :3.
Reply
#3

pawn Код:
new Float:VelocidadActual[3][MAX_PLAYERS];
new Float:UltimaPosicion[3][MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    VelocidadActual[1][playerid] = 0; // Reiniciamos la variable.
    return 1;
}

public OnPlayerUpdate(playerid)
{
    ComprobarVelocidad(playerid); // Cada 20 ms comprobamos si el jugador usa cheat de velocidad.
    return 1;
}

forward OnPlayerFall(playerid);
public OnPlayerFall(playerid) // Detecta si el jugador estб cayendo, para asн evitar falsas detecciones de cheat.
{
    if(GetPVarInt(playerid, "Caida")) return 1;
    SetTimerEx("Reactivar", 8000, false, "i", playerid);
    SetPVarInt(playerid, "Caida", 1);
    VelocidadActual[0][playerid] = ObtenerVelocidad(GetPlayerVehicleID(playerid));
    VelocidadActual[1][playerid] = VelocidadActual[0][playerid];
    VelocidadActual[2][playerid] = 0;
    return 1;
}

forward ComprobarVelocidad(playerid);
public ComprobarVelocidad(playerid) // Detecta si el jugador utilizу cheat de velocidad.
{
    foreach(Player, i)
    {
        if(IsPlayerInAnyVehicle(playerid) && !GetPVarInt(playerid, "Caida") && (!EsUnAvion(GetPlayerVehicleID(playerid)) || !EsUnBote(GetPlayerVehicleID(playerid))))
        {
            VelocidadActual[0][playerid] = ObtenerVelocidad(GetPlayerVehicleID(playerid));
            if(VelocidadActual[0][playerid] > 160)
            {
                VelocidadActual[2][playerid] = VelocidadActual[0][playerid]-VelocidadActual[1][playerid];
                if(VelocidadActual[2][playerid] > 42)
                {
                    new Float:Pos[3];
                    GetPlayerPos(i, Pos[0], Pos[1], Pos[2]);
                    RemovePlayerFromVehicle(i); // Quita al jugador del vehнculo.
                    SetPlayerPos(i, Pos[0], Pos[1], Pos[2]+5); // Le establece su posiciуn pero con mбs altura.
                    break;
                }
            }
            VelocidadActual[1][playerid] = VelocidadActual[0][playerid];
        }
    }
    ComprobarCaida();
    return 1;
}

forward ComprobarCaida();
public ComprobarCaida()
{
    new Float:Pos[4];
    foreach(Player, i)
    {
        GetPlayerPos(i, Pos[0], Pos[1], Pos[2]);
        Pos[3] = floatsqroot((Pos[0]-UltimaPosicion[0][i] * Pos[0]-UltimaPosicion[0][i]) + (Pos[1]-UltimaPosicion[1][i] * Pos[1]-UltimaPosicion[1][i]));
        if(Pos[3] < 10 && (UltimaPosicion[2][i] - Pos[2]) > 5) OnPlayerFall(i);
        UltimaPosicion[0][i] = Pos[0];
        UltimaPosicion[1][i] = Pos[1];
        UltimaPosicion[2][i] = Pos[2];
    }
    return 1;
}

forward Reactivar(playerid);
public Reactivar(playerid)
{
    VelocidadActual[0][playerid] = ObtenerVelocidad(GetPlayerVehicleID(playerid));
    VelocidadActual[1][playerid] = VelocidadActual[0][playerid];
    VelocidadActual[2][playerid] = 0;
    SetPVarInt(playerid, "Caida", 0);
    return 1;
}

stock ObtenerVelocidad(vehicleid) // Obtenemos la velocidad del vehнculo.
{
    new Float:Pos[3], velocidadactual;
    GetVehicleVelocity(vehicleid, Pos[0], Pos[1], Pos[2]);
    velocidadactual = floatround(floatsqroot(Pos[0]*Pos[0] + Pos[1]*Pos[1] + Pos[2]*Pos[2]) * 180);
    return velocidadactual;
}

stock EsUnBote(carid) // Comprobamos si el vehнculo es un bote o un barco.
{
    new M = GetVehicleModel(carid);
    if(M == 472 || M == 473 || M == 493 || M == 595 || M == 484 || M == 430 || M == 453 || M == 452 || M == 446 || M == 454){return 1;}
    return 0;
}

stock EsUnAvion(carid) // Comprobamos si el vehнculo es un aviуn o un helicуptero.
{
    new M = GetVehicleModel(carid);
    if(M == 592 || M == 577 || M == 511 || M == 548 || M == 512 || M == 593 || M == 425 || M == 417 || M == 487 || M == 553){return 1;}
    if(M == 488 || M == 497 || M == 563 || M == 476 || M == 447 || M == 519 || M == 460 || M == 469 || M == 513 || M == 520){return 1;}
    return 0;
}
Este anticheat lo que harб serб detectar el cheat de velocidad de forma precisa, ya que, como se sabe, cuando un jugador cae con un vehнculo, la velocidad de caнda es muy rбpida, a punto tal de detectarla como cheat. Con este cуdigo, se evitarбn falsas detecciones.

*Si querйs, podйs hacer que la comprobaciуn no se realice en OnPlayerUpdate, moviйndolo a un timer (yo lo puse ahн para que lo detecte mбs rбpido, pero estoy seguro que con un timer de 250ms alcanza y sobra).
Reply
#4

Quote:
Originally Posted by Glimma
Посмотреть сообщение
pawn Код:
new Float:VelocidadActual[3][MAX_PLAYERS];
new Float:UltimaPosicion[3][MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    VelocidadActual[1][playerid] = 0; // Reiniciamos la variable.
    return 1;
}

public OnPlayerUpdate(playerid)
{
    ComprobarVelocidad(playerid); // Cada 20 ms comprobamos si el jugador usa cheat de velocidad.
    return 1;
}

forward OnPlayerFall(playerid);
public OnPlayerFall(playerid) // Detecta si el jugador estб cayendo, para asн evitar falsas detecciones de cheat.
{
    if(GetPVarInt(playerid, "Caida")) return 1;
    SetTimerEx("Reactivar", 8000, false, "i", playerid);
    SetPVarInt(playerid, "Caida", 1);
    VelocidadActual[0][playerid] = ObtenerVelocidad(GetPlayerVehicleID(playerid));
    VelocidadActual[1][playerid] = VelocidadActual[0][playerid];
    VelocidadActual[2][playerid] = 0;
    return 1;
}

forward ComprobarVelocidad(playerid);
public ComprobarVelocidad(playerid) // Detecta si el jugador utilizу cheat de velocidad.
{
    foreach(Player, i)
    {
        if(IsPlayerInAnyVehicle(playerid) && !GetPVarInt(playerid, "Caida") && (!EsUnAvion(GetPlayerVehicleID(playerid)) || !EsUnBote(GetPlayerVehicleID(playerid))))
        {
            VelocidadActual[0][playerid] = ObtenerVelocidad(GetPlayerVehicleID(playerid));
            if(VelocidadActual[0][playerid] > 160)
            {
                VelocidadActual[2][playerid] = VelocidadActual[0][playerid]-VelocidadActual[1][playerid];
                if(VelocidadActual[2][playerid] > 42)
                {
                    new Float:Pos[3];
                    GetPlayerPos(i, Pos[0], Pos[1], Pos[2]);
                    RemovePlayerFromVehicle(i); // Quita al jugador del vehнculo.
                    SetPlayerPos(i, Pos[0], Pos[1], Pos[2]+5); // Le establece su posiciуn pero con mбs altura.
                    break;
                }
            }
            VelocidadActual[1][playerid] = VelocidadActual[0][playerid];
        }
    }
    ComprobarCaida();
    return 1;
}

forward ComprobarCaida();
public ComprobarCaida()
{
    new Float:Pos[4];
    foreach(Player, i)
    {
        GetPlayerPos(i, Pos[0], Pos[1], Pos[2]);
        Pos[3] = floatsqroot((Pos[0]-UltimaPosicion[0][i] * Pos[0]-UltimaPosicion[0][i]) + (Pos[1]-UltimaPosicion[1][i] * Pos[1]-UltimaPosicion[1][i]));
        if(Pos[3] < 10 && (UltimaPosicion[2][i] - Pos[2]) > 5) OnPlayerFall(i);
        UltimaPosicion[0][i] = Pos[0];
        UltimaPosicion[1][i] = Pos[1];
        UltimaPosicion[2][i] = Pos[2];
    }
    return 1;
}

forward Reactivar(playerid);
public Reactivar(playerid)
{
    VelocidadActual[0][playerid] = ObtenerVelocidad(GetPlayerVehicleID(playerid));
    VelocidadActual[1][playerid] = VelocidadActual[0][playerid];
    VelocidadActual[2][playerid] = 0;
    SetPVarInt(playerid, "Caida", 0);
    return 1;
}

stock ObtenerVelocidad(vehicleid) // Obtenemos la velocidad del vehнculo.
{
    new Float:Pos[3], velocidadactual;
    GetVehicleVelocity(vehicleid, Pos[0], Pos[1], Pos[2]);
    velocidadactual = floatround(floatsqroot(Pos[0]*Pos[0] + Pos[1]*Pos[1] + Pos[2]*Pos[2]) * 180);
    return velocidadactual;
}

stock EsUnBote(carid) // Comprobamos si el vehнculo es un bote o un barco.
{
    new M = GetVehicleModel(carid);
    if(M == 472 || M == 473 || M == 493 || M == 595 || M == 484 || M == 430 || M == 453 || M == 452 || M == 446 || M == 454){return 1;}
    return 0;
}

stock EsUnAvion(carid) // Comprobamos si el vehнculo es un aviуn o un helicуptero.
{
    new M = GetVehicleModel(carid);
    if(M == 592 || M == 577 || M == 511 || M == 548 || M == 512 || M == 593 || M == 425 || M == 417 || M == 487 || M == 553){return 1;}
    if(M == 488 || M == 497 || M == 563 || M == 476 || M == 447 || M == 519 || M == 460 || M == 469 || M == 513 || M == 520){return 1;}
    return 0;
}
Este anticheat lo que harб serб detectar el cheat de velocidad de forma precisa, ya que, como se sabe, cuando un jugador cae con un vehнculo, la velocidad de caнda es muy rбpida, a punto tal de detectarla como cheat. Con este cуdigo, se evitarбn falsas detecciones.

*Si querйs, podйs hacer que la comprobaciуn no se realice en OnPlayerUpdate, moviйndolo a un timer (yo lo puse ahн para que lo detecte mбs rбpido, pero estoy seguro que con un timer de 250ms alcanza y sobra).
Recuerda que el cуdigo puede ser mucho mejor...
Reply
#5

Sн, pero mбs o menos como para guiarse. Podrнa quitar las PVar, podrнa usar ptask en vez de OnPlayerUpdate, en fin, lo que se le ocurra.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)