#pragma semicolon 1 #include #include #include // 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; }