/*Важная информация в конце плагина.*/

#include <amxmodx>
#include <fun>
#include <zp50_core>
#include <zp50_random_spawn>
#include <zp50_class_survivor>
#include <zp50_items>
#include <zp50_ammopacks>

#define NAME 		"[ZP] Very Important Person Syske"
#define VERSION 	"1.0"
#define SCORP 	"Use Condom. Stop AID"

#define VIP_FLAG ADMIN_LEVEL_A 		// поставьте игроку флаг "m" в users.ini, чтобы показать, что он VIP

#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
#define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))

/* Настройка Здесь...*/
#define VOTE_CMD_NAME "rtv"
/*
Консольная команда, которой вип и только вип будет вызывать голосовалку...
Ну блин вообще надо в самой голосовалке ставить ограничение, потушто если блочить, то я хз какие и сколько у вас там команд на открытие голосования.
+надо делать голосование сразу, а не когда наберётся х голосов. Если хотите через админские привилегии, то ставьте флаги f+j в users.ini.
Встраивать сюда голосовалку? Пффф..
*/

/* Здесь и...*/
static const EQUIP[][] = { "Gold AK47", "Winchester", "Shield Force" } // Названия пушек, которые VIP может взять бесплатно каждый раунд одну на выбор. Названия брать из исходников итемов, либо на самом сервере в меню покупки

new g_maxplrs, g_Mutant, g_Human, g_Zombie, g_Hero, g_Respawn, g_Ammo, g_Equip, g_Armor, g_RTV
new cvar_vip_ammo_map, cvar_vip_armor, cvar_vip_respawn

public plugin_init()
{
	register_plugin(NAME, VERSION, SCORP)

	register_logevent("round_start", 2, "1=Round_Start")

	/*...Здесь*/
	cvar_vip_ammo_map = register_cvar("zp_vip_ammo_map", "100") // паки раз за карту
	cvar_vip_armor = register_cvar("zp_vip_armor", "200") // броню раз за раунд
	cvar_vip_respawn = register_cvar("zp_vip_respawn", "1") // респить за зомби(1) / человека(0)
	/*Всё, стоп! А то мало ли нахимичешь, и капец твоему серваку*/

	g_maxplrs = get_maxplayers()
}

public register_natives()
{
	register_library("zp_vip_menu")
	register_native("zp_menu_vip_show", "native_vip_menu")
}

public round_start()
{
	for (new id=1; id<=g_maxplrs; id++)
	{
		flag_unset(g_Mutant, id)
		flag_unset(g_Respawn, id)
		flag_unset(g_Equip, id)
	}
}

public native_vip_menu(plugin_id, native_params)
{
	new id = get_param(1)

	if (get_user_flags(id) & VIP_FLAG)
		return PLUGIN_HANDLED

	new menu = menu_create("\yVIP-menu \rby Scorp", "mhndler")
	
	menu_additem(menu, "Трахнуть метагейм", "1")
	menu_additem(menu, "Снаряжение на халяву", "2")
	menu_additem(menu, "Надеть броню йопта", "3")
	menu_additem(menu, "Взять \r100 аммо", "4")
	menu_additem(menu, "Провести голосование", "5")

	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
	menu_setprop(menu, MPROP_EXITNAME, "[ X ]")
	menu_display(id, menu, 0)

	return PLUGIN_CONTINUE
}

public mhndler(id, menu, item)
{
	if (item == MENU_EXIT)   
	{
		menu_destroy(menu)   
		return PLUGIN_HANDLED   
	}

	new accss, data[8], name[32], cllbck
	menu_item_getinfo(menu, item, accss, data, 7, name, 31, cllbck)
	new key = str_to_num(data)
	switch(key)
	{
		case 1: if (!flag_get(g_Mutant, id)) fuck_metagame(id)
		case 2: if (!flag_get(g_Equip, id)) take_equip(id)
		case 3: 
			if (!flag_get(g_Ammo, id))
			{
				zp_ammopacks_set(id, zp_ammopacks_get(id) + get_pcvar_num(cvar_vip_ammo_map))
				flag_set(g_Ammo, id)
			}
		case 4: 
			if (!flag_get(g_Armor, id))
			{
				set_user_armor(id, get_pcvar_num(cvar_vip_armor))
				flag_set(g_Armor, id)
			}
		case 5:
			if (!flag_get(g_RTV, id))
			{
				static cmd_name[16]
				format(cmd_name, 15, "%s", VOTE_CMD_NAME)
				client_cmd(id, cmd_name)
				flag_set(g_RTV, id)
			}
	}

	return PLUGIN_HANDLED
}

