#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <fun>

new const VERSION[] = "1.5";


new const g_CountdownSound[][] =
{
	"fvox/time_is_now.wav",
	"fvox/one.wav",
	"fvox/two.wav",
	"fvox/three.wav",
	"fvox/four.wav",
	"fvox/five.wav"
};
new bool:saklanan[33]

#define is_player_alive(%1) (1 <= %1 <= gMaxPlayers && g_bIsAlive[%1])
#define is_player_connected(%1) (1 <= %1 <= gMaxPlayers && g_bIsConnected[%1])
#define remove_prop(%1) (engfunc(EngFunc_RemoveEntity, g_iProp[%1]), g_iProp[%1]=0)

#define VectorAdd(%1,%2,%3) (%3[0] = %1[0] + %2[0], %3[1] = %1[1] + %2[1], %3[2] = %1[2] + %2[2])
#define VectorScale(%1,%2,%3) (%3[0] = %2 * %1[0], %3[1] = %2 * %1[1], %3[2] = %2 * %1[2])

#define PROP_MIN Float:{-16.0, -16.0, -18.0}
#define PROP_MAX Float:{16.0, 16.0, 36.0}
#define MAX_FAKE_PROPS 5

new const g_sB[] = "b";
new const g_sA[] = "a";
new const g_sBE[] = "be";
new const g_sPlayer[] = "player";
new const g_sInfoTarget[] = "info_target";
new const g_szFakeProp[] = "Fake_Hider_Prop";
//new const g_sClassName[] = "classname"
new const g_sBlank[] = "";
new const g_sCommandNotAvailable[] = "Command_Not_Available";
new const g_sMsgWins[][] =
{
	"Terrorists_Win",
	"Hostages_Not_Rescued",
	"CTs_Win"
};

const OFFSET_PAINSHOCK = 108


const HIDE_HUD = ( 1 << 0 );
//const HIDE_NONE = ( 1 << 7 );

enum (+= 200) { TASK_HIDETIME = 9999, TASK_HEAL, TASK_ZOOM, TASK_BURN, TASK_SCLIP };


new const g_szSeekerWpns[][] = 
{
	"",
	"weapon_m249",
	"weapon_xm1014",
	"weapon_scout",
	"weapon_knife"
};

enum { HUD_BOARD, HUD_ZOOM, HUD_CROSSHAIR, HUD_OBJ };
enum { ICON_SPEEDBOOST, ICON_BUYZONE };

new const g_iClassHealth[] = { -1, 200, 170, 150 };

new const g_szPlayerCamera[] = "Player_camera";
new const g_szHiderProp[] = "Hider_Prop";
new const g_bar[][] = { "|||||", "_____" };
new const g_teamnum[][] = { "0", "1", "2", "3" };
new const g_classnum[][] = { "1", "2", "3", "4" };

enum { TEAM_T = 1, TEAM_CT };

new const g_cTeamChars[] = { 'U', 'T', 'C', 'S' };
new const g_cmdTeam[][] = { "jointeam", "chooseteam", "joinclass" };

new const g_weapon_entity[][] =
{
	"weaponbox",
	"armoury_entity",
	"weapon_shield"
};

new const g_sBuyCommands[][] =  
{ 
    "buy", "buyequip", "usp", "glock", "deagle", "p228", "elites", "fn57", "m3", "xm1014", "mp5", "tmp", "p90", "mac10", "ump45", "ak47",  
    "galil", "famas", "sg552", "m4a1", "aug", "scout", "awp", "g3sg1", "sg550", "m249", "vest", "vesthelm", "flash", "hegren", 
    "sgren", "defuser", "nvgs", "shield", "primammo", "secammo", "km45", "9x19mm", "nighthawk", "228compact", "12gauge", 
    "autoshotgun", "smg", "mp", "c90", "cv47", "defender", "clarion", "krieg552", "bullpup", "magnum", "d3au1", "krieg550", 
    "buyammo1", "buyammo2", "cl_autobuy", "cl_rebuy", "cl_setautobuy", "cl_setrebuy"
};

new const g_sRemoveEntities[][] =
{
	"func_bomb_target",
	"info_bomb_target",
	"hostage_entity",
	"monster_scientist",
	"func_hostage_rescue",
	"info_hostage_rescue",
	"info_vip_start",
	"func_vip_safetyzone",
	"func_escapezone",
	"armoury_entity"
};

new bool:g_bGameOn = true, bool:g_bInHideTime;
new Array:g_sPropsModel;
new g_iProp[33], g_iCamera[33], g_iHunterClass[33], bool:g_bCameraOn[33];
new g_iFakeProps[33][MAX_FAKE_PROPS], g_iFakePropCount[33];
new bool:g_bIsHider[33], bool:g_bIsAlive[33], bool:g_bIsConnected[33];
new g_CvarBlockteam, g_CvarHidetime, g_CvarHealtime, g_CvarHpLostAmt,
	g_CvarHiderspeed, g_CvarSpeedBoost, g_CvarFakeProps
new gMaxPlayers, gMsgStatusIcon, gMsgSayText, gMsgHideWeapon,
	gMsgScreenFade, gMsgCrossHair, gMsgBarTime, g_hudmsg[4];
new g_iTeam[33], g_iPlayers[5];
new bool:g_bRoundEnd, g_iDoublejump[33], g_iCurWeapon[33]
new g_iCountdownTime, g_bHasSpeedBoost[33];
new g_iZoomPower[33], g_iSniperDmg[33];
new Float:g_fGameStartTime, Float:g_fFrags[33];
new Float:g_fNextPropUse[33];
new Float:g_fNextPropHint[33];
new g_iHostage, g_iHideTime

public plugin_init() 
{
	if(!g_bGameOn)
		return;
		
	register_dictionary("csprophunt.txt");
	
	RegisterHam(Ham_Spawn, g_sPlayer, "fw_spawn_player_post", 1);
	RegisterHam(Ham_TakeDamage, g_sPlayer, "fw_TakeDamage");
	RegisterHam(Ham_TakeDamage, g_sPlayer, "fw_TakeDamage_post", 1);
	RegisterHam(Ham_Killed, "player", "fw_killed_player");
	
	new sEventTouchWpn[] = "event_touch_weapon";
	for(new i; i < 3; i++)
		RegisterHam(Ham_Touch, g_weapon_entity[i], sEventTouchWpn);
	
	RegisterHam(Ham_Think, g_sInfoTarget, "fw_ent_think");
	RegisterHam(Ham_TakeDamage, g_sInfoTarget, "fw_prop_takedamage");
	RegisterHam(Ham_Weapon_PrimaryAttack, g_szSeekerWpns[1], "fw_WeaponAttack");
	RegisterHam(Ham_Weapon_PrimaryAttack, g_szSeekerWpns[3], "fw_WeaponAttack");
	RegisterHam(Ham_Weapon_SecondaryAttack, g_szSeekerWpns[4], "fw_WeaponAttack");
	
	register_event("TeamInfo", "event_TeamInfo", g_sA);
	register_event("CurWeapon", "event_curweapon", g_sBE, "1=1");
	register_event("SetFOV", "Event_SetFOV", "be")
//	register_event("HLTV", "EventNewRound", g_sA, "1=0", "2=0" );
	register_event("HLTV", "EventNewRound", "a", "1=0", "2=0")
	register_logevent("EventRoundStart", 2, "1=Round_Start");
	register_logevent("EventRoundEnd", 2, "1=Round_End" );
	register_event("TextMsg", "RestartRound", g_sA, "2&#Game_C", "2&#Game_w");
//	register_event("DeathMsg", "eventDeathMsg", g_sA, "2!0");
	register_event("StatusIcon", "Event_BuyZone", g_sB, "2=buyzone");
	
//	register_message(get_user_msgid("StatusIcon"), "msgStatusIcon");
	register_message(get_user_msgid("TextMsg"), "msg_textmsg");
	register_message(get_user_msgid("WeapPickup"), "msg_weaponpickup");
	register_message(get_user_msgid("AmmoPickup"), "msg_ammopickup");
	
	register_forward(FM_GetGameDescription, "fwd_GameDescription");
	register_forward(FM_CmdStart, "fwd_CmdStart");
	register_forward(FM_UpdateClientData, "fwd_UpdateClientData_Post", 1);
	register_forward(FM_PlayerPreThink, "fwd_Player_PreThink");
	register_forward(FM_PlayerPostThink, "fwd_Player_PostThink");
	register_forward(FM_ClientKill, "fwd_ClientKill");
	
	new sBuyHandle[] = "cmd_buy";
	for(new i = 0; i < sizeof g_sBuyCommands; i++) 
		register_clcmd(g_sBuyCommands[i], sBuyHandle);
	
	register_clcmd("drop", "cmd_drop");
	for(new i; i < 2; i++)
		register_clcmd(g_cmdTeam[i], "cmd_chooseteam", -1, g_sBlank);
	register_clcmd("say /esya","ayarlar")
	register_clcmd("say /fake", "cmd_fake_prop");
	register_clcmd("say /sahte", "cmd_fake_prop");
	
	for(new i = 0; i < 4; i++)
		g_hudmsg[i] = CreateHudSyncObj();
	
	set_task(2.0, "show_hud", _, _, _, g_sB);
	
	set_cvar_num("mp_playerid", 1); //hunter won't see hider'name when aiming
	
	gMaxPlayers = get_maxplayers();
	gMsgStatusIcon = get_user_msgid("StatusIcon");
	gMsgSayText = get_user_msgid("SayText");
	gMsgHideWeapon = get_user_msgid("HideWeapon");
	gMsgScreenFade = get_user_msgid("ScreenFade");
	gMsgCrossHair = get_user_msgid("Crosshair");
	gMsgBarTime = get_user_msgid("BarTime")
//	gMsgDeathmsg = get_user_msgid("DeathMsg");
}

