SA-MP Forums Archive
Problema con anticheat - 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: Problema con anticheat (/showthread.php?tid=628163)



Problema con anticheat - Martin100200300 - 06.02.2017

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


Respuesta: Problema con anticheat - Whyd - 06.02.2017

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


Respuesta: Problema con anticheat - jhgr16 - 06.02.2017

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.


Re: Problema con anticheat - Martin100200300 - 06.02.2017

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


Re: Problema con anticheat - GlobitoPawn - 06.02.2017

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


Re: Problema con anticheat - Martin100200300 - 06.02.2017

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


Re: Problema con anticheat - GlobitoPawn - 06.02.2017

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;
}



Re: Problema con anticheat - Martin100200300 - 06.02.2017

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


Re: Problema con anticheat - GlobitoPawn - 06.02.2017

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.


Respuesta: Problema con anticheat - Whillyrez - 06.02.2017

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