Код
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta_util>
#include <cstrike>
#include <chatcolor>
#pragma semicolon 1
#define SetBit(%0,%1) ((%0) |= (1 << (%1)))
#define ClearBit(%0,%1) ((%0) &= ~(1 << (%1)))
#define IsSetBit(%0,%1) ((%0) & (1 << (%1)))
#define IsNotSetBit(%0,%1) (~(%0) & (1 << (%1)))
#define IsUserFlag ADMIN_LEVEL_H
#if cellbits == 32
const OFFSET_CLIPAMMO = 51;
#else
const OFFSET_CLIPAMMO = 65;
#endif
const OFFSET_LINUX_WEAPONS = 4;
new maxplayers;
new g_iBitUserVip, g_iBitUserItem;
new vipspeed[33], vipalive[33], vipgrena[33], vipheal[33], vipmoney[33], vipshield[33], vipdgl[33];
public plugin_init()
{
register_plugin("[AMX] ViP", "0.1", "di.alyabev");
clcmd_init();
event_init();
}
clcmd_init()
{
register_clcmd("say /supermenu", "ClCmd_VipMenu");
maxplayers = get_maxplayers();
}
event_init()
{
register_logevent("round_start", 2, "1=Round_Start");
register_event("CurWeapon", "current_weapon", "be", "1=1");
}
public client_putinserver(id)
{
new iFlags = get_user_flags(id);
if(iFlags & IsUserFlag) SetBit(g_iBitUserVip, id);
}
public client_disconnect(id)
{
ClearBit(g_iBitUserVip, id);
ClearBit(g_iBitUserItem, id);
}
public round_start()
{
for(new id; id <= maxplayers; id++)
{
if(!is_user_connected(id)) continue;
ClearBit(g_iBitUserItem, id);
vipspeed[id]--;
vipalive[id]--;
vipgrena[id]--;
vipheal[id]--;
vipmoney[id]--;
vipshield[id]--;
vipdgl[id]--;
}
}
public current_weapon(id)
{
if(!is_user_alive(id)) return;
if(IsSetBit(g_iBitUserItem, id)) fm_set_user_maxspeed(id, 350.0);
}
public ClCmd_VipMenu(id)
{
if(IsNotSetBit(g_iBitUserVip, id))
{
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Недостаточно прав!");
return;
}
new menu = menu_create("\r[:ВИП:] \yВыбирай:", "ClCmd_VipMenu_Choise");
if(is_user_alive(id))
{
menu_additem(menu, "\d[Воскреснуть]", "1", 0);
menu_additem(menu, "[Гравитация и скорость]", "2", 0);
menu_additem(menu, "[Комплект гранат]", "3", 0);
menu_additem(menu, "[+160HP]", "4", 0);
menu_additem(menu, "[+6000$]", "5", 0);
menu_additem(menu, "[Щит]", "6", 0);
menu_additem(menu, "[Дигл]", "7", 0);
}
else
{
menu_additem(menu, "[Воскреснуть]", "1", 0);
menu_additem(menu, "\d[Гравитация и скорость]", "2", 0);
menu_additem(menu, "\d[Комплект гранат]", "3", 0);
menu_additem(menu, "\d[+160HP]", "4", 0);
menu_additem(menu, "\d[+6000$]", "5", 0);
menu_additem(menu, "\d[Щит]", "6", 0);
menu_additem(menu, "\d[Дигл]", "7", 0);
}
menu_display(id, menu);
}
public ClCmd_VipMenu_Choise(id, menu, item)
{
if(item == MENU_EXIT)
return;
if(IsNotSetBit(g_iBitUserVip, id))
{
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Недостаточно прав!");
return;
}
new dst[32], data[6], access, callback;
menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback);
menu_destroy(menu);
new key = str_to_num(data);
get_user_name(id, dst, charsmax(dst));
switch(key)
{
case(1):
{
if(vipalive[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipalive[id]);
return;
}
if(is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы и так живы!");
return;
}
vipalive[id] = 5; ExecuteHamB(Ham_CS_RoundRespawn, id);
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !tвосстал из мертвых", dst);
}
case(2):
{
if(vipspeed[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipspeed[id]);
return;
}
if(!is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы мертвы!");
return;
}
vipspeed[id] = 2; SetBit(g_iBitUserItem, id); set_pev(id, pev_gravity, 0.5); fm_set_user_maxspeed(id, 350.0);
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !tгравитацию и скорость", dst);
}
case(3):
{
if(vipgrena[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipgrena[id]);
return;
}
if(!is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы мертвы!");
return;
}
vipgrena[id] = 2; fm_give_item(id, "weapon_hegrenade"); fm_give_item(id, "weapon_flashbang"); fm_give_item(id, "weapon_smokegrenade");
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !tпекет гранат", dst);
}
case(4):
{
if(vipheal[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipheal[id]);
return;
}
if(!is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы мертвы!");
return;
}
vipheal[id] = 5; fm_set_user_health(id, 160);
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !t160HP", dst);
}
case(5):
{
if(vipmoney[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipmoney[id]);
return;
}
if(!is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы мертвы!");
return;
}
vipmoney[id] = 5; cs_set_user_money(id, cs_get_user_money(id) - 6000);
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !t6000$", dst);
}
case(6):
{
if(vipshield[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipshield[id]);
return;
}
if(!is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы мертвы!");
return;
}
vipshield[id] = 3; fm_give_item(id, "weapon_shield");
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !tщит", dst);
}
case(7):
{
if(vipdgl[id] > 0)
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yПотерпите !g%i !yраунд(а/ов).", vipdgl[id]);
return;
}
if(!is_user_alive(id))
{
ClCmd_VipMenu(id);
PrintChatColor(id, PRINT_COLOR_RED, "!t[National Furien] !yНельзя. Вы мертвы!");
return;
}
vipdgl[id] = 5; new weapon; drop_user_weapons(id, 1);
weapon = fm_give_item(id, "weapon_deagle"); fm_set_weapon_ammo(weapon, 2);
PrintChatColor(0, PRINT_COLOR_RED, "!t[National Furien] !g%s !yвзял: !tдигл", dst);
}
}
}
stock fm_set_weapon_ammo(pPlayer, amount)
{
set_pdata_int(pPlayer, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}
stock drop_user_weapons(pPlayer, iType)
{
new iWeaponsId[32], iNum;
get_user_weapons(pPlayer, iWeaponsId, iNum);
if(iType) iType = (1<<CSW_GLOCK18|1<<CSW_USP|1<<CSW_P228|1<<CSW_DEAGLE|1<<CSW_ELITE|1<<CSW_FIVESEVEN);
else iType = (1<<CSW_M3|1<<CSW_XM1014|1<<CSW_MAC10|1<<CSW_TMP|1<<CSW_MP5NAVY|1<<CSW_UMP45|1<<CSW_P90|1<<CSW_GALIL|1<<CSW_FAMAS|1<<CSW_AK47|1<<CSW_M4A1|1<<CSW_SCOUT|1<<CSW_SG552|1<<CSW_AUG|1<<CSW_AWP|1<<CSW_G3SG1|1<<CSW_SG550|1<<CSW_M249);
for(new i; i < iNum; i++)
{
if(iType & (1<<iWeaponsId[i]))
{
new szWeaponName[24];
get_weaponname(iWeaponsId[i], szWeaponName, charsmax(szWeaponName));
engclient_cmd(pPlayer, "drop", szWeaponName);
}
}
}