public plugin_precache()
{
	register_plugin("CS PropHunt", VERSION, "Ryokin");
	register_cvar("ph_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER);
	set_cvar_string("ph_version", VERSION);
	
	g_CvarBlockteam = register_cvar("ph_block_jointeam", "1");
	g_CvarHidetime = register_cvar("ph_hide_time", "20");
	g_CvarHealtime = register_cvar("ph_healing_time", "30");
	g_CvarHpLostAmt = register_cvar("ph_wpnfire_hp_amount", "5"); //hp losing when wpn fire
	g_CvarHiderspeed = register_cvar("ph_hider_speed", "280.0");
	g_CvarSpeedBoost = register_cvar("ph_speed_boost", "15.0");
	g_CvarFakeProps = register_cvar("ph_fake_props", "3");
	
	g_sPropsModel = ArrayCreate(32, 1);
	
	static cfgdir[32], mapname[32], filepath[100];
	get_configsdir(cfgdir, charsmax(cfgdir));
	get_mapname(mapname, charsmax(mapname));
	format(mapname, charsmax(mapname), "[%s]", mapname);
	formatex(filepath, charsmax(filepath), "%s/cs_prophunt.ini", cfgdir);
	
	if(!file_exists(filepath))
	{
		server_print("WARNING: Can't find file %s", filepath);
		g_bGameOn = false;
		return;
	}
	
	static linedata[1024], key[64], value[960], buffer[100], bool:catch_map, bool:bHadCatchedMap = false;

	new file = fopen(filepath, "rt");
	
	while(file && !feof(file))
	{
		fgets(file, linedata, charsmax(linedata));
		
		replace(linedata, charsmax(linedata), "^n", "");
		
		if(!linedata[0] || linedata[0] == ';') 
			continue;
			
		if(linedata[0] == '[')
		{
			strtok(linedata, key, charsmax(key), value, charsmax(value));
			trim(key);
			trim(value);
			
			if(equal(key, mapname))
			{
				if(!bHadCatchedMap) 
					bHadCatchedMap = true; //found map's name
				catch_map = true;
			}
			else catch_map = false;
			
			continue;
		}
			
		if(!catch_map)
			continue;
			
		strtok(linedata, key, charsmax(key), value, charsmax(value), '=');
		
		trim(key)
		trim(value)
		
		if(equal(key, "HIDE TIME"))
		{
			g_iHideTime = str_to_num(value);
			continue
		}
			
		formatex(value, charsmax(value), "%s", linedata);
		
		while(value[0] != 0 && value[10] != '=' && strtok(value, key, charsmax(key), value, charsmax(value), ','))
		{
			trim(key);
			trim(value);
						
			ArrayPushString(g_sPropsModel, key);
		}
	}
	if(file) fclose(file);
	
	if(!bHadCatchedMap) //can't find map in ini file
	{
		server_print("WARNING: Can't find map's name %s in cs_prophunt.ini", mapname);
		g_bGameOn = false;
		return;
	}
	
	if(!g_iHideTime)
		g_iHideTime = get_pcvar_num(g_CvarHidetime);
	
	for(new i = 0; i < ArraySize(g_sPropsModel); i++)
	{
		ArrayGetString(g_sPropsModel, i, buffer, charsmax(buffer));
		format(buffer, charsmax(buffer), "models/props/%s.mdl", buffer);
		engfunc(EngFunc_PrecacheModel, buffer);
	}
	
	for(new i = 0; i < 6; i++)
		precache_sound(g_CountdownSound[i]);
		
	register_forward(FM_Spawn, "fwd_Spawn");
	
	new iHostage = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "hostage_entity"));
	
	if(iHostage)
	{
		engfunc(EngFunc_SetOrigin, iHostage, Float:{0.0, 0.0, -55000.0});
		engfunc(EngFunc_SetSize, iHostage, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0});
		dllfunc(DLLFunc_Spawn, iHostage);
		g_iHostage = iHostage
	}
}

public client_putinserver(id)
{
	g_bIsConnected[id] = true;
	
	//create camera
	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, g_sInfoTarget));      
	set_pev(iEnt, pev_classname, g_szPlayerCamera);
	engfunc(EngFunc_SetModel, iEnt, "models/w_usp.mdl");
	set_pev(iEnt, pev_solid, SOLID_TRIGGER);
	set_pev(iEnt, pev_movetype, MOVETYPE_FLY);
	set_pev(iEnt, pev_owner, id);
	set_pev(iEnt, pev_rendermode, kRenderTransTexture);
	set_pev(iEnt, pev_renderamt, 0.0);
	g_iCamera[id] = iEnt;
	
	//create prop
	new iProp = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, g_sInfoTarget));
	set_pev(iProp, pev_classname, g_szHiderProp);
	set_pev(iProp, pev_solid, SOLID_BBOX);
	set_pev(iProp, pev_movetype, MOVETYPE_FLY);
	set_pev(iProp, pev_takedamage, DAMAGE_YES);
	set_pev(iProp, pev_health, 10000.0);
	set_pev(iProp, pev_owner, id);
	engfunc(EngFunc_SetSize, iProp, PROP_MIN, PROP_MAX);
	set_visible(iProp, 0);
	g_iProp[id] = iProp;
}

public client_disconnected(id)
{
	g_bIsAlive[id] = false;
	g_bIsConnected[id] = false;
	g_iHunterClass[id] = 0;
	g_iCurWeapon[id] = 0;
	
	if(g_iProp[id])
		remove_prop(id);
		
	remove_fake_props(id);
		
	new iEnt = g_iCamera[id];
	if(iEnt) engfunc(EngFunc_RemoveEntity, iEnt), g_iCamera[id] = 0;
		
	if(task_exists(id+TASK_HEAL))
		remove_task(id+TASK_HEAL);
		
	if(task_exists(id+TASK_SCLIP))
		remove_task(id+TASK_SCLIP);
		
	if(task_exists(id+TASK_ZOOM))
		remove_task(id+TASK_ZOOM);
}

public cmd_buy(id) 
{ 
	client_print(id, print_center, "%L", LANG_PLAYER, "CANT_BUY_WPN");
	return PLUGIN_HANDLED;
}
	
public cmd_drop(id)
{
	client_print(id, print_center, "%L", LANG_PLAYER, "CANT_DROP");
	return PLUGIN_HANDLED;
}
	