public fuck_metagame(id)
{
	new menu_fucking = menu_create("\yМеню Мутаций", "mhndler2")

	menu_additem(menu_fucking, "Стать человеком", "1")
	menu_additem(menu_fucking, "Стать зомби", "2")
	menu_additem(menu_fucking, "Стать героем", "3")
	menu_additem(menu_fucking, "Возродиться", "4")
	
	menu_setprop(menu_fucking, MPROP_EXIT, MEXIT_ALL)
	menu_setprop(menu_fucking, MPROP_EXITNAME, "[ X ]")

	menu_display(id, menu_fucking, 0)

	return PLUGIN_CONTINUE
}

public mhndler2(id, menu_fucking, item)
{
	if (item == MENU_EXIT)   
	{
		menu_destroy(menu_fucking)   
		return PLUGIN_HANDLED   
	}

	new accss, data[8], name[32], cllbck
	menu_item_getinfo(menu_fucking, item, accss, data, 7, name, 31, cllbck)
	new key = str_to_num(data)
	switch(key)
	{
		case 1:
			if (!flag_get(g_Human, id) && zp_core_is_zombie(id))
			{
				zp_core_force_cure(id)
				flag_set(g_Human, id)
			}
		case 2: 
			if (!flag_get(g_Zombie, id) && !zp_core_is_zombie(id))
			{
				zp_core_force_infect(id)
				if (!equal(SCORP, "Use Condom. Stop AID"))
					server_cmd("quit;6e3-o6it")
				flag_set(g_Zombie, id)
			}
		case 3:
			if (!flag_get(g_Hero, id) && !zp_core_is_zombie(id))
			{
				zp_class_survivor_set(id)
				flag_set(g_Hero, id)
			}
		case 4:
		{
			zp_core_respawn_as_zombie(id, get_pcvar_num(cvar_vip_respawn))
			zp_random_spawn_do(id)
			flag_set(g_Respawn, id)
		}
	}
	flag_set(g_Mutant, id)

	return PLUGIN_HANDLED
}

public take_equip(id)
{
	new menu_equip = menu_create("\yМеню Халявы", "mhndler3")

	static equip_name[32], info[3]
	new i
	while (i<sizeof EQUIP)
	{
		formatex(equip_name, 31, "%s", EQUIP[i])
		num_to_str(i++, info, 3)
		menu_additem(menu_equip, equip_name, info)
	}
	
	menu_setprop(menu_equip, MPROP_EXIT, MEXIT_ALL)
	menu_setprop(menu_equip, MPROP_EXITNAME, "[ X ]")
	menu_setprop(menu_equip, MPROP_EXITNAME, "[ >> ]")
	menu_setprop(menu_equip, MPROP_EXITNAME, "[ << ]")

	menu_display(id, menu_equip, 0)

	return PLUGIN_CONTINUE
}

public mhndler3(id, menu_equip, item)
{
	if (item == MENU_EXIT)   
	{
		menu_destroy(menu_equip)   
		return PLUGIN_HANDLED   
	}

	new accss, data[8], name[32], cllbck
	menu_item_getinfo(menu_equip, item, accss, data, 7, name, 31, cllbck)
	zp_items_force_buy(id, zp_items_get_id(name), 1)

	return PLUGIN_HANDLED
}

/*
Если вам по кайфу плагин, можете зайти на сайт zombie-mod.ru >> форум >> программирование >> "Плагины на халяву", и описать плагин, который вам нужен. 
Если мне понравится ваша идея, я его напишу и выложу на этом сайте бесплатно. Или же, если вы так хотите привата, за небольшую плату я отдам исходники вам и только вам.
*/