30.09.2014, 09:33
Como dice el titulo, їAlguien sabe de algun anticheat que detecte el speedhack? Que no sea junkebuster?
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]);
}
public OnPlayerUpdate(playerid)
{
if(GetPlayerSpeed > 1000) return Kick(playerid);
return 1;
}
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;
}
pawn Код:
*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). |