public cmd_chooseteam(id)
{
	if(!get_pcvar_num(g_CvarBlockteam) || is_user_admin(id))
	{
		if(g_iHunterClass[id])
			g_iHunterClass[id] = 0;
			
		return PLUGIN_CONTINUE;
	}
		
	static CsTeams:team;
	team = cs_get_user_team(id);
	if(team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED)
	{
		new iteam = get_new_team();
		engclient_cmd(id, g_cmdTeam[0], g_teamnum[iteam]);
		engclient_cmd(id, g_cmdTeam[2], g_classnum[random_num(0,3)]);
		if(g_iHunterClass[id])
			g_iHunterClass[id] = 0;
			
		return PLUGIN_HANDLED;
	}
	else
	{
		client_print(id, print_center, "%L", LANG_PLAYER, "CHANGE_TEAM");
		return PLUGIN_HANDLED;
	}
}

public event_TeamInfo()
{
	if(!get_pcvar_num(g_CvarBlockteam) || !g_bGameOn)
		return PLUGIN_CONTINUE;
		
	new id = read_data(1);
	new sTeam[32], iTeam;
	read_data(2, sTeam, sizeof(sTeam) - 1);
	for(new i = 0; i < 5; i++)
	{
		if(g_cTeamChars[i] == sTeam[0])
		{
			iTeam = i;
			break;
		}
	}
	
	if(g_iTeam[id] != iTeam)
	{
		g_iPlayers[g_iTeam[id]]--;
		g_iTeam[id] = iTeam;
		g_iPlayers[iTeam]++;
	}
	
	return PLUGIN_CONTINUE;
}

public camera_think(iEnt)
{
	new id = pev(iEnt, pev_owner);
	
	if(!g_bCameraOn[id])
		return;

	static Float:origin[3], Float:angle[3], Float:vBack[3], add_vec;
	pev(id, pev_origin, origin);
	pev(id, pev_v_angle, angle);

	angle_vector( angle, ANGLEVECTOR_FORWARD, vBack );

	origin[2] += 20.0;
	 
//	add_vec = 120.0;
	add_vec = get_add_vec(id, origin, vBack);
		
	origin[0] += (-vBack[0] * add_vec);
	origin[1] += (-vBack[1] * add_vec);
	origin[2] += (-vBack[2] * add_vec);

	set_pev(iEnt, pev_origin, origin);
	set_pev(iEnt, pev_angles, angle);
	    
	set_pev(iEnt, pev_nextthink, get_gametime()+ 0.01);
}

get_add_vec(id, Float:origin[3], Float:back[3])
{
	static add_vec, Float:torigin[3], Float:flFraction;
	add_vec = 5;
	
	for(new i = 20; i > 0; i--)
	{
		torigin[0] = origin[0] + (-back[0] * add_vec *i);
		torigin[1] = origin[1] + (-back[1] * add_vec *i);
		torigin[2] = origin[2] + (-back[2] * add_vec *i);
		engfunc(EngFunc_TraceLine, origin, torigin, IGNORE_MONSTERS, id, 0);
		get_tr2(0, TR_flFraction, flFraction);
		if(flFraction == 1.0)
		{
			return (add_vec*i);
		}
	}
	return 0;
}

public fwd_GameDescription() 
{ 
	new szMsg[32];
	formatex(szMsg, 31, "Saklambac Mod");
	forward_return(FMV_STRING, szMsg);
	return FMRES_SUPERCEDE;
}

