Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#define VIP_FLAG ADMIN_LEVEL_H
new bool: g_bDamage[33]
new g_MsgSync, g_MaxPlayers
new round_number, g_round
new bool: has_used[32]
new const weapon_name[][] = { "Deagle", "USP", "AK47", "M4a1", "FAMAS", "AWP", "SCOUT" }
#define is_user_valid_connected(%1) (1 <= %1 <= g_MaxPlayers && is_user_connected(%1))
public plugin_init()
{
register_plugin("VIP Weapons", "1.1", "Player")
g_round = register_cvar("amx_vip_give", "3")
register_clcmd("vipmenu", "showWeaponMenu")
register_clcmd("say /adminka", "ShowMotdADM")
register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
register_logevent("event_RestartRound", 2, "1&Restart_Round_")
register_event("Damage", "event_Damage", "b", "2!0", "3=0", "4!0")
RegisterHam(Ham_Spawn, "player", "fw_PlayerRespawn", 1)
g_MsgSync = CreateHudSyncObj()
g_MaxPlayers = get_maxplayers()
}
public client_authorized(id)
{
if(!(get_user_flags(id) & VIP_FLAG))
return
client_cmd(id, "bind ^"F5^" ^"vipmenu^"")
}
public showWeaponMenu(id)
{
if(!(get_user_flags(id) & VIP_FLAG))
{
ChatColor(id, "^3[^4|+18>>Сервер^3]^1 Только для ^3V.I.P^1 персон!")
return PLUGIN_HANDLED
}
new menu = menu_create("\w[\yV.I.P\w] \rОружейка:", "giveWeapon")
new szIteamName[64]
for(new i = 0; i < sizeof(weapon_name); i++)
{
formatex(szIteamName, charsmax(szIteamName), "\r[\y%s\r]", weapon_name[i])
menu_additem(menu, szIteamName)
}
menu_addblank(menu, 0)
formatex(szIteamName, charsmax(szIteamName), "Дамагер \r[%sключен\r]", g_bDamage[id] ? "\yВ" : "\dВы")
menu_additem(menu, szIteamName)
menu_addblank(menu, 1)
menu_setprop(menu, MPROP_PERPAGE, 0)
menu_additem(menu, "Выход")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu)
return PLUGIN_HANDLED
}
public giveWeapon(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
if(item != 7)
{
if(!is_user_alive(id))
{
ChatColor(id, "^3[^4|+18>>Сервер^3]^1 Вы мертвы!")
return PLUGIN_HANDLED
}
if(round_number < get_pcvar_num(g_round))
{
ChatColor(id, "^3[^4|+18>>Сервер^3]^1 Доступно с %d раунда!", get_pcvar_num(g_round))
return PLUGIN_HANDLED
}
if(has_used[id])
{
ChatColor(id, "^3[^4|+18>>Сервер^3]^1 Вы уже использовали! Подождите...")
return PLUGIN_HANDLED
}
has_used[id] = true
switch(item)
{
case 0:
{
DropSecondaryWeapons(id)
give_item(id, "weapon_deagle")
cs_set_user_bpammo(id , CSW_DEAGLE, 35)
}
case 1:
{
DropSecondaryWeapons(id)
give_item(id, "weapon_usp")
cs_set_user_bpammo(id , CSW_USP, 100)
}
case 2:
{
DropPrimaryWeapons(id)
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id , CSW_AK47, 90)
}
case 3:
{
DropPrimaryWeapons(id)
give_item(id, "weapon_m4a1")
cs_set_user_bpammo(id , CSW_M4A1, 90)
}
case 4:
{
DropPrimaryWeapons(id)
give_item(id, "weapon_famas")
cs_set_user_bpammo(id , CSW_FAMAS, 90)
}
case 5:
{
DropPrimaryWeapons(id)
give_item(id, "weapon_awp")
cs_set_user_bpammo(id , CSW_AWP, 30)
}
case 6:
{
DropPrimaryWeapons(id)
give_item(id, "weapon_scout")
cs_set_user_bpammo(id , CSW_SCOUT, 90)
}
}
}
else
{
g_bDamage[id] = !g_bDamage[id]
showWeaponMenu(id)
}
return PLUGIN_HANDLED
}
public fw_PlayerRespawn(id)
{
if(!is_user_alive(id) || !(get_user_flags(id) & VIP_FLAG))
return
DropSecondaryWeapons(id)
give_item(id, "weapon_deagle")
cs_set_user_bpammo(id, CSW_DEAGLE, 35)
give_item(id,"weapon_hegrenade")
give_item(id,"weapon_flashbang")
give_item(id,"weapon_flashbang")
give_item(id,"weapon_smokegrenade")
give_item(id,"item_assaultsuit")
give_item(id, "item_thighpack")
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
}
public ShowMotdADM(id)
show_motd(id, "adminka.txt", "Покупка - Админки!")
public ShowMotdVIP(id)
show_motd(id, "vip.txt", "Покупка - |+18>>Сервер!")
public event_RoundStart()
{
round_number++
arrayset(has_used, false, 32)
}
public event_RestartRound()
round_number = 0
public event_Damage(id)
{
if(!is_user_valid_connected(id))
return
static attacker; attacker = get_user_attacker(id)
static damage; damage = read_data(2)
if(is_user_valid_connected(attacker) && g_bDamage[attacker])
{
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(attacker, g_MsgSync, "%i", damage)
}
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color
replace_all(msg, 190, "!team2", "^0") // Team2 Color
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, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
stock DropPrimaryWeapons(id)
{
static weapons[32], num;
const PRIMARY_WEAPONS_BIT_SUM = ((1<<3)|(1<<5)|(1<<7)|(1<<8)|(1<<12)|(1<<13)|(1<<14)|(1<<15)|(1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)|(1<<27)|(1<<28)|(1<<30));
get_user_weapons(id, weapons, num);
for (new i = 0; i < num; i++)
if((1<<weapons[i]) & PRIMARY_WEAPONS_BIT_SUM)
fm_strip_user_gun(id, weapons[i])
}
stock DropSecondaryWeapons(id)
{
static weapons[32], num;
const SECONDARY_WEAPONS_BIT_SUM = ((1<<1)|(1<<10)|(1<<11)|(1<<16)|(1<<17)|(1<<26));
get_user_weapons(id, weapons, num);
for (new i = 0; i < num; i++)
if((1<<weapons[i]) & SECONDARY_WEAPONS_BIT_SUM)
fm_strip_user_gun(id, weapons[i])
}
stock bool:fm_strip_user_gun(index, wid = 0, const wname[] = "")
{
new ent_class[32];
if (!wid && wname[0])
copy(ent_class, sizeof ent_class - 1, wname);
else
{
new weapon = wid, clip, ammo;
if (!weapon && !(weapon = get_user_weapon(index, clip, ammo)))
return false;
get_weaponname(weapon, ent_class, sizeof ent_class - 1);
}
new ent_weap = fm_find_ent_by_owner(-1, ent_class, index);
if (!ent_weap)
return false;
engclient_cmd(index, "drop", ent_class);
new ent_box = pev(ent_weap, pev_owner);
if (!ent_box || ent_box == index)
return false;
dllfunc(DLLFunc_Think, ent_box);
return true;
}
stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0)
{
new strtype[11] = "classname", ent = index;
switch (jghgtype) {
case 1: strtype = "target";
case 2: strtype = "targetname";
}
while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}
return ent;
}