// ****************************************************************************
// GoreBlood v1.0 , for Counter-Strike: Source
//
// * Developers:
//    - [HC]HUNTER
//
// * Description:
//    - A realistic health slow down
//
// * Install instructions:
//      1. Install Mattie's EventScripts v1.1
//           http://www.mattie.info/cs/forums/viewtopic.php?t=4844
//
//      2. Install Mattie's ES_TOOLS
//           http://forums.mattie.info/cs/forums/viewtopic.php?t=6072
//
//      3. Copy all of this script code into a new textfile:
//          cstrike/addons/eventscripts/goreblood/es_goreblood.txt
//
//      4. Add the following line somewhere in autoexec.cfg:
//          es_load goreblood
//
//      5. Configure plugin BELOW THIS LINE
//
// ****************************************************************************


//--- CONFIG BLOCK ---    --------------------------

block config
{

	//  (eng  rus)
	gb_lang rus


	//      
	// 0- , 1-
	gb_announce 1

	//  ,     ,   
	// 0- , 1-
	gb_helptext 1


	//   :
	// gb_healths -        ,     90
	// gb_healthb -   4    1%,   ,     20%
	// gb_healthd -   
	gb_healths 50
	gb_healthb 30
	gb_healthd 9


	//      :
	// 0 -   
	// 1 -     gb_healths
	// 2 -     gb_healthb
	// 3 -      ,    gb_healthb
	//
	// : 
	//        GodeMod   SourceMM,    
	//         (  ),     1
	gb_bloodtrace 1


	//    
	// 0- , 1-
	// gb_sounds -  ,    gb_healths
	// gb_soundb -   ,    
	// gb_soundd -   ,     
	gb_sounds 1
	gb_soundb 1
	gb_soundd 1

	//    ,       !
	// 0- , 1-
	gb_sdohnisound 1

}


// ****************************************************************************
// WARNING!  ONLY ADVANCED USERS BELOW THIS LINE!
// !     !
// ****************************************************************************

//--- LOADING BLOCK -----------------------------------------------------------

block load
{
	es_log Loading GoreBlood script...

	es_xsetinfo gb_lang     0
	es_xsetinfo gb_announce 0
	es_xsetinfo gb_helptext 0

	es_setinfo gb_healths  0
	es_setinfo gb_healthb  0
	es_setinfo gb_healthd  0

	es_xsetinfo gb_bloodtrace 0

	es_xsetinfo gb_sounds  0
	es_xsetinfo gb_soundb  0
	es_xsetinfo gb_soundd  0
	es_xsetinfo gb_sdohnisound  0

	es_setinfo oldnoisy server_var(eventscripts_noisy) 
	es_setinfo eventscripts_noisy 1 

	es_doblock goreblood/config


	if (server_var(gb_healths) greaterthan "90")   then es_setinfo gb_healths 90
	if (server_var(gb_healthb) notgreaterthan "5") then es_setinfo gb_healthb 5
	if (server_var(gb_healthd) notgreaterthan "0") then es_setinfo gb_healthd 2


	es_setinfo gb_health_temp 0
	es_xsetinfo b_temp2 0
	es_xsetinfo b_temp3 0
	es_xsetinfo b_exec 0

	es_createplayerlist b_list
	es_setinfo b_temp 0
	es_foreachkey b_temp in b_list "es_keysetvalue b_list server_var(b_temp) bleeding 0;es_keysetvalue b_list server_var(b_temp) executed 1;es_keysetvalue b_list server_var(b_temp) sound__d 0"


	es_xkeygroupdelete goreblood_lang
	es_keygroupload goreblood_lang |goreblood
	es_setinfo gb_message_text 0
	es_setinfo gb_message_help 0
	if (server_var(gb_lang) == eng) then es_keygetvalue gb_message_text goreblood_lang eng announce
					else es_keygetvalue gb_message_text goreblood_lang rus announce
	if (server_var(gb_lang) == eng) then es_keygetvalue gb_message_help goreblood_lang eng helptext
					else es_keygetvalue gb_message_help goreblood_lang rus helptext

	if (server_var(gb_sdohnisound) == 1) do
	{
		if (server_var(gb_lang) == eng) then es_keygetvalue gb_sdohnisound goreblood_lang eng sound_d
						else es_keygetvalue gb_sdohnisound goreblood_lang rus sound_d
		es_format b_temp3 "sound/%1" server_var(gb_sdohnisound)
		es downloadable server_var(b_temp3)
	}

	es_xkeygroupdelete goreblood_lang


	es_log Script GoreBlood successfully loaded !
}



