03/12/2022 12:00
Eu fiz um com o que eu sei do cheater, a explicação está no código abaixo.
Não recomendo que pune o jogador, pode acontecer de ter falso-positivo, em qualquer anti-cheater é recomendável que você deixe-o numa lista de suspeitos.
OBS: Não testei com o cheater em si, portanto criei um comando que replica o que o cheater faz nos veículos e funcionou.
Não recomendo que pune o jogador, pode acontecer de ter falso-positivo, em qualquer anti-cheater é recomendável que você deixe-o numa lista de suspeitos.
OBS: Não testei com o cheater em si, portanto criei um comando que replica o que o cheater faz nos veículos e funcionou.
Código:
/*
Como funciona o cheater?
- O cheater pega a posição do veículo mais próximo(ou um especificado), em questão de millisegundos coloca o jogador nesse veículo, seta a vida do veículo
e retorna o jogador para a posição antes de setar ele no veículo, isso tudo em um intervalo de tempo muito baixo, menor que 1 segundos.
Então, é necessário que um timer rápido e eficiente seja ativo. (Em até 1s funciona, testei.)
Nessa base, eu manipulo apenas variáveis, eu recomendo que não execute punições administrativas diretamente, e que retorne mensagens de suspeitos, qualquer anti-cheater
pode retornar falos-positivo e jogadores podem se prejudicar sendo inocentes.
*/
#include <a_samp>
new
oldVehicleOwner[MAX_VEHICLES],
Float:vehicleHealth[MAX_VEHICLES];
main(){}
public OnGameModeInit()
{
SetTimer("OnVehicleUpdate", 1000, true);
return 1;
}
forward OnVehicleUpdate();
public OnVehicleUpdate()
{
for(new i = 0; i < MAX_VEHICLES; i++)
{
if(IsValidVehicle(i))
{
static
Float:vehHealth;
GetVehicleHealth(i, vehHealth);
if(vehHealth <= 0 && vehHealth < vehicleHealth[i])
{
Kick(oldVehicleOwner[i]); // Não faça isso, apenas demonstrei. Pode acontecer falso-positivo
SetVehicleHealth(i, vehicleHealth[i]);
}
GetVehicleHealth(i, vehicleHealth[i]);
}
}
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(IsValidVehicle(vehicleid))
{
oldVehicleOwner[vehicleid] = playerid;
}
return 1;
}