FixFuncRotating: initial commit
This commit is contained in:
		
							parent
							
								
									2b35849922
								
							
						
					
					
						commit
						0aaac71d5b
					
				
							
								
								
									
										36
									
								
								FixFuncRotating/gamedata/FixFuncRotating.games.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								FixFuncRotating/gamedata/FixFuncRotating.games.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| "Games" | ||||
| { | ||||
| 	"cstrike" | ||||
| 	{ | ||||
| 		"Addresses" | ||||
| 		{ | ||||
| 			"CFuncRotating::UpdateSpeed" | ||||
| 			{ | ||||
| 				"linux" | ||||
| 				{ | ||||
| 					"signature" "CFuncRotating::UpdateSpeed" | ||||
| 				} | ||||
| 			} | ||||
| 			"CFuncRotating::InputStartForward" | ||||
| 			{ | ||||
| 				"linux" | ||||
| 				{ | ||||
| 					"signature"	"CFuncRotating::InputStartForward" | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		"Signatures" | ||||
| 		{ | ||||
| 			"CFuncRotating::UpdateSpeed" | ||||
| 			{ | ||||
| 				"library"	"server" | ||||
| 				"linux"		"@_ZN13CFuncRotating11UpdateSpeedEf" | ||||
| 			} | ||||
| 			"CFuncRotating::InputStartForward" | ||||
| 			{ | ||||
| 				"library"	"server" | ||||
| 				"linux"		"@_ZN13CFuncRotating17InputStartForwardER11inputdata_t" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										109
									
								
								FixFuncRotating/scripting/FixFuncRotating.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								FixFuncRotating/scripting/FixFuncRotating.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,109 @@ | ||||
| #pragma semicolon 1 | ||||
| 
 | ||||
| #define PLUGIN_AUTHOR "Cloud Strife" | ||||
| #define PLUGIN_VERSION "1.0" | ||||
| 
 | ||||
| #include <sourcemod> | ||||
| #include <sdktools> | ||||
| #include <dhooks> | ||||
| 
 | ||||
| #pragma newdecls required | ||||
| 
 | ||||
| public Plugin myinfo =  | ||||
| { | ||||
| 	name = "FixFuncRotating", | ||||
| 	author = PLUGIN_AUTHOR, | ||||
| 	description = "Fixes func_rotating`s StartForward and StopAtStartPos inputs", | ||||
| 	version = PLUGIN_VERSION, | ||||
| 	url = "" | ||||
| }; | ||||
| 
 | ||||
| Handle g_CFuncRotating_StartForward = null; | ||||
| Handle g_CFuncRotating_UpdateSpeed = null; | ||||
| 
 | ||||
| stock float FloatMod(float num, float denom) | ||||
| { | ||||
|     return num - denom * RoundToFloor(num / denom); | ||||
| } | ||||
| 
 | ||||
| stock float operator%(float oper1, float oper2) | ||||
| { | ||||
|     return FloatMod(oper1, oper2); | ||||
| } | ||||
| 
 | ||||
| // Set m_bStopAtStartPos to false | ||||
| public MRESReturn CFuncRotating_InputStartForward(int entity) | ||||
| { | ||||
| 	SetEntProp(entity, Prop_Data, "m_bStopAtStartPos", false, 1); | ||||
| 	return MRES_Ignored; | ||||
| } | ||||
| 
 | ||||
| public MRESReturn CFuncRotating_UpdateSpeed(int entity, Handle hParams) | ||||
| { | ||||
| 	if(GetEntProp(entity, Prop_Data, "m_bStopAtStartPos", 1)) | ||||
| 	{ | ||||
| 		float flNewSpeed = view_as<float>(DHookGetParam(hParams, 1)); | ||||
| 		if(flNewSpeed <= 25) | ||||
| 		{ | ||||
| 			float vecMoveAng[3], angStart[3], angRotation[3], avelpertick[3]; | ||||
| 			 | ||||
| 			GetEntPropVector(entity, Prop_Data, "m_vecMoveAng", vecMoveAng); | ||||
| 			GetEntPropVector(entity, Prop_Data, "m_angStart", angStart); | ||||
| 			GetEntPropVector(entity, Prop_Data, "m_angRotation", angRotation); | ||||
| 			GetEntPropVector(entity, Prop_Data, "m_vecAngVelocity", avelpertick); | ||||
| 			ScaleVector(avelpertick, GetTickInterval()); | ||||
| 		 | ||||
| 			int checkAxis = 2; | ||||
| 			if (vecMoveAng[0] != 0) checkAxis = 0; | ||||
| 			else if ( vecMoveAng[1] != 0 ) checkAxis = 1; | ||||
| 			 | ||||
| 			float angDelta = ( angRotation[ checkAxis ] - angStart[ checkAxis ] )%360.0; | ||||
| 			if ( angDelta > 180.0 ) angDelta -= 360.0; | ||||
| 			 | ||||
| 			if(FloatAbs(angDelta) < FloatAbs(avelpertick[ checkAxis ])) | ||||
|         	{ | ||||
|         		SetEntPropVector(entity, Prop_Data, "m_angRotation", angStart); | ||||
|         		return MRES_Ignored; | ||||
|         	} | ||||
|         } | ||||
| 	} | ||||
| 	return MRES_Ignored; | ||||
| } | ||||
| 
 | ||||
| public void OnPluginStart() | ||||
| { | ||||
| 	Handle hGameConf = LoadGameConfigFile("FixFuncRotating.games"); | ||||
| 	if(hGameConf == INVALID_HANDLE) | ||||
| 	{ | ||||
| 		LogError("Couldn't load FixFuncRotating.games game config!"); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	Address pStartForward = GameConfGetAddress(hGameConf, "CFuncRotating::InputStartForward"); | ||||
| 	if(pStartForward) | ||||
| 	{ | ||||
| 		g_CFuncRotating_StartForward = DHookCreateDetour(pStartForward, CallConv_THISCALL, ReturnType_Void, ThisPointer_CBaseEntity); | ||||
| 	 | ||||
| 		if(!DHookEnableDetour(g_CFuncRotating_StartForward, false, CFuncRotating_InputStartForward)) | ||||
| 		{ | ||||
| 			LogError("Could not enable detour for CFuncRotating::InputStartForward"); | ||||
| 		} | ||||
| 	} | ||||
| 	else LogError("Could not find CFuncRotating::InputStartForward address"); | ||||
| 	 | ||||
| 	 | ||||
| 	Address pUpdateSpeed = GameConfGetAddress(hGameConf, "CFuncRotating::UpdateSpeed"); | ||||
| 	if(!pUpdateSpeed) | ||||
| 	{ | ||||
| 		LogError("Could not find CFuncRotating::UpdateSpeed address"); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	g_CFuncRotating_UpdateSpeed = DHookCreateDetour(pUpdateSpeed, CallConv_THISCALL, ReturnType_Void, ThisPointer_CBaseEntity); | ||||
| 	DHookAddParam(g_CFuncRotating_UpdateSpeed, HookParamType_Float); | ||||
| 	 | ||||
| 	if(!DHookEnableDetour(g_CFuncRotating_UpdateSpeed, false, CFuncRotating_UpdateSpeed)) | ||||
| 	{ | ||||
| 		LogError("Could not enable detour for CFuncRotating::UpdateSpeed"); | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user