Код
#include <amxmodx>
#define ADMIN ADMIN_LEVEL_F // Флаг для проверки "Админы Онлайн"
#define GIRL ADMIN_LEVEL_E // Флаг для проверки "Девушки Онлайн"
#define VIP ADMIN_LEVEL_D // Флаг для проверки "Девушки Онлайн"
#define TASK_ID 19867
#define CheckBit(%1,%2) (%1 & (1 << (%2 & 31)))
#define SetBit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define ClearBit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
#define ToggleBit(%1,%2) (%1 ^= (1 << (%2 & 31)))
#define FillBits(%1) (%1 &= ~0)
enum _:ONLINE {
GIRLS,
ADMINS,
VIPS
}
new g_Online[ONLINE];
new g_HudEnabled;
new g_SyncHud;
public plugin_init()
{
register_plugin("Hud_info", "2.1", "h1k3")
register_dictionary("hud_info.txt");
register_event("DeathMsg", "hook_death", "a", "1>0");
register_event("TeamInfo", "hook_team_info", "a");
register_clcmd("say /online", "CmdToggle");
register_clcmd("say_team /online", "CmdToggle");
g_SyncHud = CreateHudSyncObj();
FillBits(g_HudEnabled);
arrayset(g_Online, 0, sizeof g_Online);
}
public client_putinserver(id) {
SetBit(g_HudEnabled, id);
if (get_user_flags(id) & GIRL) {
g_Online[GIRLS]++;
}
if (get_user_flags(id) & ADMIN) {
g_Online[ADMINS]++;
}
if (get_user_flags(id) & VIP) {
g_Online[VIPS]++;
}
}
public client_disconnected(id) {
ClearBit(g_HudEnabled, id);
if (get_user_flags(id) & GIRL) {
g_Online[GIRLS]--;
}
if (get_user_flags(id) & ADMIN) {
g_Online[ADMINS]--;
}
if (get_user_flags(id) & VIP) {
g_Online[VIPS]--;
}
}
public CmdToggle(id) {
ToggleBit(g_HudEnabled, id);
if (CheckBit(g_HudEnabled, id)) {
if (!is_user_alive(id) && !task_exists(id + TASK_ID)) {
set_task(1.0, "task_hud", id + TASK_ID, .flags="b");
}
client_print(id, print_center, "%L", id, "HUDINFO_ENABLED");
} else {
remove_task(id + TASK_ID);
ClearSyncHud(id, g_SyncHud);
client_print(id, print_center, "%L", id, "HUDINFO_DISABLED");
}
}
public hook_death() {
new id = read_data(2);
if (CheckBit(g_HudEnabled, id)) {
set_task(1.0, "task_hud", id + TASK_ID, .flags="b");
}
}
public hook_team_info() {
new id = read_data(1);
new team[2];
read_data(2, team, charsmax(team));
if (team[0] == 'S' && CheckBit(g_HudEnabled, id) && !task_exists(id + TASK_ID)) {
set_task(1.0, "task_hud", id + TASK_ID, .flags="b");
}
}
public task_hud(taskID) {
new id = taskID - TASK_ID;
if (!is_user_alive(id)) {
set_hudmessage(255, 255, 0, 0.01, 0.26, 0, 6.0, 5.0, 0.08, 2.0);
ShowSyncHudMsg(id, g_SyncHud, "%L %d^n%L %d^n%L %d", id, "GIRLS", g_Online[GIRLS], id, "ADMINS", g_Online[ADMINS], id, "VIPS", g_Online[VIPS]);
} else {
remove_task(taskID);
}
}