added "hurt sounds" setting

This commit is contained in:
not-log 2021-09-09 20:16:21 +03:00
parent 3287fe8910
commit 157874a1b4

View File

@ -20,6 +20,7 @@ public Plugin myinfo =
#define Mute_TriggerSounds (1 << 3) #define Mute_TriggerSounds (1 << 3)
#define Mute_NormalSounds (1 << 4) #define Mute_NormalSounds (1 << 4)
#define Debug (1 << 5) #define Debug (1 << 5)
#define Mute_HurtSounds (1 << 6)
// Engine // Engine
EngineVersion gEV_Type = Engine_Unknown; EngineVersion gEV_Type = Engine_Unknown;
@ -54,8 +55,8 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
gB_LateLoad = late; gB_LateLoad = late;
} }
//CSS: 138: port.LightHum2 // CSS: 138: port.LightHum2
//CSGO: 199: port.LightHum2 // CSGO: 199: port.LightHum2
public void OnPluginStart() public void OnPluginStart()
{ {
gEV_Type = GetEngineVersion(); gEV_Type = GetEngineVersion();
@ -95,6 +96,7 @@ public void OnPluginStart()
// Sound Hook // Sound Hook
AddTempEntHook("Shotgun Shot", Hook_ShotgunShot); AddTempEntHook("Shotgun Shot", Hook_ShotgunShot);
AddNormalSoundHook(NormalSoundHook);
// Late Load // Late Load
if(gB_LateLoad) if(gB_LateLoad)
@ -232,8 +234,7 @@ void HookSoundscapes(Handle hGameData)
} }
} }
/* /* struct ss_update_t
struct ss_update_t
{ {
CBasePlayer *pPlayer; Offset: 0 | Size: 4 CBasePlayer *pPlayer; Offset: 0 | Size: 4
CEnvSoundscape pCurrentSoundscape; Offset: 4 | Size: 4 CEnvSoundscape pCurrentSoundscape; Offset: 4 | Size: 4
@ -349,8 +350,8 @@ void HookSendSound(Handle hGameData)
} }
} }
//CSS: // CSS:
/*struct SoundInfo_t /* struct SoundInfo_t
{ {
int nSequenceNumber; Offset: 0 | Size: 4 int nSequenceNumber; Offset: 0 | Size: 4
int nEntityIndex; Offset: 4 | Size: 4 int nEntityIndex; Offset: 4 | Size: 4
@ -372,8 +373,8 @@ void HookSendSound(Handle hGameData)
int nSpeakerEntity; Offset: 88 | Size: 4 int nSpeakerEntity; Offset: 88 | Size: 4
};*/ };*/
//CSGO: // CSGO:
/*struct SoundInfo_t /* struct SoundInfo_t
{ {
Vector vOrigin; Offset: 0 | Size: 12 Vector vOrigin; Offset: 0 | Size: 12
Vector vDirection Offset: 12 | Size: 12 Vector vDirection Offset: 12 | Size: 12
@ -396,7 +397,7 @@ void HookSendSound(Handle hGameData)
bool bLooping; Offset: 90 | Size: 1 bool bLooping; Offset: 90 | Size: 1
};*/ };*/
//void CGameClient::SendSound( SoundInfo_t &sound, bool isReliable ) // void CGameClient::SendSound( SoundInfo_t &sound, bool isReliable )
public MRESReturn DHook_SendSound(Address pThis, Handle hParams) public MRESReturn DHook_SendSound(Address pThis, Handle hParams)
{ {
if(DHookGetParamObjectPtrVar(hParams, 1, 40, ObjectValueType_Float) == 0.0) if(DHookGetParamObjectPtrVar(hParams, 1, 40, ObjectValueType_Float) == 0.0)
@ -454,46 +455,41 @@ public Action Command_Sounds(int client, int args)
Menu menu = new Menu(MenuHandler_Sounds); Menu menu = new Menu(MenuHandler_Sounds);
menu.SetTitle("Sound Manager\n "); menu.SetTitle("Sound Manager\n ");
char sDisplay[64];
char sInfo[16];
if(gEV_Type == Engine_CSGO) if(gEV_Type == Engine_CSGO)
{ {
FormatEx(sDisplay, 64, "Stop Active Sounds\n "); menu.AddItem("stopactive", "Stop Active Sounds\n ");
menu.AddItem("stopactive", sDisplay);
} }
FormatEx(sDisplay, 64, "Soundscapes: [%s]", gI_Settings[client] & Mute_Soundscapes ? "Muted" : "On"); AddSettingItemToMenu(menu, client, "Soundscapes", Mute_Soundscapes);
IntToString(Mute_Soundscapes, sInfo, 16); AddSettingItemToMenu(menu, client, "Ambient Sounds", Mute_AmbientSounds);
menu.AddItem(sInfo, sDisplay); AddSettingItemToMenu(menu, client, "Normal Sounds", Mute_NormalSounds);
AddSettingItemToMenu(menu, client, "Trigger Sounds", Mute_TriggerSounds, true);
FormatEx(sDisplay, 64, "Ambient Sounds: [%s]", gI_Settings[client] & Mute_AmbientSounds ? "Muted" : "On"); AddSettingItemToMenu(menu, client, "Gun Sounds", Mute_GunSounds);
IntToString(Mute_AmbientSounds, sInfo, 16); AddSettingItemToMenu(menu, client, "Hurt Sounds", Mute_HurtSounds, true);
menu.AddItem(sInfo, sDisplay);
FormatEx(sDisplay, 64, "Normal Sounds: [%s]", gI_Settings[client] & Mute_NormalSounds ? "Muted" : "On");
IntToString(Mute_NormalSounds, sInfo, 16);
menu.AddItem(sInfo, sDisplay);
FormatEx(sDisplay, 64, "Trigger Sounds: [%s]\n ", gI_Settings[client] & Mute_TriggerSounds ? "Muted" : "On");
IntToString(Mute_TriggerSounds, sInfo, 16);
menu.AddItem(sInfo, sDisplay);
FormatEx(sDisplay, 64, "Gun Sounds: [%s]\n ", gI_Settings[client] & Mute_GunSounds ? "Muted" : "On");
IntToString(Mute_GunSounds, sInfo, 16);
menu.AddItem(sInfo, sDisplay);
if(CheckCommandAccess(client, "soundmanager_debug", ADMFLAG_RCON)) if(CheckCommandAccess(client, "soundmanager_debug", ADMFLAG_RCON))
{ {
FormatEx(sDisplay, 64, "Debug Prints: [%s]", gI_Settings[client] & Debug ? "Yes" : "No"); AddSettingItemToMenu(menu, client, "Debug Prints", Debug);
IntToString(Debug, sInfo, 16);
menu.AddItem(sInfo, sDisplay);
} }
menu.Display(client, MENU_TIME_FOREVER); menu.Display(client, MENU_TIME_FOREVER);
return Plugin_Handled; return Plugin_Handled;
} }
void AddSettingItemToMenu(Menu menu, int client, const char[] setting_name, int setting_id, bool new_line = false)
{
char sDisplay[64];
char sInfo[16];
FormatEx(sDisplay, 64, "%s: [%s]", setting_name, gI_Settings[client] & setting_id ? "Muted" : "On");
if(new_line)
{
StrCat(sDisplay, 64, "\n ");
}
IntToString(setting_id, sInfo, 16);
menu.AddItem(sInfo, sDisplay);
}
public int MenuHandler_Sounds(Menu menu, MenuAction action, int param1, int param2) public int MenuHandler_Sounds(Menu menu, MenuAction action, int param1, int param2)
{ {
if(action == MenuAction_Select) if(action == MenuAction_Select)
@ -565,19 +561,7 @@ public Action Hook_ShotgunShot(const char[] te_name, const int[] Players, int nu
// Check which clients need to be excluded. // Check which clients need to be excluded.
int newClients[MAXPLAYERS+1]; int newClients[MAXPLAYERS+1];
int count = 0; int count = FilterClientsWithSettingOn(Mute_GunSounds, numClients, Players, newClients);
for(int i = 0; i < numClients; i++)
{
int iClient = Players[i];
// player not muting gun sounds
if(gI_Settings[iClient] & Mute_GunSounds == 0)
{
newClients[count] = iClient;
count++;
}
}
// No clients were excluded. // No clients were excluded.
if(count == numClients) if(count == numClients)
@ -630,6 +614,46 @@ void CheckShotgunShotHook()
gB_ShouldHookShotgunShot = bShouldHook; gB_ShouldHookShotgunShot = bShouldHook;
} }
public Action NormalSoundHook(int clients[MAXPLAYERS], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags, char soundEntry[PLATFORM_MAX_PATH], int &seed)
{
if(StrEqual(sample, "player/damage1.wav")
|| StrEqual(sample, "player/damage2.wav")
|| StrEqual(sample, "player/damage3.wav"))
{
int newClients[MAXPLAYERS];
int count = FilterClientsWithSettingOn(Mute_HurtSounds, numClients, clients, newClients);
if(count != numClients)
{
clients = newClients;
numClients = count;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
// returns count of players with enabled sound
int FilterClientsWithSettingOn(int setting_id, int numClients, const int[] input_players, int[] output_players)
{
int count = 0;
for(int i = 0; i < numClients; i++)
{
int iClient = input_players[i];
// player not muting gun sounds
if(gI_Settings[iClient] & setting_id == 0)
{
output_players[count] = iClient;
count++;
}
}
return count;
}
bool IsValidClient(int client) bool IsValidClient(int client)
{ {
return (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsClientSourceTV(client)); return (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsClientSourceTV(client));