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