added check to prevent teleport abuse
This commit is contained in:
		
							parent
							
								
									63703675e1
								
							
						
					
					
						commit
						d29f3fa2f1
					
				| @ -1,7 +1,7 @@ | ||||
| #pragma semicolon 1 | ||||
| #define DEBUG | ||||
| #define PLUGIN_AUTHOR "jenz" | ||||
| #define PLUGIN_VERSION "1.6" | ||||
| #define PLUGIN_VERSION "1.7" | ||||
| #define g_dLength 400 | ||||
| #define g_dIndex 65 | ||||
| #include <sourcemod> | ||||
| @ -27,6 +27,7 @@ int g_iClientSpeedInterval[MAXPLAYERS + 1]; | ||||
| int g_iClientChecking[MAXPLAYERS + 1]; | ||||
| bool g_bDisplaySpecial; | ||||
| bool g_bHumansAllowedTime[MAXPLAYERS + 1]; | ||||
| bool g_bhumans_finished[MAXPLAYERS + 1]; | ||||
| bool g_bHideTimer[MAXPLAYERS + 1]; | ||||
| bool g_bEventBool = false; | ||||
| Handle g_hClientCookie = INVALID_HANDLE; | ||||
| @ -75,7 +76,7 @@ public void OnPluginStart() | ||||
| 
 | ||||
