#include <amxmodx>
#include <cstrike>
#define SUPERADMIN // Может пинать, кикать и тд игроков с иммунитетом
#define SUPER_FLAG ADMIN_RCON
new g_iSlapSettings[] =
{
0, // 0 HP
5, // 5 HP
10, // 10 HP
0 // убить
}
new g_szTeams[][] =
{
"Террористы",
"Контр-Террористы",
"Наблюдатели"
}
enum _:MENUS
{
SLAP,
KICK,
TEAM
}
enum _:DATA { Menu, Pos, Item };
new g_iPlMenu[33][DATA];
new g_iPlArray[33][32];
public plugin_init()
{
register_plugin("Players Menu", "1.3", "neugomon");
register_clcmd("amx_kickmenu", "cmdKickMenu", ADMIN_KICK);
register_clcmd("amx_slapmenu", "cmdSlapMenu", ADMIN_SLAY);
register_clcmd("amx_teammenu", "cmdTeamMenu", ADMIN_BAN);
register_menucmd(register_menuid("Players Menu"), 1023, "PlayersMenuHandler");
}
public cmdKickMenu(id, flags)
return PreOpenMenu(id, flags, KICK);
public cmdSlapMenu(id, flags)
return PreOpenMenu(id, flags, SLAP);
public cmdTeamMenu(id, flags)
return PreOpenMenu(id, flags, TEAM);
public PlayersMenuHandler(id, key)
{
if(!is_user_connected(id)) return PLUGIN_HANDLED;
switch(key)
{
case 7:
{
switch(g_iPlMenu[id][Menu])
{
case KICK: KickHandler(id, g_iPlArray[id][g_iPlMenu[Pos][id] * 8 + key]);
case SLAP:
{
if(++g_iPlMenu[id][Item] > charsmax(g_iSlapSettings))
g_iPlMenu[id][Item] = 0;
BuildMenu(id, g_iPlMenu[id][Pos]);
}
case TEAM:
{
if(++g_iPlMenu[id][Item] > charsmax(g_szTeams))
g_iPlMenu[id][Item] = 0;
BuildMenu(id, g_iPlMenu[id][Pos]);
}
}
}
case 8: BuildMenu(id, ++g_iPlMenu[id][Pos]);
case 9: if(g_iPlMenu[id][Pos]) BuildMenu(id, --g_iPlMenu[id][Pos]);
default:
{
switch(g_iPlMenu[id][Menu])
{
case KICK: KickHandler(id, g_iPlArray[id][g_iPlMenu[id][Pos] * 8 + key]);
case SLAP: SlapHandler(id, g_iPlArray[id][g_iPlMenu[id][Pos] * 7 + key]);
case TEAM: TeamHandler(id, g_iPlArray[id][g_iPlMenu[id][Pos] * 7 + key]);
}
}
}
return PLUGIN_HANDLED;
}
PreOpenMenu(id, flags, menu)
{
if(get_user_flags(id) & flags)
{
g_iPlMenu[id][Pos] = 0;
g_iPlMenu[id][Item] = 0;
g_iPlMenu[id][Menu] = menu;
BuildMenu(id, g_iPlMenu[id][Pos]);
}
else console_print(id, "* Недостаточно прав для использования этой команды!");
return PLUGIN_HANDLED;
}
BuildMenu(id, pos)
{
new szMenu[512];
new len;
new start;
new end;
new keys = MENU_KEY_0;
new pnum;
new pages;
get_players(g_iPlArray[id], pnum, "h");
if(g_iPlMenu[id][Menu] == KICK)
{
start = pos * 8;
end = start + 8;
pages = (pnum / 8 + ((pnum % 8) ? 1 : 0));
}
else
{
start = pos * 7;
end = start + 7;
pages = (pnum / 7 + ((pnum % 7) ? 1 : 0));
}
if(start >= pnum)
start = g_iPlMenu[id][Pos] = 0;
if(end > pnum)
end = pnum;
switch(g_iPlMenu[id][Menu])
{
case KICK: len = formatex(szMenu, charsmax(szMenu), "\d[\rKick Menu\d] ");
case SLAP: len = formatex(szMenu, charsmax(szMenu), "\d[\rSlap/Slay Menu\d] ");
case TEAM: len = formatex(szMenu, charsmax(szMenu), "\d[\rTeam Menu\d] ");
}
len += formatex(szMenu[len], charsmax(szMenu) - len, "\yВыберите игрока\w\R%d/%d^n^n", pos + 1, pages);
#if defined SUPERADMIN
new bool:flagSuperId = bool:(get_user_flags(id) & SUPER_FLAG);
#endif
for(new i = start, szName[32], team[15], flags, a; i < end; i++)
{
get_user_name(g_iPlArray[id][i], szName, charsmax(szName));
if(g_iPlMenu[id][Menu] == SLAP)
{
if(!is_user_alive(g_iPlArray[id][i]))
{
len += formatex(szMenu[len], charsmax(szMenu) - len, "\d%d. %s^n", ++a, szName);
continue;
}
}
flags = get_user_flags(g_iPlArray[id][i]);
#if defined SUPERADMIN
if(!flagSuperId && id != g_iPlArray[id][i] && flags & ADMIN_IMMUNITY)
{
len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \d%s \y[\rImmunity\y]^n", ++a, szName);
continue;
}
#else
if(id != g_iPlArray[id][i] && flags & ADMIN_IMMUNITY)
{
len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \d%s \y[\rImmunity\y]^n", ++a, szName);
continue;
}
#endif
switch(g_iPlMenu[id][Menu])
{
case TEAM:
{
new tm = _:cs_get_user_team(g_iPlArray[id][i]);
switch(tm)
{
case 1: team = "\d[\rTE\d]";
case 2: team = "\d[\rCT\d]";
case 3: team = "\d[\rSPEC\d]";
}
if(tm == g_iPlMenu[id][Item]+1)
{
if(flags & ADMIN_MENU)
len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \d%s \d[\r%s\d] %s^n", ++a, szName, (id != g_iPlArray[id][i]) ? "Admin" : "Вы", team);
else len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \d%s %s^n", ++a, szName, team);
}
else
{
keys |= (1 << a++);
if(flags & ADMIN_MENU)
len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \y%s \d[\r%s\d] %s^n", a, szName, (id != g_iPlArray[id][i]) ? "Admin" : "Вы", team);
else len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \w%s %s^n", a, szName, team);
}
}
default:
{
keys |= (1 << a++);
if(flags & ADMIN_MENU)
len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \y%s \d[\r%s\d]^n", a, szName, (id != g_iPlArray[id][i]) ? "Admin" : "Вы");
else len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \w%s^n", a, szName);
}
}
}
switch(g_iPlMenu[id][Menu])
{
case SLAP:
{
if(g_iPlMenu[id][Item] == charsmax(g_iSlapSettings) && g_iSlapSettings[g_iPlMenu[id][Item]] == 0)
len += formatex(szMenu[len], charsmax(szMenu) - len, "^n\r8. \yУбить^n");
else len += formatex(szMenu[len], charsmax(szMenu) - len,
"^n\r8. \wСтукнуть на \y%d \wHP^n", g_iSlapSettings[g_iPlMenu[id][Item]]);
keys |= MENU_KEY_8;
}
case TEAM:
{
len += formatex(szMenu[len], charsmax(szMenu) - len, "^n\r8. \w%s^n", g_szTeams[g_iPlMenu[id][Item]]);
keys |= MENU_KEY_8;
}
}
if(end != pnum)
{
formatex(szMenu[len], charsmax(szMenu) - len, "^n\r9. \yДалее^n\r0. \r%s", pos ? "Назад" : "Выход");
keys |= MENU_KEY_9;
}
else formatex(szMenu[len], charsmax(szMenu) - len, "^n\r0. \r%s", pos ? "Назад" : "Выход");
show_menu(id, keys, szMenu, -1, "Players Menu");
return PLUGIN_HANDLED;
}
KickHandler(id, player)
{
new name[32]; get_user_name(id, name, charsmax(name));
new name2[32]; get_user_name(player, name2, charsmax(name2));
ChatColor("^1[^4Kick Menu^1] ^4Администратор ^3%s ^4кикнул ^3%s", name, name2);
server_cmd("kick #%d Вы были удалены с сервера администратором %s", get_user_userid(player), name);
}
SlapHandler(id, player)
{
new authid[25]; get_user_authid(id, authid, charsmax(authid));
new authid2[25]; get_user_authid(player, authid2, charsmax(authid2));
new name[32]; get_user_name(id, name, charsmax(name));
new name2[32]; get_user_name(player, name2, charsmax(name2));
new aSize = sizeof g_iSlapSettings;
if(aSize > 1 && g_iPlMenu[id][Item] < aSize - 1)
{
new item = g_iPlMenu[id][Item];
log_amx("Cmd: ^"%s<%s>^" slap with %d damage ^"%s<%s>^"", name, authid, g_iSlapSettings[item], name2, authid2);
ChatColor("^1[^4Slap^1] ^4Администратор ^3%s ^4стукнул ^3%s ^4на ^3%d HP", name, name2, g_iSlapSettings[item]);
user_slap(player, (get_user_health(player) > g_iSlapSettings[item]) ? g_iSlapSettings[item] : 0);
BuildMenu(id, g_iPlMenu[id][Pos]);
}
else
{
log_amx("Cmd: ^"%s<%s>^" slay ^"%s<%s>^"", name, authid, name2, authid2);
ChatColor("^1[^4Slay^1] ^4Администратор ^3%s ^4убил ^3%s", name, name2);
user_kill(player, 1);
}
}
TeamHandler(id, player)
{
new name[32]; get_user_name(id, name, charsmax(name));
new name2[32]; get_user_name(player, name2, charsmax(name2));
ChatColor("^1[^4Team Menu^1] ^4Администратор ^3%s ^4перевел ^3%s ^4за ^3%s", name, name2, g_szTeams[g_iPlMenu[id][Item]]);
if(is_user_alive(player)) user_kill(player, 1);
cs_set_user_team(player, g_iPlMenu[id][Item] + 1);
}
stock ChatColor(const szMessage[], any:...)
{
new szMsg[190];
vformat(szMsg, charsmax(szMsg), szMessage, 2);
new pl[32], pnum;
get_players(pl, pnum, "c");
for(new i; i < pnum; i++)
{
message_begin(MSG_ONE_UNRELIABLE, 76, .player = pl[i]);
write_byte(pl[i]);
write_string(szMsg);
message_end();
}
}