AntiLagSwitch WIP
This commit is contained in:
		
							parent
							
								
									21d93c7b60
								
							
						
					
					
						commit
						d7fe41b51f
					
				
							
								
								
									
										23
									
								
								AntiLagSwitch/gamedata/AntiLagSwitch.games.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								AntiLagSwitch/gamedata/AntiLagSwitch.games.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | "Games" | ||||||
|  | { | ||||||
|  | 	"cstrike" | ||||||
|  | 	{ | ||||||
|  | 		"Offsets" | ||||||
|  | 		{ | ||||||
|  | 			"ProcessUsercmds" | ||||||
|  | 			{ | ||||||
|  | 				"windows" 	"418" | ||||||
|  | 				"linux" 	"419" | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		"Signatures" | ||||||
|  | 		{ | ||||||
|  | 			"RunNullCommand" | ||||||
|  | 			{ | ||||||
|  | 				"library"	"server" | ||||||
|  | 				"linux"		"@_ZN11CBasePlayer14RunNullCommandEv" | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										72
									
								
								AntiLagSwitch/scripting/AntiLagSwitch.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								AntiLagSwitch/scripting/AntiLagSwitch.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | #include <sourcemod> | ||||||
|  | #include <sdktools> | ||||||
|  | #include <dhooks> | ||||||
|  | 
 | ||||||
|  | #pragma semicolon 1 | ||||||
|  | #pragma newdecls required | ||||||
|  | 
 | ||||||
|  | public Plugin myinfo = | ||||||
|  | { | ||||||
|  | 	name 			= "AntiLagSwitch", | ||||||
|  | 	author 			= "BotoX", | ||||||
|  | 	description 	= "", | ||||||
|  | 	version 		= "0.0", | ||||||
|  | 	url 			= "" | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Handle g_hProcessUsercmds; | ||||||
|  | Handle g_hRunNullCommand; | ||||||
|  | 
 | ||||||
|  | public void OnPluginStart() | ||||||
|  | { | ||||||
|  | 	Handle hGameConf = LoadGameConfigFile("AntiLagSwitch.games"); | ||||||
|  | 	if(!hGameConf) | ||||||
|  | 		SetFailState("Failed to load AntiLagSwitch gamedata."); | ||||||
|  | 
 | ||||||
|  | 	// void CBasePlayer::RunNullCommand( void ) | ||||||
|  | 	StartPrepSDKCall(SDKCall_Player); | ||||||
|  | 	if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "RunNullCommand")) | ||||||
|  | 		SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, \"RunNullCommand\" failed!"); | ||||||
|  | 
 | ||||||
|  | 	g_hRunNullCommand = EndPrepSDKCall(); | ||||||
|  | 
 | ||||||
|  | 	int Offset = GameConfGetOffset(hGameConf, "ProcessUsercmds"); | ||||||
|  | 	if(Offset == -1) | ||||||
|  | 		SetFailState("Failed to find ProcessUsercmds offset"); | ||||||
|  | 
 | ||||||
|  | 	/* void CBasePlayer::ProcessUsercmds( CUserCmd *cmds, int numcmds, int totalcmds, | ||||||
|  | 	int dropped_packets, bool paused ) */ | ||||||
|  | 	g_hProcessUsercmds = DHookCreate(Offset, HookType_Entity, ReturnType_Void, ThisPointer_CBaseEntity, Hook_ProcessUsercmds); | ||||||
|  | 	if(g_hProcessUsercmds == INVALID_HANDLE) | ||||||
|  | 		SetFailState("Failed to DHookCreate ProcessUsercmds"); | ||||||
|  | 
 | ||||||
|  | 	DHookAddParam(g_hProcessUsercmds, HookParamType_ObjectPtr);	// 1 - CUserCmd *cmds | ||||||
|  | 	DHookAddParam(g_hProcessUsercmds, HookParamType_Int);		// 2 - int numcmds | ||||||
|  | 	DHookAddParam(g_hProcessUsercmds, HookParamType_Int);		// 3 - int totalcmds | ||||||
|  | 	DHookAddParam(g_hProcessUsercmds, HookParamType_Int);		// 4 - int dropped_packets | ||||||
|  | 	DHookAddParam(g_hProcessUsercmds, HookParamType_Bool);		// 5 - bool paused | ||||||
|  | 
 | ||||||
|  | 	delete hGameConf; | ||||||
|  | 
 | ||||||
|  | 	// Late load. | ||||||
|  | 	for(int client = 1; client <= MaxClients; client++) | ||||||
|  | 	{ | ||||||
|  | 		if(IsClientInGame(client)) | ||||||
|  | 			OnClientPutInServer(client); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | public void OnClientPutInServer(int client) | ||||||
|  | { | ||||||
|  | 	DHookEntity(g_hProcessUsercmds, true, client); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | public MRESReturn Hook_ProcessUsercmds(int client, Handle hParams) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int RunNullCommand(int client) | ||||||
|  | { | ||||||
|  | 	return SDKCall(g_hRunNullCommand, client); | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user