public fwd_CmdStart(id, uc_handle, seed)
{
	if(!g_bIsAlive[id] || !g_bGameOn)
		return FMRES_IGNORED;
	
	static button, oldbutton;
	button = pev(id, pev_button);
	oldbutton = pev(id, pev_oldbuttons);
	
	if(g_bIsHider[id])
	{
		/*if(button & IN_ATTACK2)
		{
			set_pev(id, pev_maxspeed, 1.0);
		}
		else if(oldbutton & IN_ATTACK2)
		{
			set_pev(id, pev_maxspeed, get_pcvar_float(g_CvarHiderspeed));
		}*/
		
		new onground = pev(id, pev_flags) & FL_ONGROUND;
		if(button & IN_JUMP && !(oldbutton & IN_JUMP) && !onground && !g_iDoublejump[id])
		{
			g_iDoublejump[id] = 1;
		}
		
		if((button & IN_USE) && !(oldbutton & IN_USE))
		{
			copy_aimed_entity_model(id);
		}
		
		if((button & IN_RELOAD) && !(oldbutton & IN_RELOAD))
		{
			create_fake_prop(id);
		}
		
		new iEnt = g_iProp[id];
		if(!iEnt)
			return FMRES_IGNORED;
			
		static Float:origin[3], Float:angle[3];
		pev(id, pev_origin, origin);

		if(pev(id, pev_flags) & FL_DUCKING)
			origin[2] -= 18.0;
		else origin[2] -= 36.0;
		
		engfunc(EngFunc_SetOrigin, iEnt, origin);
		
		if(!(button & IN_ATTACK2))
		{
			pev(id, pev_v_angle, angle);
			angle[0] = 0.0;
			set_pev(iEnt, pev_angles, angle);
		}
	}
	else
	{
		static ubutton, iCurWpn;
		ubutton = get_uc(uc_handle, UC_Buttons);
		iCurWpn = g_iCurWeapon[id];
		
		if(ubutton & IN_ATTACK && ((iCurWpn == CSW_KNIFE) || (iCurWpn == CSW_XM1014)))
		{
			ubutton &= ~IN_ATTACK;
			
			
			set_uc(uc_handle, UC_Buttons, ubutton);
				
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

public fwd_UpdateClientData_Post( id, sendweapons, cd_handle )
{
    if(!g_bGameOn || !g_bIsAlive[id] || g_iCurWeapon[id] != CSW_XM1014)
        return FMRES_IGNORED;

    set_cd(cd_handle, CD_ID, 0);        
    
    return FMRES_HANDLED;
}

public fwd_Player_PreThink(id)
{
	if(!g_bGameOn || !g_bIsAlive[id] || !g_bIsHider[id])
		return FMRES_IGNORED;
		
	set_pev(id, pev_flTimeStepSound, 999);
	if(g_iDoublejump[id] == 2 && pev(id, pev_flags) & FL_ONGROUND)
		g_iDoublejump[id] = 0;
		
	show_near_prop_hint(id);
		
	return FMRES_IGNORED;
}

public fwd_Player_PostThink(id)
{
	if(!g_bGameOn || !g_bIsAlive[id] || !g_bIsHider[id])
		return FMRES_IGNORED;
		
	if(g_iDoublejump[id] == 1)
	{
		new Float:velocity[3];
		pev(id, pev_velocity, velocity);
		velocity[2] = 285.0;
		set_pev(id, pev_velocity, velocity);
		g_iDoublejump[id] = 2;
	}	
		
	return FMRES_IGNORED;
}

public fwd_Spawn(ent)
{
	if(!pev_valid(ent) || ent == g_iHostage)
	{
		return FMRES_IGNORED;
	}
	
	new szClass[32];
	pev(ent, pev_classname, szClass, 31);
	
	for(new i = 0; i < sizeof g_sRemoveEntities; i++)
	{
		if(equal(szClass, g_sRemoveEntities[i]))
		{
			engfunc(EngFunc_RemoveEntity, ent);
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

public fwd_ClientKill(id)
{
	if(!g_bGameOn)
		return FMRES_IGNORED;
		
	ph_print(id, "You are not allowed to kill urself !");
	
	return FMRES_SUPERCEDE;
}

public show_hud(id,flag)
{
	if(!g_bGameOn)
		return;
		
	static hider_count, hunter_count, color[3];
	get_player_count(hider_count, hunter_count);
	
	for(new i = 0; i < gMaxPlayers; i++)
	{
		if(!g_bIsAlive[i])
			continue;
			
		if(g_bIsHider[i])
			color = { 250, 20, 50 };
		else
		{
			color = { 30, 100, 255 };
			set_hudmessage( 0, 200, 0, -1.0, -1.0, 0, 6.0, 2.1, 0.0, 0.0, -1 );
			ShowSyncHudMsg( i, g_hudmsg[HUD_CROSSHAIR], "<+>" );
		}
			
		set_hudmessage(255, 255, 255, -1.0, 0.02, 0, _, 2.1, _, _, -1);
		ShowSyncHudMsg(i, g_hudmsg[HUD_BOARD], "Saklananlar: %i^nArayanlar: %i", hider_count, hunter_count);
	}
}

get_player_count(&hider_count, &hunter_count = 0)
{
	static iHider, iHunter, id;
	iHider = iHunter = 0;
	
	for(id = 1; id <= gMaxPlayers; id++)
	{
		if(!g_bIsAlive[id])
			continue;
			
		if(g_bIsHider[id]) iHider++;
		else iHunter++;
	}
	
	hider_count = iHider, hunter_count = iHunter;
}

public task_show_clip(taskid)
{
	new id = taskid - TASK_SCLIP;
	
	if(g_iCurWeapon[id] == CSW_KNIFE)
		return;
	
	set_dhudmessage( 250, 250, 0, 0.85, 0.96, 0, 6.0, 0.2, 0.0, 0.0 );
}

public fw_ent_think(iEnt)
{
	if(!pev_valid(iEnt))
		return;
		
	static szClassname[32];
	pev(iEnt, pev_classname, szClassname, 31);
	if(equal(szClassname, g_szPlayerCamera))
		camera_think(iEnt);
}

public fw_spawn_player_post(id)
{
	if(!g_bGameOn || !is_user_alive(id) || !cs_get_user_team(id))
		return;
		
	g_bIsAlive[id] = true;
		
	g_bIsHider[id] = cs_get_user_team(id) == CS_TEAM_T ? true : false;
	
	message_begin(MSG_ONE, gMsgHideWeapon, _, id);
	write_byte(HIDE_HUD);
	message_end();
	
	if(g_bIsHider[id])
	{
		strip_user_weapons(id);
		set_playerview(id);
		set_pev(id, pev_health, 125.0);
		set_visible(id, 0);
		
		//enable prop
		static iProp, szEntModel[64], rand_mdl;
		iProp = g_iProp[id]
		set_visible(iProp);
		rand_mdl = random_num(0, ArraySize(g_sPropsModel) - 1);
		ArrayGetString(g_sPropsModel, rand_mdl, szEntModel, charsmax(szEntModel));
		format(szEntModel, charsmax(szEntModel), "models/props/%s.mdl", szEntModel);
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_task(1.0,"ayarlar",id)
	}
}

public ayarlar(id)
{		
	if(!g_bInHideTime)
	{
		ph_print(id, "^3 %L", LANG_PLAYER, "C_CHOOSE_CLASS2");
		return PLUGIN_HANDLED;
	}
	else if(!g_bIsHider[id])
	{
		ph_print(id, "^3 Sadece Saklananlar Esya Secebilir");
		return PLUGIN_HANDLED;
	}
	else
	{

		new menu = menu_create("\yEsya Menusu^n\wMenuyu Acmak icin /esya Yazin","ayarlar2")
		menu_additem(menu,"\wKoltuk \y| \r30 HP","1",0) 
		menu_additem(menu,"\wSandalye \y| \r20 HP","2",0) 
		menu_additem(menu,"\wBilgisayar \y| \r40 HP","3",0) 
		menu_additem(menu,"\wVodka Sisesi \y| \r1 HP","4",0)
		menu_additem(menu,"\wAgac \y| \r80 HP","5",0) 
		menu_additem(menu,"\wPipetli Bardak \y| \r1 HP","6",0)
		menu_additem(menu,"\wGardrop \y| \r100 HP","7",0)
		menu_additem(menu,"\wTas \y| \r40 HP","8",0)
		menu_additem(menu,"\wVaril \y| \r70 HP","9",0)
		menu_additem(menu,"\wKlozet \y| \r50 HP","10",0)
		menu_additem(menu,"\wBira Sisesi \y| \r1 HP","11",0)
		menu_additem(menu,"\wBenzin Sisesi \y| \r10 HP","12",0)
		menu_additem(menu,"\wSu Kovasi \y| \r10 HP","13",0)
		menu_additem(menu,"\wTrafik Konisi \y| \r10 HP","14",0)
		menu_additem(menu,"\wKabine \y| \r100 HP","15",0)
		menu_additem(menu,"\wEl Arabasi \y| \r80 HP","16",0)
		menu_additem(menu,"\wKarton Kutular \y| \r70 HP","17",0)
		menu_additem(menu,"\wOfis Koltugu \y| \r40 HP","18",0)
		menu_additem(menu,"\wTabure \y| \r30 HP","19",0)
		menu_additem(menu,"\wKahve Makinesi \y| \r5 HP","20",0)
		menu_additem(menu,"\wKoltuk 2 \y| \r30 HP","21",0)
		menu_additem(menu,"\wInek \y| \r100 HP","22",0)
		menu_additem(menu,"\wKutu \y| \r30 HP","23",0)
		menu_additem(menu,"\wRadyo \y| \r20 HP","24",0)
		menu_additem(menu,"\wTekerlek \y| \r30 HP","25",0)
		menu_additem(menu,"\wOfis Masasi \y| \r50 HP","26",0)
		menu_additem(menu,"\wLavabo \y| \r50 HP","27",0)
		menu_additem(menu,"\wYangin Muslugu \y| \r30 HP","28",0)
		menu_additem(menu,"\wYangin Sondurucu \y| \r30 HP","29",0)
		menu_additem(menu,"\wPiyano \y| \r60 HP","30",0)

		menu_setprop(menu,MPROP_BACKNAME,"Geri")
		menu_setprop(menu,MPROP_NEXTNAME,"Ileri")
		menu_setprop(menu, MPROP_EXITNAME, "Menuyu Kapat");
		menu_display(id, menu, 0);
	}
	return PLUGIN_HANDLED

}
public ayarlar2(id,menu,item)
{
	if(!g_bInHideTime)
	{
		ph_print(id, "^3 %L", LANG_PLAYER, "C_CHOOSE_CLASS2");
		return PLUGIN_HANDLED;
	}
	else if(!g_bIsHider[id])
	{
		ph_print(id, "^3 Sadece Saklananlar Esya Secebilir");
		return PLUGIN_HANDLED;
	}
	if(item==MENU_EXIT)
	{
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new data[6], iName[64]
	new access, callback
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
	new key = str_to_num(data)
	switch(key)
	{
		case 1 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/3dm_sofa.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 2 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/bchair01.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 20)
		}
		case 3 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/3dm_pc3.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 40)
		}
		case 4 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/absolut.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 1)
		}
		case 5 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/ae_smallbush.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 80)
		}
		case 6 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/bsoda.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 1)
		}
		case 7 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/armoire.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 100)
		}
		case 8 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/babrock.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 40)
		}
		case 9 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/barrel_brown.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 70)
		}
		case 10 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/toilet.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 50)
		}
		case 11 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/beer_old_nazgul.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 1)
		}
		case 12 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/benzinkanister.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 10)
		}
		case 13 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/bucket.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 10)
		}
		case 14 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/buzzer_pa_kolpak.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 10)
		}
		case 15 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/cabinet.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 100)
		}
		case 16 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/cart.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 80)
		}
		case 17 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/cartons.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 70)
		}
		case 18 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/chair_office_leather.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 40)
		}
		case 19 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/chair_stool.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 20 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/coffee_maker.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 5)
		}
		case 21 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/couch3.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 22 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/cow.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 100)
		}
		case 23 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/cratedownc2.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 24 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/cvpt_radio.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 20)
		}
		case 25 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/dead_tire.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 26 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/desk_officesmall.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 50)
		}
		case 27 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/dfountain.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 50)
		}
		case 28 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/fire_hydrant.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 29 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/fireextinguisher.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 30)
		}
		case 30 : {
		static iProp, szEntModel[64]
		iProp = g_iProp[id]
		set_visible(iProp);
		format(szEntModel, charsmax(szEntModel), "models/props/flo_piano.mdl");
		engfunc(EngFunc_SetModel, iProp, szEntModel);
		set_user_health(id, 60)
		}
	}
	return PLUGIN_HANDLED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{	
	if(victim == attacker || !is_player_connected(attacker))
		return HAM_IGNORED;
		
	if(g_iCurWeapon[attacker] == CSW_SCOUT)
	{
		new mutil_dmg = g_iSniperDmg[attacker];
		
		if(mutil_dmg == 5)
			ExecuteHamB(Ham_Killed, victim, attacker, 0);
		else 
		{
			damage = mutil_dmg*20.0;
			SetHamParamFloat(4, damage);
		}
		
		g_iSniperDmg[attacker] = 0;
	}

	return HAM_IGNORED;
}

