SA-MP Forums Archive
Speed hack (Anti) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Speed hack (Anti) (/showthread.php?tid=539770)



Speed hack (Anti) - Metzone - 30.09.2014

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


Respuesta: Speed hack (Anti) - Zodiaco - 30.09.2014

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.


Respuesta: Speed hack (Anti) - Glimma - 30.09.2014

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).


Respuesta: Speed hack (Anti) - Swedky - 30.09.2014

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...


Respuesta: Speed hack (Anti) - Glimma - 30.09.2014

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.