Buenas.
Les vengo a traer un tutorial de qué son y cómo funcionan los comandos y por sobre todo el uso de register_clcmd, register_concmd, entre otros.
¿ Qué es y para que sirve register_clcmd ?
¿ Qué es y para que sirve register_concmd ?
Les voy a dejar unos ejemplos básicos tanto para register_clcmd, como register_concmd
Eso es todo, cualquier error me comentan. Un saludo!
Les vengo a traer un tutorial de qué son y cómo funcionan los comandos y por sobre todo el uso de register_clcmd, register_concmd, entre otros.
¿ Qué es y para que sirve register_clcmd ?
- Registra una función y un comando que se ejecuta por medio del cliente (Lo dice la sigla clcmd = client command), ya sea por consola o chat del CS, un alias, un messagemode, etc. Son muy utilizados para obtener comandos propios de CS (Hookearlos), y cambiar su dicha función, crear comandos para el chat del CS, etc.
- Tiene 2 parámetros importantes (En realidad tiene 5, pero son opcionales, sólo explicaré los más importantes):
- client_cmd: Registro del comando (Sea del CS, o registrar un messagemode, un comando por medio de Say, etc).
- function: Registra la función del propio comando para poder utilizarla dentro del código
- Tiene 2 parámetros importantes (En realidad tiene 5, pero son opcionales, sólo explicaré los más importantes):
Código:
/* Registers function which will be called from client console.
* Set FlagManager to 1 to make FlagManager always include this command
* Set FlagManager to 0 to make FlagManager never include this command
* Returns the command ID.
*/
native register_clcmd(const client_cmd[],const function[],flags=-1, const info[]="", FlagManager=-1);
- function: Registra la función del propio comando para poder utilizarla dentro del código
¿ Qué es y para que sirve register_concmd ?
- Misma función que register_clcmd solo que registra comandos restringidos por consola y hasta por el servidor. Solamente son utilizables en la consola o por medio de una RCON para ejecutarlos.
- Lo mismo como con register_clcmd, tiene 5 parametros, pero sólo son 2 los más importante y funciona igual que el mismo.
Cumple las mismas funciones que register_clcmd sobre sus parámetros
- Lo mismo como con register_clcmd, tiene 5 parametros, pero sólo son 2 los más importante y funciona igual que el mismo.
Código:
/* Registers function which will be called from any console.
* Set FlagManager to 1 to make FlagManager always include this command
* Set FlagManager to 0 to make FlagManager never include this command
* Returns the command ID.
*/
native register_concmd(const cmd[],const function[],flags=-1, const info[]="", FlagManager=-1);
Les voy a dejar unos ejemplos básicos tanto para register_clcmd, como register_concmd
Hookear un comando propio del CS: chooseteam
Hookear el say team (Chat por equipos): say_team
Hookear un messagemode (El digamos, famoso INPUT): INGRESAR_NUMERO
Código PHP:
// Registramos el comando chooseteam:
// chooseteam se llama cada vez que vamos a seleccionar un equipo (Ya sea cuando entramos al servidor o cuando presionamos M)
register_clcmd("chooseteam", "clcmd__chooseTeam");
// El único parámetro que se utiliza es ID
public clcmd__chooseTeam(const id) {
if (!is_user_alive(id)) { // Si el usuario está muerto
return PLUGIN_HANDLED; // Al presionar M o querer seleccionar equipo, no vamos a poder hacerlo estándo muerto, por lo tanto, detenemos la función
}
return PLUGIN_CONTINUE; // De lo contrario, podemos seleccionar un equipo tranquilamente.
}
Hookear el say team (Chat por equipos): say_team
Código PHP:
// Si quiero bloquear el chat por equipos, solamente tengo que registrarlo y utilizar PLUGIN_HANDLED o PLUGIN_HANDLED_MAIN (Más adelante lo explicaré)
register_clcmd("say_team", "clcmd__sayTeam");
public clcmd__sayTeam(const id) {
// Al utilizar PLUGIN_HANDLED_MAIN, causa la misma función que PLUGIN_HANDLED, solamente que es dentro del mismo PLUGIN
// Es decir que si tengo 2 plugins que registran say_team y en uno utilizo PLUGIN_HANDLED_MAIN, solamente se bloqueara en ese plugin, en otros se podrá utilizar
return PLUGIN_HANDLED_MAIN; // o PLUGIN_HANDLED
}
Hookear un messagemode (El digamos, famoso INPUT): INGRESAR_NUMERO
Código PHP:
// Al querer crear o hookear un messagemode es importante tener en cuenta que no soporta los acentos, ya que los confunde con parámetros del CS o no toma dicho comando.
register_clcmd("INGRESAR_NUMERO", "clcmd__enterNumber");
public clcmd__enterNumber(const id) {
new sNumber[3]; // Variable para que lea lo que ingresamos
read_args(sNumber, 2); // Lo lee
remove_quotes(sNumber); // Elimina las comillas
trim(sNumber); // Elimina los espacios
if (!sNumber[0], containi(sNumber, " ") != -1) { // Chequea que no contenga espacios raros o un caracter NULO
return PLUGIN_HANDLED;
}
new i;
for (i = 0; i < strlen(sNumber); ++i) {
if (!isdigit(sNumber[i])) { // Chequea si es un dígito numérico
return PLUGIN_HANDLED;
}
}
// Lo demas lo dice por si solo.
new iRandomNum = random_num(1, 100);
new iUserNum = str_to_num(sNumber);
if (iRandomNUm != iUserNum) {
client_print(id, print_chat, "HAS ERRADO EL NÚMERO");
return PLUGIN_HANDLED;
}
client_print(id, print_chat, "HAS ADIVINADO EL NÚMERO");
return PLUGIN_HANDLED;
}
Supongamos que utilizamos un sistema de puntos no ?
Y queremos agregar un comando para que SOLO los administradores lo utilicen y que ellos puedan dar puntos a los usuarios:
Vamos a explicar, primero vamos a registrar el comando por consola
Target: Es el jugador que vamos a poner al lado del comando para darle los puntos
Puntos: La cantidad de puntos que vamos a darle al usuario :B
Ahora vamos a crear la función para darle la acción al comando
La primera condición sería: Si el usuario no tiene el acceso ADMIN_BAN entonces retornamos y salimos de la función.
Las primeras 3 variables estáticas son: La cantidad de strings en cadena del nombre del jugador (Target), la otra es donde vamos a asignarle el jugador al que vamos a darle los puntos y la última es donde guardaremos la cantidad de puntos que vamos a darle al jugador seleccionado
Y queremos agregar un comando para que SOLO los administradores lo utilicen y que ellos puedan dar puntos a los usuarios:
Vamos a explicar, primero vamos a registrar el comando por consola
Código PHP:
register_concmd("amxx_puntos", "CmdPuntos", ADMIN_BAN, "<targer><puntos>")
Puntos: La cantidad de puntos que vamos a darle al usuario :B
Ahora vamos a crear la función para darle la acción al comando
Código PHP:
public CmdPuntos(id)
{
if (!/get_user_flags(id) & ADMIN_BAN))
return PLUGIN_HANDLED;
static iArg[32], iTarget, iPuntos[3]
read_argv(1, iArg, charsmax(iArg)) // Leemos la variable y el 1 indica que despues de amxx_puntos, debemos poner nuestro jugador
read_argv(2, iPuntos, charsmax(iPuntos)) // Leemos la variables y el 2 indica que despues de poner el nombre del jugador, le asignamos la cantidad de puntos para él
iTarget = cmd_target(id, iArg, 0) // Le damos a la variable iTarget al jugador que vamos a asignarle los mismos
if (!iTarget) return PLUGIN_HANDLED; // Si no encuentra al jugador que escribimos, retornamos y salimos
variable_puntos[id] += str_to_num(iPuntos)
// Le sumamos a nuestra variable donde obtenemos los puntos
// y convertimos la variable string iPuntos a integer para que pueda sumarse como corresponde
client_print(id, print_chat, "Le has dado a tu jugador %d puntos con éxito", str_to_num(iPuntos)) // mensaje que nos muestra cuandos puntos le asignamos
return PLUGIN_HANDLED; // retornamos y salimos para terminar
}
Las primeras 3 variables estáticas son: La cantidad de strings en cadena del nombre del jugador (Target), la otra es donde vamos a asignarle el jugador al que vamos a darle los puntos y la última es donde guardaremos la cantidad de puntos que vamos a darle al jugador seleccionado
Eso es todo, cualquier error me comentan. Un saludo!
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Contactarme vía Discord >>> AtselTV#8202