public fw_TakeDamage_post(victim)
{
	if(!g_bIsHider[victim])
		return;
		
	set_pdata_float(victim, OFFSET_PAINSHOCK, 1.0, 5) //zp code
}

public fw_prop_takedamage(ent, inflictor, attacker, Float:damage, damage_bits)
{
	if(!pev_valid(ent) || !is_player_connected(attacker))
		return HAM_IGNORED;
	
	static szClass[32];
	pev(ent, pev_classname, szClass, charsmax(szClass));
	
	if(!equal(szClass, g_szHiderProp))
	{
		if(equal(szClass, g_szFakeProp))
		{
			engfunc(EngFunc_RemoveEntity, ent);
			return HAM_SUPERCEDE;
		}
		
		return HAM_IGNORED;
	}
	
	new owner = pev(ent, pev_owner);
	
	if(!is_player_alive(owner) || !g_bIsHider[owner] || owner == attacker || g_bIsHider[attacker])
		return HAM_SUPERCEDE;
	
	set_pev(ent, pev_health, 10000.0);
	ExecuteHamB(Ham_TakeDamage, owner, inflictor, attacker, damage, damage_bits);
	
	return HAM_SUPERCEDE;
}

public cmd_fake_prop(id)
{
	create_fake_prop(id);
	return PLUGIN_HANDLED;
}

create_fake_prop(id)
{
	if(!g_bGameOn || !g_bIsAlive[id] || !g_bIsHider[id] || !g_iProp[id])
		return 0;
	
	new iLimit = get_pcvar_num(g_CvarFakeProps);
	if(iLimit > MAX_FAKE_PROPS)
		iLimit = MAX_FAKE_PROPS;
	
	if(iLimit <= 0)
	{
		client_print(id, print_center, "Fake esya kapali.");
		return 0;
	}
	
	if(g_iFakePropCount[id] >= iLimit)
	{
		client_print(id, print_center, "Fake esya hakkin bitti.");
		return 0;
	}
	
	static szModel[128];
	pev(g_iProp[id], pev_model, szModel, charsmax(szModel));
	
	if(!szModel[0])
	{
		client_print(id, print_center, "Once bir esyaya donusmelisin.");
		return 0;
	}
	
	new iFake = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, g_sInfoTarget));
	if(!pev_valid(iFake))
		return 0;
	
	set_pev(iFake, pev_classname, g_szFakeProp);
	engfunc(EngFunc_SetModel, iFake, szModel);
	set_pev(iFake, pev_owner, id);
	set_pev(iFake, pev_movetype, MOVETYPE_NONE);
	set_pev(iFake, pev_solid, SOLID_NOT);
	set_pev(iFake, pev_takedamage, DAMAGE_YES);
	set_pev(iFake, pev_health, 25.0);
	set_pev(iFake, pev_body, pev(g_iProp[id], pev_body));
	set_pev(iFake, pev_skin, pev(g_iProp[id], pev_skin));
	set_pev(iFake, pev_sequence, pev(g_iProp[id], pev_sequence));
	set_pev(iFake, pev_frame, pev(g_iProp[id], pev_frame));
	
	static Float:origin[3], Float:angles[3], Float:mins[3], Float:maxs[3];
	pev(g_iProp[id], pev_origin, origin);
	pev(g_iProp[id], pev_angles, angles);
	pev(g_iProp[id], pev_mins, mins);
	pev(g_iProp[id], pev_maxs, maxs);
	
	set_pev(iFake, pev_origin, origin);
	set_pev(iFake, pev_angles, angles);
	engfunc(EngFunc_SetSize, iFake, mins, maxs);
	
	g_iFakeProps[id][g_iFakePropCount[id]] = iFake;
	g_iFakePropCount[id]++;
	
	set_task(0.5, "solidify_fake_prop", iFake);
	client_print(id, print_center, "Fake esya birakildi. Kalan: %i", iLimit - g_iFakePropCount[id]);
	return 1;
}

public solidify_fake_prop(iFake)
{
	if(!pev_valid(iFake))
		return;
	
	static szClass[32];
	pev(iFake, pev_classname, szClass, charsmax(szClass));
	
	if(equal(szClass, g_szFakeProp))
		set_pev(iFake, pev_solid, SOLID_BBOX);
}

remove_fake_props(id)
{
	for(new i; i < MAX_FAKE_PROPS; i++)
	{
		if(pev_valid(g_iFakeProps[id][i]))
			engfunc(EngFunc_RemoveEntity, g_iFakeProps[id][i]);
		
		g_iFakeProps[id][i] = 0;
	}
	
	g_iFakePropCount[id] = 0;
}

public fw_killed_player(victim, killer, shouldgib)
{
	g_bIsAlive[victim] = false;
	
	if(g_bIsHider[victim])
	{
		set_visible(g_iProp[victim], 0);
		remove_fake_props(victim);
			
	//	set_playerview(id, 0);
		set_visible(victim);
		
		if(!g_bInHideTime)
		{
			new Float:fTime = get_gametime() - g_fGameStartTime;
			set_pev(victim, pev_frags, pev(victim, pev_frags)+fTime);
			ph_print(victim, "^1 Kazandin^3 %i^4 frag(s)^1 for surviving !", floatround(fTime));
			g_fFrags[victim] = fTime;
		}
		
		if(is_player_alive(killer) && !g_bIsHider[killer])
		{
			new Float:fCvarSpeedBoost = get_pcvar_float(g_CvarSpeedBoost);
			if(fCvarSpeedBoost && !g_bHasSpeedBoost[killer])
				give_speedboost(killer, fCvarSpeedBoost);
			
			give_frags(killer, victim);
		}

		// Ölen Saklananları CT yapar
		new players[32],inum;
		get_players(players, inum,"e","TERRORIST")
		if(inum != 1)
		{
		cs_set_user_team(victim,CS_TEAM_CT)
		set_task(1.0,"revle",victim)
		saklanan[victim] = true
		}


	}
	else
	{
		if(task_exists(victim+TASK_HEAL))
			remove_task(victim+TASK_HEAL);
			
		remove_task(victim+TASK_SCLIP);
	}
}

public revle(id)
{
	ExecuteHamB(Ham_CS_RoundRespawn, id)
}


public fw_WeaponAttack(iWpn)
{
	if(!g_bGameOn)
		return;
		
	static id, health;
	id = get_pdata_cbase(iWpn, 41, 4);
	health = get_user_health(id) - get_pcvar_num(g_CvarHpLostAmt);
	
	if(health > 0)
		set_pev(id, pev_health, float(health));
	else 
	{
		user_kill(id);
		return;
	}
	
	if(!g_bInHideTime && pev(id, pev_button) & IN_JUMP)
	{
		new Float:velocity[3];
	//	pev(id, pev_velocity, velocity);
		velocity_by_aim(id, 50, velocity)
		velocity[2] += 450.0;
		set_pev(id, pev_velocity, velocity);
	}
	
	if(g_iCurWeapon[id] == CSW_SCOUT && g_iZoomPower[id] != 0) //for sniper
	{
		g_iSniperDmg[id] = g_iZoomPower[id];
		
		new mutil_dmg = g_iSniperDmg[id];
		if(mutil_dmg == 5)
			client_print(id, print_center, "Bir atis Bir Olum");
		else client_print(id, print_center, "Zarar: %i", mutil_dmg*20);
		
		g_iZoomPower[id] = 0;
	}
}
give_speedboost(id, Float:fSpeedAdd)
{
	g_bHasSpeedBoost[id] = true;
	manage_icon(id, ICON_SPEEDBOOST);
	set_pev(id, pev_maxspeed, pev(id, pev_maxspeed)+fSpeedAdd);
	ph_print(id, "^1 %L", LANG_PLAYER, "C_GIVE_SPEEDBOOST");
}