//--- UNLOADING BLOCK ---------------------------------------------------------

block unload 
{ 
	es_keygroupdelete b_list
	es_setinfo eventscripts_noisy server_var(oldnoisy) 
} 

//-----------------------------------------------------------------------------


event es_map_start 
{
	es_xkeygroupdelete b_list

	es_createplayerlist b_list
	es_setinfo b_temp 0
	es_foreachkey b_temp in b_list "es_keysetvalue b_list server_var(b_temp) bleeding 0;es_keysetvalue b_list server_var(b_temp) executed 1;es_keysetvalue b_list server_var(b_temp) sound__d 0"

	if (server_var(gb_sdohnisound) != 0) do
	{
		es_format b_temp3 "sound/%1" server_var(gb_sdohnisound)
		es downloadable server_var(b_temp3)
	}
} 


event round_start
{
	es_delayed 0.5 es_xdoblock goreblood/maincycle
}

//-----------------------------------------------------------------------------



event player_activate
{
	es_keycreate   b_list event_var(userid)
	es_keysetvalue b_list event_var(userid) bleeding 0
	es_keysetvalue b_list event_var(userid) executed 1
	es_keysetvalue b_list event_var(userid) sound__d 0
}


event player_connect
{
	es_keycreate   b_list event_var(userid)
	es_keysetvalue b_list event_var(userid) bleeding 0
	es_keysetvalue b_list event_var(userid) executed 1
	es_keysetvalue b_list event_var(userid) sound__d 0
}


event player_disconnect
{
	es_keydelete b_list event_var(userid)
}


event player_spawn
{
	es_keysetvalue b_list event_var(userid) bleeding 0
	es_keysetvalue b_list event_var(userid) executed 1
	es_keysetvalue b_list event_var(userid) sound__d 0

	es_give event_var(userid) player_speedmod 
	es_fire event_var(userid) player_speedmod ModifySpeed 1.0

	if (event_var(es_steamid) != "BOT") do
	{
		if (server_var(gb_announce) == "1") then es_menu 10 event_var(userid) server_var(gb_message_text)
	}
}


event player_death
{
	es_setplayerprop event_var(userid) "CCSPlayer.baseclass.m_iHealth" -1
	es_keysetvalue b_list event_var(userid) bleeding 0
	es_keysetvalue b_list event_var(userid) executed 1
	es_keysetvalue b_list event_var(userid) sound__d 0

	es_give event_var(userid) player_speedmod 
	es_fire event_var(userid) player_speedmod ModifySpeed 1.0

	if (event_var(es_steamid) != "BOT") do
	{
		if (event_var(headshot) == 1) do 
		{ 
			es_cexec event_var(userid) r_screenoverlay effects/mh_blood1.vmt 
			es_delayed 0.1 es_cexec event_var(userid) r_screenoverlay effects/mh_blood2.vmt 
			es_delayed 0.3 es_cexec event_var(userid) r_screenoverlay effects/mh_blood3.vmt 
			es_delayed 0.6 es_cexec event_var(userid) r_screenoverlay 0
		}
	}
}


