Add detour test plugin
This commit is contained in:
		
							parent
							
								
									63c6addc30
								
							
						
					
					
						commit
						8ab9c14e93
					
				
							
								
								
									
										112
									
								
								sourcemod/scripting/dynhooks-test.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								sourcemod/scripting/dynhooks-test.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,112 @@ | ||||
| #include <dhooks> | ||||
| #include <sdktools> | ||||
| 
 | ||||
| // Uses Flashbang Tools gamedata | ||||
| // https://forums.alliedmods.net/showthread.php?t=159876 | ||||
| 
 | ||||
| Handle hFlashbangDetonateDetour; | ||||
| Handle hFlashbangDeafen; | ||||
| Handle hPercentageOfFlashForPlayer; | ||||
| 
 | ||||
| public void OnPluginStart() | ||||
| { | ||||
| 	Handle temp = LoadGameConfigFile("fbtools.games"); | ||||
| 	 | ||||
| 	if(temp == INVALID_HANDLE) | ||||
| 	{ | ||||
| 		SetFailState("Why you no has gamedata?"); | ||||
| 	} | ||||
| 	 | ||||
| 	hFlashbangDetonateDetour = DHookCreateDetour(Address_Null, CallConv_THISCALL, ReturnType_Void, ThisPointer_CBaseEntity); | ||||
| 	if (!hFlashbangDetonateDetour) | ||||
| 		SetFailState("Failed to setup detour for Detonate"); | ||||
| 	 | ||||
| 	if (!DHookSetFromConf(hFlashbangDetonateDetour, temp, SDKConf_Signature, "CFlashbangProjectile::Detonate")) | ||||
| 		SetFailState("Failed to load Detonate signature from gamedata"); | ||||
| 	 | ||||
| 	if (!DHookEnableDetour(hFlashbangDetonateDetour, false, Detour_OnFlashbangDetonate)) | ||||
| 		SetFailState("Failed to detour Detonate."); | ||||
| 		 | ||||
| 	if (!DHookEnableDetour(hFlashbangDetonateDetour, true, Detour_OnFlashbangDetonate_Post)) | ||||
| 		SetFailState("Failed to detour Detonate post."); | ||||
| 	 | ||||
| 	PrintToServer("CFlashbangProjectile::Detonate detoured!"); | ||||
| 	 | ||||
| 
 | ||||
| 	hFlashbangDeafen = DHookCreateDetour(Address_Null, CallConv_THISCALL, ReturnType_Void, ThisPointer_CBaseEntity); | ||||
| 	if (!hFlashbangDeafen) | ||||
| 		SetFailState("Failed to setup detour for Deafen"); | ||||
| 	 | ||||
| 	if (!DHookSetFromConf(hFlashbangDeafen, temp, SDKConf_Signature, "Deafen")) | ||||
| 		SetFailState("Failed to load Deafen signature from gamedata"); | ||||
| 	 | ||||
| 	DHookAddParam(hFlashbangDeafen, HookParamType_Float); | ||||
| 	 | ||||
| 	if (!DHookEnableDetour(hFlashbangDeafen, false, Detour_OnDeafen)) | ||||
| 		SetFailState("Failed to detour Deafen."); | ||||
| 		 | ||||
| 	if (!DHookEnableDetour(hFlashbangDeafen, true, Detour_OnDeafen_Post)) | ||||
| 		SetFailState("Failed to detour Deafen post."); | ||||
| 	 | ||||
| 	PrintToServer("CCSPlayer::Deafen detoured!"); | ||||
| 	 | ||||
| 	 | ||||
| 	hPercentageOfFlashForPlayer = DHookCreateDetour(Address_Null, CallConv_CDECL, ReturnType_Float, ThisPointer_Ignore); | ||||
| 	if (!hPercentageOfFlashForPlayer) | ||||
| 		SetFailState("Failed to setup detour for PercentageOfFlashForPlayer"); | ||||
| 	 | ||||
| 	if (!DHookSetFromConf(hPercentageOfFlashForPlayer, temp, SDKConf_Signature, "PercentageOfFlashForPlayer")) | ||||
| 		SetFailState("Failed to load PercentageOfFlashForPlayer signature from gamedata"); | ||||
| 	 | ||||
| 	DHookAddParam(hPercentageOfFlashForPlayer, HookParamType_CBaseEntity); | ||||
| 	DHookAddParam(hPercentageOfFlashForPlayer, HookParamType_Object, 12); | ||||
| 	DHookAddParam(hPercentageOfFlashForPlayer, HookParamType_CBaseEntity); | ||||
| 	 | ||||
| 	if (!DHookEnableDetour(hPercentageOfFlashForPlayer, false, Detour_OnPercentageOfFlashForPlayer)) | ||||
| 		SetFailState("Failed to detour PercentageOfFlashForPlayer."); | ||||
| 	 | ||||
| 	if (!DHookEnableDetour(hPercentageOfFlashForPlayer, true, Detour_OnPercentageOfFlashForPlayer_Post)) | ||||
| 		SetFailState("Failed to detour PercentageOfFlashForPlayer post."); | ||||
| 	 | ||||
| 	PrintToServer("PercentageOfFlashForPlayer detoured!"); | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnFlashbangDetonate(int pThis) | ||||
| { | ||||
| 	PrintToServer("Detonate called on entity %d!", pThis); | ||||
| 	return MRES_Handled; | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnFlashbangDetonate_Post(int pThis) | ||||
| { | ||||
| 	PrintToServer("Detonate post called on entity %d!", pThis); | ||||
| 	return MRES_Handled; | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnDeafen(int pThis, Handle hParams) | ||||
| { | ||||
| 	PrintToServer("Deafen called on entity %d! distance: %f", pThis, DHookGetParam(hParams, 1)); | ||||
| 	DHookSetParam(hParams, 1, 999.0); | ||||
| 	return MRES_ChangedHandled; | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnDeafen_Post(int pThis, Handle hParams) | ||||
| { | ||||
| 	PrintToServer("Deafen post called on entity %d! distance: %f", pThis, DHookGetParam(hParams, 1)); | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnPercentageOfFlashForPlayer(Handle hReturn, Handle hParams) | ||||
| { | ||||
| 	float pos[3]; | ||||
| 	DHookGetParamObjectPtrVarVector(hParams, 2, 0, ObjectValueType_Vector, pos); | ||||
| 	PrintToServer("PercentageOfFlashForPlayer called! entity1 %d, pos [%f %f %f], entity2 %d", DHookGetParam(hParams, 1), pos[0], pos[1], pos[2], DHookGetParam(hParams, 3)); | ||||
| 	DHookSetReturn(hReturn, 0.3); | ||||
| 	return MRES_Supercede; | ||||
| } | ||||
| 
 | ||||
| public MRESReturn Detour_OnPercentageOfFlashForPlayer_Post(Handle hReturn, Handle hParams) | ||||
| { | ||||
| 	float pos[3]; | ||||
| 	DHookGetParamObjectPtrVarVector(hParams, 2, 0, ObjectValueType_Vector, pos); | ||||
| 	PrintToServer("PercentageOfFlashForPlayer_Post called! entity1 %d, pos [%f %f %f], entity2 %d: %f", DHookGetParam(hParams, 1), pos[0], pos[1], pos[2], DHookGetParam(hParams, 3), DHookGetReturn(hReturn)); | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user