﻿//Redie v1.0 
//Written by MBchrono
//Wonder's code was used to start

////////////////////////////////////////////////////////
// Модифицировано ATAMAH'ом (ICQ: 305-839) /////////////
// Переписал все взаимодействие с внешним миром, ///////
// добавил эффект дыма для призрака ////////////////////
////////////////////////////////////////////////////////
// Modified by ATAMAH (ICQ: 305-839) ///////////////////
////////////////////////////////////////////////////////

block load
{
	es_xsetinfo redie v1.3
	es_xmakepublic redie

	es_xset language 0
	es_xset cloud_effect 0
	es_xset ghost_speed 0
	es_xset ghost_grav 0
	es_xset force_d2g 0
	es_mexec ../addons/eventscripts/redie/redie.cfg

	es_xset load_msg 0
	es_xset unload_msg 0
	es_xset advert_msg 0
	es_xset err_end_msg 0
	es_xset err_alive_msg 0
	es_xset err_already_msg 0
	es_xset dead_msg 0
	es_xset ghosts_msg 0
	es_xset youre_ghost_msg 0
	es_xset err_end_msg_2 0
	es_xset youre_spect_msg 0
	es_xset err_alive_msg_2 0
	es_xset err_already_2 0
	es_xset spect_msg 0

	es_xset loadformat 0
	es_format loadformat "../addons/eventscripts/redie/%1.lng" server_var(language)
	es es_mexec server_var(loadformat)

	es_xsetinfo redieplayer 0
	es_xsetinfo exists 0
	es_xsetinfo dead 0
	es_xsetinfo checkbomb 0
	es_xsetinfo x 0
	es_xsetinfo y 0
	es_xsetinfo z 0
	//es_xkeygroupdelete redie
	es_xkeygroupcreate redie

	es_xset ghosts_count 0

	es_xset redie_advert_rc 0

	es_keygroupcreate death_loc

	foreach player redieplayer #human "es_xdoblock redie/setkeys"
	es es_xmsg #multi #lightgreen[ReDie]#default server_var(load_msg)

	es es_xset eventscripts_noisy server_var(cloud_effect)

	es_xdoblock redie/count_msg
}

block unload
{
	es_xkeygroupdelete redie
	es_keygroupdelete death_loc
	es es_xmsg #multi #lightgreen[ReDie]#default server_var(unload_msg)

	es eventscripts_noisy 0
}

block setkeys
{
	es es_xkeycreate redie server_var(redieplayer)
	es es_xkeysetvalue redie server_var(redieplayer) dead 0 
}

block count_msg
{
	foreach player redieplayer #human "es_xdoblock redie/check_and_tell"
	es_delayed 1 es_xdoblock redie/count_msg
}

block check_and_tell
{
	es_xset redie_flag 0
	es_xset msg_format 0
	es es_xkeygetvalue redie_flag redie server_var(redieplayer) dead
	
	ifx true(redie_flag) do
	{
		es_format msg_format server_var(ghosts_msg) server_var(ghosts_count)
		es usermsg hudhint server_var(redieplayer) server_var(msg_format)
	}
}

event player_activate
{
	es_xsetinfo exists 0	
	es es_xexists exists key redie event_var(userid)		
	es es_xif (server_var(exists) == 0) do
	{
		if ("BOT" notin event_var(es_steamid)) do
		{
			es es_xkeycreate redie event_var(userid)
			es es_xkeysetvalue redie event_var(userid) dead 0
		} 
	}
	else do
	{
		if ("BOT" notin event_var(es_steamid)) do
		{
			es es_xkeysetvalue redie event_var(userid) dead 0
		}
	}
}

event player_disconnect
{
	es_xsetinfo exists 0	
	es es_xexists exists key redie event_var(userid)		
	es es_xif (server_var(exists) == 1) do
	{
		es es_xkeydelete redie event_var(userid)
	}	
}

event bomb_begindefuse
{
	es_xsetinfo exists 0	

	es es_xexists exists key redie event_var(userid)
		
	es es_xif (server_var(exists) == 1) do
	{
		es_xsetinfo dead 0

		es es_xkeygetvalue dead redie event_var(userid) dead

		es es_xif (server_var(dead) == 1) do
		{
			es_setplayerprop event_var(userid) "CCSPlayer.baseclass.baseclass.baseclass.baseclass.baseclass.baseclass.m_iTeamNum" 2
			es_delayed 1 es_setplayerprop event_var(userid) "CCSPlayer.baseclass.baseclass.baseclass.baseclass.baseclass.baseclass.m_iTeamNum" 3
		}
	}
}

event round_end
{
	es_xdelayed 2 foreach player redieplayer #human "es_xdoblock redie/resetkeys"
	es_xset disable_redie 1
}

