19.02.2015, 17:55
Quote:
si tengo un antispeed pero imagina si un player cae, entonces lo detecta :/ entonces mi antispeed solo detecta si el player tiene la velocidad 2 en 0 pero el hacker se mueve de arriba a abajo (o eso parece) en todas direcciones
|
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 vemos si el jugador tiene cheat
return 1;
}
forward OnPlayerFall(playerid);
public OnPlayerFall(playerid) // Detecta si el jugador estб cayendo, para asн evitar falsas detecciones de hack
{
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у speed hack
{
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;
}