Problema con anticheat
#1

Hola a todos, he creado un anticheat simple la verdad de vida, funciona todo bien, pero cuando caigo desde una altura me kickea el anticheat, alguna soluciуn? gracias
Reply
#2

Somos adivinos, tenemos el cуdigo en nuestra mente para analizarlo...
Reply
#3

Soy un mago pero no telйpata no puedo ayudarte sin parte del cуdigo.
Te recomendarнa que simplemente uses la variable para tener sincronizada la vida/chaleco.
Reply
#4

for(new i; i < MAX_PLAYERS; i++)
{
new Float:vida;
GetPlayerHealth(i,vida);
if(vida != Jugador[i][Salud])
{
SetTimerEx("KickBan",1000,false,"d",i);
}
}

Perdуn, soy nuevo en el foro. Bueno lo que puse es simple, un callback llamado Detector que se detecta cada 2 segundos, podran ver que el anticheat es muy basico, solo detecta la vida y si es diferente a la de la variable lo kickea
Reply
#5

Te kickea porque estбs comparando si la vida actual no es igual a la de la variable, vida != Jugador[i][Salud], es decir, si te haces cualquier tipo de daсo te darб kick ya que tu vida actual no es la misma que la de la variable. Debes actualizar la vida cada vez que te hagan daсo, y en vez de comparar variable verifica si la cantidad es mayor, vida > Jugador[i][Salud].
Reply
#6

Hice lo que me dijiste y me funciono, pero trate de actualizar la variable al recibir daсo en el callback TakeDamage pero cuando recibo daсo me fijo en la base de datos y sigue igual, mira asi lo puse

if(issuerid == INVALID_PLAYER_ID || issuerid != INVALID_PLAYER_ID)
{
new Float:vida;
GetPlayerHealth(playerid, vida);
Jugador[playerid][Salud] = vida;
}

Alguna solucion? Gracias
Reply
#7

Es porque la variable la guardas al desconectarte, no hay problema en eso.
Y en cuanto al cуdigo ese estб demбs la condiciуn, es innecesaria.
Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
  new Float:vida; 
  GetPlayerHealth(playerid, vida);
  if(vida > Jugador[playerid][Salud]) //Antes de actualizar chequea si no se aumentу la vida.
   {
    SetTimerEx("KickBan",1000,false,"d", playerid); 
   } else {  //Si no se aumentу la vida se actualiza la variable a la vida actual.
    Jugador[playerid][Salud] = vida; //Actualizamos la variable.
   }
  return 1;
}
Reply
#8

Claro, pero el problema es que si me sacan vida en el juego, la variable sigue estando en 100, por lo tanto si me aumento la vida con un cheat no detecta nada, pero hare un actualizador de las variables que las actualize cada 2 segundos.

Una cosa, el codigo que me pasaste de que es? al antichea yo lo hice con un callback llamado Detector que se repite cada 5 segundos, pero el problema es que no se como hacer que se actualize a la hora de recibir daсo
Reply
#9

Amigo, cada vez que asignas la vida a la variable se actualiza el dato, o sea, se almacena en el servidor. Luego, al desconectarte reciйn se guarda esa variable en tu base de datos pero mientras tanto estarб almacenada en el enum del jugador.
En cuanto al callback OnPlayerTakeDamage serб para actualizar la variable cada vez que te hagas daсo.
Reply
#10

PHP код:
if (issuerid == INVALID_PLAYER_ID) return 0
Proba agregando esto en alguna parte
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)