StopSound: This seems to work so far..
I know the switch is somewhat 'useless' it just looks cleaner this way. :table:
This commit is contained in:
parent
b06ee55b63
commit
e9ce02f2d4
@ -3,14 +3,11 @@
|
||||
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <sdkhooks>
|
||||
#include <cstrike>
|
||||
#include <clientprefs>
|
||||
#include <multicolors>
|
||||
#include <CSSFixes>
|
||||
|
||||
#define PLUGIN_VERSION "3.0"
|
||||
#define MAX_MAPMUSIC_ENTITIES 2048
|
||||
#define PLUGIN_VERSION "3.1.0"
|
||||
|
||||
bool g_bStopWeaponSounds[MAXPLAYERS+1] = { false, ... };
|
||||
bool g_bStopMapMusic[MAXPLAYERS+1] = { false, ... };
|
||||
@ -54,6 +51,9 @@ public void OnPluginStart()
|
||||
// Detect game and hook appropriate tempent.
|
||||
AddTempEntHook("Shotgun Shot", CSS_Hook_ShotgunShot);
|
||||
|
||||
// Ambient sounds
|
||||
AddAmbientSoundHook(Hook_AmbientSound);
|
||||
|
||||
// Map music will be caught here
|
||||
HookEvent("round_end", Event_RoundEnd);
|
||||
HookEvent("player_spawn", Event_PlayerSpawn);
|
||||
@ -118,6 +118,9 @@ public void OnPluginEnd()
|
||||
// Remove tempent hook
|
||||
RemoveTempEntHook("Shotgun Shot", CSS_Hook_ShotgunShot);
|
||||
|
||||
// Remove ambient sound hook
|
||||
RemoveAmbientSoundHook(Hook_AmbientSound);
|
||||
|
||||
// Find ReloadEffect
|
||||
UserMsg ReloadEffect = GetUserMessageId("ReloadEffect");
|
||||
|
||||
@ -285,35 +288,29 @@ void CheckMapMusicHooks()
|
||||
|
||||
void StopMapMusic(int client)
|
||||
{
|
||||
char sSound[PLATFORM_MAX_PATH];
|
||||
char sEntity[16];
|
||||
int entity = INVALID_ENT_REFERENCE;
|
||||
|
||||
char sEntity[16];
|
||||
char sSample[PLATFORM_MAX_PATH];
|
||||
|
||||
StringMapSnapshot MapMusicSnap = g_MapMusic.Snapshot();
|
||||
for(int i = 0; i < MapMusicSnap.Length; i++)
|
||||
{
|
||||
MapMusicSnap.GetKey(i, sEntity, sizeof(sEntity));
|
||||
entity = EntRefToEntIndex(StringToInt(sEntity));
|
||||
|
||||
if(entity == INVALID_ENT_REFERENCE)
|
||||
if((entity = EntRefToEntIndex(StringToInt(sEntity))) == INVALID_ENT_REFERENCE)
|
||||
{
|
||||
g_MapMusic.Remove(sEntity);
|
||||
continue;
|
||||
}
|
||||
|
||||
g_MapMusic.GetString(sEntity, sSound, sizeof(sSound));
|
||||
g_MapMusic.GetString(sEntity, sSample, sizeof(sSample));
|
||||
|
||||
Client_StopSound(client, entity, SNDCHAN_STATIC, sSound);
|
||||
EmitSoundToClient(client, sSample, entity, SNDCHAN_STATIC, SNDLEVEL_NONE, SND_STOPLOOPING, SNDVOL_NORMAL, SNDPITCH_NORMAL);
|
||||
}
|
||||
delete MapMusicSnap;
|
||||
}
|
||||
|
||||
// I guess this is from SMLib
|
||||
void Client_StopSound(int client, int entity, int channel, const char[] name)
|
||||
{
|
||||
EmitSoundToClient(client, name, entity, channel, SNDLEVEL_NONE, SND_STOP, 0.0, SNDPITCH_NORMAL, _, _, _, true);
|
||||
}
|
||||
|
||||
public void CookieMenuHandler_StopSounds(int client, CookieMenuAction action, any info, char[] buffer, int maxlen)
|
||||
{
|
||||
if(action == CookieMenuAction_DisplayOption)
|
||||
@ -628,9 +625,9 @@ public void OnReloadEffect(DataPack pack)
|
||||
EndMessage();
|
||||
}
|
||||
|
||||
public Action OnBroadcastSound(int entity, char sample[PLATFORM_MAX_PATH], int clients[MAXPLAYERS], int &numClients)
|
||||
public Action Hook_AmbientSound(char sample[PLATFORM_MAX_PATH], int &entity, float &volume, int &level, int &pitch, float pos[3], int &flags, float &delay)
|
||||
{
|
||||
// Music
|
||||
// Are we playing music?
|
||||
if(sample[0] != '#')
|
||||
return Plugin_Continue;
|
||||
|
||||
@ -642,23 +639,36 @@ public Action OnBroadcastSound(int entity, char sample[PLATFORM_MAX_PATH], int c
|
||||
if(!g_bStopMapMusicHooked)
|
||||
return Plugin_Continue;
|
||||
|
||||
// Check which clients need to be excluded.
|
||||
int newClients = 0;
|
||||
for(int i = 0; i < numClients; i++)
|
||||
switch(flags)
|
||||
{
|
||||
int client = clients[i];
|
||||
if(!g_bStopMapMusic[client])
|
||||
case(SND_NOFLAGS):
|
||||
{
|
||||
clients[newClients] = clients[i];
|
||||
newClients++;
|
||||
// Starting sound..
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
if (!IsClientInGame(client) || g_bStopMapMusic[client])
|
||||
continue;
|
||||
|
||||
// Stop the old sound..
|
||||
EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, SNDLEVEL_NONE, SND_STOPLOOPING, SNDVOL_NORMAL, SNDPITCH_NORMAL);
|
||||
|
||||
// Pass through the new sound..
|
||||
EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, level, flags, volume, pitch);
|
||||
}
|
||||
}
|
||||
default:
|
||||
{
|
||||
// Nothing special going on.. Pass it through..
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
if (!IsClientInGame(client) || g_bStopMapMusic[client])
|
||||
continue;
|
||||
|
||||
EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, level, flags, volume, pitch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(newClients != numClients)
|
||||
{
|
||||
numClients = newClients;
|
||||
return Plugin_Changed;
|
||||
}
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
||||
// Block the default sound..
|
||||
return Plugin_Handled;
|
||||
}
|
Loading…
Reference in New Issue
Block a user