﻿////////////////////////////////////////////////////////
// Anti-aim плагин. Автор - ATAMAH (ICQ: 305-839) //////
////////////////////////////////////////////////////////
// Anti-aim plugin. Author -  ATAMAH (ICQ: 305-839) ////
////////////////////////////////////////////////////////

block load
{
	es_xset anti-aim_version anti-aim_v0.1
	es_xmakepublic anti-aim_version

	es_xset player_id 0

	es_xset flag_exist 0

	es_keygroupcreate hits_db

	//es_keygroupload bad_nicks |anti-aim
	es_keygroupload nick_hits |anti-aim

	es_keycreate hits_db max_headshots

	es_xset flag_exist 0

	es_exists flag_exist key nick_hits max_headshots

	ifx false(flag_exist) do
	{
		es_keycreate nick_hits max_headshots
	}

	es_xset max_val 0

	es_keygetvalue max_val nick_hits max_headshots value
	es_keysetvalue hits_db max_headshots value server_var(max_val)

	es_xset check_key 0
	es_foreachkey check_key in nick_hits "es_xdoblock anti-aim/check_time"

	//es_load popup
	//es_xdoblock anti-aim/admin_menus

	es_xset do_on_cheat 0
	es_xset bantype 0
	es_xset ban_duration 0
	es_xset headshots_percent 0
	es_xset min_hits 0

	es_mexec ../addons/eventscripts/anti-aim/anti-aim.cfg
}

block unload
{
	es_xset max_val 0

	es_xset flag_exist 0

	es_exists flag_exist key nick_hits max_headshots

	ifx false(flag_exist) do
	{
		es_keycreate nick_hits max_headshots
	}

	es_keygetvalue max_val hits_db max_headshots value
	es_keysetvalue nick_hits max_headshots value server_var(max_val)
	
	//es_keygroupsave bad_nicks |anti-aim
	es_keygroupsave nick_hits |anti-aim

	es_keygroupdelete hits_db
	es_keygroupdelete nick_hits
	//es_keygroupdelete bad_nicks

	//es_unload popup
}