block resetkeys
{
	es es_xkeygetvalue dead redie server_var(redieplayer) dead
	if (server_var(dead) == 1) do
	{
		es es_xkeysetvalue redie server_var(redieplayer) dead 2

		es_xsetinfo playermoney 0

		es_keygetvalue playermoney death_loc server_var(redieplayer) money_val

		es playerset cash server_var(redieplayer) server_var(playermoney)
	}
}

event round_start
{
	es_xset ghosts_count 0

	ifx false(force_d2g) do
	{ 
		es_math redie_advert_rc + 1

		if (server_var(redie_advert_rc) > 4) do
		{
			es_xset redie_advert_rc 0
			es es_xmsg #multi #lightgreen[ReDie]#default server_var(advert_msg)
		}
	}
	
	es_xset disable_redie 0
	
	es_keygroupdelete death_loc
	es_keygroupcreate death_loc

	es_xset each_player 0

	foreach player each_player #human "es est_SetGravity server_var(each_player) 1"
}

event player_say
{
	if (event_var(es_userteam) > 1) do
	{
		ifx false(force_d2g) do
		{
		
			es es_xif (event_var(text) == !redie) do
			{
				es es_xgetplayerprop dead event_var(userid) "CCSPlayer.baseclass.pl.deadflag"

				es es_xif (server_var(dead) == 1) do
				{
					if (server_var(disable_redie) == 0) do
					{
						es es_xkeysetvalue redie event_var(userid) dead 1
						es est_Spawn event_var(userid)
						es es_centertell event_var(userid) server_var(youre_ghost_msg)
						es_math ghosts_count + 1
					}
					else do
					{
						es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(err_end_msg)
					}
				}
				else do
				{
					es_xset check_ghost 0	
					es es_xgetplayerprop check_ghost event_var(userid) "CBaseEntity.m_CollisionGroup"
			
					if (server_var(check_ghost) != 1) do
					{
						es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(err_alive_msg)
					}
					else do
					{
						es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(err_already_msg)
					}
				}
			}
		}
	
		es es_xif (event_var(text) == !die) do
		{
			es_xset check_ghost 0	
	
			es es_xgetplayerprop check_ghost event_var(userid) "CBaseEntity.m_CollisionGroup"

			es es_xif (server_var(check_ghost) == 1) do
			{
				if (server_var(disable_redie) == 0) do
				{
					es es_xkeysetvalue redie event_var(userid) dead 0

					es es_xsetplayerprop event_var(userid) CBasePlayer.m_lifeState 512
					//es echo XXXX Life state: server_var(lifestate)

					es_sexec event_var(userid) kill
					es es_centertell event_var(userid) server_var(youre_spect_msg)
					es_math ghosts_count - 1
					es est_DeathAdd event_var(userid) -1
					es est_DeleteRagdolls event_var(userid)

					//es_give event_var(userid) cs_ragdoll

					//es_xsetinfo player_x 0
					//es_xsetinfo player_y 0
					//es_xsetinfo player_z 0

					//es_keygetvalue player_x death_loc event_var(userid) x
					//es_keygetvalue player_y death_loc event_var(userid) y
					//es_keygetvalue player_z death_loc event_var(userid) z

					//es_xset rag_origin 0
					//es_format rag_origin "%1,%2,%3" server_var(player_x) server_var(player_y) server_var(player_z)

					//es_setindexprop server_var(evenscripts_lastgive) CCSRagdoll.m_vecOrigin server_var(rag_origin)
				}
				else do
				{
					es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(err_end_msg_2)
				}
			}
			else do
			{
				es_xset lifestate 0	
	
				es es_xgetplayerprop lifestate event_var(userid) CBasePlayer.m_lifeState
			
				if (server_var(lifestate) == 512) do
				{
					es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(err_alive_msg_2)
				}
				if (server_var(lifestate) == 2) do
				{
					es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(err_already_2)
				}
			}
		}
	}
}

event player_footstep
{
	ifx true(cloud_effect) do
	{ 
		es_xsetinfo exists 0	
		es es_xexists exists key redie event_var(userid)
		
		es es_xif (server_var(exists) == 1) do
		{
			es_xsetinfo dead 0

			es es_xkeygetvalue dead redie event_var(userid) dead
	
			es es_xif (server_var(dead) == 1) do
			{
				es_xsetinfo player_x 0
				es_xsetinfo player_y 0
				es_xsetinfo player_z 0
				es_xsetinfo v1 0

				es playerget location event_var(userid) player_x player_y player_z

				es_math player_z + 32

				es_createvectorstring v1  server_var(player_x) server_var(player_y) server_var(player_z)
  
  				es_effect smoke server_var(v1) smoke 48 2
			}
		}
	}
}

