#include <amxmodx>
#include <colorchat>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#define PLUGIN "VIP"
#define VERSION "1.0"
#define AUTHOR "Ghost"
new g_RoundCount, maxPlayers, gmsgSayText
static const COLOR[] = "^x04"
new vipCount[33]
new vip_count_cvar, contacts
new const OFFSET_PRIMARYWEAPON = 116
new const OFFSET_SECONDARYWEAPON = 117
new 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)
new const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new const VIP_ACCESS = ADMIN_LEVEL_D
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
vip_count_cvar = register_cvar("amx_vipmenu_open", "3")
contacts = register_cvar("amx_info", "c-s.net.ua")
new szMap[33]
get_mapname(szMap, charsmax(szMap))
if (
!equali(szMap, "35hp_32")
&& !equali(szMap, "awp_zigzag")
&& !equali(szMap, "35hp_aztec")
&& !equali(szMap, "35hp_CYBERSPORT")
&& !equali(szMap, "pizda4")
&& !equali(szMap, "xyu3")
&& !equali(szMap, "awp_dust")
&& !equali(szMap, "awp_india")
&& !equali(szMap, "awp_csromania")
&& !equali(szMap, "awp_toki_v1")
&& !equali(szMap, "awp_8gua_32")
&& !equali(szMap, "awp_map2")
&& !equali(szMap, "awp_zigzag")
&& !equali(szMap, "awp_park2005")
)
{
register_event("TextMsg", "Event_GameRestart", "a", "2=#Game_Commencing", "2=#Game_will_restart_in")
register_logevent("Round_end", 2, "1=Round_End")
RegisterHam(Ham_Spawn, "player", "Vip_Grenade_Player", 1)
}
register_event("ResetHUD", "Event_reset_hud", "be")
register_clcmd( "say /vip", "Vip_Informer" )
register_clcmd( "say", "handle_say" )
register_clcmd("say /vipmenu", "vipmenu")
register_event("ResetHUD", "startround", "be")
set_task(60.0, "info_msg", _, _, _, "b")
maxPlayers = get_maxplayers()
gmsgSayText = get_user_msgid("SayText")
register_message(get_user_msgid("SayText"), "Text")
register_message(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib")
}
public Text(msgId, msgDest, msgEnt)
{
new id = get_msg_arg_int(1)
if(!is_user_connected(id))
return PLUGIN_CONTINUE
if(get_user_flags(id) & VIP_ACCESS)
{
new szTmp[256], szTmp2[256]
get_msg_arg_string(2, szTmp, charsmax(szTmp))
new szPrefix[64] = "^x01[^x04VIP^x01]"
if(!equal(szTmp, "#Cstrike_Chat_All"))
{
add(szTmp2, charsmax(szTmp2), szPrefix)
add(szTmp2, charsmax(szTmp2), " ")
add(szTmp2, charsmax(szTmp2), szTmp)
}
else
{
add(szTmp2, charsmax(szTmp2), szPrefix)
add(szTmp2, charsmax(szTmp2), "^x03 %s1^x01: %s2")
}
set_msg_arg_string(2, szTmp2)
}
return PLUGIN_CONTINUE
}
public startround(id)
{
vipCount[id] = 0
}
public vipmenu(id)
{
if(!is_user_alive(id))
return
if(!(get_user_flags(id) & VIP_ACCESS))
{
ColorChat(id, GREEN, "^x03[^x04Сервер^x03] ^x01Недостаточно прав")
}
if(get_user_flags(id) & VIP_ACCESS)
{
if(vipCount[id] < get_pcvar_num(vip_count_cvar))
{
new vp_menu = menu_create("\r[VIP] \wВыберите оружие:", "menu_handler")
menu_additem(vp_menu, "Взять [\yDeagle\w]", "1", 0)
menu_additem(vp_menu, "Взять [\yAK-47\w]", "2", 0)
menu_additem(vp_menu, "Взять [\yM4A1\w]", "3", 0)
menu_additem(vp_menu, "Взять [\yAWP\w]", "4", 0)
menu_setprop(vp_menu, MPROP_EXITNAME, "Выход")
menu_setprop(vp_menu, MPROP_EXIT, MEXIT_ALL, 0)
menu_display(id, vp_menu, 0)
vipCount[id]++
}
else
{
ColorChat(id, GREEN, "^x03[^x04VIP^x03] ^x01Превышен лимит")
}
}
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new Key = str_to_num(s_Data)
switch(Key)
{
case 1:
{
if (get_pdata_int(id, OFFSET_SECONDARYWEAPON) && (get_user_flags(id) & VIP_ACCESS))
{
return PLUGIN_HANDLED
}
if(is_user_alive(id))
{
drop_weapons(id, 2)
give_item(id, "weapon_deagle")
cs_set_user_bpammo( id, CSW_DEAGLE, 35 )
}
return PLUGIN_CONTINUE
}
case 2:
{
if (g_RoundCount < 2)
{
ColorChat(id, GREEN, "^x03[^x04VIP^x03] ^x01Доступно со 2 раунда")
return PLUGIN_HANDLED
}
if (get_pdata_int(id, OFFSET_PRIMARYWEAPON) && (get_user_flags(id) & VIP_ACCESS))
{
return PLUGIN_HANDLED
}
else
{
drop_weapons(id, 1)
give_item(id, "weapon_ak47")
cs_set_user_bpammo( id, CSW_AK47, 90 )
}
return PLUGIN_CONTINUE
}
case 3:
{
if (g_RoundCount < 2)
{
ColorChat(id, GREEN, "^x03[^x04VIP^x03] ^x01Доступно со 2 раунда")
return PLUGIN_HANDLED
}
if (get_pdata_int(id, OFFSET_PRIMARYWEAPON) && (get_user_flags(id) & VIP_ACCESS))
{
return PLUGIN_HANDLED
}
else
{
drop_weapons(id, 1)
give_item(id, "weapon_m4a1")
cs_set_user_bpammo( id, CSW_M4A1, 90 )
}
return PLUGIN_CONTINUE
}
case 4:
{
if (g_RoundCount < 5)
{
ColorChat(id, GREEN, "^x03[^x04VIP^x03] ^x01Доступно с 5 раунда")
return PLUGIN_HANDLED
}
if (get_pdata_int(id, OFFSET_PRIMARYWEAPON) && (get_user_flags(id) & VIP_ACCESS))
{
return PLUGIN_HANDLED
}
else
{
drop_weapons(id, 1)
give_item(id, "weapon_awp")
cs_set_user_bpammo( id, CSW_AWP, 30 )
}
return PLUGIN_CONTINUE
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public info_msg()
{
new szInfo[191]
get_pcvar_string(contacts, szInfo, sizeof(szInfo) - 1)
ColorChat(0, GREEN, "^x03[^x04Сервер^x03] ^x01Информация о VIP: ^x04/vip")
ColorChat(0, GREEN, "^x03[^x04Сервер^x03] ^x01VIP меню: ^x04/vipmenu")
ColorChat(0, GREEN, "^x03[^x04Сервер^x03] ^x01Купить VIP: ^x04%s", szInfo)
}
public Event_GameRestart()
{
g_RoundCount = 1
}
public Round_end()
{
g_RoundCount++
}
public client_putinserver(id)
{
set_task(0.1, "vip_connected", id)
}
public handle_say(id)
{
new said[192]
read_args(said,192)
if( ( containi(said, "who") != -1 && containi(said, "admin") != -1 ) || contain(said, "/vips") != -1 )
set_task(0.1,"print_adminlist",id)
return PLUGIN_CONTINUE
}
public print_adminlist(user)
{
new adminnames[33][32]
new message[256]
new id, count, x, len
for(id = 1 ; id <= maxPlayers ; id++)
if(is_user_connected(id))
if(get_user_flags(id) & VIP_ACCESS)
get_user_name(id, adminnames[count++], 31)
len = format(message, 255, "%s Випы онлайн: ", COLOR)
if(count > 0) {
for(x = 0 ; x < count ; x++) {
len += format(message[len], 255-len, "%s%s ", adminnames[x], x < (count-1) ? ", ":"")
if(len > 96 ) {
print_message(user, message)
len = format(message, 255, "%s ",COLOR)
}
}
print_message(user, message)
}
else
{
len += format(message[len], 255-len, "Нету VIP'ов онлайн")
print_message(user, message)
}
}
print_message(id, msg[])
{
message_begin(MSG_ONE, gmsgSayText, {0,0,0}, id)
write_byte(id)
write_string(msg)
message_end()
}
public Event_reset_hud(id)
{
if( is_user_alive ( id ) && get_user_flags ( id ) & VIP_ACCESS )
{
set_task(0.5, "VIP", id + 6910)
}
}
public Vip_Grenade_Player(id)
{
if( is_user_alive ( id ) && get_user_flags ( id ) & VIP_ACCESS )
{
give_item(id, "weapon_hegrenade")
give_item(id, "weapon_flashbang")
give_item(id, "weapon_smokegrenade")
cs_set_user_bpammo(id, CSW_FLASHBANG, 2)
cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM)
cs_set_user_money(id, cs_get_user_money(id) + 100)
}
}
public VIP(TaskID)
{
new id = TaskID - 6910
if( get_user_flags ( id ) & VIP_ACCESS )
{
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
}
return PLUGIN_HANDLED
}
public vip_connected(id)
{
if( get_user_flags ( id ) & VIP_ACCESS )
{
new name[32]
get_user_name(id, name, 31)
ColorChat(0, GREEN, "^x03[^x04Сервер^x03] ^x01VIP ^x04%s^x01 connected ", name)
client_cmd(0, "stopsound")
client_cmd(0, "spk misc/vip_sound/vip")
}
}
public plugin_precache()
{
precache_sound("misc/vip_sound/vip.wav")
}
public Vip_Informer(id)
{
show_motd(id, "addons/amxmodx/configs/vip.txt", "VIP система");
}
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)
}
}
}