New plugin: FixLagCompensation. Disables engine lag comp for players on moving objects.
This commit is contained in:
		
							parent
							
								
									4c52227886
								
							
						
					
					
						commit
						0388e606d9
					
				
							
								
								
									
										45
									
								
								FixLagCompensation/gamedata/FixLagCompensation.games.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								FixLagCompensation/gamedata/FixLagCompensation.games.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | ||||
| "Games" | ||||
| { | ||||
| 	"cstrike" | ||||
| 	{ | ||||
| 		"Offsets" | ||||
| 		{ | ||||
| 			"IsMoving" | ||||
| 			{ | ||||
| 				"windows"	"74" | ||||
| 				"linux"		"75" | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		"Signatures" | ||||
| 		{ | ||||
| 			"CLagCompensationManager::BacktrackPlayer" | ||||
| 			{ | ||||
| 				"library"		"server" | ||||
| 				"linux"			"@_ZN23CLagCompensationManager15BacktrackPlayerEP11CBasePlayerf" | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		"Functions" | ||||
| 		{ | ||||
| 			"CLagCompensationManager__BacktrackPlayer" | ||||
| 			{ | ||||
| 				"signature"		"CLagCompensationManager::BacktrackPlayer" | ||||
| 				"callconv"		"thiscall" | ||||
| 				"return"		"void" | ||||
| 				"this"			"ignore" | ||||
| 				"arguments" | ||||
| 				{ | ||||
| 					"pPlayer" | ||||
| 					{ | ||||
| 						"type"		"cbaseentity" | ||||
| 					} | ||||
| 					"flTargetTime" | ||||
| 					{ | ||||
| 						"type"		"float" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										73
									
								
								FixLagCompensation/scripting/FixLagCompensation.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								FixLagCompensation/scripting/FixLagCompensation.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | ||||
| #include <sourcemod> | ||||
| #include <sdkhooks> | ||||
| #include <sdktools> | ||||
| #include <dhooks> | ||||
| 
 | ||||
| #pragma semicolon 1 | ||||
| #pragma newdecls required | ||||
| 
 | ||||
| public Plugin myinfo = | ||||
| { | ||||
| 	name 			= "FixLagCompensation", | ||||
| 	author 			= "BotoX", | ||||
| 	description 	= "", | ||||
| 	version 		= "1.0", | ||||
| 	url 			= "" | ||||
| }; | ||||
| 
 | ||||
| Handle g_hBacktrackPlayer; | ||||
| Handle g_hIsMoving; | ||||
| 
 | ||||
| public void OnPluginStart() | ||||
| { | ||||
| 	Handle hGameData = LoadGameConfigFile("FixLagCompensation.games"); | ||||
| 	if(!hGameData) | ||||
| 		SetFailState("Failed to load FixLagCompensation gamedata."); | ||||
| 
 | ||||
| 	// void CLagCompensationManager::BacktrackPlayer( CBasePlayer *pPlayer, float flTargetTime ) | ||||
| 	g_hBacktrackPlayer = DHookCreateFromConf(hGameData, "CLagCompensationManager__BacktrackPlayer"); | ||||
| 	if(!g_hBacktrackPlayer) | ||||
| 	{ | ||||
| 		delete hGameData; | ||||
| 		SetFailState("Failed to setup detour for CLagCompensationManager__BacktrackPlayer"); | ||||
| 	} | ||||
| 
 | ||||
| 	if(!DHookEnableDetour(g_hBacktrackPlayer, false, Detour_OnBacktrackPlayer)) | ||||
| 	{ | ||||
| 		delete hGameData; | ||||
| 		SetFailState("Failed to detour CLagCompensationManager__BacktrackPlayer."); | ||||
| 	} | ||||
| 
 | ||||
| 	// CBaseEntity::IsMoving | ||||
| 	StartPrepSDKCall(SDKCall_Entity); | ||||
| 	if(!PrepSDKCall_SetFromConf(hGameData, SDKConf_Virtual, "IsMoving")) | ||||
| 	{ | ||||
| 		delete hGameData; | ||||
| 		SetFailState("PrepSDKCall_SetFromConf(hGameData, SDKConf_Virtual, \"IsMoving\") failed!"); | ||||
| 	} | ||||
| 	PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); | ||||
| 	g_hIsMoving = EndPrepSDKCall(); | ||||
| 
 | ||||
| 	delete hGameData; | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnBacktrackPlayer(Handle hParams) | ||||
| { | ||||
| 	if(DHookIsNullParam(hParams, 1)) | ||||
| 		return MRES_Ignored; | ||||
| 
 | ||||
| 	int client = DHookGetParam(hParams, 1); | ||||
| 	if(client < 1 || client > MaxClients) | ||||
| 		return MRES_Ignored; | ||||
| 
 | ||||
| 	int GroundEntity = GetEntPropEnt(client, Prop_Data, "m_hGroundEntity"); | ||||
| 	if(GroundEntity <= 0) | ||||
| 		return MRES_Ignored; | ||||
| 
 | ||||
| 	bool bIsMoving = SDKCall(g_hIsMoving, GroundEntity); | ||||
| 
 | ||||
| 	if(bIsMoving) | ||||
| 		return MRES_Supercede; | ||||
| 
 | ||||
| 	return MRES_Ignored; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user