64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #pragma semicolon 1
 | |
| #pragma newdecls required
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include <sdkhooks>
 | |
| #include <sdktools>
 | |
| #include <dhooks>
 | |
| 
 | |
| public Plugin myinfo =
 | |
| {
 | |
| 	name = "FixPointViewcontrol",
 | |
| 	author = "xen",
 | |
| 	description = "A plugin to make disabling point_viewcontrol work properly",
 | |
| 	version = "1.1",
 | |
| 	url = ""
 | |
| }
 | |
| 
 | |
| Handle g_hAcceptInput;
 | |
| public void OnPluginStart()
 | |
| {
 | |
| 	// Gamedata.
 | |
| 	Handle hConfig = LoadGameConfigFile("sdktools.games");
 | |
| 	if (hConfig == INVALID_HANDLE)
 | |
| 		SetFailState("Couldn't load sdktools game config!");
 | |
| 
 | |
| 	int offset = GameConfGetOffset(hConfig, "AcceptInput");
 | |
| 	if (offset == -1)
 | |
| 		SetFailState("Failed to find AcceptInput offset");
 | |
| 
 | |
| 	delete hConfig;
 | |
| 
 | |
| 	// DHooks.
 | |
| 	g_hAcceptInput = DHookCreate(offset, HookType_Entity, ReturnType_Bool, ThisPointer_CBaseEntity, Hook_AcceptInput);
 | |
| 	DHookAddParam(g_hAcceptInput, HookParamType_CharPtr);
 | |
| 	DHookAddParam(g_hAcceptInput, HookParamType_CBaseEntity);
 | |
| 	DHookAddParam(g_hAcceptInput, HookParamType_CBaseEntity);
 | |
| 	DHookAddParam(g_hAcceptInput, HookParamType_Object, 20, DHookPass_ByVal|DHookPass_ODTOR|DHookPass_OCTOR|DHookPass_OASSIGNOP);
 | |
| 	DHookAddParam(g_hAcceptInput, HookParamType_Int);
 | |
| }
 | |
| 
 | |
| public void OnEntityCreated(int entity, const char[] classname)
 | |
| {
 | |
| 	if (StrEqual(classname, "point_viewcontrol"))
 | |
| 		DHookEntity(g_hAcceptInput, false, entity);
 | |
| }
 | |
| 
 | |
| public MRESReturn Hook_AcceptInput(int entity, Handle hReturn, Handle hParams)
 | |
| {
 | |
| 	char sCommand[128];
 | |
| 	DHookGetParamString(hParams, 1, sCommand, sizeof(sCommand));
 | |
| 
 | |
| 	if(DHookIsNullParam(hParams, 2))
 | |
| 		return MRES_Ignored;
 | |
| 
 | |
| 	int iActivator = DHookGetParam(hParams, 2);
 | |
| 	if (iActivator < 1 || iActivator > MaxClients)
 | |
| 		return MRES_Ignored;
 | |
| 
 | |
| 	else if (StrEqual(sCommand, "Disable", false))
 | |
| 		SetEntPropEnt(entity, Prop_Data, "m_hPlayer", iActivator);
 | |
| 
 | |
| 	return MRES_Ignored;
 | |
| }
 |