give_frags(id, victim)
{
	new Float:fVicFrags = g_fFrags[victim];
	if(fVicFrags != 0.0)
		set_pev(id, pev_frags, pev(id, pev_frags)+fVicFrags);
}

public event_curweapon(id)
{
	if(!g_bGameOn)
		return PLUGIN_CONTINUE;
		
	message_begin(MSG_ONE, gMsgHideWeapon, _, id);
	write_byte(HIDE_HUD);
	message_end();
		
	if(g_bIsHider[id])
	{
		if(!g_bRoundEnd)
		{
			fm_strip_user_weapons(id);
			set_pev(id, pev_maxspeed, get_pcvar_float(g_CvarHiderspeed));
		}
	}
	else
	{
		new Float:fCvarSpeedBoost = get_pcvar_float(g_CvarSpeedBoost);
		
		if(g_bInHideTime)
		set_pev(id, pev_maxspeed, 1.0);
		else if(fCvarSpeedBoost && g_bHasSpeedBoost[id])
		set_pev(id, pev_maxspeed, pev(id, pev_maxspeed)+fCvarSpeedBoost);
	}
	message_begin(MSG_ONE, gMsgCrossHair, {0,0,0}, id);
	write_byte(1);
	message_end();
	return PLUGIN_CONTINUE;
}

public Event_SetFOV(id)
{
	if(read_data(1) >= 90) //zoom out
	{
		if(task_exists(id+TASK_ZOOM))
		{
			g_iZoomPower[id] = 0;
			remove_task(id+TASK_ZOOM);
		}
		
		return;
	}
		
	if(!task_exists(id+TASK_ZOOM))
	{
		task_zoom_power(id+TASK_ZOOM);
		set_task(1.0, "task_zoom_power", id+TASK_ZOOM, _, _, g_sB);
	}
}

public task_zoom_power(taskid)
{
	static id, power, color; 
	id = taskid - TASK_ZOOM;
	power = g_iZoomPower[id];
	color = 50 + power * 30;
	
	set_hudmessage(color, color, 0, -1.0, 0.75, power == 5 ? 1 : 0, _, 1.1, _, _, -1);
	ShowSyncHudMsg(id, g_hudmsg[HUD_ZOOM], "{%s%s}", g_bar[0][5 - power], g_bar[1][power]);
	
	if(power < 5)
		power++;
	
	g_iZoomPower[id] = power;
}

public heal_hp(taskid)
{
	static id;
	id = taskid - TASK_HEAL;
	manage_icon(id, ICON_BUYZONE, 0);
	set_pev(id, pev_health, float(g_iClassHealth[g_iHunterClass[id]]))
	ph_print(id, "^1 %L", LANG_PLAYER, "C_HEALED");
}

public EventNewRound()
{
	new players[32],inum;
	static Uid;
	get_players(players, inum)
	for(new i;i<inum;i++) 
	{
		Uid = players[i]
		saklanan[Uid] = false
		remove_fake_props(Uid);
	}
}
public EventRoundStart()
{
	if(!g_bGameOn)
		return;
		
	g_bRoundEnd = false;
	
	new time = g_iHideTime;
	
	for(new i = 0; i < gMaxPlayers; i++)
	{
		if(!g_bIsConnected[i] || g_bIsHider[i])
			continue;
			
		if(task_exists(i+TASK_HEAL))
			remove_task(i+TASK_HEAL);
			
		if(g_bCameraOn[i])
			set_playerview(i, 0);
			
		g_bHasSpeedBoost[i] = false;
		saklanan[i] = false
			
	/*	set_pev(i, pev_maxspeed, 1.0);
		
		message_begin(MSG_ONE, gMsgScreenFade, {0, 0, 0}, i);
		write_short(floatround(4096.0 * 1.5, floatround_round));
		write_short(floatround(4096.0 * 1.5, floatround_round));
		write_short(4096);
		write_byte(0);
		write_byte(0);
		write_byte(0);
		write_byte(200);
		message_end();*/
	}
	
	g_bInHideTime = true
	
	g_iCountdownTime = time+1;
//	set_task(time, "end_hide_time", TASK_HIDETIME);
	count_down();
	set_task(1.0, "count_down", TASK_HIDETIME, _, _, g_sA, g_iCountdownTime);
}

public count_down()
{
	g_iCountdownTime--
	
	for(new i = 0; i < gMaxPlayers; i++)
	{
		if(!g_bIsAlive[i] || g_bIsHider[i])
			continue;
			
		set_pev(i, pev_maxspeed, 1.0);
		
		message_begin(MSG_ONE, gMsgScreenFade, {0, 0, 0}, i);
		write_short(floatround(4096.0 * 1.5, floatround_round));
		write_short(floatround(4096.0 * 1.5, floatround_round));
		write_short(4096);
		write_byte(0);
		write_byte(0);
		write_byte(0);
		write_byte(150);
		message_end();
	}
	
	if(g_iCountdownTime <= 5)
	{
		client_cmd(0, "spk %s", g_CountdownSound[g_iCountdownTime]);
		
		if(!g_iCountdownTime)
		{
			end_hide_time();
			return;
		}
	}
		
	set_dhudmessage( 0, 200, 0, -1.0, 0.75, 0, 6.0, 1.0, 0.0, 0.0 );
	show_dhudmessage( 0, "Saklanma Zamani: %i", g_iCountdownTime );
}

end_hide_time()
{
	for(new i = 0; i < gMaxPlayers; i++)
	{
		if(!g_bIsAlive[i] || g_bIsHider[i])
			continue;
			
		set_pev(i, pev_maxspeed, 250.0);
		
		message_begin(MSG_ONE, gMsgScreenFade, {0, 0, 0}, i);
		write_short(0);
		write_short(0);
		write_short(4096);
		write_byte(0);
		write_byte(0);
		write_byte(0);
		write_byte(150);
		message_end();
	}
	
	g_fGameStartTime = get_gametime();
	client_cmd(0, "spk %s", g_CountdownSound[0]);
	
	set_dhudmessage( 0, 200, 0, -1.0, 0.75, 0, 6.0, 3.0, 0.0, 0.0 );
	show_dhudmessage( 0, "Sure Bitti!" );
	
	g_bInHideTime = false
}

public RestartRound()
{
	EventRoundEnd();
}

public EventRoundEnd()
{
	g_bRoundEnd = true;
	if(task_exists(TASK_HIDETIME))
		remove_task(TASK_HIDETIME);
		
	for(new iPlayer = 1; iPlayer <= gMaxPlayers; iPlayer++)
	{
		if(g_bIsConnected[iPlayer])
			remove_fake_props(iPlayer);
	}
		
	static Float:fTime, iHiderCount, winmsg[32];
	get_player_count(iHiderCount)
	
	if(iHiderCount) //hider win
	{
		formatex(winmsg, 31, "%L", LANG_PLAYER, "HIDER_WIN");
		
		for(new i = 0; i < gMaxPlayers; i++)
		{
			if(!g_bIsConnected[i])
				continue;
				
		//	add_delay_switch_team(i);
			tekrarla(i)
			set_dhudmessage(250, 20, 50, -1.0, 0.25, 0, _, 4.0);
			show_dhudmessage(i, winmsg);
		}
	}
	else 
	{
		formatex(winmsg, 31, "%L", LANG_PLAYER, "SEEKER_WIN_SWITCH");
		
		for(new i = 0; i < gMaxPlayers; i++)
		{
			if(!g_bIsConnected[i])
				continue;
				
			g_iHunterClass[i] = 0;
			add_delay_switch_team(i);
			set_dhudmessage(20, 100, 250, -1.0, 0.25, 0, _, 4.0);
			show_dhudmessage(i, winmsg);
		}
	}
	
	for(new i = 0; i < gMaxPlayers; i++)
	{
		if(!g_bIsAlive[i])
			continue;
		
		if(g_bIsHider[i])
		{
			set_visible(g_iProp[i], 0);
			set_visible(i);
			
			if(!g_bInHideTime)
			{
				fTime = get_gametime() - g_fGameStartTime;
				set_pev(i, pev_frags, pev(i, pev_frags)+fTime);
				ph_print(i, "^1 Kazandin^3 %i^4 frag(s)^1 for surviving !", floatround(fTime));
			}
			g_fFrags[i] = 0.0;
		}
		else 
		{
			manage_icon(i, ICON_BUYZONE, 0);
			manage_icon(i, ICON_SPEEDBOOST, 0);
		}
	}
}

