sm-zombiereloaded-3/src/zr/ambience.inc

97 lines
2.1 KiB
SourcePawn

/**
* ====================
* Zombie:Reloaded
* File: ambience.inc
* Author: Greyscale
* ====================
*/
new bool:soundValid = false;
new Handle:tAmbience = INVALID_HANDLE;
LoadAmbienceData()
{
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENCE]);
if (!ambience)
{
return;
}
decl String:sound[64];
GetConVarString(gCvars[CVAR_AMBIENCE_FILE], sound, sizeof(sound));
Format(sound, sizeof(sound), "sound/%s", sound);
soundValid = FileExists(sound, true);
if (soundValid)
{
AddFileToDownloadsTable(sound);
}
else
{
ZR_LogMessage("Ambient sound load failed", sound);
}
}
RestartAmbience()
{
if (tAmbience != INVALID_HANDLE)
{
CloseHandle(tAmbience);
}
CreateTimer(0.0, AmbienceLoop, _, TIMER_FLAG_NO_MAPCHANGE);
}
public Action:AmbienceLoop(Handle:timer)
{
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENCE]);
if (!ambience || !soundValid)
{
return;
}
decl String:sound[64];
GetConVarString(gCvars[CVAR_AMBIENCE_FILE], sound, sizeof(sound));
EmitAmbience(sound);
new Float:delay = GetConVarFloat(gCvars[CVAR_AMBIENCE_LENGTH]);
tAmbience = CreateTimer(delay, AmbienceLoop, _, TIMER_FLAG_NO_MAPCHANGE);
}
StopAmbience()
{
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENCE]);
if (!ambience)
{
return;
}
decl String:sound[64];
GetConVarString(gCvars[CVAR_AMBIENCE_FILE], sound, sizeof(sound));
new maxplayers = GetMaxClients();
for (new x = 1; x <= maxplayers; x++)
{
if (!IsClientInGame(x))
{
continue;
}
StopSound(x, SNDCHAN_AUTO, sound);
}
}
EmitAmbience(const String:sound[])
{
PrecacheSound(sound);
StopAmbience();
new Float:volume = GetConVarFloat(gCvars[CVAR_AMBIENCE_VOLUME]);
EmitSoundToAll(sound, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, volume, SNDPITCH_NORMAL, -1, NULL_VECTOR, NULL_VECTOR, true, 0.0);
}