#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <hamsandwich>
#define VIP_ACCESS ADMIN_LEVEL_H
#define DAMAGE_RECIEVED
#define PLUGIN "vips"
#define VERSION "0.1"
#define AUTHOR "tatarstan"
#define INUM1 1
new iNum[33], iNum2[33]
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new pistols[6] = {CSW_P228, CSW_ELITE, CSW_FIVESEVEN, CSW_GALIL, CSW_USP, CSW_GLOCK18};
new vip_damage, g_HudSync, g_roundCount, g_HudSync2, OnOffDamage[33], bool:Damage[33]
new g_StartTime
new bool:g_iBlockPlugin
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("ResetHUD", "ResetHUD", "be")
register_event("Damage", "eventDamage", "b", "2!0", "3=0", "4!0")
register_logevent("round_end", 2, "1=Round_End")
register_event("HLTV", "logevent_round_start", "a", "1=0", "2=0")
register_clcmd("say /vipmenu", "Menu")
register_clcmd("say_team /vipmenu", "Menu")
register_clcmd("vipmenu", "Menu");
register_clcmd("damage", "ClCmdDamage");
vip_damage = register_cvar("vip_damage", "1");
g_HudSync = CreateHudSyncObj()
new iMap_Name[32], iMap_Prefix[][] = { "awp_", "aim_", "35hp", "fy_" };
get_mapname(iMap_Name, charsmax(iMap_Name))
for(new i; i < sizeof iMap_Prefix; i++)
{
if(containi(iMap_Name, iMap_Prefix[i]) != -1)
g_iBlockPlugin = true
}
#if defined DAMAGE_RECIEVED
g_HudSync2 = CreateHudSyncObj()
#endif
}
public Event_GameRestart()
g_roundCount = 1
public round_end()
g_roundCount++
public client_putinserver(id)
{
if(get_user_flags(id) & ADMIN_IMMUNITY)
set_task(0.1, "adminconnect", id)
OnOffDamage[id] = true
if(get_user_flags(id) & ADMIN_LEVEL_B)
set_task(0.1, "vipconnect", id)
}
public adminconnect(id)
{
new name[32]
get_user_name(id, name, 31)
nChatPrint(0, "^1[^4 CS-Chita.Tk ^1] ^4[Админ] ^3присоединился - ^4%s^1", name)
}
public vipconnect(id)
{
new name[32]
get_user_name(id, name, 31)
nChatPrint(0, "^1[^4 CS-Chita.Tk ^1] ^4[VIP] ^3присоединился - ^4%s^1", name)
}
public logevent_round_start()
{
g_StartTime = get_systime()
new iPlayers[32], iNums
get_players(iPlayers, iNums) // Получаем игроков
for(new i; i < iNums; i++)
{
iNum[iPlayers[i]] = INUM1 // Устанавливаем число.
iNum2[iPlayers[i]] = INUM1
}
}
public ResetHUD(id)
{
set_task(0.5, "VIP", id + 6910)
}
public VIP(TaskID)
{
new id = TaskID - 6910
if(is_user_admin(id))
{
if(is_user_alive(id))
{
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
give_item(id,"item_assaultsuit")
give_item(id,"item_thighpack")
// Проверяем на все пистолеты
for (new i = 0; i < 6; i++)
{
// Если у игрока есть пистолет с заданным индексом...
if (user_has_weapon(id, pistols[i]))
{
// ...забираем его
fm_strip_user_gun(id, pistols[i]);
// Так как у игрока не может быть больше
// одного пистолета выходим из цикла
break;
}
}
if(g_iBlockPlugin)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Выдача ^4Deagle ^3и гранат запрещена на этой карте!");
return PLUGIN_HANDLED
}
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")
}
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public eventDamage(id)
{
new attacker = get_user_attacker(id)
new damage = read_data(2)
if(get_pcvar_num(vip_damage))
{
if(is_user_connected(attacker) && is_user_connected(id))
{
if(get_user_flags(attacker) & VIP_ACCESS && OnOffDamage[attacker])
{
set_hudmessage(0, 100, 200, 0.45, 0.50, 2, 0.1, 4.0, 0.1, 0.1, -1)
ShowSyncHudMsg(attacker, g_HudSync, "%i", damage)
}
if(get_user_flags(id) & VIP_ACCESS && OnOffDamage[id])
{
set_hudmessage(255, 0, 0, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(id, g_HudSync2, "%i", damage)
}
}
}
}
public Menu(id)
{
if(g_iBlockPlugin)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Оружейное меню недоступно на этой карте!");
return PLUGIN_HANDLED
}
if(get_systime() - g_StartTime > 30)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Брать оружие можно только в течении^4 30 секунд ^3от начала раунда!")
return PLUGIN_HANDLED
}
if(!is_user_alive(id))
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Оружейное меню доступно только живым!")
return PLUGIN_HANDLED
}
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
new msg[222], name[32]
get_user_name(id, name, 31)
formatex(msg, charsmax(msg), "\rВ\wип меню \d[\r[CS-Chita.Tk]\d]^n\rИ\wмя игрока: \d%s", name)
new menu = menu_create(msg, "menu_handler")
menu_additem(menu, "\wВзять \r[\yDeagle\r] \wс \r1-го \wраунда", "1", 0)
menu_additem(menu, "\wВзять \r[\yAK-47\r] \wс \r3-го \wраунда", "2", 0)
menu_additem(menu, "\wВзять \r[\yM4a1\r] \wс \r3-го \wраунда", "3", 0)
menu_additem(menu, "\wВзять \r[\yAWP\r] \wс \r4-го \wраунда", "4", 0)
menu_additem(menu, "\wВзять \r[\yFAMAS\r] \wсо \r2-го \wраунда", "5", 0)
if(Damage[id] == true)
menu_additem(menu,"\wДамагер: \rВыключен", "6", 0)
else
menu_additem(menu,"\wДамагер: \yВключен", "6", 0)
menu_setprop(menu, MPROP_EXITNAME, "\yВыход")
menu_display(id, menu, 0)
}
else nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Вы не покупали VIP права ^4say /vipka")
return PLUGIN_HANDLED
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64], name[32]
new access, callback
get_user_name(id, name, 31)
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 1:
{
if(is_user_alive(id))
{
if(iNum2[id] <= 0)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Подождите... ^4deagle ^1используется^4 1 ^3раз за раунд.") // выводим сообщение
return PLUGIN_CONTINUE
}
drop_weapons(id, 2)
give_item(id,"weapon_deagle")
cs_set_user_bpammo(id, CSW_DEAGLE, 35)
nChatPrint(id, "^1[^4 CS-Chita.Tk ^1] ^3Ты взял(а) ^4deagle", name)
iNum2[id]--
}
}
case 2:
{
if(g_roundCount < 3)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Это оружие доступно с^4 3 ^3раунда")
return PLUGIN_HANDLED
}
if(iNum[id] <= 0)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Вы уже использовали. Подождите...") // выводим сообщение
return PLUGIN_CONTINUE
}
drop_weapons(id, 1)
give_item(id,"weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90)
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Ты взял(а) ^4AK-47", name)
iNum[id]-- //
}
case 3:
{
if(g_roundCount < 3)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Это оружие доступно с^4 3 ^3раунда")
return PLUGIN_HANDLED
}
if(iNum[id] <= 0)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Вы уже использовали. Подождите...") // выводим сообщение
return PLUGIN_CONTINUE
}
drop_weapons(id, 1)
give_item(id,"weapon_m4a1")
cs_set_user_bpammo(id, CSW_M4A1, 90)
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Ты взял(а) ^4m4a1", name)
iNum[id]-- //
}
case 4:
{
if(g_roundCount < 4)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Это оружие доступно с^4 4 ^3раунда")
return PLUGIN_HANDLED
}
if(iNum[id] <= 0)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Вы уже использовали. Подождите...") // выводим сообщение
return PLUGIN_CONTINUE
}
drop_weapons(id, 1)
give_item(id,"weapon_awp")
cs_set_user_bpammo(id, CSW_AWP, 30)
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Ты взял(а) ^4AWP", name)
iNum[id]-- //
}
case 5:
{
if(g_roundCount < 2)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Это оружие доступно с^4 2 ^3раунда")
return PLUGIN_HANDLED
}
if(iNum[id] <= 0)
{
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Вы уже использовали. Подождите...") // выводим сообщение
return PLUGIN_CONTINUE
}
drop_weapons(id, 1)
give_item(id,"weapon_famas")
cs_set_user_bpammo(id, CSW_FAMAS, 90)
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Ты взял(а) ^4FAMAS", name)
iNum[id]-- //
}
case 6:
{
switch(Damage[id])
{
case true:
{
client_cmd(id, "damage")
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Ты ^4%s^3 включил(а) ^4damage^3!", name)
Damage[id] = false
Menu(id)
}
case false:
{
client_cmd(id, "damage")
nChatPrint(id,"^1[^4 CS-Chita.Tk ^1] ^3Ты ^4%s^3 выключил(а) ^4damage^3!", name)
Damage[id] = true
Menu(id)
}
}
}
}
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, charsmax(wname))
engclient_cmd(id, "drop", wname)
}
}
}
stock nChatPrint(const id, const input[], any:...)
{
new nCount = 1, nNum[32]
static nMsgs[191]
vformat(nMsgs, 190, input, 3)
replace_all(nMsgs, 190, "!g", "^4")
replace_all(nMsgs, 190, "!n", "^1")
replace_all(nMsgs, 190, "!t", "^3")
if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")
{
for(new i = 0; i < nCount; i++)
{
if(is_user_connected(nNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])
write_byte(nNum[i])
write_string(nMsgs)
message_end()
}
}
}
}
public ClCmdDamage(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
if(OnOffDamage[id])
OnOffDamage[id] = false
else
OnOffDamage[id] = true
}
return 0
}