event player_hurt
{
	es_xset attackerteam 0
	es_xset victimteam 0

	es_getplayerteam attackerteam event_var(attacker)
	es_getplayerteam victimteam event_var(userid)

	if (server_var(victimteam) != server_var(attackerteam)) do
	{
		if (event_var(weapon) in "usp deagle elite fiveseven glock p228 m3 xm1014 mp5navy tmp p90 mac10 ump45 galil famas m4a1 ak47 sg552 aug m249 awp g3sg1 scout sg552") do
		{
			es_xset botcheck 0
			es_isbot botcheck event_var(attacker)

			if (server_var(botcheck) == 0) do
			{
				es es_xset player_id event_var(attacker)
				//es_xdoblock anti-aim/slay_player

				es_xset flag_exist 0

				es_exists flag_exist key hits_db event_var(attacker)

				ifx false(flag_exist) do
				{
					es_keycreate hits_db event_var(attacker)
				}

				es_xset hits_count_all 0		

				es_keygetvalue hits_count_all hits_db event_var(attacker) hits_all_hurt
				es_keysetvalue hits_db event_var(attacker) hits_all_hurt server_var(hits_count_all)
				es_keygetvalue hits_count_all hits_db event_var(attacker) hits_all_hurt

				if (server_var(hits_count_all) < 100) do
				{
					if (event_var(hitgroup) < 3) do
					{
						es_xset hits_count_group 0

						es_keygetvalue hits_count_group hits_db event_var(attacker) event_var(hitgroup)
						es_keysetvalue hits_db event_var(attacker) event_var(hitgroup) server_var(hits_count_group)
						es_keygetvalue hits_count_group hits_db event_var(attacker) event_var(hitgroup)
		
						es_math hits_count_group + 1
	
						//es_tell event_var(attacker) Your score: server_var(coeff)

						es_keysetvalue hits_db event_var(attacker) event_var(hitgroup) server_var(hits_count_group)
					}

					es_math hits_count_all + 1

					es_keysetvalue hits_db event_var(attacker) hits_all_hurt server_var(hits_count_all)

					//es echo #### Hits event_var(es_attackername) all: server_var(hits_count_all)
	
					if (server_var(hits_count_all) > server_var(min_hits)) do
					{
						es_xset head_percent 0
						es_xset head_percent2 0
						es_xset hits_head 0
						es_xset hits_head2 0

						es_keygetvalue hits_head hits_db event_var(attacker) 1
						es_keygetvalue hits_head2 hits_db event_var(attacker) 2

						//es_math hits_head + server_var(hits_head2)

						es_math head_percent = server_var(hits_head)

						es_math head_percent / server_var(hits_count_all)

						es_math head_percent * 100

						if (server_var(head_percent) > server_var(headshots_percent)) do
						{
							es_xset cheat_flag 0

							es_keygetvalue cheat_flag hits_db event_var(attacker) cheater
							es_keysetvalue hits_db event_var(attacker) cheater server_var(cheat_flag)
							es_keygetvalue cheat_flag hits_db event_var(attacker) cheater

							if (server_var(cheat_flag) != 1) do
							{
								//es es_xset player_id event_var(attacker)

								es_keysetvalue hits_db event_var(attacker) cheater 1

								//es_xset antiaim_format 0
								//es_format antiaim_format "es_xset antiaim_user %1;es_xdoblock anti-aim/enforcevars" event_var(attacker)
								//es_delayed 1 es_xnq server_var(antiaim_format)
						
								es echo #### Cheater event_var(es_attackername) detected!
								es_msg #### Cheater event_var(es_attackername) detected!

								es_keysetvalue hits_db max_headshots value 0
								es_keygroupsave nick_hits |anti-aim

								if (server_var(do_on_cheat) == 1) do
								{
									es kickid event_var(attacker) You're cheater!
								}

								if (server_var(do_on_cheat) == 2) do
								{
									if (server_var(bantype) == 1) do
									{
										es_xset cheater_ip 0
										es est_getip cheater_ip event_var(attacker)

										es addip server_var(ban_duration) server_var(cheater_ip)

										es writeip
									}

									if (server_var(bantype) == 2) do
									{
										es banid server_var(ban_duration) event_var(attacker)

										es writeid

										es kickid event_var(attacker) You're cheater!
									}
								}

								//es_xdoblock anti-aim/slay_player
							}	
						}
						else do
						{
							es_xset flag_exist 0

							es_exists flag_exist key hits_db max_headshots

							es_xset max_val 0

							es_keygetvalue max_val hits_db max_headshots value
							es_keysetvalue hits_db max_headshots value server_var(max_val)
							es_keygetvalue max_val hits_db max_headshots value

							if (server_var(head_percent) > server_var(max_val)) do
							{
								es_keysetvalue hits_db max_headshots value server_var(head_percent)

								es_keysetvalue nick_hits max_headshots value server_var(max_val)
					
								es_keygroupsave nick_hits |anti-aim	
							}
						}

						es echo #### Player event_var(es_attackername) headshots percent: server_var(head_percent)

						if (event_var(es_attackername) == "Tester") do
						{
							es_tell event_var(attacker) Your headshots-hits percent: server_var(head_percent)
						}
					}
				}
				else do
				{
					es echo #### Player event_var(es_attackername) hits count greater than 100 (server_var(hits_count_all)), clearing info
					es_keydelete hits_db event_var(attacker)
				}
			}
		}
	}
}

event player_team
{
	if (event_var(team) > 0) do
	{
		if (event_var(es_steamid) != 0) do
		{
			//es echo #### Query cvar cl_class
			es_queryclientvar event_var(userid) cl_class
		}
	}
}

event es_player_variable
{
	if (event_var(variable) == cl_class) do
	{
		if (event_var(status) == success) do
		{
			if (event_var(value) == "cheater") do
			{
				//es echo #### Cheater detected

				//es_xset flag_exist 0

				//es_exists flag_exist key hits_db event_var(userid)

				//ifx false(flag_exist) do
				//{
				//	es_keycreate hits_db event_var(userid)
				//}

				//es es_xset player_id event_var(userid)

				//es_keysetvalue hits_db event_var(userid) cheater 1

				//es_xdoblock anti-aim/slay_player				
			}
		}
	}
}


event player_activate
{
	es_xset botcheck 0
	es_isbot botcheck event_var(userid)

	if (server_var(botcheck) == 0) do
	{
		es_xset playername 0
		es_getplayername playername event_var(userid)

		es es_xset check_key server_var(playername)
	
		es_xdoblock anti-aim/check_time

		es_keycreate hits_db event_var(userid)

		es_xset flag_exist 0

		es_exists flag_exist key nick_hits server_var(playername)

		ifx true(flag_exist) do
		{
			es_xset last_time 0

			es_keygetvalue last_time nick_hits server_var(check_key) last_updated

			es_xset timenow 0
			es_xgettime timenow

			es_math timenow - server_var(last_time)

			es_xset hits_count_all 0

			//Число попаданий
			es_keygetvalue hits_count_all nick_hits server_var(playername) hits_all_hurt

			es_keysetvalue hits_db event_var(userid) hits_all_hurt server_var(hits_count_all)

			es echo #### Retrieve player server_var(playername) hits count: server_var(hits_count_all)

			es_xset hits_count_group 0

			es_keygetvalue hits_count_group nick_hits server_var(playername) 1

			es_keysetvalue hits_db event_var(userid) 1 server_var(hits_count_group)

			es echo #### Retrieve player server_var(playername) hits count 1: server_var(hits_count_group)

			es_xset hits_count_group 0

			es_keygetvalue hits_count_group nick_hits server_var(playername) 2

			es_keysetvalue hits_db event_var(userid) 2 server_var(hits_count_group)

			es echo #### Retrieve player server_var(playername) hits count 2: server_var(hits_count_group)

			es echo #### Last update player server_var(playername) : server_var(timenow) sec ago
		}
	}
}