public Event_BuyZone(id) 
{
/*	if(cs_get_user_team(id) == CS_TEAM_T)
	{
		if(buyzone)
		{
			const OFFSET_BUYZONE = 235 //268
			set_pdata_int(id, OFFSET_BUYZONE, get_pdata_int(id, OFFSET_BUYZONE) & ~(1<<0));
			return PLUGIN_HANDLED;
		}
	}*/
	if(g_bIsAlive[id] && !g_bIsHider[id] && !g_bRoundEnd && !g_bInHideTime)
	{
		new hp = get_user_health(id);
		
		if(!read_data(1))
		{
			if(task_exists(id+TASK_HEAL))
			{
				client_print(id, print_center, "%L", LANG_PLAYER, "STOP_HEAL");
				manage_icon(id, ICON_BUYZONE, 0);
				remove_task(id+TASK_HEAL);
				manage_bar(id, 0)
				ClearSyncHud(id, g_hudmsg[HUD_OBJ])
			}
		}
		else if(hp < g_iClassHealth[g_iHunterClass[id]] && !task_exists(id+TASK_HEAL))
		{
			client_print(id, print_center, "%L", LANG_PLAYER, "HEALING");
			new time = get_pcvar_num(g_CvarHealtime);
			set_task(float(time), "heal_hp", id+TASK_HEAL);
			manage_icon(id, ICON_BUYZONE);
			manage_bar(id, time)
			set_hudmessage(200, 200, 0, -1.0, -1.0, 0, 6.0, float(time), 0.0, 0.0, -1);
			ShowSyncHudMsg(id, g_hudmsg[HUD_OBJ], "CAN DOLUYOR >>");
		}
	}
	
	return PLUGIN_CONTINUE;
}

public msg_textmsg(msgid, dest, id)
{
	if(!g_bGameOn || get_msg_arg_int(1) != 4)
		return PLUGIN_CONTINUE;
	
	static txtmsg[25];
	get_msg_arg_string(2, txtmsg, 24);
	
	if(equal(txtmsg[1], g_sMsgWins[0]) || equal(txtmsg[1], g_sMsgWins[1]) || equal(txtmsg[1], g_sMsgWins[2]))
	{
		set_msg_arg_string(2, g_sBlank);
	}
	else if(equal(txtmsg[1], g_sCommandNotAvailable))
		return PLUGIN_HANDLED;
		
	return PLUGIN_CONTINUE;
}


public tekrarla(id)
{
	if(saklanan[id])
		cs_set_user_team(id,CS_TEAM_T)
}

add_delay_switch_team(id)
{
	new const szTaskChangeTeam[32] = "change_team";
	switch(id)
	{
		case 1..7: set_task( 0.1, szTaskChangeTeam, id );
		case 8..15: set_task( 0.5, szTaskChangeTeam, id );
		case 16..23: set_task( 1.0, szTaskChangeTeam, id );
		case 24..32: set_task( 1.5, szTaskChangeTeam, id );
	}
}

public change_team(id)
{
	if(!is_user_bot(id))
	{
	cs_set_user_team(id, g_bIsHider[id] ? CS_TEAM_CT : CS_TEAM_T);
	g_bIsHider[id] = (g_bIsHider[id] ? false : true);

	if(saklanan[id])
		cs_set_user_team(id,CS_TEAM_CT)
	}
}

public event_touch_weapon(iEnt, id)
	return HAM_SUPERCEDE;
	
public msg_weaponpickup(msgid, dest, id)
	return PLUGIN_HANDLED;

public msg_ammopickup(msgid, dest, id)
	return PLUGIN_HANDLED;

copy_aimed_entity_model(id)
{
	if(!g_bIsHider[id] || !g_iProp[id])
		return 0;
	
	new Float:fGameTime = get_gametime();
	if(g_fNextPropUse[id] > fGameTime)
		return 0;
	
	g_fNextPropUse[id] = fGameTime + 0.35;
	
	new iTarget = find_prop_target(id);
	
	if(!iTarget)
	{
		client_print(id, print_center, "Esyaya yaklasip E'ye bas.");
		return 0;
	}
	
	apply_entity_model_to_prop(id, iTarget);
	client_print(id, print_center, "Esyaya donustun.");
	return 1;
}

apply_entity_model_to_prop(id, iTarget)
{
	static szClass[32], szModel[128];
	pev(iTarget, pev_classname, szClass, charsmax(szClass));
	pev(iTarget, pev_model, szModel, charsmax(szModel));
	
	if(!szModel[0] || equal(szClass, g_szHiderProp) || equal(szClass, g_szPlayerCamera))
		return 0;
	
	if(szModel[0] != '*' && containi(szModel, ".mdl") == -1)
		return 0;
	
	new iProp = g_iProp[id];
	set_visible(iProp);
	engfunc(EngFunc_SetModel, iProp, szModel);
	set_pev(iProp, pev_body, pev(iTarget, pev_body));
	set_pev(iProp, pev_skin, pev(iTarget, pev_skin));
	set_pev(iProp, pev_sequence, pev(iTarget, pev_sequence));
	set_pev(iProp, pev_frame, pev(iTarget, pev_frame));
	set_prop_size_from_target(iProp, iTarget);
	
	return 1;
}

find_prop_target(id)
{
	new iTraceTarget = trace_prop_target(id);
	if(is_valid_prop_target(id, iTraceTarget))
		return iTraceTarget;
	
	new iTarget, iBody;
	get_user_aiming(id, iTarget, iBody, 220);
	
	if(is_valid_prop_target(id, iTarget))
		return iTarget;
	
	static Float:origin[3], Float:entOrigin[3];
	pev(id, pev_origin, origin);
	
	new iEnt = -1, iBest, Float:fBestDist = 999999.0, Float:fDist;
	while((iEnt = engfunc(EngFunc_FindEntityInSphere, iEnt, origin, 140.0)) > 0)
	{
		if(!is_valid_prop_target(id, iEnt))
			continue;
		
		pev(iEnt, pev_origin, entOrigin);
		fDist = get_distance_f(origin, entOrigin);
		
		if(fDist < fBestDist)
		{
			fBestDist = fDist;
			iBest = iEnt;
		}
	}
	
	return iBest;
}

trace_prop_target(id)
{
	static Float:start[3], Float:viewOfs[3], Float:angles[3], Float:fwdVec[3], Float:traceEnd[3];
	pev(id, pev_origin, start);
	pev(id, pev_view_ofs, viewOfs);
	pev(id, pev_v_angle, angles);
	
	start[0] += viewOfs[0];
	start[1] += viewOfs[1];
	start[2] += viewOfs[2];
	
	angle_vector(angles, ANGLEVECTOR_FORWARD, fwdVec);
	
	traceEnd[0] = start[0] + fwdVec[0] * 260.0;
	traceEnd[1] = start[1] + fwdVec[1] * 260.0;
	traceEnd[2] = start[2] + fwdVec[2] * 260.0;
	
	engfunc(EngFunc_TraceLine, start, traceEnd, DONT_IGNORE_MONSTERS, id, 0);
	
	new iHit = get_tr2(0, TR_pHit);
	if(is_valid_prop_target(id, iHit))
		return iHit;
	
	static Float:hitOrigin[3], Float:entOrigin[3];
	get_tr2(0, TR_vecEndPos, hitOrigin);
	
	new iEnt = -1, iBest, Float:fBestDist = 999999.0, Float:fDist;
	while((iEnt = engfunc(EngFunc_FindEntityInSphere, iEnt, hitOrigin, 64.0)) > 0)
	{
		if(!is_valid_prop_target(id, iEnt))
			continue;
		
		pev(iEnt, pev_origin, entOrigin);
		fDist = get_distance_f(hitOrigin, entOrigin);
		
		if(fDist < fBestDist)
		{
			fBestDist = fDist;
			iBest = iEnt;
		}
	}
	
	return iBest;
}

