Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <WPMGPrintChatColor>
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_M4A1)|(1<<CSW_AK47)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_DEAGLE)
#define PLUGIN "Weapon Menu"
#define VERSION "0.1"
#define AUTHOR "Subb98"
new g_iKey[33]
new g_iMenuPosition[33]
new g_iMenuPlayers[33][32]
new g_iRoundCounter
new g_pChatInfo
new g_maxplayers
new can_take_ak47[33]
new can_take_m4a1[33]
new can_take_famas[33]
new can_take_scout[33]
new can_take_awp[33]
new can_take_deagle[33]
new can_take_grenades[33]
#if defined VIPDAY
native al_admin_expired(index);
#endif
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("TextMsg", "eventTextMsg", "a", "2=#Game_will_restart_in", "2=#Game_Commencing")
register_event("HLTV", "eventHLTV", "a", "1=0", "2=0")
g_maxplayers = get_maxplayers()
register_clcmd("amx_weaponmenu", "cmdWeaponMenu", ADMIN_MENU, "- show weapon menu")
register_clcmd("weaponmenu", "cmdWeaponMenu", ADMIN_MENU, "- show weapon menu")
register_menucmd(register_menuid("Weapon Menu"), 1023, "handleWeaponMenu")
register_menucmd(register_menuid("Player Menu"), 1023, "handlePlayerMenu")
g_pChatInfo = register_cvar("wm_chatinfo", "1")
}
public eventTextMsg()
g_iRoundCounter = 0
public eventHLTV()
{
g_iRoundCounter++
for (new id = 1; id <= g_maxplayers; id++)
{
can_take_ak47[id] = 0
can_take_m4a1[id] = 0
can_take_famas[id] = 0
can_take_scout[id] = 0
can_take_awp[id] = 0
can_take_deagle[id] = 0
can_take_grenades[id] = 0
}
}
public cmdWeaponMenu(id, level, cid)
{
if(cmd_access(id, level, cid, 0))
{
if(g_iRoundCounter >= 3)
showWeaponMenu(id)
else
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Извините, но эта команда доступна только с третьего раунда.")
}
}
showWeaponMenu(id)
{
new szMenu[512], iKeys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
#if defined VIPDAY
new exp = al_admin_expired(id);
if(exp > 0)
{
new sys = get_systime();
if(exp - sys > 0)
{
if((exp - sys) / 86400 > 4) formatex(szMenu, 511, "\r[\yРусский стандарт\r] \wВыберите экипировку:^n\r=================== ^n\yДо окончания админки: \w%d \yдней!^n^n", ((exp - sys) / 86400));
else if (4 >= (exp - sys) / 86400 > 0) formatex(szMenu, 511, "\r[\yРусский стандарт\r] \wВыберите экипировку:^n\r=================== ^n\yДо окончания админки: \w%d \yдня!^n^n", ((exp - sys) / 86400));
else formatex(szMenu, 511, "\r[\yРусский стандарт\r] \wВыберите экипировку:^n\r=================== ^n\yДо окончания админки: \wпоследний день!^n^n");
}
else
client_print(id, print_chat, "Действие админки истекло!")
}
else if(exp == 0) new formatex(szMenu, 511, "\r[\yРусский стандарт\r] \wВыберите экипировку:^n\r=================== ^n\yДо окончания админки: \wбессрочная^n^n");
#else
formatex(szMenu, 511, "\r[\yРусский стандарт\r] \wВыберите экипировку:^n^n");
#endif
add(szMenu, 511, "\r1. \wAK-47^n")
add(szMenu, 511, "\r2. \wM4A1^n")
add(szMenu, 511, "\r3. \wFamas^n")
add(szMenu, 511, "\r4. \wScout^n")
add(szMenu, 511, "\r5. \wAWP^n")
add(szMenu, 511, "\r6. \wDeagle^n")
add(szMenu, 511, "\r7. \wВсе гранаты^n")
add(szMenu, 511, "\r8. \wБроня и шлем^n")
add(szMenu, 511, "\r9. \wНабор сапера^n^n")
add(szMenu, 511, "\r0. \wВыход")
show_menu(id, iKeys, szMenu, -1, "Weapon Menu")
}
public handleWeaponMenu(id, iKey)
{
if(iKey == 9)
return
else
{
g_iKey[id] = iKey
showPlayerMenu(id, g_iMenuPosition[id] = 0)
}
}
showPlayerMenu(id, iPos)
{
if(iPos < 0)
return
new iTotalPlayersNum
get_players(g_iMenuPlayers[id], iTotalPlayersNum)
new szMenu[512], szName[32]
new i, b = 0, iStart = iPos * 7
if(iStart >= iTotalPlayersNum)
iStart = iPos = g_iMenuPosition[id] = 0
new iLen = formatex(szMenu, 511, "\r[\yРусский стандарт\r] \wВыберите игрока:\R%d/%d\w^n^n", iPos + 1, (iTotalPlayersNum / 7 + ((iTotalPlayersNum % 7) ? 1 : 0)))
new iEnd = iStart + 7, iKeys = MENU_KEY_0|MENU_KEY_8
if(iEnd > iTotalPlayersNum)
iEnd = iTotalPlayersNum
for(new a = iStart; a < iEnd; ++a)
{
i = g_iMenuPlayers[id][a]
get_user_name(i, szName, 31)
iKeys |= (1<<b)
if(i == id)
iLen += formatex(szMenu[iLen], 511 - iLen, "\r%d. \y%s^n", ++b, szName)
else
iLen += formatex(szMenu[iLen], 511 - iLen, "\r%d. \w%s^n", ++b, szName)
}
if(iEnd != iTotalPlayersNum)
{
formatex(szMenu[iLen], 511 - iLen, "^n\r9. \wДалее...^n\r0. \wНазад")
iKeys |= MENU_KEY_9
}
else
formatex(szMenu[iLen], 511 - iLen, "^n\r0. \wНазад")
show_menu(id, iKeys, szMenu, -1, "Player Menu")
}
public handlePlayerMenu(id, iKey)
{
switch(iKey)
{
case 8: showPlayerMenu(id, ++g_iMenuPosition[id])
case 9:
{
if(g_iMenuPosition[id])
showPlayerMenu(id, --g_iMenuPosition[id])
else
showWeaponMenu(id)
}
default:
{
new g_iPlayer = g_iMenuPlayers[id][g_iMenuPosition[id] * 7 + iKey]
giveItem(id, g_iPlayer)
showPlayerMenu(id, g_iMenuPosition[id])
}
}
}
giveItem(id, g_iPlayer)
{
new szAdmName[32], szUsrName[32]
get_user_name(id, szAdmName, 31)
get_user_name(g_iPlayer, szUsrName, 31)
new iChatInfo = get_pcvar_num(g_pChatInfo)
switch(g_iKey[id])
{
case 0:{
if(can_take_ak47[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - AK47 можно взять/выдать !g1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_ak47[id]++
drop_weapons(g_iPlayer, 1)
give_item(g_iPlayer, "weapon_ak47")
cs_set_user_bpammo(g_iPlayer, CSW_AK47, 90)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал !gAK-47!y игроку !t%s!y.", szAdmName, szUsrName)
}
case 1:{
if(can_take_m4a1[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - M4A1 можно взять/выдать!g 1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_m4a1[id]++
drop_weapons(g_iPlayer, 1)
give_item(g_iPlayer, "weapon_m4a1")
cs_set_user_bpammo(g_iPlayer, CSW_M4A1, 90)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал !gM4A1!y игроку !t%s!y.", szAdmName, szUsrName)
}
case 2:{
if(can_take_famas[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Famas можно взять/выдать!g 1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_famas[id]++
drop_weapons(g_iPlayer, 1)
give_item(g_iPlayer, "weapon_famas")
cs_set_user_bpammo(g_iPlayer, CSW_FAMAS, 90)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал !gFamas!y игроку !t%s!y.", szAdmName, szUsrName)
}
case 3:{
if(can_take_scout[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Scout можно взять/выдать!g 1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_scout[id]++
drop_weapons(g_iPlayer, 1)
give_item(g_iPlayer, "weapon_scout")
cs_set_user_bpammo(g_iPlayer, CSW_SCOUT, 90)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал !gScout!y игроку !t%s!y.", szAdmName, szUsrName)
}
case 4:{
if(can_take_awp[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - AWP можно взять/выдать!g 1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_awp[id]++
drop_weapons(g_iPlayer, 1)
give_item(g_iPlayer, "weapon_awp")
cs_set_user_bpammo(g_iPlayer, CSW_AWP, 30)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал !gAWP!y игроку !t%s!y.", szAdmName, szUsrName)
}
case 5:{
if(can_take_deagle[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Deagle можно взять/выдать!g 1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_deagle[id]++
drop_weapons(g_iPlayer, 2)
give_item(g_iPlayer, "weapon_deagle")
cs_set_user_bpammo(g_iPlayer, CSW_DEAGLE, 35)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал !gDeagle!y игроку !t%s!y.", szAdmName, szUsrName)
}
case 6:{
if(can_take_grenades[id] >= 1)
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Гранаты можно взять/выдать!g 1 !yраз раунд")
return PLUGIN_HANDLED
}
can_take_grenades[id]++
give_item(g_iPlayer, "weapon_hegrenade")
give_item(g_iPlayer, "weapon_flashbang")
give_item(g_iPlayer, "weapon_smokegrenade")
cs_set_user_bpammo(g_iPlayer, CSW_FLASHBANG, 2)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал набор гранат игроку !t%s!y.", szAdmName, szUsrName)
}
case 7:
{
cs_set_user_armor(g_iPlayer, 100, CS_ARMOR_VESTHELM)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал броню и шлем игроку !t%s!y.", szAdmName, szUsrName)
}
case 8:
{
if(get_user_team(g_iPlayer) == 2)
{
cs_set_user_defuse(g_iPlayer, 1)
if(iChatInfo)
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Администратор !t%s!y выдал набор сапера игроку !t%s.!y", szAdmName, szUsrName)
}
else
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!y[!gРусский стандарт!y] - Извините, но набор сапера доступен только игрокам команды !tCounter-Terrorist!y.")
}
}
return PLUGIN_HANDLED
}
stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++)
{
weaponid = weapons[i]
if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}