event player_hurt
{
	es_getplayerprop gb_health_temp event_var(userid) "CCSPlayer.baseclass.m_iHealth" 

	if (server_var(gb_health_temp) notgreaterthan server_var(gb_healthd) ) do
	{
		es_give event_var(userid) player_speedmod
		es_fire event_var(userid) player_speedmod ModifySpeed 0.8
		es_keysetvalue b_list event_var(userid) bleeding 3
		es_keysetvalue b_list event_var(userid) executed 0
		if (server_var(gb_health_temp) > 1) do
		{
			if (server_var(gb_helptext) == 1) then es_tell event_var(attacker) #multi #default event_var(es_username) #green server_var(gb_message_help) server_var(gb_health_temp) % 
		}
		if (server_var(gb_sdohnisound) != 0) do
		{
			es_keygetvalue b_temp3 b_list event_var(userid) sound__d
			if (server_var(b_temp3) == "0") do
			{
				//es_delayed 0.2 es_emitsound player event_var(attacker) server_var(gb_sdohnisound) 1.0 0.8
				es_delayed 0.2 es_xcexec event_var(attacker) playgamesound server_var(gb_sdohnisound)
				es_keysetvalue b_list event_var(userid) sound__d 1
			}
		}
	}
	else do
	{
		if (server_var(gb_health_temp) notgreaterthan server_var(gb_healthb) ) do
		{
			es_give event_var(userid) player_speedmod 
			es_fire event_var(userid) player_speedmod ModifySpeed 0.8
			es_keysetvalue b_list event_var(userid) bleeding 2
			es_keysetvalue b_list event_var(userid) executed 0
			if (server_var(gb_helptext) == 1) then es_tell event_var(attacker) #multi #default event_var(es_username) #green server_var(gb_message_help) server_var(gb_health_temp) % 
		}
		else do
		{
			if (server_var(gb_health_temp) notgreaterthan server_var(gb_healths) ) do
			{
				es_keysetvalue b_list event_var(userid) bleeding 1
				es_keysetvalue b_list event_var(userid) executed 0
			} 
		}
	}

}


event player_footstep
{
	if (server_var(gb_bloodtrace) greaterthan "2") do 
	{
		es_keygetvalue b_temp2 b_list event_var(userid) bleeding
		if (server_var(b_temp2) greaterthan "1") do
		{
			es_give event_var(userid) env_blood
			es_fire event_var(userid) env_blood addoutput "color 0"
			es_fire event_var(userid) env_blood addoutput "spawnflags 12"
			es_fire event_var(userid) env_blood addoutput "spraydir 0 0 -90"
			es_fire event_var(userid) env_blood addoutput "amount 1"
			es_fire event_var(userid) env_blood emitblood
		}
	}
}

//-----------------------------------------------------------------------------



block maincycle
{
	es_foreachkey gb_userid in b_list "es_xdoblock goreblood/bleed"
	es_delayed 0.2 es_xdoblock goreblood/maincycle
}