is_valid_prop_target(id, iTarget)
{
	if(!pev_valid(iTarget) || iTarget == id || iTarget == g_iProp[id] || iTarget == g_iCamera[id])
		return 0;
	
	if(1 <= iTarget <= gMaxPlayers)
		return 0;
	
	static szClass[32], szModel[128];
	pev(iTarget, pev_classname, szClass, charsmax(szClass));
	pev(iTarget, pev_model, szModel, charsmax(szModel));
	
	if(!szModel[0] || equal(szClass, g_szHiderProp) || equal(szClass, g_szPlayerCamera) || equal(szClass, g_szFakeProp))
		return 0;
	
	if(szModel[0] != '*' && containi(szModel, ".mdl") == -1)
		return 0;
	
	return 1;
}

show_near_prop_hint(id)
{
	new Float:fGameTime = get_gametime();
	if(g_fNextPropHint[id] > fGameTime)
		return;
	
	g_fNextPropHint[id] = fGameTime + 0.35;
	
	if(find_prop_target(id))
	{
		set_hudmessage(0, 200, 0, -1.0, 0.63, 0, 0.0, 0.45, 0.0, 0.0, -1);
		ShowSyncHudMsg(id, g_hudmsg[HUD_OBJ], "E bas - Esyaya donus");
	}
	else
	{
		ClearSyncHud(id, g_hudmsg[HUD_OBJ]);
	}
}

set_prop_size_from_target(iProp, iTarget)
{
	static Float:mins[3], Float:maxs[3];
	pev(iTarget, pev_mins, mins);
	pev(iTarget, pev_maxs, maxs);
	
	if(maxs[0] <= mins[0] || maxs[1] <= mins[1] || maxs[2] <= mins[2])
	{
		engfunc(EngFunc_SetSize, iProp, PROP_MIN, PROP_MAX);
		return;
	}
	
	if(floatabs(mins[0]) > 80.0 || floatabs(mins[1]) > 80.0 || floatabs(mins[2]) > 100.0 ||
		floatabs(maxs[0]) > 80.0 || floatabs(maxs[1]) > 80.0 || floatabs(maxs[2]) > 120.0)
	{
		engfunc(EngFunc_SetSize, iProp, PROP_MIN, PROP_MAX);
		return;
	}
	
	engfunc(EngFunc_SetSize, iProp, mins, maxs);
}
	
ph_print(const id, const message[], any:...) 
{
	new szMessage[192];
	vformat(szMessage, 191, message, 3);
	
	replace_all(szMessage, 191, "\g", "^4"); // Green Color
	replace_all(szMessage, 191, "\y", "^1"); // Default Color
	replace_all(szMessage, 191, "\t", "^3"); // Team Color
   
	message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, gMsgSayText, _, id);
	write_byte(id ? id : 1);
	write_string(szMessage);
	message_end();
}

stock bacon_give_weapon(index, weapon[])
{
	if(!equal(weapon, "weapon_", 7))
		return 0;

	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon));
	if(!pev_valid(iEnt))
		return 0;

	new Float:origin[3];
	pev(index, pev_origin, origin);
	set_pev(iEnt, pev_origin, origin);
	set_pev(iEnt, pev_spawnflags, pev(iEnt, pev_spawnflags) | SF_NORESPAWN);
	dllfunc(DLLFunc_Spawn, iEnt);

	new save = pev(iEnt, pev_solid);
	dllfunc(DLLFunc_Touch, iEnt, index);
	if(pev(iEnt, pev_solid) != save)
		return iEnt;

	engfunc(EngFunc_RemoveEntity, iEnt);

	return -1;
}

stock fm_strip_user_weapons(index) 
{
	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"));
	if (!pev_valid(iEnt))
		return 0;

	dllfunc(DLLFunc_Spawn, iEnt);
	dllfunc(DLLFunc_Use, iEnt, index);
	engfunc(EngFunc_RemoveEntity, iEnt);

	return 1;
}

stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0)
{
	new strtype[11] = "classname", iEnt = index
	switch (jghgtype) 
	{
		case 1: strtype = "target"
		case 2: strtype = "targetname"
	}
	
	while ((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, strtype, classname)) && pev(iEnt, pev_owner) != owner) {}
	
	return iEnt
}

get_new_team()
{
	new iTCount = g_iPlayers[TEAM_T];
	new iCTCount = g_iPlayers[TEAM_CT];
	if(iTCount < iCTCount)
		return TEAM_T;
	else if(iTCount > iCTCount)
		return TEAM_CT;
	else
		return random_num(TEAM_T, TEAM_CT);
}

set_playerview(id, mode = 1)
{
	if(mode)
	{
		new iEnt = g_iCamera[id];
		engfunc(EngFunc_SetView, id, iEnt);
		g_bCameraOn[id] = true;
	//	set_pev(iEnt, pev_nextthink, get_gametime()); 
		camera_think(iEnt);
	}
	else //disable camera
	{
		g_bCameraOn[id] = false;
		engfunc(EngFunc_SetView, id, id);
	}
}
/*
make_DeathMsg(killer, victim, headshot, const weapon[])
{
	message_begin(MSG_ALL, gMsgDeathmsg, {0,0,0}, 0);
	write_byte(killer);
	write_byte(victim);
	write_byte(headshot);
	write_string(weapon);
	message_end();

	return 1;
}

make_silentkill(id)
{
	static msgid, msgblock;
	msgid = gMsgDeathmsg;
	msgblock = get_msg_block(msgid);
	set_msg_block(msgid, BLOCK_ONCE);	
	user_kill(id, 1);
	set_msg_block(msgid, msgblock);

	return 1;
}*/

manage_icon(id, icon_kind, status = 1)
{
	message_begin(MSG_ONE, gMsgStatusIcon, _, id);
	write_byte(status); // status (0=hide, 1=show, 2=flash)
	if(icon_kind) write_string("plus"); // sprite name
	else write_string("dmg_rad");
	write_byte(0); // red
	write_byte(200); // green
	write_byte(0); // blue
	message_end();
}

manage_bar(id, time)
{
	message_begin(MSG_ONE_UNRELIABLE, gMsgBarTime, _, id)
	write_short(time)
	message_end()
}

set_visible(iEnt, VISIBLE = 1)
{
	set_pev(iEnt, pev_effects, VISIBLE ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW);
	
	if(pev_valid(iEnt))
	{
		static szClass[32];
		pev(iEnt, pev_classname, szClass, charsmax(szClass));
		
		if(equal(szClass, g_szHiderProp))
		{
			set_pev(iEnt, pev_solid, VISIBLE ? SOLID_BBOX : SOLID_NOT);
			set_pev(iEnt, pev_takedamage, VISIBLE ? DAMAGE_YES : DAMAGE_NO);
			set_pev(iEnt, pev_health, 10000.0);
		}
	}
}

stock ColorChat(const id, const input[], any:...)
{
    new count = 1, players[32];
    static msg[191];
    vformat(msg, 190, input, 3);
    
    replace_all(msg, 190, "!g", "^x04"); // Green Color
    replace_all(msg, 190, "!n", "^x01"); // Default Color
    replace_all(msg, 190, "!t", "^x03"); // Team Color
    
    client_print_color(id, id, msg);
}
	
