23/10/2019, 03:05 AM
(Última modificación: 20/11/2022, 08:19 AM por [E]manuelitop15. Edited 20 times in total.)
ACTUALIZADO: 20/11/2022
Hola, les hare una guia/aporte de menu de hats...
Comenzemos!
Paso [ 1 ]
Paso [ 2 ]
Agregamos en su función de 'spawn_post' o en la ronda inciada en un loop para todos los jugadores (es preferible spawn_post).
Quedaria...
Paso [ 3 ]
Vamos a plugin_precache() y agregamos el precache de los hats.
Quedaria en el ZP 4.3 en adelante de esta forma...
Paso [ 4 ]
Luego agregamos esto debajo del plugin o en algún lugar donde no interfiera.
Paso [ 5 ]
Y ahora por ultimo los menus. Esto lo pegan (o lo hacen) al final si quieren.
Paso [ 6 ]
Para que se abra el menu lo llamaremos si escribimos en el chat (en este caso), /hats o hats
Quedaria... o si fuera un plugin normal solo en plugin_init agregan abajo de register_plugin esos 2 registers
Luego un poco mas abajo de esto o donde prefieran agregan el llamado al clcmd para que les abra el menú.
Y listo...
zp_hats.rar (Tamaño: 983.75 KB / Descargas: 53) Models de los Hats
Descargar AMXX / pl_menu_hats.sma (Tamaño: 5.73 KB / Descargas: 22) Plugin de los Hats sin ZP
Hola, les hare una guia/aporte de menu de hats...
Comenzemos!
Paso [ 1 ]
Código PHP:
// ---------------------------
// ---- MENÚ DE HATS ----
// ---------------------------
#include <amxmodx>
#include <engine>
#include <hamsandwich>
// * Activen este define para que los bots tengan gorritos al azar ;)
#define BOTS_HATS
// Variables que vamos a utilizar
// * g_hat es para guardar el hat elegido por el jugador.
// * g_hat_ent es la entidad del hat que llevará 'puesta' el jugador.
new g_hat[33], g_hat_ent[33];
// El enum donde ponemos los datos que utilizará el menú de hat, declarado en el 'new const' debajo.
// * HAT_NOMBRE[32]: Nombre del Hat
// * HAT_MDL[64]: Modelo del Hat
// * HAT_ACCESO: Acceso para obtener el Hat (en el caso que quieras que utilice un ADMIN)
enum _hats_data
{
HAT_NOMBRE[32],
HAT_MDL[121],
HAT_ACCESO
};
// Aquí modificaremos la lista de Hats que va a aparecer en el menú (su modelo, nombre y acceso).
// * En donde va el modelo si lo dejan vació "" no se utilizará ningún modelo y se 'colocará' un hat invisible.
new const LISTA_DE_HATS[][_hats_data] =
{
{ "Ninguno", "", ADMIN_ALL /*ADMIN_ALL: es para todos [es decir que los jugadores normales pueden elegirlo]*/ },
{ "Bomba", "models/zp_hats/bomba.mdl", ADMIN_BAN, /*ADMIN_BAN: los admins que tengan acceso al ban podrán usarlo 'd' */ },
{ "Caballo", "models/zp_hats/horse.mdl", ADMIN_ALL },
{ "Vikingo", "models/zp_hats/viking.mdl", ADMIN_ALL },
{ "Casco Oxidado", "models/zp_hats/oxic.mdl", ADMIN_RCON /*ADMIN_RCON: los que tengan acceso al RCON podrán elegirlo 'l' */ }
};
Paso [ 2 ]
Agregamos en su función de 'spawn_post' o en la ronda inciada en un loop para todos los jugadores (es preferible spawn_post).
Código PHP:
quitar_hat(id); // En el caso que ya tengamos un HAT lo eliminamos así evitamos que se vayan acumulando entidades.
set_hat(id); // Seteamos el HAT al jugador.
Quedaria...
Código PHP:
// *SIN ZP SERÍA: [En su ham_spawn_post (lo crean si les falta)]
// -------------------
// * Esta función es la de aparición; es cuando el jugador aparece por primera vez 'está vivo'.
// * No es necesaria para los HATS, tambíen pueden hacerlo en un evento de ronda iniciada con un for( y colocar hats a todos los jugadores en general.
public ham_jspawn_POST(id)
{
if (!is_user_alive(id)) // Si el usuario NO esta vivo no le pondremos ningun HAT.
return;
quitar_hat(id); // En el caso que ya tengamos un HAT lo eliminamos así evitamos que se vayan acumulando entidades.
set_hat(id); // Seteamos el HAT al jugador.
}
// *CON ZP 4.2 EN ADELANTE:
// --------------------------------
// Ham Player Spawn Post Forward
public fw_PlayerSpawn_Post(id)
{
// Not alive or didn't join a team yet
if (!is_user_alive(id) || !fm_cs_get_user_team(id))
return;
// Player spawned
g_isalive[id] = true;
quitar_hat(id); // En el caso que ya tengamos un HAT lo eliminamos así evitamos que se vayan acumulando entidades.
set_hat(id); // Seteamos el HAT al jugador.
}
Paso [ 3 ]
Vamos a plugin_precache() y agregamos el precache de los hats.
Código PHP:
public plugin_precache()
{
// * Precacheamos los hats para que no se caiga el sv al colocarlos.
for (new i = 0; i < sizeof (LISTA_DE_HATS); i++)
{
if (!equal(LISTA_DE_HATS[i][HAT_MDL], ""))
precache_model(LISTA_DE_HATS[i][HAT_MDL]);
}
}
Código PHP:
//codigo ...
// Allow registering stuff now
g_arrays_created = true
// Load customization data
load_customization_from_files()
// * Precacheamos los hats para que no se caiga el sv al colocarlos.
for (new i = 0; i < sizeof (LISTA_DE_HATS); i++)
{
if (!equal(LISTA_DE_HATS[i][HAT_MDL], ""))
precache_model(LISTA_DE_HATS[i][HAT_MDL]);
}
Paso [ 4 ]
Luego agregamos esto debajo del plugin o en algún lugar donde no interfiera.
Código PHP:
set_hat(id)
{
// Si el HAT del jugador no tiene modelo no hay nada que hacer aquí.
if (equal(LISTA_DE_HATS[ g_hat[id] ][HAT_MDL], ""))
return;
// Creamos el HAT al jugador (entidad)
g_hat_ent[id] = create_entity("info_target");
if (!is_valid_ent(g_hat_ent[id])) // Si el hat no es válido, no hay nada que hacer aquí.
return;
// * Creamos las caracteristicas del hat (que siga el movimient del jugador y tenga su modelo)
entity_set_int(g_hat_ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(g_hat_ent[id], EV_ENT_aiment, id);
entity_set_model(g_hat_ent[id], LISTA_DE_HATS[ g_hat[id] ][HAT_MDL]);
}
quitar_hat(id)
{
if (!is_valid_ent(g_hat_ent[id])) // Si el hat no es válido, no hay nada que hacer aquí.
return false;
remove_entity(g_hat_ent[id]); // Removemos el HAT.
return true;
}
Y ahora por ultimo los menus. Esto lo pegan (o lo hacen) al final si quieren.
Código PHP:
// * Creamos el menú de hats.
menu_hats(id)
{
new menu; menu = menu_create("\yLista de\w HATS\d\R", "handler_menu_hats");
new temp[3], mtxt[161];
for (new i = 0; i < sizeof (LISTA_DE_HATS); i++)
{
if (i == 0) formatex(mtxt, charsmax(mtxt), "\dREMOVER HAT^n");
else
{
if (g_hat[id] == i) formatex(mtxt, charsmax(mtxt), "\w%s \r[\yEQUIPADO\r]", LISTA_DE_HATS[i][HAT_NOMBRE]);
else if (!(get_user_flags(id) & LISTA_DE_HATS[i][HAT_ACCESO])) formatex(mtxt, charsmax(mtxt), "\d%s \r[SIN ACCESO]", LISTA_DE_HATS[i][HAT_NOMBRE]);
else formatex(mtxt, charsmax(mtxt), LISTA_DE_HATS[i][HAT_NOMBRE]);
}
num_to_str(i, temp, 2);
menu_additem(menu, mtxt, temp);
}
menu_setprop(menu, MPROP_BACKNAME, "Volver");
menu_setprop(menu, MPROP_NEXTNAME, "Siguiente");
menu_setprop(menu, MPROP_EXITNAME, "\rSalir");
menu_display(id, menu);
}
public handler_menu_hats(id, menuID , item)
{
if (!is_user_connected(id))
{
menu_destroy(menuID);
return PLUGIN_HANDLED;
}
new szkey[6], acceso, cback, numHAT; menu_item_getinfo(menuID, item, acceso, szkey, charsmax(szkey), _, _, cback);
numHAT = str_to_num(szkey);
menu_destroy(menuID);
if (!numHAT)
{
if (item == 0 && quitar_hat(id)) g_hat[id] = 0, client_print_color(id, 0, "^4[ZP]^1 Hat removido.");
return PLUGIN_HANDLED;
}
if (!(get_user_flags(id) & LISTA_DE_HATS[numHAT][HAT_ACCESO]))
{
client_print_color(id, 0, "^4[ZP]^1 No tienes el acceso necesario para este hat.");
return PLUGIN_HANDLED;
}
g_hat[id] = numHAT;
client_print_color(id, 0, "^4[ZP]^1 Hat:^3 %s^1 Equipado!.", LISTA_DE_HATS[numHAT][HAT_NOMBRE]);
quitar_hat(id); // En el caso que ya tengamos un HAT lo eliminamos así evitamos que se vayan acumulando entidades.
set_hat(id); // Seteamos el HAT al jugador.
return PLUGIN_HANDLED;
}
Paso [ 6 ]
Para que se abra el menu lo llamaremos si escribimos en el chat (en este caso), /hats o hats
Código PHP:
// Vamos a Client Commands
register_clcmd("say hats", "clcmd_hatsmenu");
register_clcmd("say /hats", "clcmd_hatsmenu");
Quedaria... o si fuera un plugin normal solo en plugin_init agregan abajo de register_plugin esos 2 registers
Código PHP:
// Client commands
register_clcmd("say zpmenu", "clcmd_saymenu")
register_clcmd("say /zpmenu", "clcmd_saymenu")
register_clcmd("say unstuck", "clcmd_sayunstuck")
register_clcmd("say /unstuck", "clcmd_sayunstuck")
register_clcmd("nightvision", "clcmd_nightvision")
register_clcmd("drop", "clcmd_drop")
register_clcmd("buyammo1", "clcmd_buyammo")
register_clcmd("buyammo2", "clcmd_buyammo")
register_clcmd("chooseteam", "clcmd_changeteam")
register_clcmd("jointeam", "clcmd_changeteam")
register_clcmd("say hats", "clcmd_hatsmenu");
register_clcmd("say /hats", "clcmd_hatsmenu");
Código PHP:
// * Registramos el llamado al menú mediante say (chat).
public clcmd_hatsmenu(id)
{
menu_hats(id);
return PLUGIN_HANDLED;
}
zp_hats.rar (Tamaño: 983.75 KB / Descargas: 53) Models de los Hats
Descargar AMXX / pl_menu_hats.sma (Tamaño: 5.73 KB / Descargas: 22) Plugin de los Hats sin ZP
___________________________________
SI NECESITAS UN PLUGIN TE LO HAGO $$$
COMUNICATE A MI DISCORD: emanuelitop15
SI NECESITAS UN PLUGIN TE LO HAGO $$$
COMUNICATE A MI DISCORD: emanuelitop15