| public void trigger_teleport(const char[] output, int entity_index, int client, float delay) | ||||
| { | ||||
|         if (IsValidEdict(entity_index) && IsValidClient(client)  && g_bHumansAllowedTime[client]) | ||||
|     if (IsValidEdict(entity_index) && IsValidClient(client)  && g_bHumansAllowedTime[client]) | ||||
| 	{ | ||||
| 		if (StrContains(g_cMapname, "surf", false) == -1) | ||||
| 		{ | ||||
| @ -83,7 +84,7 @@ public void trigger_teleport(const char[] output, int entity_index, int client, | ||||
| 			resetClientVectors(client); | ||||
| 			if (GetClientTeam(client) == 3) | ||||
| 			{ | ||||
| 				PrintToChat(client, "Disabled timer due to potential teleport abuse, if this is wrong annoy jenz on discord"); | ||||
| 				PrintToChat(client, "Disabled timer due to potential teleport abuse"); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @ -91,15 +92,15 @@ public void trigger_teleport(const char[] output, int entity_index, int client, | ||||
| 
 | ||||
| public void Trigger_Multiple(const char[] output, int entity_index, int client, float delay) | ||||
| { | ||||
|         if (IsValidEdict(entity_index) && origin_command_check(entity_index) && IsValidClient(client) && g_bHumansAllowedTime[client]) | ||||
|         { | ||||
| 		if (StrContains(g_cMapname, "surf", false) == -1) | ||||
|                 { | ||||
| 			g_bHumansAllowedTime[client] = false; | ||||
| 			resetClientVectors(client); | ||||
| 			PrintToChat(client, "Disabled timer due to potential teleport abuse, if this is wrong annoy jenz on discord"); | ||||
| 		} | ||||
|         } | ||||
|     if (IsValidEdict(entity_index) && origin_command_check(entity_index) && IsValidClient(client) && g_bHumansAllowedTime[client]) | ||||
|     { | ||||
|             if (StrContains(g_cMapname, "surf", false) == -1) | ||||
|             { | ||||
|                 g_bHumansAllowedTime[client] = false; | ||||
|                 resetClientVectors(client); | ||||
|                 PrintToChat(client, "Disabled timer due to potential teleport abuse"); | ||||
|             } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @ -269,16 +270,17 @@ public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast | ||||
| 	for (int i = 1; i <= MaxClients; i++) | ||||
| 		if (IsValidClient(i) && !IsFakeClient(i)) | ||||
| 		{ | ||||
| 			resetClientVectors(i); | ||||
| 			if (l_iZoneCount != 1) | ||||
| 				g_bHumansAllowedTime[i] = false; | ||||
| 			else | ||||
| 			{ | ||||
| 				mysql_get_player_time(i, 0); | ||||
| 				g_bHumansAllowedTime[i] = true; | ||||
| 				g_fStartTime[i] = GetEngineTime(); | ||||
| 			} | ||||
| 		} | ||||
|             g_bhumans_finished[i] = false; | ||||
|             resetClientVectors(i); | ||||
|             if (l_iZoneCount != 1) | ||||
|                 g_bHumansAllowedTime[i] = false; | ||||
|             else | ||||
|             { | ||||
|                 mysql_get_player_time(i, 0); | ||||
|                 g_bHumansAllowedTime[i] = true; | ||||
|                 g_fStartTime[i] = GetEngineTime(); | ||||
|             } | ||||
|         } | ||||
| } | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose:  | ||||
| @ -309,92 +311,107 @@ public void OnClientDisconnect(int client) | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void resetClient(int client) | ||||
| { | ||||
| 	if (0 < client <= MaxClients) | ||||
| 	{ | ||||
| 		g_iClientChecking[client] = 0;  | ||||
| 		g_bHumansAllowedTime[client] = false; | ||||
| 		resetClientVectors(client); | ||||
| 		player_stage[client] = 0; | ||||
| 		Format(g_csTime_record[client], sizeof(g_csTime_record[]), "0.000"); | ||||
| 	} | ||||
|     if (0 < client <= MaxClients) | ||||
|     { | ||||
|         g_iClientChecking[client] = 0;  | ||||
|         g_bHumansAllowedTime[client] = false; | ||||
|         g_bhumans_finished[client] = false; | ||||
|         resetClientVectors(client); | ||||
|         player_stage[client] = 0; | ||||
|         Format(g_csTime_record[client], sizeof(g_csTime_record[]), "0.000"); | ||||
|     } | ||||
| } | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose:  | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, int cmdnum, int tickcount, int seed, const int mouse[2]) | ||||
| { | ||||
| 	if (!IsValidClient(client)) | ||||
| 	if (!IsValidClient(client) || !g_bHumansAllowedTime[client]) | ||||
| 		return; | ||||
|     //checks if event is going on | ||||
| 	if (g_bEventBool) | ||||
| 	{ | ||||
| 		g_bHumansAllowedTime[client] = false; | ||||
| 		return; | ||||
| 	}	 | ||||
| 	if (g_bHumansAllowedTime[client] && (GetClientTeam(client) == CS_TEAM_CT) && IsPlayerAlive(client)) | ||||
| 	{ | ||||
| 		int frameCap = 11; | ||||
| 		if (g_iClientFrames[client] >= frameCap) | ||||
| 		{ | ||||
| 			g_iClientFrames[client] = 0; | ||||
| 			float clientVectors[3]; | ||||
| 			GetClientAbsOrigin(client, clientVectors); | ||||
| 			if (checkClientOrigin(g_fClientVectors[client], clientVectors, client)) | ||||
| 			{ | ||||
| 				g_bHumansAllowedTime[client] = false; | ||||
| 				resetClientVectors(client); | ||||
| 				PrintToChat(client, "Disabled timer due to potential teleport abuse"); | ||||
| 				return; | ||||
| 			} | ||||
| 			int speedCheckerCap = 10; | ||||
| 			if (g_iClientSpeedInterval[client] > speedCheckerCap) | ||||
| 			{ | ||||
| 				g_iClientSpeedInterval[client] = 0; | ||||
| 				bool bNoclip = (GetEntityMoveType(client) == MOVETYPE_NOCLIP); | ||||
| 				if (bNoclip) | ||||
| 				{ | ||||
| 					g_bHumansAllowedTime[client] = false; | ||||
| 					resetClientVectors(client); | ||||
| 					PrintToChat(client, "Disabled timer due to Noclip"); | ||||
| 					return; | ||||
| 				} | ||||
| 				float speed = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); | ||||
| 				if (speed > 1.0) | ||||
| 				{ | ||||
| 					if (StrContains(g_cMapname, "surf", false) == -1) | ||||
| 					{ | ||||
| 						g_bHumansAllowedTime[client] = false; | ||||
| 						resetClientVectors(client); | ||||
| 						PrintToChat(client, "Disabled timer due to modified run speed"); | ||||
| 						return; | ||||
| 					} | ||||
| 				} | ||||
| 				float client_gravity = GetEntityGravity(client); | ||||
| 				ConVar gravity = FindConVar("sv_gravity"); | ||||
| 				float gravityFloat = gravity.FloatValue; | ||||
| 				int minimalPermitedGravity = 610; | ||||
| 				//PrintToChat(client, "client_gravity: %f\ngravityFloat: %f", client_gravity, gravityFloat); | ||||
| 				if (((client_gravity > 1.3 || client_gravity < 0.6000) && client_gravity != 0.000000) || gravityFloat < minimalPermitedGravity) | ||||
| 				{ | ||||
| 					//PrintToChat(client, "client_gravity: %f\ngravityFloat: %f", client_gravity, gravityFloat); | ||||
| 					g_bHumansAllowedTime[client] = false; | ||||
| 					resetClientVectors(client); | ||||
| 					PrintToChat(client, "Disabled timer due to modified gravity"); | ||||
| 					return; | ||||
| 				} | ||||
| 			} | ||||
| 			g_fClientVectors[client] = clientVectors; | ||||
| 			if (hText != INVALID_HANDLE && !g_bHideTimer[client]) | ||||
| 			{ | ||||
| 				SetHudTextParams(0.35, 0.85, 0.1, 125, 255, 255, 85); | ||||
| 				float total_time = client_current_race_time(client); | ||||
| 				char sTime[32]; | ||||
| 				FormatPlayerTime(total_time, sTime, sizeof(sTime), false, 1); | ||||
| 				ShowSyncHudText(client, hText, "%N Time: %s\nRecord: %s\nMap: %s\nCourse: %i", client, sTime, g_csTime_record[client], g_cMapname, player_stage[client]); | ||||
| 			} | ||||
| 			g_iClientSpeedInterval[client]++; | ||||
| 		} | ||||
| 		g_iClientFrames[client]++; | ||||
| 	} | ||||
| 	if (GetClientTeam(client) == CS_TEAM_CT && IsPlayerAlive(client)) | ||||
|     { | ||||
|         int frameCap = 11; | ||||
|         if (g_bhumans_finished[client]) | ||||
|             g_iClientFrames[client] = 11; | ||||
|         if (g_iClientFrames[client] >= frameCap) | ||||
|         { | ||||
|             g_iClientFrames[client] = 0; | ||||
|             float clientVectors[3]; | ||||
|             GetClientAbsOrigin(client, clientVectors); | ||||
|             if (checkClientOrigin(g_fClientVectors[client], clientVectors, client)) | ||||
|             { | ||||
|                 g_bHumansAllowedTime[client] = false; | ||||
|                 g_bhumans_finished[client] = false; | ||||
|                 resetClientVectors(client); | ||||
|                 PrintToChat(client, "Disabled timer due to potential teleport abuse"); | ||||
|                 return; | ||||
|             } | ||||
|             if (g_bhumans_finished[client]) | ||||
|             { | ||||
|                 g_bhumans_finished[client] = false; | ||||
|                 g_bHumansAllowedTime[client] = false; | ||||
|                 FinishedStageRaceZone(client); | ||||
|                 return; | ||||
|             } | ||||
|             int speedCheckerCap = 10; | ||||
|             if (g_iClientSpeedInterval[client] > speedCheckerCap) | ||||
|             { | ||||
|                 g_iClientSpeedInterval[client] = 0; | ||||
|                 bool bNoclip = (GetEntityMoveType(client) == MOVETYPE_NOCLIP); | ||||
|                 if (bNoclip) | ||||
|                 { | ||||
|                     g_bHumansAllowedTime[client] = false; | ||||
|                     g_bhumans_finished[client] = false; | ||||
|                     resetClientVectors(client); | ||||
|                     PrintToChat(client, "Disabled timer due to Noclip"); | ||||
|                     return; | ||||
|                 } | ||||
|                 float speed = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); | ||||
|                 if (speed > 1.0) | ||||
|                 { | ||||
|                     if (StrContains(g_cMapname, "surf", false) == -1) | ||||
|                     { | ||||
|                         g_bHumansAllowedTime[client] = false; | ||||
|                         g_bhumans_finished[client] = false; | ||||
|                         resetClientVectors(client); | ||||
|                         PrintToChat(client, "Disabled timer due to modified run speed"); | ||||
|                         return; | ||||
|                     } | ||||
|                 } | ||||
|                 float client_gravity = GetEntityGravity(client); | ||||
|                 ConVar gravity = FindConVar("sv_gravity"); | ||||
|                 float gravityFloat = gravity.FloatValue; | ||||
|                 int minimalPermitedGravity = 610; | ||||
|                 //PrintToChat(client, "client_gravity: %f\ngravityFloat: %f", client_gravity, gravityFloat); | ||||
|                 if (((client_gravity > 1.3 || client_gravity < 0.6000) && client_gravity != 0.000000) || gravityFloat < minimalPermitedGravity) | ||||
|                 { | ||||
|                     //PrintToChat(client, "client_gravity: %f\ngravityFloat: %f", client_gravity, gravityFloat); | ||||
|                     g_bHumansAllowedTime[client] = false; | ||||
|                     g_bhumans_finished[client] = false; | ||||
|                     resetClientVectors(client); | ||||
|                     PrintToChat(client, "Disabled timer due to modified gravity"); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|             g_fClientVectors[client] = clientVectors; | ||||
|             if (hText != INVALID_HANDLE && !g_bHideTimer[client]) | ||||
|             { | ||||
|                 SetHudTextParams(0.35, 0.85, 0.1, 125, 255, 255, 85); | ||||
|                 float total_time = client_current_race_time(client); | ||||
|                 char sTime[32]; | ||||
|                 FormatPlayerTime(total_time, sTime, sizeof(sTime), false, 1); | ||||
|                 ShowSyncHudText(client, hText, "%N Time: %s\nRecord: %s\nMap: %s\nCourse: %i", client, sTime, g_csTime_record[client], g_cMapname, player_stage[client]); | ||||
|             } | ||||
|             g_iClientSpeedInterval[client]++; | ||||
|         } | ||||
|         g_iClientFrames[client]++; | ||||
|     } | ||||
| 	return; | ||||
| } | ||||
| 
 | ||||
| @ -446,21 +463,23 @@ public bool checkClientOrigin(float oldVals[3], float newVals[3], int client) | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void unloze_zoneEntry(int client, char[] zone) | ||||
| { | ||||
| 	int zoneIndex = RetrieveZoneIndex(zone); | ||||
| 	int l_iZoneCount = unloze_zoneCount(); | ||||
| 	if (((GetClientTeam(client) == CS_TEAM_CT && g_bHumansAllowedTime[client]) && StrContains(zone, "ZONE_PREFIX_RACE") > -1) || StrEqual(zone, g_cSpecialMapEnd)) | ||||
| 	{ | ||||
| 		if (IsClientAuthorized(client)) | ||||
| 		{ | ||||
| 			if (l_iZoneCount < 2) | ||||
| 				player_stage[client] = 0; | ||||
| 			if (player_stage[client] == (zoneIndex / 2) || l_iZoneCount < 2) | ||||
| 				FinishedStageRaceZone(client); | ||||
| 		} | ||||
| 		else | ||||
| 			PrintToChat(client, "You are not authorized with steam!!"); | ||||
| 		g_bHumansAllowedTime[client] = false; | ||||
| 	} | ||||
|     int zoneIndex = RetrieveZoneIndex(zone); | ||||
|     int l_iZoneCount = unloze_zoneCount(); | ||||
| 	 | ||||
|     if (GetClientTeam(client) == CS_TEAM_CT && g_bHumansAllowedTime[client]) | ||||
|     { | ||||
|         if ((StrContains(zone, "ZONE_PREFIX_RACE") > -1) || StrEqual(zone, g_cSpecialMapEnd)) | ||||
|         { | ||||
|             g_bHumansAllowedTime[client] = false; | ||||
|             if (l_iZoneCount < 2) | ||||
|                 player_stage[client] = 0; | ||||
|             if (player_stage[client] == (zoneIndex / 2) || l_iZoneCount < 2) | ||||
|             { | ||||
|                 g_bHumansAllowedTime[client] = true; | ||||
|                 g_bhumans_finished[client] = true; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| @ -469,18 +488,21 @@ public void unloze_zoneLeave(int client, char[] zone) | ||||
| { | ||||
| 	//only maps with multiple zones need ZONE_PREFIX_START | ||||
| 	int l_iZoneCount = unloze_zoneCount(); | ||||
| 	if (((GetClientTeam(client) == CS_TEAM_CT) && StrContains(zone, "ZONE_PREFIX_START") > -1) || StrEqual(zone, g_cSpecialMapStart)) | ||||
| 	{ | ||||
| 		if (!l_iZoneCount) | ||||
| 			return; | ||||
| 		resetClientVectors(client); | ||||
| 		g_fStartTime[client] = GetEngineTime(); | ||||
| 		float notRounded = float(RetrieveZoneIndex(zone)); | ||||
| 		player_stage[client] = RoundToCeil(notRounded / 2); | ||||
| 		mysql_get_player_time(client, player_stage[client]); | ||||
| 		g_bHumansAllowedTime[client] = true; | ||||
| 		CPrintToChat(client, "Timer started for Course: %i",  player_stage[client]); | ||||
| 	} | ||||
| 	if (GetClientTeam(client) == CS_TEAM_CT) | ||||
|     { | ||||
|         if ((StrContains(zone, "ZONE_PREFIX_START") > -1) || StrEqual(zone, g_cSpecialMapStart)) | ||||
|         { | ||||
|             if (!l_iZoneCount) | ||||
|                 return; | ||||
|             resetClientVectors(client); | ||||
|             g_fStartTime[client] = GetEngineTime(); | ||||
|             float notRounded = float(RetrieveZoneIndex(zone)); | ||||
|             player_stage[client] = RoundToCeil(notRounded / 2); | ||||
|             mysql_get_player_time(client, player_stage[client]); | ||||
|             g_bHumansAllowedTime[client] = true; | ||||
|             CPrintToChat(client, "Timer started for Course: %i",  player_stage[client]); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| stock void FormatPlayerTime(float Time, char[] result, int maxlength, bool showDash, int precision) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user