block check_time
{
	if (server_var(check_key) != "max_headshots") do
	{
		es echo #### Checking last update for key server_var(check_key)
	
		es_xset flag_exist 0

		es_exists flag_exist key nick_hits server_var(check_key)

		ifx true(flag_exist) do
		{
			es_xset last_time 0

			es_keygetvalue last_time nick_hits server_var(check_key) last_updated

			es_xset timenow 0
			es_xgettime timenow

			es_math timenow - server_var(last_time)

			es echo #### Last update key server_var(check_key): server_var(timenow) sec ago
		
			if (server_var(timenow) > 600) do
			{			
				es echo #### Removing key server_var(check_key) for last update server_var(timenow) sec ago
				es_keydelete nick_hits server_var(check_key)			

				es_keygroupsave nick_hits |anti-aim
			}
		}
	}
}

event player_disconnect
{
	es_xset botcheck 0
	es_isbot botcheck event_var(userid)

	if (server_var(botcheck) == 0) do
	{
		es_xset flag_exist 0

		es_exists flag_exist key hits_db event_var(userid)

		ifx true(flag_exist) do
		{
			es_xset hits_count_all 0

			es_keygetvalue hits_count_all hits_db event_var(userid) hits_all_hurt

			if (server_var(hits_count_all) > 0) do
			{			
				es_xset flag_exist 0

				es_exists flag_exist key nick_hits event_var(name)

				ifx false(flag_exist) do
				{
					es_keycreate nick_hits event_var(name)
				}
		
				es_xset timenow 0
				es_xgettime timenow

				//Время последней записи
				es_keysetvalue nick_hits event_var(name) last_updated server_var(timenow)
	
				//Число попаданий
				es_keysetvalue nick_hits event_var(name) hits_all_hurt server_var(hits_count_all)

				es echo #### Saving player event_var(name) hits count: server_var(hits_count_all)

				es_xset hits_count_group 0

				es_keygetvalue hits_count_group hits_db event_var(userid) 1

				es_keysetvalue nick_hits event_var(name) 1 server_var(hits_count_group)

				es echo #### Saving player event_var(name) head hits count: server_var(hits_count_group)

				es_xset hits_count_group 0

				es_keygetvalue hits_count_group hits_db event_var(userid) 2

				es_keysetvalue nick_hits event_var(name) 2 server_var(hits_count_group)

				es echo #### Saving player event_var(name) torso hits count: server_var(hits_count_group)
	
				es_keydelete hits_db event_var(userid)
	
				es_keygroupsave nick_hits |anti-aim
			}
		}
	}
}

event round_start
{
	//foreach player player_id #human "es_xdoblock anti-aim/slay_player"

	es_xset check_key 0
	es_foreachkey check_key in nick_hits "es_xdoblock anti-aim/check_time"
}

event player_say
{
	es_xset check_flag 0

	//es ma_admin_check check_flag userid event_var(userid)

	if (server_var(check_flag) > 0) do
	{
		es_xset admin_cmd 0

		es_token admin_cmd event_var(text) 1 "nick: "

		if (server_var(admin_cmd) == "!slap") do
		{
			//es popup send admin_menu event_var(userid)

			//es_xset adminmenu_format 0
			//es_format adminmenu_format "es_xset admin_id %1;es popup send admin_menu event_var(userid)" event_var(userid)
			//es es_xnq server_var(adminmenu_format)

			es_xset admin_par 0

			es_token admin_par event_var(text) 2 "nick: "

			//es_tell event_var(userid) #### Admin menu1 parameter: server_var(admin_par)

			es_xset slapid 0

			es es_getuserid slapid server_var(admin_par)

			if (server_var(slapid) > 0) do
			{
				es es_xset player_id server_var(slapid)

				es_keysetvalue hits_db server_var(slapid) cheater 1

				es_xset anti-aim_format 0
				es_format anti-aim_format "es_xset antiaim_user %1;es_xdoblock anti-aim/enforcevars" server_var(slapid)
				es_delayed 1 es_xnq server_var(antiaim_format)
						
				es echo #### Player server_var(admin_par) slapped!

				//es_xdoblock anti-aim/slay_player
			}
		}

		if (server_var(admin_cmd) == "!unslap") do
		{
			es_xset admin_par 0

			es_token admin_par event_var(text) 2 "nick: "

			//es_tell event_var(userid) #### Admin menu1 parameter: server_var(admin_par)

			es_xset unslapid 0

			es es_getuserid unslapid server_var(admin_par)

			if (server_var(unslapid) > 0) do
			{
				es es_xset player_id server_var(unslapid)

				es_keysetvalue hits_db server_var(unslapid) cheater 0

				//es_keydelete bad_nicks server_var(admin_par)
				//es_keygroupsave bad_nicks |anti-aim

				es_xset antiaim_format 0
				es_format antiaim_format "es_xset antiaim_user %1;es_xdoblock anti-aim/enforcevars2" server_var(unslapid)
				es_delayed 1 es_xnq server_var(antiaim_format)
						
				es echo #### Player server_var(admin_par) unslapped!
			}
		}
	}
}

block admin_menus
{
	popup create admin_menu
	popup addline admin_menu "Admin menu1"
	popup addline admin_menu " "
	popup addline admin_menu "->1. Menu1"
	popup addline admin_menu "->9. Next menu"
	popup addline admin_menu " "
	popup addline admin_menu "->0. Exit"
	popup submenu admin_menu 9 admin_menu2
	popup menuselect admin_menu anti-aim/admin_menuselect
	popup timeout admin_menu view 0

	popup create admin_menu2
	popup addline admin_menu2 "Admin menu2"
	popup addline admin_menu2 " "
	popup addline admin_menu2 "->1. Menu2"
	popup addline admin_menu2 "->9. Back"
	popup addline admin_menu2 " "
	popup addline admin_menu2 "->0. Exit"
	popup submenu admin_menu2 9 admin_menu
	popup menuselect admin_menu2 anti-aim/admin_menuselect2
	popup timeout admin_menu2 view 0
}

block admin_menuselect
{
	if (server_var(_popup_choice) = 1) do
	{
		es_tell server_var(admin_id) #### Admin menu1 checked 1
	}
}

block admin_menuselect2
{
	if (server_var(_popup_choice) = 1) do
	{
		es_tell server_var(admin_id) #### Admin menu2 checked 1
	}
}

block slay_player
{
	es_xset playername 0
	es_getplayername playername server_var(player_id)

	es_xset cheat_flag 0

	es_xset flag_exist 0

	es_exists flag_exist key hits_db server_var(player_id)

	ifx true(flag_exist) do
	{
		//es echo #### checking server_var(playername) userid server_var(player_id) in DB

		es_keygetvalue cheat_flag hits_db server_var(player_id) cheater
		es_keysetvalue hits_db server_var(player_id) cheater server_var(cheat_flag)
		es_keygetvalue cheat_flag hits_db server_var(player_id) cheater
	}
	else do
	{
		es_keycreate hits_db server_var(player_id)
	}

	es_xset flag_exist 0

	//es_exists flag_exist key bad_nicks server_var(playername)

	ifx true(flag_exist) do
	{
		es_xset cheat_flag 1
	}

	if (server_var(cheat_flag) > 0) do
	{
		es_keysetvalue hits_db server_var(player_id) cheater 1

		//es_xset flag_exist 0

		//es_exists flag_exist key bad_nicks server_var(playername)
	
		//ifx false(flag_exist) do
		//{
			//es_keycreate bad_nicks server_var(playername)
			//es_keysetvalue bad_nicks server_var(playername) cheater "yes"
		//}

		//es_setplayerprop server_var(player_id) CCSPlayer.m_flFlashDuration 9999
		//es ma_blind server_var(playername)

		es es_xsetplayerprop server_var(player_id) CBasePlayer.m_lifeState 1
		//es est_StripPlayer server_var(player_id)

		es es_xsexec server_var(player_id) use weapon_c4
		es es_xsexec server_var(player_id) drop
		es est_StripPlayer server_var(player_id)
		
		es es_xsetplayerprop server_var(player_id) CBaseEntity.m_CollisionGroup 1
		es est_SetPlayerColor server_var(player_id) 255 255 255 0 1

		//es_keygroupsave bad_nicks |anti-aim

		es_msg Игрок server_var(playername) наказан за использование чита
	}
}