10/05/2019, 06:15 PM
No me voy a poner a explicar que hace cada función, porque se supone que es un nivel más alto y avanzado.
Bueno, esto es para abrir una discusión. En este caso, bloquear un cheat vía un comando de este.
La idea o el método, es el siguiente:
Vía servidor voy a detectar los comandos de un chitero para así, luego yo, bloquearlos vía amxx.
Okay, entonces, para saber que comandos tiene nuestro chitero, vamos a leer su client_command y así guardarlo en un bloc de notas o en lo que quieran.
Okay, con esto, obtendriamos cada cmd que pulsaría el chitero. Ahora sólo queda detectarlo y banearlo. Para esto hacemos lo siguiente.
Supongamos esto:
Mi chitero esta utilizando un COMANDO que lo que hace es cambiarse a un nick. En este caso el comando es _nickgreen (Créditos a Lemon)
Entonces haríamos lo siguiente:
Bueno, es todo en base a un ejemplo y como dijo Rainnegan, es imposible detectar un cheat bajo un comando, ya que lo podes bypassear mediante diferentes formas.
Ahora, este es la pro y la contra.
Pro -> Sí el cheat es público y no recibe updates y aplicas un fix similar a este, te ahorrarias un problema.
Contra -> Sí es el desarrollador del cheat, pues, este te volvera a entrar en 2 segundos ya que lo puede arreglar en cualquier momento porque bueno, es el desarrollador...
------------------------------------------------------------------------
Bueno, esto es para abrir una discusión. En este caso, bloquear un cheat vía un comando de este.
La idea o el método, es el siguiente:
Vía servidor voy a detectar los comandos de un chitero para así, luego yo, bloquearlos vía amxx.
Okay, entonces, para saber que comandos tiene nuestro chitero, vamos a leer su client_command y así guardarlo en un bloc de notas o en lo que quieran.
Código PHP:
stock load_commands(id){
new Comando[127];
read_argv(0, Comando, charsmax(Comando)); //1er parametro del comando.
if(strlen(Comando)>0){ //Si escribio..
new Result[127];
read_args(Result, charsmax(Result)); //Lee lo siguiente, ya que un comando no puede tener un sólo parametro, si no tiene varios. Ejemplo [sXe-I-SSD-Reply] (famoso exploit del Sedly). Con esto leeríamos [sXe-I-SSD-Reply] y lo restante.. Sin necesidad de colocar 10 read_argv..
remove_quotes(Result);
/* Todo esto sería el guardado nomás.. */
new Nombre[32], Mapa[32], Fecha[32];
get_user_name(id, Nombre, charsmax(Nombre));
get_mapname(Mapa, charsmax(Mapa));
get_time("%d-%m-%Y - %H:%M:%S", Fecha, charsmax(Fecha));
log_command_add("LogCommand.log", "%s uso el comando %s %s | Mapa: %s | Fecha: %s",
Nombre, Comando, Result, Mapa, Fecha);
}
}
Supongamos esto:
Mi chitero esta utilizando un COMANDO que lo que hace es cambiarse a un nick. En este caso el comando es _nickgreen (Créditos a Lemon)
Entonces haríamos lo siguiente:
Código PHP:
new NameCheater[33][32]; //Variable donde se creara un nombre random.
public plugin_init() {
register_forward(FM_ClientUserInfoChanged, "fw_InfoChanged"); //Al ser nick, detectamos cuando se lo cambia.
}
public client_putinserver(id) {
set_task(5.0, "Check", id+777); //Llamamos cuando se conecta a "Check", función donde hara uso del comando más adelante para luego bloquearlo.
}
public Check(id){
id-=777;
if(is_user_connected(id)){
formatex(NameCheater[id], charsmax(NameCheater[]), "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90), random_num(65, 90));
client_cmd(id,"_nickgreen ^"%s^"", NameCheater[id]); //Hacemos uso del comando.
}
}
public fw_InfoChanged(id, buffer) // _nickgreen
{
if(is_user_connected(id))
{
static szNewName[32], Name[32];get_user_name(id, Name, 31);
engfunc(EngFunc_InfoKeyValue, buffer, "name", szNewName, charsmax(szNewName));
if(equal(szNewName, Name))
return FMRES_IGNORED;
if(equal(szNewName, NameCheater[id])){
engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", Name)
client_cmd(id, "name ^"%s^"", Name)
ColorChat(0, GREEN, "%s ^3 %s^1 Baneado por SanJuanino", szPrefix, Name);
log_to_file("Cheaters.ini", "%s baneado por sanjuanino", Name);
new ip[22];get_user_ip(id, ip, 21, 1);
server_cmd("addip 0 %s;writeip", ip);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
return FMRES_IGNORED
}
Ahora, este es la pro y la contra.
Pro -> Sí el cheat es público y no recibe updates y aplicas un fix similar a este, te ahorrarias un problema.
Contra -> Sí es el desarrollador del cheat, pues, este te volvera a entrar en 2 segundos ya que lo puede arreglar en cualquier momento porque bueno, es el desarrollador...
------------------------------------------------------------------------