10/01/2022, 11:41 PM
un trail menu 

Código PHP:
#include <amxmodx>
#include <fakemeta>
#define ALL -1
#define ADM ADMIN_BAN
new sprite
new bool:block[33]
new trail[33]
new trail_pred[33]
new trail_pgreen[33]
new trail_pblue[33]
enum _:trails_data
{
trail_color[32],
trail_red[10],
trail_green[10],
trail_blue[10],
trail_flag
}
new const trails[][trails_data] =
{
{"Rojo", 255, 0, 0, ALL},
{"Verde", 0, 255, 0, ADM}
}
public plugin_init()
{
register_plugin("Trail menu", "1.0", "Nelo")
register_clcmd("say /trail", "menu")
}
public plugin_precache()
sprite = precache_model("sprites/laserbeam.spr")
public client_disconnect(id)
{
block[id] = false
trail[id] = false
}
public client_PreThink(id)
{
if(!is_user_alive(id) || !trail[id])
return
static Float:velocity[3]
static Float:speed
pev(id, pev_velocity, velocity)
speed = vector_length(velocity)
if(speed > 0 && !block[id])
{
block[id] = true
trail_on(id)
}
else if(!speed)
{
block[id] = false
trail_off(id)
}
}
public menu(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED
static menu, items[64];
menu = menu_create("Menu de trails", "func_menu");
menu_additem(menu, "Desactivar")
static i;
for (i = 0; i < sizeof(trails); i++)
{
new ADMIN[32]
format(ADMIN, 31,"%s", trails[i][trail_flag] == ALL? "":"\r(ADMIN)");
formatex(items, charsmax(items), "%s %s", trails[i][trail_color], ADMIN);
menu_additem(menu, items, _);
}
menu_setprop(menu, MPROP_NUMBER_COLOR, "\y");
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(menu, MPROP_BACKNAME , "Atras");
menu_setprop(menu, MPROP_NEXTNAME , "Siguiente");
menu_setprop(menu, MPROP_EXITNAME, "Salir")
menu_display(id, menu, 0)
return PLUGIN_CONTINUE
}
public func_menu(id, menu, item)
{
if(item == MENU_EXIT || !is_user_alive(id))
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
if(item == 0)
{
client_print(id, print_chat, "Desactivaste tu trail")
trail[id] = 0
trail_off(id)
return PLUGIN_HANDLED
}
if(!(get_user_flags(id) & trails[item - 1][trail_flag]))
{
client_print(id, print_chat, "No tienes acceso a este trail")
menu_display(id, menu)
return PLUGIN_HANDLED
}
trail[id] = item
trail_pred[id] = trails[trail[id] - 1][trail_red]
trail_pgreen[id] = trails[trail[id] - 1][trail_green]
trail_pblue[id] = trails[trail[id] - 1][trail_blue]
client_print(id, print_chat, "Elegiste el trail %s", trails[trail[id] - 1][trail_color]);
trail_off(id)
trail_on(id)
return PLUGIN_HANDLED
}
public trail_on(id)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(22) // TE_BEAMFOLLOW
write_short(id) // id
write_short(sprite) // sprite
write_byte(10) // life
write_byte(5) // size
write_byte(trail_pred[id]) // r
write_byte(trail_pgreen[id]) // g
write_byte(trail_pblue[id]) // b
write_byte(155) // alpha
message_end()
}
public trail_off(id)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(99) // TE_KILLBEAM
write_short(id) // id
message_end()
}
Aportes: