50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#pragma semicolon 1
 | 
						|
#include <sourcemod>
 | 
						|
#include <sdktools>
 | 
						|
#include <dhooks>
 | 
						|
 | 
						|
// int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
 | 
						|
Handle g_hDamagedByExplosion;
 | 
						|
 | 
						|
public Plugin myinfo =
 | 
						|
{
 | 
						|
	name			= "NoGrenadeRinging",
 | 
						|
	author			= "BotoX",
 | 
						|
	description		= "Block the annoying ringing noise when a grenade explodes next to you",
 | 
						|
	version			= "1.0.1",
 | 
						|
	url				= ""
 | 
						|
};
 | 
						|
 | 
						|
public void OnPluginStart()
 | 
						|
{
 | 
						|
	Handle hTemp = LoadGameConfigFile("NoGrenadeRinging.games");
 | 
						|
	if(hTemp == INVALID_HANDLE)
 | 
						|
		SetFailState("Why you no has gamedata?");
 | 
						|
 | 
						|
	int Offset = GameConfGetOffset(hTemp, "OnDamagedByExplosion");
 | 
						|
	g_hDamagedByExplosion = DHookCreate(Offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnDamagedByExplosion);
 | 
						|
	DHookAddParam(g_hDamagedByExplosion, HookParamType_ObjectPtr);
 | 
						|
	CloseHandle(hTemp);
 | 
						|
 | 
						|
	/* Late load */
 | 
						|
	for(int client = 1; client <= MaxClients; client++)
 | 
						|
	{
 | 
						|
		if(IsClientInGame(client))
 | 
						|
			OnClientPutInServer(client);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public void OnClientPutInServer(int client)
 | 
						|
{
 | 
						|
	// Don't add removal callback for this one
 | 
						|
	DHookEntity(g_hDamagedByExplosion, false, client);
 | 
						|
}
 | 
						|
 | 
						|
// int CCSPlayer::OnDamagedByExplosion(CTakeDamageInfo const&)
 | 
						|
public MRESReturn OnDamagedByExplosion(int pThis, Handle hReturn, Handle hParams)
 | 
						|
{
 | 
						|
	// Block call
 | 
						|
	DHookSetReturn(hReturn, 0);
 | 
						|
	return MRES_Supercede;
 | 
						|
}
 |