Aqui un tutorial de un menu de los jugadores conectados, lo explique con mis palabras asi que si tienen una duda pregunten xD.
Le puse explicacion a todo como si fueran de kinder.
Le puse explicacion a todo como si fueran de kinder.
Código PHP:
#include <amxmodx>
new g_maxplayers // En esta variable guardaremos el maximo numero de jugadores en el servidor (max slots)
public plugin_init() { // Funcion que es llamada al iniciar el plugin, ya sea en un cambio de mapa o reinicio del servidor
register_plugin("Menu Players Online", "0.1", "Metrikcz") // registro del plugin
// 1 parametro: Definimos el nombre del plugin y como es un string se pone entre comillas
// 2 parametro: Definimos la version del plugin ------------------------
// 3 parametro: Definimos el author del plugin -------------------------
register_clcmd("say /mpl", "cmdMpl") // registramos el comando
g_maxplayers = get_maxplayers() // Le damos el valor a la variable ya que get_maxplayers retorna el maximo numero de jugadores
}
public cmdMpl(id) {
// Funcion que es llamada cuando un jugador escriba /mpl
// primer y unico parametro: "id", que es la ID del usuario que escribio
// la ID de los usuarios es un numero entre el 1 y el 32, el cual se puede saber poniendo status en consola
new menu //Variable donde guardaremos el "ID" del menu que se usara para agregarle cosas como items o props
menu = menu_create("Jugadores Online", "handler_menuMpl")
// 1 parametro definimos el titulo del menu
// 2 parametro definimos el nombre de la funcion del handler que se llamara cuando usemos el menu
// porque "menu = ..." como ya dije en menu guardaremos la ID del mismo, y menu_create retorna su "ID" y le damos el valor haciendo esto: "menu = "
new name[32], IDS[12] // Creamos las variables donde guardaremos el nombre de un usuario y su ID and USERID pero en un solo string
// -------- Este pedaso se "llamara|realizara" el numero de veces que sea g_maxplayers ya sea 32 o los slots del servidor --------
for(new i = 1; i <= g_maxplayers; i++) { // Hacemos un bucle o loop, lo que hacemos es mientras "i" sea menor o igual a maxplayers seguira el bucle
// Ahora vien pasaremos por los 32 usuarios ya que el id del usuario es un numero entre el 1 y 32
if(is_user_connected(i)) { // Vamos a checar si esta conectado un usuario con esta ID osea i
// bien la id "i" que va en el loop esta conectada
get_user_name(i, name, charsmax(name)) // Guardamos el nombre del usuario que tenga como su ID: "i donde vaya el bucle"
formatex(IDS, charsmax(IDS), "%d %d", i, get_user_userid(i)) // Guardamos el id and userid del usuario para despues usarlo en el handler e identificar al player
menu_additem(menu, name, IDS) // Agregamos el item
// 1 parametro: la ID del menu donde se agregara el item, por eso se tenia que guardar la ID del menu
// 2 parametro: el nombre del item el cual es el nombre del usuario
// 3 parametro: En este guardamos el ID y userid del usuario para despues validarlo y obtener sus ids en el handler
}
}
// -------- Este pedaso se "llamara|realizara" el numero de veces que sea g_maxplayers ya sea 32 o los slots del servidor --------
menu_display(id, menu, 0) // mostramos el menu
// 1 parametro: la ID del usuario que vera el menu osea la ID del que escribio /mpl
// 2 parametro: La ID del menu
// 3 parametro: la pagina en la que se abrira, cada 7 items es 1 pagina, si hay 13 players conectados habra 2 paginas en el menu
}
public handler_menuMpl(id, menu, item) { // Funcion que es llamada cuando se usa el menu, se preciona algun item o lo cierras el menu
if(item == MENU_EXIT) { // Primero siempre tendremos que checar si item es menu_exit lo cual nos dice que preciono 0 y cerro el menu
// si item si es menu_exit osea que lo cerro
menu_destroy(menu) // Destruimos el menu
return PLUGIN_HANDLED; // Le detemos la funcion para que desde aqui hasta abajo ya no lea nada, que aqui se quede
}
// Ahora lo que sigue sera obtener el tercer parametro de menu_additem, osea la ID and userid del usuario
// usaremos la native menu_item_getinfo lo cual nos data todos los parametros asi que tendremos que crear variables que nos dara sus valores
new lol, buffer[12], playerid, userid // Aqui los guardaremos
menu_item_getinfo(menu, item, lol, buffer, charsmax(buffer), _, _, lol)
// 1 parametro ID del menu que la tenemos en el handler
// 2 parametro el item osea lo que presiono si es 3 sera el tercer item que se agrego
// 3 y 4 parametro aqui nos estara dando el tercer parametro de menu_additem y ahi en buffer ya tendremos la ID and userid del usuario que selecciono el user que abrio el menu
// los demas no importan ya que tenemos lo que queremos
new szid[3], szuserid[9] // Variables donde guardaremos las IDS que se encuentran en buffer
// separamos las ids, la id y la userid
parse(buffer, szid, charsmax(szid), szuserid, charsmax(szuserid)) // separamos los datos
playerid = str_to_num(szid) // Ahora en una variable integer guardaremos la id del usuario, para ello en la variable buffer donde la tenemos la pasamos de string a numero porque las ids de los players es un numero (1-32)
userid = str_to_num(szuserid) // Aqui la userid del usuario que se selecciono
// pero porque usamos la userid? es facil se explicara mas adelante
// Listo ya tenemos la id del usuario que selecciono ahora lo demas es muy facil
// Vamos a checar que esta conectado ¿porque si ya lo hicimos cuando creamos el menu?
// es facil al abrir el menu esta conectado, el que lo abrio puede permanecer con el menu minutos abiertos con el y cuando seleccione a un usuario este ya se pudo haber desconectado
if(!is_user_connected(playerid)) { // si no esta conectado ...
client_print(id, print_chat, "Usuario seleccionado con la ID: %d se ha desconectado.", playerid)
return PLUGIN_HANDLED; // le detenemos la funcion para que no siga leyendo, que desde aqui hasta abajo ya no lea nada que aqui se acabe
}
// Aqui es donde usaremos la userid para validar el player, como dije antes un usuario se puede desconectar cuando lo haigan elegido, pero tambien pasa de que se desconecta y se mete otro usuario al servidor y se le asigna ese id, osea que el usuario cambio su id sera igual pero no su userid asi que lo comprobaremos ahora
if(userid != get_user_userid(playerid)) { // si la userid no es la del player ...
client_print(id, print_chat, "Usuario seleccionado no es el que usted eligio.")
return PLUGIN_HANDLED; // le detenemos la funcion para que no siga leyendo, que desde aqui hasta abajo ya no lea nada que aqui se acabe
}
new name[32] // Aqui guardaremos el nombre del user seleccionado
get_user_name(playerid, name, charsmax(name)) // Obtenemos su nombre con esta native y lo guardamos en la variable "name"
// Mandamos un mensaje del usuario que selecciono y listo si ustedes le haran otra cosa ya es cosa de ustedes ya tienen su ID para manipularle
client_print(id, print_chat, "Has seleccionado a: %s su id es: %d y su userid es: %d", name, playerid, userid)
return PLUGIN_HANDLED; // por "leyes" de pawn si se returnea en la funcion al ultimo tambien tiene que haber un return
}
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
Mis plugins:
STEAM: https://steamcommunity.com/id/Metrikcz/
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP