#include <amxmodx>
#include <fakemeta>

#pragma semicolon 1

/* Hide'n'Seek Shop 
 *    by xPaw & Grim
 * 
 *  Credits:
 *    Grim - for original code/Godmode Key actviation - added pcvars
 *    Ven  - His tutorial for Player Spawn
 */

#define VERSION "2.0"

#define fm_get_user_money(%1)	get_pdata_int( %1, 115 )
#define fm_create_entity(%1)	engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))

#define MAX_CLIENTS 32

enum Color {
	NORMAL = 1,	// clients scr_concolor cvar color
	GREEN,		// Green
	TEAM_COLOR,	// Red, grey, blue
	GREY,		// grey
	RED,		// Red
	BLUE,		// Blue
};

new TeamName[][] = {
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
};
	

// Pcvars
new plugin_on, silentcost, stealthcost, noflashcost, hpcost, armorcost, grenadecost, gravitycost, speedcost, godmodecost;
new allowsilent, allowstealth, allownoflash, allowhp, allowarmor, allowgrenade, allowgravity, allowspeed, allowgodmode;
new usersilent[33], userstealth[33], usernoflash[33], userhp[33], userarmor[33], usergrenade[33], usergravity[33], userspeed[33];
new hpcvar, armorcvar, menu, hasspeed[33], hassilent[33], gotgodmode[33], hasgodmode[33], mess[33], mess2[33];
new g_msgScreenFade, g_msgMoney, grenade[32], last;

new Float:g_gametime, g_owner;
new Float:g_gametime2;

new bool:g_bPlayerNonSpawnEvent[MAX_CLIENTS + 1];
new bool:g_track_enemy;
new bool:g_track[33];

new g_iFwFmClientCommandPost;
new g_sync_check_data;

public plugin_init() {
	register_plugin("HnS Shop", VERSION, "xPaw & Grim");
	register_cvar("hns_shop_version", VERSION, FCVAR_SERVER);
	set_cvar_string("hns_shop_version", VERSION);

	// Player Spawn
	register_event("ResetHUD", "fwEvResetHUD", "b");
	register_event("TextMsg", "fwEvGameWillRestartIn", "a", "2=#Game_will_restart_in");
	register_clcmd("fullupdate", "fwCmdClFullupdate");

	// Events
	register_event("DeathMsg", "eDeath", "a");
	register_event("CurWeapon", "speed_on", "be");
	register_event("ScreenFade", "eventFlash", "be", "4=255", "5=255", "6=255", "7>199");
	register_event("TextMsg", "fire_in_the_hole", "b", "2&#Game_radio", "4&#Fire_in_the_hole");
	register_event("TextMsg", "fire_in_the_hole2", "b", "3&#Game_radio", "5&#Fire_in_the_hole");
	register_event("99", "grenade_throw", "b");

	// Pcvars
	plugin_on	= register_cvar("hns_shop", "1");
	silentcost	= register_cvar("hns_shop_silentcost",		"4500");
	stealthcost	= register_cvar("hns_shop_stealthcost",		"9500");
	noflashcost	= register_cvar("hns_shop_noflashcost",		"8000");
	grenadecost	= register_cvar("hns_shop_grenadecost",		"1500");
	gravitycost	= register_cvar("hns_shop_gravitycost",		"13000");
	speedcost	= register_cvar("hns_shop_speedcost",		"7000");
	hpcost		= register_cvar("hns_shop_hpcost",		"8000");
	armorcost	= register_cvar("hns_shop_armorcost",		"6000");
	godmodecost	= register_cvar("hns_shop_godmodecost",		"16000");
	hpcvar		= register_cvar("hns_shop_hpcvar",		"150");
	armorcvar	= register_cvar("hns_shop_armorcvar",		"150");
	allowsilent	= register_cvar("hns_shop_allowsilent",		"1");
	allowstealth	= register_cvar("hns_shop_allowstealth",	"1");
	allownoflash	= register_cvar("hns_shop_allownoflash",	"1");
	allowgrenade	= register_cvar("hns_shop_allowgrenade",	"1");
	allowgravity	= register_cvar("hns_shop_allowgravity",	"1");
	allowspeed	= register_cvar("hns_shop_allowspeed",		"1");
	allowhp		= register_cvar("hns_shop_allowhp",		"1");
	allowarmor	= register_cvar("hns_shop_allowarmor",		"1");
	allowgodmode	= register_cvar("hns_shop_allowgodmode",	"1");

	// Clcmds
	register_clcmd("say /hnsshop",	"show_hnsmenu");
	register_clcmd("say /shop",	"show_hnsmenu");
	register_clcmd("say hnsshop",	"show_hnsmenu");
	register_clcmd("say shop",	"show_hnsmenu");

	// Menu
	menu = register_menuid("Hide'n'Seek магазин");
	register_menucmd(menu, 1023, "hnsshop");
	
	// Forwards
	register_forward(FM_EmitSound,"fw_emitsound"); 
	register_forward(FM_CmdStart, "fwd_FM_CmdStart_pre", 0);
	

	// Tasks
	set_task( 2.0, "bad_fix2",_,_,_, "b" );
	set_task( 100.0, "advert",_,_,_, "b" );
	
	g_msgScreenFade = get_user_msgid("ScreenFade");
	g_msgMoney = get_user_msgid("Money");
}

public client_connect( id ) {
	usersilent[id]	= 0;
	userstealth[id]	= 0;
	usernoflash[id]	= 0;
	userhp[id]	= 0;
	userarmor[id]	= 0;
	usergrenade[id]	= 0;
	usergravity[id]	= 0;
	userspeed[id]	= 0;
	gotgodmode[id]	= 0;
	hasgodmode[id]	= 0;
	hasspeed[id]	= 0;
	hassilent[id]	= 0;
	mess[id]	= 0;
	mess2[id]	= 0;
}

public client_disconnect( id ) {
	usersilent[id]	= 0;
	userstealth[id]	= 0;
	usernoflash[id]	= 0;
	userhp[id]	= 0;
	userarmor[id]	= 0;
	usergrenade[id]	= 0;
	usergravity[id]	= 0;
	userspeed[id]	= 0;
	gotgodmode[id]	= 0;
	hasgodmode[id]	= 0;
	hasspeed[id]	= 0;
	hassilent[id]	= 0;
	mess[id]	= 0;
	mess2[id]	= 0;
} 

public speed_on( id )
	if(is_user_alive(id))
		if(hasspeed[id])
			fm_set_user_maxspeed(id, 320.0);

// Advert
public advert() {
	new g_Maxplayers;
	g_Maxplayers = get_maxplayers();
	
	for(new i=1; i<=g_Maxplayers; i++)
		if(is_user_connected(i))
			ColorChat(i, RED, "^x01[AMXX]^x04 Этот сервер использует^x03 Hide'n'Seek магазин^x04, Напишите^x03 /hnsshop^x04 или^x03 /shop");
}

public fwd_FM_CmdStart_pre( id, uc_handle, random_seed ) {
		if(!is_user_alive(id))
			return FMRES_IGNORED;
	
		if(hassilent[id] > 0)
			set_pev(id, pev_flTimeStepSound, 999);

		static button;
		button = get_uc(uc_handle, UC_Buttons);
		if(button & IN_RELOAD) {
			if(get_pcvar_num(allowgodmode) == 1)
				return FMRES_IGNORED;
			
			if(!gotgodmode[id]) {	
				if(!mess[id]) {
					ColorChat(id, RED, "^x04[Hide'n'Seek магазин]^x01 Вам нужно купить режим Бога первым!");
					mess[id]++;
					set_task(3.0, "remove_mess", id);
					return FMRES_IGNORED;
				}
				return FMRES_IGNORED;
			}
			
			if(hasgodmode[id] > 0) {
				if(!mess[id]) {
					ColorChat(id, RED, "^x04[Hide'n'Seek магазин]^x01 Режим Бога уже активирован!");
					mess[id]++;
					set_task(3.0, "remove_mess", id);
					return FMRES_IGNORED;
				}
				return FMRES_IGNORED;
			}
        
			gotgodmode[id] = 0;
			hasgodmode[id]++;
			fm_set_user_godmode(id, 1);
			if(get_user_team(id) == 1)
				fm_set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderTransAlpha, 255);
			else if(get_user_team(id) == 2)
				fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderTransAlpha, 255);
			
			set_task(5.0, "remove_godmode", id);
		
			if(!mess[id]) {
				ColorChat(id, RED, "^x04[Hide'n'Seek магазин]^x01 Режим Бога актевирован!");
				mess[id]++;
				set_task(3.0, "remove_mess", id);
			} 
			return FMRES_SUPERCEDE;
		} 
		return FMRES_IGNORED;
}


// User Spawn event
public fwEvResetHUD( id ) {
        if (!is_user_alive(id))
                return;
 
        if (g_bPlayerNonSpawnEvent[id]) {
                g_bPlayerNonSpawnEvent[id] = false;
                return;
        }
 
        fwPlayerSpawn(id);
}
 
public fwEvGameWillRestartIn() {
        static iPlayers[32], iPlayersNum, i;
        get_players(iPlayers, iPlayersNum, "a");
        for (i = 0; i < iPlayersNum; ++i)
                g_bPlayerNonSpawnEvent[iPlayers[i]] = true;
}
 
public fwCmdClFullupdate( id ) {
        g_bPlayerNonSpawnEvent[id] = true;
        static const szFwFmClientCommandPost[] = "fwFmClientCommandPost";
        g_iFwFmClientCommandPost = register_forward(FM_ClientCommand, szFwFmClientCommandPost, 1);
        return PLUGIN_CONTINUE;
}
 
public fwFmClientCommandPost( id ) {
        unregister_forward(FM_ClientCommand, g_iFwFmClientCommandPost, 1);
        g_bPlayerNonSpawnEvent[id] = false;
        return FMRES_HANDLED;
}
 
public fwPlayerSpawn( id ) {
	if(!is_user_alive(id))
		return PLUGIN_HANDLED;
	
	if(get_pcvar_num(plugin_on) == 1) {
		set_pev(id, pev_flTimeStepSound, 400);
		fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
		fm_set_user_health(id, 100);
		fm_set_user_armor(id, 0);
		fm_set_user_gravity(id, 1.0);
		usersilent[id]	= 0;
		userstealth[id]	= 0;
		usernoflash[id]	= 0;
		userhp[id]	= 0;
		userarmor[id]	= 0;
		usergrenade[id]	= 0;
		usergravity[id]	= 0;
		userspeed[id]	= 0;
		hassilent[id]	= 0;
	}
	return PLUGIN_HANDLED;
}  

// User Death event
public eDeath( id ) {
	new victem = read_data(2);
		
	usersilent[victem]	= 0;
	userstealth[victem]	= 0;
	usernoflash[victem]	= 0;
	userhp[victem]		= 0;
	userarmor[victem]	= 0;
	usergrenade[victem]	= 0; 
	usergravity[victem]	= 0;
	userspeed[victem]	= 0;
	hasspeed[victem]	= 0;
	hasgodmode[victem]	= 0;
	hassilent[victem]	= 0;
}

// Showing menu
public show_hnsmenu( id ) {
	if(get_pcvar_num(plugin_on) == 1) {
		new szBuffer[512], iLen;

		iLen = formatex(szBuffer, sizeof szBuffer - 1, "\rHide'n'Seek магазин\w^n^n");
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r1. \wТихий шаг - \y%d$^n", get_pcvar_num(silentcost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r2. \wХитрость \r(20 секунд) - \y%d$^n", get_pcvar_num(stealthcost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r3. \wНельзя ослепить - \y%d$^n", get_pcvar_num(noflashcost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r4. \w%d Жизни - \y%d$^n", get_pcvar_num(hpcvar), get_pcvar_num(hpcost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r5. \w%d Броня - \y%d$^n", get_pcvar_num(armorcvar), get_pcvar_num(armorcost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r6. \wГранату - \y%d$^n", get_pcvar_num(grenadecost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r7. \wГравитация \r(10 секунд) - \y%d$^n", get_pcvar_num(gravitycost));   
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r8. \wБыстрая скорость \r(25 секунд) - \y%d$^n", get_pcvar_num(speedcost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r9. \wРежим Бога \d(key activation) \r(5 секунд) - \y%d$^n^n", get_pcvar_num(godmodecost));
		iLen += formatex(szBuffer[iLen], (sizeof szBuffer - 1) - iLen, "\r0. \wВыход"); 

		new iKeys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<< 8 | 1<<9 );
		show_menu(id, iKeys, szBuffer, -1, "Hide'n'Seek магазин");
	} else
		ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Магазин отключен.");
	return PLUGIN_HANDLED;
}

// Shop actions
public hnsshop( id, key ) {
	switch( key ) {
		case 0: // Silent Footsteps
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED;  
			}
			if(usersilent[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У вас уже есть эта покупка!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowsilent) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Этот пункт отключен.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(silentcost);
	
			if(money > cost || money == cost) {
				set_pev(id, pev_flTimeStepSound, 999);
				fm_set_user_money(id, money - cost);
				usersilent[id]++;
				hassilent[id]++;
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 тихий шаг,^x04 теперь враги Вас не слышат.");
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вам нужно больше^x04 денег^x01 чтоб купить это!");
			}
		}
		case 1: // Stealth Suit
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED;
			}
			if(userstealth[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У Вас уже есть эта вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowstealth) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(stealthcost);
	
			if(money > cost || money == cost) {
				fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 15);
				fm_set_user_money(id, money - cost);
				userstealth[id]++;
				set_task(20.0, "remove_stealth", id);
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 хитрость,^x04 теперь вы невидемы 20 секунд.") ;
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 You need more^x04 money^x01 to buy this!");
			}
		}
		case 2: // NoFlash Blinding
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED;
			}
			if(usernoflash[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы уже преобрели эту вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allownoflash) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(noflashcost);
	
			if(money > cost || money == cost) {
				fm_set_user_money(id, money - cost);
				usernoflash[id]++;
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 Анти флашку.");
			} else {  
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У Вас недастатачно^x04 денег^x01 чтобы купить эту вещь!");
			} 
		}
		case 3: // HP
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED;
			}
			if(userhp[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У Вас уже есть эта вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowhp) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(hpcost);
	
			if(money > cost || money == cost) {
				new health = get_pcvar_num(hpcvar);
				fm_set_user_money(id, money - cost);
				fm_set_user_health(id, health);
				userhp[id]++;
				client_cmd(id, "spk items/medshot4");
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 %d жизни.", get_pcvar_num(hpcvar));
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У вас недастатачно^x04 денег^x01 чтобы купить эту вещь!");
			}
		}
		case 4: // Armor
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED;
			}
			if(userarmor[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы уже преобрели эту вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowarmor) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(armorcost);
		
			if(money > cost || money == cost) {
				new armor = get_pcvar_num(armorcvar);
				fm_set_user_money(id, money - cost);
				fm_set_user_armor(id, armor);
				userarmor[id]++;
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 %d броню.", get_pcvar_num(armorcvar));
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вам нужно больше^x04 денег^x01 чтобы преобрети эту вещь!");
			}
		}
		case 5: // HE Grenade
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 You need to be alive!");
				return PLUGIN_HANDLED;
			}
			if(usergrenade[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У Вас уже есть эта вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowgrenade) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(grenadecost);
	
			if(money > cost || money == cost) {
				fm_set_user_money(id, money - cost);
				fm_give_item(id, "weapon_hegrenade");
				usergrenade[id]++;
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 Гранату.");
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вам нужно больше^x04 денег^x01 чтобы преобрести эту вещь!");
			}
		}
		case 6: // Gravity
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED;
			}
			if(usergravity[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У Вас уже есть эта вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowgravity) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(gravitycost);
		
			if(money > cost || money == cost) {
				fm_set_user_money(id, money - cost);
				fm_set_user_gravity(id, 0.63);
				usergravity[id]++;
				set_task(10.0, "remove_gravity", id);
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 гравитацию^x04 на 10 секунд.");
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вам нужно больше^x04 денег^x01 чтобы преобрети эту вещь!");
			}
		}
		case 7: // Faster Speed
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED; 
			}
			if(userspeed[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У Вас уже есть эта вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowspeed) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Эта вещь отключена.");
				return PLUGIN_HANDLED;
			}
	
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(speedcost);
	
			if(money > cost || money == cost) {
				fm_set_user_money(id, money - cost);
				userspeed[id]++;
				hasspeed[id]++;
				fm_set_user_maxspeed(id, 320.0);
				set_task(25.0, "remove_speed", id);
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 You purchased^x03 Faster speed.");
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 You need more^x04 money^x01 to buy this!");
			}
		}
		case 8: // Godmode
		{
			if(!is_user_alive(id)) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы должны быть живы!");
				return PLUGIN_HANDLED; 
			}
			if(gotgodmode[id] > 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 У вас уже есть эта вещь!");
				return PLUGIN_HANDLED;
			}
			if(get_pcvar_num(allowgodmode) == 0) {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Этот вещь отключена.");
				return PLUGIN_HANDLED;
			}
		
			new money = fm_get_user_money(id);
			new cost = get_pcvar_num(godmodecost);
		 
			if(money > cost || money == cost) {
				gotgodmode[id]++;
				fm_set_user_money(id, money - cost);
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы преобрели^x03 Godmode,^x04 нажмите клавишу R(Reload)^x01 чтобы актевировать его.");
			} else {
				ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вам нужно больше^x04 денег^x01 чтоб преобрести это!");
			}
		}
		case 9: // Exit
			return PLUGIN_HANDLED;
	}
	return PLUGIN_HANDLED;
}

// Remove Gravity
public remove_gravity( id ) {
	fm_set_user_gravity(id, 1.0);
	ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Гравитация нормальная.");
}  

// Remove Stealth
public remove_stealth( id ) {
	fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
	ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Вы^x03 видимы^x01 как и другие.");
}

// Remove Speed
public remove_speed( id ) {
	fm_set_user_maxspeed(id, 250.0);
	hasspeed[id] = 0;
	ColorChat(id, BLUE, "^x04[Hide'n'Seek магазин]^x01 Ваша скорость нормальная.");
}

// Remove Godmode
public remove_godmode( id ) {
	hasgodmode[id] = 0;
	fm_set_user_godmode(id, 0);
	if(!mess2[id]) {
		ColorChat(id, RED, "^x04[Hide'n'Seek магазин]^x01 Вы не использовали godmode.");
		mess2[id]++;
		fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
		set_task(3.0, "remove_mess2", id);
	}
}

public remove_mess( id )		mess[id]	= 0;
public remove_mess2( id )	mess2[id]	= 0;

/// NoFlash Blinding - Start
public bad_fix2() {
	new Float:gametime = get_gametime();
	if(gametime - g_gametime2 > 2.5)
		for(new i = 0; i < 32; i++)
			grenade[i] = 0;
}

public eventFlash( id ) {
	new Float:gametime = get_gametime();
	if(gametime != g_gametime) { 
		g_owner = get_grenade_owner();
		g_gametime = gametime;
		for(new i = 0; i < 33; i++) 
			g_track[i] = false;
		g_track_enemy = false;
	}    
	if(is_user_connected(g_owner) && usernoflash[id] > 0) {
		g_track_enemy = true;

		message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, id);
		write_short(1);
		write_short(1);
		write_short(1);
		write_byte(0);
		write_byte(0);
		write_byte(0);
		write_byte(255);
		message_end();
	}
}

public flash_delay() {
	if(g_track_enemy == false) {
		for(new i = 0; i < 33; i++) {
			if(g_track[i] == true && is_user_connected(i)) {
				message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, i) ;
				write_short(1);
				write_short(1);
				write_short(1);
				write_byte(0);
				write_byte(0);
				write_byte(0);
				write_byte(255);
				message_end();
			}
		}
	}
}

public grenade_throw() {
	if(g_sync_check_data == 0)
		return PLUGIN_CONTINUE;
	g_sync_check_data--;
	if(read_datanum() < 2)
		return PLUGIN_HANDLED_MAIN;

	if(read_data(1) == 11 && (read_data(2) == 0 || read_data(2) == 1))
		add_grenade_owner(last);

	return PLUGIN_CONTINUE;
}

public fire_in_the_hole() {
	new name[32];
	read_data(3, name, 31);
	new temp_last = get_user_index(name);
	new junk;
	if((temp_last == 0) || (!is_user_connected(temp_last)))
		return PLUGIN_CONTINUE;
	if(get_user_weapon(temp_last,junk,junk) == CSW_FLASHBANG) {
		last = temp_last;
		g_sync_check_data = 2; 
	}
	return PLUGIN_CONTINUE;
}

public fire_in_the_hole2() {
	new name[32];
	read_data(4, name, 31);
	new temp_last = get_user_index(name);
	new junk;
	if((temp_last == 0) || (!is_user_connected(temp_last)))
		return PLUGIN_CONTINUE;
	if(get_user_weapon(temp_last,junk,junk) == CSW_FLASHBANG) {    
		last = temp_last;
		g_sync_check_data = 2;
	}
	return PLUGIN_CONTINUE;
}

add_grenade_owner(owner) {
	new Float:gametime = get_gametime();
	g_gametime2 = gametime;
	for(new i = 0; i < 32; i++) {
		if(grenade[i] == 0) {
			grenade[i] = owner;
			return;
		}
	}
}

get_grenade_owner() {
	new which = grenade[0];
	for(new i = 1; i < 32; i++)  
		grenade[i-1] = grenade[i];
	grenade[31] = 0;
	return which;
}

// from XxAvalanchexX "Flashbang Dynamic Light"
public fw_emitsound(entity,channel,const sample[],Float:volume,Float:attenuation,fFlags,pitch) {
	if(!equali(sample,"weapons/flashbang-1.wav") && !equali(sample,"weapons/flashbang-2.wav"))
		return FMRES_IGNORED;

	new Float:gametime = get_gametime();

	//in case no one got flashed, the sound happens after all the flashes, same game time
	if(gametime != g_gametime) {
		g_owner = get_grenade_owner();
		return FMRES_IGNORED;
	}
	return FMRES_IGNORED;
}
// NoFlash Blinding - End 

// Stocks - Start
public fm_set_user_money ( index, i_Money ) { 
	set_pdata_int ( index, 115, i_Money ); 

	message_begin ( MSG_ONE, g_msgMoney, _, index ); 
	write_long ( i_Money ); 
	write_byte ( 1 ); 
	message_end (); 
}

stock fm_get_user_godmode( index ) {
	new Float:val;
	pev(index, pev_takedamage, val);

	return (val == DAMAGE_NO);
}

stock fm_set_user_godmode( index, godmode = 0 ) {
	set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);

	return 1;
}

stock fm_set_user_health( index, health ) {
	health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index);

	return 1;
}

stock fm_set_user_rendering(index, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) {
	return fm_set_rendering(index, fx, r, g, b, render, amount);
}

stock fm_set_user_maxspeed( index, Float:speed = -1.0 ) {
	engfunc(EngFunc_SetClientMaxspeed, index, speed);
	set_pev(index, pev_maxspeed, speed);

	return 1;
}

stock fm_set_user_armor( index, armor ) {
	set_pev(index, pev_armorvalue, float(armor));

	return 1;
}

stock fm_set_user_gravity( index, Float:gravity = 1.0 ) {
	set_pev(index, pev_gravity, gravity);

	return 1;
}

stock fm_give_item( index, const item[] ) {
	if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5))
		return 0;

	new ent = fm_create_entity(item);
	if (!pev_valid(ent))
		return 0;

	new Float:origin[3];
	pev(index, pev_origin, origin);
	set_pev(ent, pev_origin, origin);
	set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
	dllfunc(DLLFunc_Spawn, ent);

	new save = pev(ent, pev_solid);
	dllfunc(DLLFunc_Touch, ent, index);
	if (pev(ent, pev_solid) != save)
		return ent;

	engfunc(EngFunc_RemoveEntity, ent);

	return -1;
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) {
	new Float:RenderColor[3];
	RenderColor[0] = float(r);
	RenderColor[1] = float(g);
	RenderColor[2] = float(b);

	set_pev(entity, pev_renderfx, fx);
	set_pev(entity, pev_rendercolor, RenderColor);
	set_pev(entity, pev_rendermode, render);
	set_pev(entity, pev_renderamt, float(amount));

	return 1;
}
// Stocks - End

// ColorChat - Start
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...) {
	new message[256];

	switch(type) {
		case NORMAL:	message[0] = 0x01;
		case GREEN:	message[0] = 0x04;
		default:	message[0] = 0x03;
	}

	vformat(message[1], 251, msg, 4);

	// Make sure message is not longer than 192 character. Will crash the server.
	message[192] = '^0';

	new team, ColorChange, index, MSG_Type;
	
	if(id) {
		MSG_Type = MSG_ONE;
		index = id;
	} else {
		index = FindPlayer();
		MSG_Type = MSG_ALL;
	}
	
	team = get_user_team(index);
	ColorChange = ColorSelection(index, MSG_Type, type);

	ShowColorMessage(index, MSG_Type, message);
		
	if(ColorChange)
		Team_Info(index, MSG_Type, TeamName[team]);
}

ShowColorMessage(id, type, message[]) {
	static bool:saytext_used;
	static get_user_msgid_saytext;
	if(!saytext_used) {
		get_user_msgid_saytext = get_user_msgid("SayText");
		saytext_used = true;
	}
	message_begin(type, get_user_msgid_saytext, _, id);
	write_byte(id);
	write_string(message);
	message_end();	
}

Team_Info(id, type, team[]) {
	static bool:teaminfo_used;
	static get_user_msgid_teaminfo;
	if(!teaminfo_used) {
		get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
		teaminfo_used = true;
	}
	message_begin(type, get_user_msgid_teaminfo, _, id);
	write_byte(id);
	write_string(team);
	message_end();

	return 1;
}

ColorSelection(index, type, Color:Type) {
	switch(Type) {
		case RED:	return Team_Info(index, type, TeamName[1]);
		case BLUE:	return Team_Info(index, type, TeamName[2]);
		case GREY:	return Team_Info(index, type, TeamName[0]);
	}

	return 0;
}

FindPlayer(){
	new i = -1;

	while(i <= get_maxplayers())
		if(is_user_connected(++i))
			return i;
	
	return -1;
}