18/07/2018, 12:54 PM
Bueno, ya sé que hay un tutorial sobre menú de ADMINS de "Pipa Roja" pero quise hacer el mío en base a un usuario que público un post..
[ACLARACIONES]
Se que es más simple utilizar directamente is_user_admin que get_user_flags pero lo quise hacer así por si alguien pregunta... "¿Como hago para qué solo tenga el menú los que tienen flag KICK o BAN?".
El plugin no lo testee pero seguramente 100% que funciona..
Sí hay errores, corrijan, mejoras, también.
Gracias por leer!
[ACLARACIONES]
Se que es más simple utilizar directamente is_user_admin que get_user_flags pero lo quise hacer así por si alguien pregunta... "¿Como hago para qué solo tenga el menú los que tienen flag KICK o BAN?".
El plugin no lo testee pero seguramente 100% que funciona..
Sí hay errores, corrijan, mejoras, también.
Gracias por leer!
Código PHP:
#include < amxmodx > //Libreria del AMX... sin esto, olvidate de programar negro.
#include < fun > //Libreria perteneciente al AMX, con esta usaremos el "set_user_health."
#include < ColorChat > //Libreria EXTERNA al AMX, con esta podremos usar el "client_print" pero en base a colores..
//Su función es la siguiente.
//ColorChat ( id, Color:type, const msg[], {Float,Sql,Result,_}:... );
//Ejemplo: ColorChat ( iIndex, GREEN, "ESTE MENSAJE ESTA SIENDO ENVIADO EN COLOR VERDE" );
//Colores & Usos..
/*
* ------------------------------------------------------------- *
* ^3 = COLOR TEAM
* ^1 = COLOR DEFAULT (de la variable con_color del cs)
* ^4 = COLOR VERDE.
* ------------------------------------------------------------- *
*/
//ACLARACIÓN, en el segundo parametro (Color:type) no significa que el texto salga EN UN SOLO COLOR. Sí utilizas lo de arriba, vas a poder cambiar el tipo de color..
//O sea...
//Ejemplo: ColorChat ( id, RED, "^4Apa esta en RED ^1pero sale en VERDE y ^3en COLOR TEAM" );
new const PLUGIN [ ] = "Tutorial Menu";
new const VERSION [ ] = "1.0";
new const AUTHOR [ ] = "heNK'";
//szPrefix = "PREFIJO" del SAY..
//Saldría así..
//[TUTORIAL] soy un mensaje con prefix..
//Sín prefix:
//soy un mensaje sin prefix..
new const szPrefix [ ] = "^4[TUTORIAL]^1";
public plugin_init ( ) {
register_plugin ( PLUGIN, VERSION, AUTHOR ); //No hay misterio, register_plugin = registrar_plugin xdxdxd. Con los parametros, (PLUGIN = Nombre, VERSION = Version del Plugin, AUTHOR = Creador del Plugin)
register_clcmd ( "say /menu", "MenuTut" ); //registramos el comando.
//register_clcmd = registra el comando para el player.
//say = cuando pones Y en el juego, bueno escribis. Eso es.
// /menu = lo que escribe
//Después de la " , " es la función o sea lo que va a ser funcionar el menú xD.
}
//Vayamos a algo más "avanzado", simple y por ahí puede llegar a ser "bonito".
public client_putinserver ( iIndex ){ //Client_PutinServer = "Cuando el Cliente(Player) se conecta al servidor, este sera "recibido" después de que se haya mostrado la MOTD (motd.txt) del servidor."
//Para saber MÁS SOBRE EL USO DE SET_TASK
//Post -> https://amxmodx-es.com/Thread-GUIA-set-task-remove-task-y-task-exists
set_task ( 15.0, "ClientConnect", iIndex );
//Básicamente, cuando se conecta, 15 segundos después se llama a la función "ClientConnect" al cliente que se conecto...
}
public client_disconnect ( iIndex ){ //ClientDisconnect = lo dice la palabra...
remove_task ( iIndex ); //se remueva el task..
}
public ClientConnect ( iIndex ) {
//is_user_connected = lo dice la palabra, si el user esta conectado..
//par1 = player..
//Condicion = "Sí el USER NO esta CONECTADO, se RETORNA la función".
//¿Por qué se hace esto?
//Debido a que usamos "set_task" en ClientPutinServer, nunca sabremos
//Sí el player se desconecto antes de esos "15" segundos, entonces..
//Se hace el chequeo para comprobar si esta o no esta conectado.
if ( !is_user_connected ( iIndex ) )
return PLUGIN_HANDLED;
//get_user_flags = obtener_flags.
//par1 = player
//ADMIN_BAN = flag del admin ban.
//Condición = "SI NO TIENE EL FLAG DEL BAN, NO SALE EL MENSAJE"
if ( ! ( get_user_flags ( iIndex ) & ADMIN_BAN ) ) {
return PLUGIN_HANDLED;
}
ColorChat ( iIndex, GREEN, "%s Hola ADMIN, si utilizas /menu tendras tú menú especial para ADMINS", szPrefix );
return PLUGIN_HANDLED;
}
public MenuTut ( iIndex ) {
//get_user_flags = obtener_flags.
//par1 = player
//ADMIN_BAN = flag del admin ban.
//Condición = "SI NO TIENE EL FLAG DEL BAN, NO TIENE MENÚ"
if ( ! ( get_user_flags ( iIndex ) & ADMIN_BAN ) ) {
client_print ( iIndex, print_chat, "No sos admin, asi que no tenes acceso" );//Mensaje Normal, con ColorChat se cambiaria..
return PLUGIN_HANDLED;
}
new iMenu = menu_create ( "\y[TUTORIAL] \wMenu Basic", "HandlerMenuBasic" );
//menu_create = crear_menu
//Par1 = "Titulo del Menu"
//Colores:
// \y = AMARILLO
// \d = GRIS
// \w = BLANCO
// \r = ROJO
//Par2 = "Handler", función con la que va a ser funcionar el menú xD
menu_additem ( iMenu, "Opcion #1 -> Te da +50VIDA", "1" );
//menu_additem = agregar_item_al_menu.
//par1 = VARIABLE DEL MENU.
//par2 = "String, nombre de la opción"
//par3 = "Opcion"..
menu_additem ( iMenu, "Opcion #2 -> Mensajito xD", "2" );
menu_additem ( iMenu, "Opcion #3 -> Mensajito ColorChat", "3" );
menu_display ( iIndex, iMenu,0 );
//menu_display = mostrar_menu.
//par1 = Index del jugador (o sea, lo muestra al que escribio /menu).
//par2 = Variable del menú.
//par3 = Página del menú. = 0..
return PLUGIN_HANDLED;
}
public HandlerMenuBasic ( iIndex, iMenu, iItem ){
//IF = condición xdxdxd.
//item = MENU_EXIT, el menú se destruye.
//MENU_EXIT = Item "EXIT" / "SALIR" Del menú...
if ( iItem == MENU_EXIT ){
menu_destroy ( iMenu );
return PLUGIN_HANDLED;
}
switch ( iItem ) {
//case 0 = opción #1.
case 0: set_user_health ( iIndex, get_user_health ( iIndex ) + 50 );//Obtenemos la vida y le seteamos 50, o sea si tiene 100 tendra 150 y si tiene 50 tendra 100.
case 1: client_print ( iIndex, print_chat, "Este es el mensajito xD" );
case 2: ColorChat ( iIndex, GREEN, "^1Este ^4mensaje ^1sale en colores ^4VERDE" );
}
return PLUGIN_HANDLED;
}