event player_spawn
{
	es_xsetinfo exists 0	
	es es_xexists exists key redie event_var(userid)
		
	es es_xif (server_var(exists) == 1) do
	{
		es_xsetinfo dead 0

		es es_xkeygetvalue dead redie event_var(userid) dead

		es es_xif (server_var(dead) == 1) do
		{
			es es_xtell event_var(userid) #multi #lightgreen[ReDie]#default server_var(spect_msg)

			es est_SetPlayerColor event_var(userid) 255 255 255 0 1
			es es_xsetplayerprop event_var(userid) CBasePlayer.m_lifeState 1
			es es_xsetplayerprop event_var(userid) CBaseEntity.m_CollisionGroup 1
			es playerset speed event_var(userid) server_var(ghost_speed)
			es est_SetGravity event_var(userid) server_var(ghost_grav)
			
			es est_StripPlayer event_var(userid) 

			es_xset flag_exist 0

			es_exists flag_exist key death_loc event_var(userid)

			ifx true(flag_exist) do
			{
				es_xsetinfo player_x 0
				es_xsetinfo player_y 0
				es_xsetinfo player_z 0

				es_keygetvalue player_x death_loc event_var(userid) x
				es_keygetvalue player_y death_loc event_var(userid) y
				es_keygetvalue player_z death_loc event_var(userid) z

				es playerset location event_var(userid) server_var(player_x) server_var(player_y) server_var(player_z)

				es_keygetvalue player_x death_loc event_var(userid) vx
				es_keygetvalue player_y death_loc event_var(userid) vy
				es_keygetvalue player_z death_loc event_var(userid) vz

				es playerset viewcoord event_var(userid) server_var(player_x) server_var(player_y) server_var(player_z)
			}

			es_xsetinfo playermoney 0
			es_keygetvalue playermoney death_loc event_var(userid) money_val
			es_delayed 1 es playerset cash event_var(userid) server_var(playermoney)			
		}
		es es_xif (server_var(dead) == 2) do
		{
			es est_isbomber checkbomb event_var(userid)
			es es_xkeysetvalue redie event_var(userid) dead 0
			es est_StripPlayer event_var(userid)
			es es_xgive event_var(userid) weapon_knife
			if (event_var(es_userteam) == 2) do
			{
				es es_xgive event_var(userid) weapon_glock 
				es es_xif (server_var(checkbomb) == 1) then es_xgive event_var(userid) weapon_c4 
			}
			else do
			{
				es es_xgive event_var(userid) weapon_usp
			}
		}
	}
}

event player_blind
{
	es_xsetinfo exists 0	
	es es_xexists exists key redie event_var(userid)
		
	es es_xif (server_var(exists) == 1) do
	{
		es_xsetinfo dead 0

		es es_xkeygetvalue dead redie event_var(userid) dead

		ifx true(dead) do
		{	
			es_setplayerprop event_var(userid) CCSPlayer.m_flFlashMaxAlpha 0
			es_setplayerprop event_var(userid) CCSPlayer.m_flFlashDuration 0
		}
	}
}

event player_death
{
	es_xset flag_exist 0

	es_exists flag_exist key death_loc event_var(userid)

	ifx false(flag_exist) do
	{
		es_keycreate death_loc event_var(userid)
	}

	es_xsetinfo player_x 0
	es_xsetinfo player_y 0
	es_xsetinfo player_z 0

	es playerget location event_var(userid) player_x player_y player_z

	es_keysetvalue death_loc event_var(userid) x server_var(player_x)
	es_keysetvalue death_loc event_var(userid) y server_var(player_y)
	es_keysetvalue death_loc event_var(userid) z server_var(player_z)

	es playerget viewcoord event_var(userid) player_x player_y player_z

	es_keysetvalue death_loc event_var(userid) vx server_var(player_x)
	es_keysetvalue death_loc event_var(userid) vy server_var(player_y)
	es_keysetvalue death_loc event_var(userid) vz server_var(player_z)

	es_xsetinfo playermoney 0
	es playerget cash playermoney event_var(userid)
	es_keysetvalue death_loc event_var(userid) money_val server_var(playermoney)

	es_keygetvalue playermoney death_loc event_var(userid) money_val

	ifx false(force_d2g) do
	{
		ifx false(disable_redie) do
		{
			es_tell event_var(userid) #multi #lightgreen[ReDie]#default server_var(dead_msg)
		}
	}
	else do
	{
		es es_xgetplayerprop dead event_var(userid) "CCSPlayer.baseclass.pl.deadflag"
		es es_xif (server_var(dead) == 1) do
		{
			if (server_var(disable_redie) == 0) do
			{
				es es_xkeysetvalue redie event_var(userid) dead 1
				es est_Spawn event_var(userid)
				es es_centertell event_var(userid) server_var(youre_ghost_msg)
				es_math ghosts_count + 1
			}
		}
	}
}