block bleed
{
	es_getplayerprop gb_health_temp server_var(gb_userid) "CCSPlayer.baseclass.m_iHealth"

	es_keygetvalue b_temp2 b_list server_var(gb_userid) bleeding
	es_keygetvalue b_exec  b_list server_var(gb_userid) executed

	//
	//es_msg #green ID = server_var(gb_userid) | Health = server_var(gb_health_temp) % | bleed = server_var(b_temp2) / exec = server_var(b_exec)

	if (server_var(b_exec) == "0") do 
	{

		if (server_var(b_temp2) == "1") do
		{
			if (server_var(gb_bloodtrace) greaterthan "0") do 
			{
				es_give server_var(gb_userid) env_blood
				es_fire server_var(gb_userid) env_blood addoutput "color 0"
				es_fire server_var(gb_userid) env_blood addoutput "spawnflags 12"
				es_fire server_var(gb_userid) env_blood addoutput "spraydir 0 0 -90"
				es_fire server_var(gb_userid) env_blood addoutput "amount 1"
				es_fire server_var(gb_userid) env_blood emitblood
			}
			if (server_var(gb_sounds) == "1") then es_xcexec server_var(gb_userid) playgamesound Player.Death //player/breathe1.wav
			es_keysetvalue b_list server_var(gb_userid) executed 1
			es_delayed 6.0 es_keysetvalue b_list server_var(gb_userid) executed 0
		}


		if (server_var(b_temp2) == "2") do
		{
			if (server_var(gb_bloodtrace) greaterthan "1") do 
			{
				es_give server_var(gb_userid) env_blood
				es_fire server_var(gb_userid) env_blood addoutput "color 0"
				es_fire server_var(gb_userid) env_blood addoutput "spawnflags 12"
				es_fire server_var(gb_userid) env_blood addoutput "spraydir 0 0 -90"
				es_fire server_var(gb_userid) env_blood addoutput "amount 1"
				es_fire server_var(gb_userid) env_blood emitblood
			}

			es_math gb_health_temp - 1
			es_setinfo b_temp4 server_var(gb_health_temp)
			if (server_var(gb_health_temp) greaterthan "0") do
			{
				if (server_var(gb_soundb) == "1") then es_xcexec server_var(gb_userid) playgamesound Player.Death
				es_setplayerprop server_var(gb_userid) "CCSPlayer.baseclass.m_iHealth" server_var(b_temp4)
				if (server_var(gb_health_temp) notgreaterthan server_var(gb_healthd)) do
												      { 
													 es_keysetvalue b_list server_var(gb_userid) bleeding 3
													 es_keysetvalue b_list server_var(gb_userid) executed 0
													 es_xdoblock goreblood/bleed
												      }
			}

			if (server_var(gb_health_temp) notgreaterthan "0") do
									   {
									      es_keysetvalue b_list server_var(gb_userid) bleeding 0
									      es_keysetvalue b_list server_var(gb_userid) executed 1
									      es_keysetvalue b_list server_var(gb_userid) sound__d 1
									      es_give server_var(gb_userid) player_speedmod 
									      es_fire server_var(gb_userid) player_speedmod ModifySpeed 1.0
									      es_sexec server_var(gb_userid) kill
									   }
			es_keysetvalue b_list server_var(gb_userid) executed 1
			es_delayed 4.3 es_keysetvalue b_list server_var(gb_userid) executed 0
		}


		if (server_var(b_temp2) == "3") do
		{
			if (server_var(gb_bloodtrace) greaterthan "1") do 
			{
				es_give server_var(gb_userid) env_blood
				es_fire server_var(gb_userid) env_blood addoutput "color 0"
				es_fire server_var(gb_userid) env_blood addoutput "spawnflags 12"
				es_fire server_var(gb_userid) env_blood addoutput "spraydir 0 0 -90"
				es_fire server_var(gb_userid) env_blood addoutput "amount 1"
				es_fire server_var(gb_userid) env_blood emitblood
			}

			es_math gb_health_temp - 1
			if (server_var(gb_health_temp) greaterthan "0") do
			{
				if (server_var(gb_soundd) == "1") then es_xcexec server_var(gb_userid) playgamesound Player.FallDamage
				es_setplayerprop server_var(gb_userid) "CCSPlayer.baseclass.m_iHealth" server_var(gb_health_temp)
			}

			if (server_var(gb_health_temp) notgreaterthan "0") do
									   { 
									      es_keysetvalue b_list server_var(gb_userid) bleeding 0
									      es_keysetvalue b_list server_var(gb_userid) executed 1
									      es_keysetvalue b_list server_var(gb_userid) sound__d 1
									      es_give server_var(gb_userid) player_speedmod 
									      es_fire server_var(gb_userid) player_speedmod ModifySpeed 1.0
									      es_sexec server_var(gb_userid) kill
									   }
			es_xsetinfo b_temp3 1
			es_xsetinfo b_temp2 1
			es_math b_temp3 / server_var(gb_health_temp)
			es_math b_temp2 - b_temp3

			es_keysetvalue b_list server_var(gb_userid) executed 1
			es_delayed server_var(b_temp2) es_keysetvalue b_list server_var(gb_userid) executed 0
		}
	}

}
