[TUT] Comandos
#1
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 ?
- 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):
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);
- 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

¿ 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.
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);
Cumple las mismas funciones que register_clcmd sobre sus parámetros

Les voy a dejar unos ejemplos básicos tanto para register_clcmd, como register_concmd

Hookear un comando propio del CS: chooseteam
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(sNumber2); // 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 (
0strlen(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(1100);
    new 
iUserNum str_to_num(sNumber);

    if (
iRandomNUm != iUserNum) {
        
client_print(idprint_chat"HAS ERRADO EL NÚMERO");
        return 
PLUGIN_HANDLED;
    }
    
    
client_print(idprint_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
Código PHP:
register_concmd("amxx_puntos""CmdPuntos"ADMIN_BAN"<targer><puntos>"
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
Código PHP:
public CmdPuntos(id)
{
    if (!/
get_user_flags(id) & ADMIN_BAN)) 
        return 
PLUGIN_HANDLED;
    
    static 
iArg[32], iTargetiPuntos[3]
    
read_argv(1iArgcharsmax(iArg)) // Leemos la variable y el 1 indica que despues de amxx_puntos, debemos poner nuestro jugador
    
read_argv(2iPuntoscharsmax(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(idiArg0// 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(idprint_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

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

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
Responder
#2
Me parece q no entendes bien lo ultimo q explicaste eso esta mal
Código PHP:
if(!iNum): Si no se ingresan numeros.. Salimos de la funcion y del messagemode 
Decime si ingrese un numero negativo o 0 q pasaria?
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#3
(22/04/2014, 03:18 PM)mongito100 escribió: Me parece q no entendes bien lo ultimo q explicaste eso esta mal
Código PHP:
if(!iNum): Si no se ingresan numeros.. Salimos de la funcion y del messagemode 
Decime si ingrese un numero negativo o 0 q pasaria?
Ah mira no me di cuenta :S
Ahora lo modifico.. O como pensas vos ?
Responder
#4
(22/04/2014, 03:45 PM)CSAxel escribió:
(22/04/2014, 03:18 PM)mongito100 escribió: Me parece q no entendes bien lo ultimo q explicaste eso esta mal
Código PHP:
if(!iNum): Si no se ingresan numeros.. Salimos de la funcion y del messagemode 
Decime si ingrese un numero negativo o 0 q pasaria?
Ah mira no me di cuenta :S
Ahora lo modifico.. O como pensas vos ?
lee el string.inc, no recuerdo si el str_to_num retornaba algo en especifico si no era un numero el string

Código PHP:
/* Returns true when value is letter or digit. */
native isalnum(ch); 

Con respecto a q hace el trim y remove_quotes
el trim remueve los espacios en un string
y el remove_quotes te lo dice la funcion remve = remover quotes=comillas
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#5
y si no escribe un número?

debes chequear is_str_num

recorda que cualquier número negativo dará true, únicamente da false el 0
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
Responder
#6
Emmm ahí mejore el Tutorial porque estaba medio tirado xD e.e
Cualquier cosa diganme si esta mal explicado
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#7
No creas i además q pasaría si ingreso un num negativo
Te dejo esto lo leí hace algún tiempo nunca lo aplique
http://www.amxmodx.org/doc/index.html?pa...sdigit.htm
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#8
(22/04/2014, 02:34 PM)CSAxel escribió: La segunda linea (jointeam) es cuando vamos a elejir un tipo de "model" o "player", ya sea leet - arctic - sas (Sea CT o TT)

Tanto el chooseteam como el jointeam es para hookear la selección de equipo.

Los comandos para hookear la selección de modelo son joinclass y el menuId de 'Terrorist_Select' y 'CT_Select' si no me equivoco.
Responder
#9
csaxel te falto explicar en síntesis para que sirve el register_clcmd, también podrías agregar el register_concmd
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#10
Listo loco ahora que llegué me pongo a editar tranqui y explicar mejor las cosas.
Gracias Sonrisa

EDIT: Renové por completo el TUT.. Espero que ahora se entienda mejor :3
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#11
Código:
Algunos comandos para hokkear
- buyammo1 y buyammo2: En estos 2 comando se encuentra en las teclas, punto y coma (, .) mejor dicho también donde compramos nuestras balas para las armas.
- nightvision: Aquí se encuentra la visión nocturna (Letra N)
- drop: Aquí encontramos cuando dropeamos un arma (Letra G)
- impulse 100: Aquí encontramos la linterna (Letra F)
- buy: Aquí encontramos el menú para comprar armas (Letra B)
- say: Aquí es donde escribimos al say (Letra Y)
- say_team: Aqui es donde escribimos por say, pero entre los equipos (Letra U)
Y otros comandos más.. Pueden revisar también en el archivo config.cfg. Y ahí encontraran algunos comandos para hookear

Podrias dejar ejemplos mas claros para los mas principiantes?
(08/10/2014, 10:50 PM)meTaLiCroSS escribió: Siento que en este foro viven en una competencia, en vez de preocuparse del contenido se preocupan de la gente, nisiquiera de eso, de sus actitudes por muy buenas o malas que sean, que clase de convivencia se puede llegar con aquello? Siempre la misma mierda en todos lados, progresen de una vez

**************************************************

Como hacer una Base de Datos para Sistema de Cuentas by r0ma
Responder
#12
(10/06/2014, 10:21 PM)Store.gh escribió: Código:
Algunos comandos para hokkear
- buyammo1 y buyammo2: En estos 2 comando se encuentra en las teclas, punto y coma (, .) mejor dicho también donde compramos nuestras balas para las armas.
- nightvision: Aquí se encuentra la visión nocturna (Letra N)
- drop: Aquí encontramos cuando dropeamos un arma (Letra G)
- impulse 100: Aquí encontramos la linterna (Letra F)
- buy: Aquí encontramos el menú para comprar armas (Letra B)
- say: Aquí es donde escribimos al say (Letra Y)
- say_team: Aqui es donde escribimos por say, pero entre los equipos (Letra U)
Y otros comandos más.. Pueden revisar también en el archivo config.cfg. Y ahí encontraran algunos comandos para hookear

Podrias dejar ejemplos mas claros para los mas principiantes?

el tema es que cada jugador puede tenerlo bindeado con cualquier cosa eso que pasaste es el default
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#13
(10/06/2014, 10:21 PM)Store.gh escribió: Código:
Algunos comandos para hokkear
- buyammo1 y buyammo2: En estos 2 comando se encuentra en las teclas, punto y coma (, .) mejor dicho también donde compramos nuestras balas para las armas.
- nightvision: Aquí se encuentra la visión nocturna (Letra N)
- drop: Aquí encontramos cuando dropeamos un arma (Letra G)
- impulse 100: Aquí encontramos la linterna (Letra F)
- buy: Aquí encontramos el menú para comprar armas (Letra B)
- say: Aquí es donde escribimos al say (Letra Y)
- say_team: Aqui es donde escribimos por say, pero entre los equipos (Letra U)
Y otros comandos más.. Pueden revisar también en el archivo config.cfg. Y ahí encontraran algunos comandos para hookear

Podrias dejar ejemplos mas claros para los mas principiantes?

No todos se bueden hokear porque son client-side como buy
Todos los MODS VHL totalmente gratuitos  Descarga Aqui

Mis plugins:
STEAM: https://steamcommunity.com/id/Metrikcz/
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP
Responder
#14
(10/06/2014, 11:54 PM)Metrikcz escribió: No todos se bueden hokear porque son client-side como buy

No estás equivocado, pero tampoco estás del todo cierto.

El comando buy es enviado al servidor cuando estás en la zona de buy.
Responder
#15
Ahí edite el primer post sobre algunos detalles mal puestos.. Si ven algo raro me dicen y corrijo o para agregar también.
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#16
me podes decir que ase esto :

Código PHP:
new iNum str_to_num(say

solo para saber n.n

Saludos.
(10/10/2014, 06:38 PM)RauliTop escribió:
(10/10/2014, 04:40 PM)ivan escribió: no sabía que se podia poner los iconos gestuales cuando das reputacion negativa/positiva.
ui, peligro...
pronto habrán reputaciones de ivan:
hace muy muy muii DafuqYao mingGenius buenos Thats what she saidtutoriales Proud me encataan Whatever
Responder
#17
(13/06/2014, 12:12 AM)K.- escribió: me podes decir que ase esto :

Código PHP:
new iNum str_to_num(say

solo para saber n.n

Saludos.
La documentación de AMXX no muerde.
Responder
#18
(13/06/2014, 12:18 AM)Mario AR. escribió:
(13/06/2014, 12:12 AM)K.- escribió: me podes decir que ase esto :

Código PHP:
new iNum str_to_num(say

solo para saber n.n

Saludos.
La documentación de AMXX no muerde.

Es un tut puede preguntar no hace falta q le responda hací

@k Convierte un string a un valor numérico

@axel Sigo sin ver que aregles lo de loa números negativos comprueba si el primer carácter es -
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#19
(13/06/2014, 12:29 AM)mongito100 escribió:
(13/06/2014, 12:18 AM)Mario AR. escribió:
(13/06/2014, 12:12 AM)K.- escribió: me podes decir que ase esto :

Código PHP:
new iNum str_to_num(say

solo para saber n.n

Saludos.
La documentación de AMXX no muerde.

Es un tut puede preguntar no hace falta q le responda hací

@k Convierte un string a un valor numérico

@axel Sigo sin ver que aregles lo de loa números negativos comprueba si el primer carácter es -
Sinceramente estoy en otra :_
Ahi lo arreglo bien...
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#20
Y como seria para hookear la linterna por ejemplo?
Responder
#21
La linterna sería register_impulse
Código PHP:
register_impulse(100"Nombre_Funcion"); 
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#22
No se si es solo un problema que me paso a mi pero si los registro en este orden

Código PHP:
register_clcmd("chooseteam""clcmd_team");
register_clcmd("jointeam""clcmd_team"); 
tira loose identation

pero si lo hago al revés no me tira ninguna warning Whatever

Código PHP:
register_clcmd("jointeam""clcmd_team");
register_clcmd("chooseteam""clcmd_team"); 
Responder
#23
(08/02/2015, 12:01 AM)nicoxxbzn escribió: No se si es solo un problema que me paso a mi pero si los registro en este orden

Código PHP:
register_clcmd("chooseteam""clcmd_team");
register_clcmd("jointeam""clcmd_team"); 
tira loose identation

pero si lo hago al revés no me tira ninguna warning Whatever

Código PHP:
register_clcmd("jointeam""clcmd_team");
register_clcmd("chooseteam""clcmd_team"); 

Whatdone
Eso es solo por la tabulacion
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#24
y como le puedo añadir el say /respawn a el mod warp?
Responder
#25
Si está hookeado el Say, debes registrarlo una linea antes
Asi
Código PHP:
register_clcmd("say /respawn""clcmd__Respawn");
register_clcmd("say""clcmd__Say"); 

Y luego en cualquier parte del plugin pones la función para el comando /respawn
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)