PHP Code:
#include <amxmodx>
#include <amxmisc>
#define VIP_FLAG ADMIN_KICK
new const TAG[] = "[amxx]"
new const SERVERNAME[] = "amxx"
new const MESSAGE[] = "No online:"
new const rank_names[][] =
{
"Administrator",
"Moderator",
"VIP"
}
new const rank_flags[][] =
{
"abcdefghijklmnopqrstu",
"bcdefghijklmnopqr",
"cehij"
}
new vip_rank = sizeof rank_names - 1;
new flags_rank[sizeof rank_flags], g_maxplayers, g_msg_saytext;
public plugin_init()
{
register_plugin("New Who Menu", "1.1", "GoogleStrik");
register_clcmd("say /admins", "cmd_who");
register_clcmd("say /admin", "cmd_who");
g_maxplayers = get_maxplayers();
g_msg_saytext = get_user_msgid("SayText");
for(new i = 0; i < sizeof rank_flags; i++)
flags_rank[i] = read_flags(rank_flags[i]);
}
public cmd_who(id)
{
new menu, menu_item[80], tasta[2];
formatex(menu_item, charsmax(menu_item), "\r[%s] \dAdmin List Online", SERVERNAME);
menu = menu_create(menu_item, "handler_who");
for(new i = 0; i < sizeof rank_names; i++)
{
formatex(menu_item, charsmax(menu_item), "\y%s\r[\w%d\r]", rank_names[i], get_rang_players(i));
tasta[0] = i;
tasta[1] = 0;
menu_additem(menu, menu_item, tasta);
}
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public handler_who(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
menu_destroy(menu);
show_players_rang(id, item);
return PLUGIN_HANDLED;
}
public show_players_rang(id, item)
{
if(!get_rang_players(item))
{
color(id, ".v%s.g %s.e %s.g!", TAG, MESSAGE, rank_names[item]);
return PLUGIN_HANDLED;
}
new menu_item[80], tasta[2], menu;
formatex(menu_item, charsmax(menu_item), "\rAdmin List Level\y %s\r.^nMany Member Online:\y %d^n", rank_names[item], get_rang_players(item))
menu = menu_create(menu_item, "handler_players_rang");
new i, xul;
xul = 0;
if(item == vip_rank)
{
for(i = 1; i <= g_maxplayers; i++)
{
if(!is_user_connected(i))
continue;
if(get_user_flags(i) & VIP_FLAG)
{
formatex(menu_item, charsmax(menu_item), "\y%s", get_name(i));
tasta[0] = xul;
tasta[1] = 0;
xul++;
menu_additem(menu, menu_item, tasta);
}
}
}
else
{
for(i = 1; i <= g_maxplayers; i++)
{
if(!is_user_connected(i))
continue;
if(get_user_flags(i) == flags_rank[item] || get_user_flags(i) == (flags_rank[item] | VIP_FLAG))
{
formatex(menu_item, charsmax(menu_item), "\y%s", get_name(i));
tasta[0] = xul;
tasta[1] = 0;
xul++;
menu_additem(menu, menu_item, tasta);
}
}
}
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public handler_players_rang(id, menu)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public get_rang_players(rank)
{
new i, players;
if(rank == vip_rank)
{
new tmp;
for(i = 1; i <= g_maxplayers; i++)
{
tmp = get_user_flags(i);
if(is_user_connected(i) && (tmp & VIP_FLAG) && !(tmp & ADMIN_BAN))
players++;
}
}
else
{
for(i = 1; i <= g_maxplayers; i++)
{
if(is_user_connected(i) && get_user_flags(i) == flags_rank[rank] || get_user_flags(i) == (flags_rank[rank] | VIP_FLAG))
players++;
}
}
return players;
}
stock get_name(id)
{
new name[32];
get_user_name(id, name, charsmax(name));
return name;
}
stock color(const id, const input[], any:...)
{
new count = 1, players[32];
new msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, ".v", "^4");
replace_all(msg, 190, ".g", "^1");
replace_all(msg, 190, ".e", "^3");
if(id) players[0] = id; else get_players(players, count, "ch")
{
for(new i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}