Removed debug test commands from previous commit, added ambientsounds module, removed old, and removed some unused translations phrases.
This commit is contained in:
parent
ee9d3a9f39
commit
d5e29b883c
File diff suppressed because it is too large
Load Diff
@ -22,16 +22,12 @@
|
||||
#include "zr/cvars"
|
||||
#include "zr/translation"
|
||||
#include "zr/offsets"
|
||||
#include "zr/ambience"
|
||||
#include "zr/models"
|
||||
#include "zr/overlays"
|
||||
|
||||
// Class system
|
||||
#include "zr/playerclasses/playerclasses"
|
||||
|
||||
// Antistick
|
||||
#include "zr/antistick"
|
||||
|
||||
#include "zr/anticamp"
|
||||
#include "zr/teleport"
|
||||
#include "zr/zombie"
|
||||
@ -44,6 +40,9 @@
|
||||
// Sound effects
|
||||
#include "zr/soundeffects/soundeffects"
|
||||
|
||||
// Antistick
|
||||
#include "zr/antistick"
|
||||
|
||||
// Hitgroups
|
||||
#include "zr/hitgroups"
|
||||
|
||||
@ -146,12 +145,14 @@ public OnMapStart()
|
||||
// Forward event to modules.
|
||||
ClassLoad();
|
||||
WeaponsLoad();
|
||||
SEffectsOnMapStart();
|
||||
HitgroupsLoad();
|
||||
Anticamp_Startup();
|
||||
}
|
||||
|
||||
public OnMapEnd()
|
||||
{
|
||||
// Forward event to modules.
|
||||
Anticamp_Disable();
|
||||
}
|
||||
|
||||
@ -176,7 +177,9 @@ public OnConfigsExecuted()
|
||||
}
|
||||
|
||||
FindMapSky();
|
||||
LoadAmbienceData();
|
||||
|
||||
// Forward event to modules.
|
||||
SEffectsLoad();
|
||||
}
|
||||
|
||||
public OnClientPutInServer(client)
|
||||
@ -185,14 +188,12 @@ public OnClientPutInServer(client)
|
||||
|
||||
// Forward event to modules.
|
||||
ClassClientInit(client);
|
||||
ZombieSoundsClientInit(client);
|
||||
SEffectsClientInit(client);
|
||||
WeaponsClientInit(client);
|
||||
SpawnProtectClientInit(client);
|
||||
RespawnClientInit(client);
|
||||
ZHPClientInit(client);
|
||||
|
||||
if (!IsFakeClient(client)) AmbienceStart(client);
|
||||
|
||||
ClientHookAttack(client);
|
||||
FindClientDXLevel(client);
|
||||
|
||||
@ -214,7 +215,6 @@ public OnClientDisconnect(client)
|
||||
ClassOnClientDisconnect(client);
|
||||
WeaponsOnClientDisconnect(client);
|
||||
ZTeleResetClient(client);
|
||||
AmbienceStop(client);
|
||||
|
||||
for (new x = 0; x < MAXTIMERS; x++)
|
||||
{
|
||||
@ -232,7 +232,6 @@ MapChangeCleanup()
|
||||
{
|
||||
tRound = INVALID_HANDLE;
|
||||
tInfect = INVALID_HANDLE;
|
||||
AmbienceStopAll();
|
||||
AntiStickReset();
|
||||
|
||||
// x = client index.
|
||||
|
@ -1,139 +0,0 @@
|
||||
/**
|
||||
* ====================
|
||||
* Zombie:Reloaded
|
||||
* File: ambience.inc
|
||||
* Author: Greyscale
|
||||
* ====================
|
||||
*/
|
||||
|
||||
// TODO: Move skybox and lightning functions into this file.
|
||||
|
||||
new bool:AmbienceLoaded = false;
|
||||
new String:AmbienceSound[64];
|
||||
new Float:AmbienceVolume;
|
||||
new Handle:tAmbience[MAXPLAYERS + 1] = {INVALID_HANDLE, ...};
|
||||
|
||||
LoadAmbienceData()
|
||||
{
|
||||
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENCE]);
|
||||
if (!ambience)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
decl String:sound[64];
|
||||
GetConVarString(gCvars[CVAR_AMBIENCE_FILE], AmbienceSound, sizeof(AmbienceSound));
|
||||
Format(sound, sizeof(sound), "sound/%s", AmbienceSound);
|
||||
|
||||
AmbienceLoaded = FileExists(sound, true);
|
||||
|
||||
if (AmbienceLoaded)
|
||||
{
|
||||
AddFileToDownloadsTable(sound);
|
||||
PrecacheSound(AmbienceSound);
|
||||
AmbienceVolume = GetConVarFloat(gCvars[CVAR_AMBIENCE_VOLUME]);
|
||||
|
||||
if (AmbienceVolume <= 0.0)
|
||||
{
|
||||
// No reason to play ambience sound if it's muted.
|
||||
AmbienceLoaded = false;
|
||||
if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_AMBIENCE)) ZR_LogMessageFormatted(-1, "ambience", "startup", "Ambience volume is muted or invalid.", LOG_FORMAT_TYPE_ERROR);
|
||||
}
|
||||
|
||||
if (LogFlagCheck(LOG_DEBUG, LOG_MODULE_AMBIENCE)) ZR_LogMessageFormatted(-1, "ambience", "startup", "Ambience sound loaded.");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_AMBIENCE))
|
||||
{
|
||||
decl String:log_message[256];
|
||||
ZR_TranslateMessage(log_message, sizeof(log_message), "Ambience sound load failed", sound);
|
||||
ZR_LogMessageFormatted(-1, "ambience", "startup", log_message, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AmbienceStart(client)
|
||||
{
|
||||
if (!AmbienceLoaded)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENCE]);
|
||||
if (!ambience)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
new Float:delay = GetConVarFloat(gCvars[CVAR_AMBIENCE_LENGTH]);
|
||||
if (delay <= 0.0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!IsClientConnected(client) || !IsClientInGame(client))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (LogFlagCheck(LOG_DEBUG, LOG_MODULE_AMBIENCE)) ZR_LogMessageFormatted(client, "ambience", "start", "Starting ambience on client %d...", _, client);
|
||||
AmbiencePlay(client);
|
||||
tAmbience[client] = CreateTimer(delay, AmbienceTimer, client, TIMER_FLAG_NO_MAPCHANGE | TIMER_REPEAT);
|
||||
}
|
||||
|
||||
AmbienceStop(client)
|
||||
{
|
||||
if (tAmbience[client] != INVALID_HANDLE)
|
||||
{
|
||||
KillTimer(tAmbience[client]);
|
||||
tAmbience[client] = INVALID_HANDLE;
|
||||
if (IsClientConnected(client) && IsClientInGame(client))
|
||||
{
|
||||
StopSound(client, SNDCHAN_AUTO, AmbienceSound);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AmbienceStopAll()
|
||||
{
|
||||
// x = client index.
|
||||
for (new x = 1; x < MaxClients; x++)
|
||||
{
|
||||
AmbienceStop(x);
|
||||
}
|
||||
}
|
||||
|
||||
AmbienceRestart(client)
|
||||
{
|
||||
AmbienceStop(client);
|
||||
AmbienceStart(client);
|
||||
}
|
||||
|
||||
AmbienceRestartAll()
|
||||
{
|
||||
// x = client index.
|
||||
for (new x = 1; x < MaxClients; x++)
|
||||
{
|
||||
AmbienceRestart(x);
|
||||
}
|
||||
}
|
||||
|
||||
public Action:AmbienceTimer(Handle:timer, any:client)
|
||||
{
|
||||
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENCE]);
|
||||
if (!ambience || !AmbienceLoaded)
|
||||
{
|
||||
KillTimer(tAmbience[client]);
|
||||
tAmbience[client] = INVALID_HANDLE;
|
||||
return;
|
||||
}
|
||||
|
||||
AmbiencePlay(client);
|
||||
}
|
||||
|
||||
AmbiencePlay(client)
|
||||
{
|
||||
EmitSoundToClient(client, AmbienceSound, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, AmbienceVolume, SNDPITCH_NORMAL, -1, NULL_VECTOR, NULL_VECTOR, true, 0.0);
|
||||
if (LogFlagCheck(LOG_DEBUG, LOG_MODULE_AMBIENCE)) ZR_LogMessageFormatted(client, "ambience", "play", "Playing ambience sound on client %d.", _, client);
|
||||
}
|
@ -21,6 +21,15 @@
|
||||
*/
|
||||
new Handle:tAntiStick = INVALID_HANDLE;
|
||||
|
||||
/**
|
||||
* The round is starting.
|
||||
*/
|
||||
AntiStickOnRoundStart()
|
||||
{
|
||||
// Restart antistick timer.
|
||||
AntiStickRestart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Restarts the AntiStickTimer function.
|
||||
*/
|
||||
@ -97,8 +106,7 @@ AntiStickIsStuck(client)
|
||||
}
|
||||
|
||||
/**
|
||||
* Repeated timer function.
|
||||
* Automatically unsticks players that are stuck together.
|
||||
* Timer callback, automatically unsticks players that are stuck together.
|
||||
*/
|
||||
public Action:AntiStickTimer(Handle:timer)
|
||||
{
|
||||
|
@ -311,7 +311,7 @@ public Action:Command_LogFlags(client, argc)
|
||||
ReplyToCommand(client, message);
|
||||
message[0] = 0;
|
||||
|
||||
StrCat(message, sizeof(message), "LOG_MODULE_AMBIENCE (2048) - ambience.inc\n");
|
||||
StrCat(message, sizeof(message), "LOG_MODULE_AMBIENTSOUNDS (2048) - ambientsounds.inc\n");
|
||||
StrCat(message, sizeof(message), "LOG_MODULE_OVERLAYS (4096) - overlays.inc\n");
|
||||
StrCat(message, sizeof(message), "LOG_MODULE_SAYTRIGGERS (8192) - sayhooks.inc\n");
|
||||
StrCat(message, sizeof(message), "LOG_MODULE_TELEPORT (16384) - teleport.inc\n");
|
||||
|
@ -11,10 +11,10 @@ enum ZRSettings
|
||||
Handle:CVAR_ENABLE,
|
||||
Handle:CVAR_LOG,
|
||||
Handle:CVAR_ALLOW_PLAYER_TEAM,
|
||||
Handle:CVAR_AMBIENCE,
|
||||
Handle:CVAR_AMBIENCE_FILE,
|
||||
Handle:CVAR_AMBIENCE_LENGTH,
|
||||
Handle:CVAR_AMBIENCE_VOLUME,
|
||||
Handle:CVAR_AMBIENTSOUNDS,
|
||||
Handle:CVAR_AMBIENTSOUNDS_FILE,
|
||||
Handle:CVAR_AMBIENTSOUNDS_LENGTH,
|
||||
Handle:CVAR_AMBIENTSOUNDS_VOLUME,
|
||||
Handle:CVAR_SOUNDEFFECTS_MOAN,
|
||||
Handle:CVAR_SOUNDEFFECTS_GROAN,
|
||||
Handle:CVAR_SOUNDEFFECTS_DEATH,
|
||||
@ -101,10 +101,10 @@ CreateCvars()
|
||||
gCvars[CVAR_ENABLE] = CreateConVar("zr_enable", "1", "Enable zombie gameplay (0: Disable)");
|
||||
gCvars[CVAR_LOG] = CreateConVar("zr_log", "331", "Logging flags. Log messages to sourcemod logs, server console or client console. Use zr_log_flags to see a list of flags. (0: Disable)");
|
||||
gCvars[CVAR_ALLOW_PLAYER_TEAM] = CreateConVar("zr_allow_player_team", "0", "This will allow the player_team event to be fired on first team join, enable when using mani model menu (0: Disable)");
|
||||
gCvars[CVAR_AMBIENCE] = CreateConVar("zr_ambience", "1", "Enable creepy ambience to be played throughout the game (0: Disable)");
|
||||
gCvars[CVAR_AMBIENCE_FILE] = CreateConVar("zr_ambience_file", "ambient/zr/zr_ambience.mp3", "Path to ambient sound file that will be played throughout the game, when zr_ambience is 1");
|
||||
gCvars[CVAR_AMBIENCE_LENGTH] = CreateConVar("zr_ambience_length", "60.0", "The length, in seconds, of the ambient sound file");
|
||||
gCvars[CVAR_AMBIENCE_VOLUME] = CreateConVar("zr_ambience_volume", "0.6", "Volume of ambient sounds when zr_ambience is 1 (0.0: Unhearable, 1.0: Max volume)");
|
||||
gCvars[CVAR_AMBIENTSOUNDS] = CreateConVar("zr_ambientsounds", "1", "Enable creepy ambience to be played throughout the game (0: Disable)");
|
||||
gCvars[CVAR_AMBIENTSOUNDS_FILE] = CreateConVar("zr_ambientsounds_file", "ambient/zr/zr_ambience.mp3", "Path to ambient sound file that will be played throughout the game, when zr_ambience is 1");
|
||||
gCvars[CVAR_AMBIENTSOUNDS_LENGTH] = CreateConVar("zr_ambientsounds_length", "60.0", "The length, in seconds, of the ambient sound file");
|
||||
gCvars[CVAR_AMBIENTSOUNDS_VOLUME] = CreateConVar("zr_ambientsounds_volume", "1.0", "Volume of ambient sounds when zr_ambience is 1 (0.0: Unhearable, 1.0: Max volume)");
|
||||
gCvars[CVAR_SOUNDEFFECTS_MOAN] = CreateConVar("zr_soundeffects_moan", "50", "How often, in seconds, a zombie moans (0: Disable)");
|
||||
gCvars[CVAR_SOUNDEFFECTS_GROAN] = CreateConVar("zr_soundeffects_groan", "5", "Chance factor a zombie will groan when shot (Lower: More often, 0: Disable)");
|
||||
gCvars[CVAR_SOUNDEFFECTS_DEATH] = CreateConVar("zr_soundeffects_death", "1", "Zombie will emit a death sound when killed 0: Disable)");
|
||||
|
@ -33,10 +33,12 @@ UnhookEvents()
|
||||
public Action:RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
{
|
||||
ChangeLightStyle();
|
||||
AmbienceRestartAll();
|
||||
AntiStickRestart();
|
||||
RefreshList();
|
||||
|
||||
// Forward event to sub-modules.
|
||||
SEffectsOnRoundStart();
|
||||
AntiStickOnRoundStart();
|
||||
|
||||
if (tRound != INVALID_HANDLE)
|
||||
{
|
||||
KillTimer(tRound);
|
||||
@ -74,6 +76,7 @@ public Action:RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadca
|
||||
new Float:randlen = GetRandomFloat(min, max);
|
||||
tInfect = CreateTimer(randlen, MotherZombie, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
|
||||
// Forward events to modules.
|
||||
ZTeleEnable();
|
||||
|
||||
}
|
||||
@ -193,7 +196,7 @@ public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
|
||||
// Forward event to modules.
|
||||
ClassOnClientSpawn(index);
|
||||
ZombieSoundsOnClientSpawn(index);
|
||||
SEffectsOnClientSpawn(index);
|
||||
SpawnProtectOnClientSpawn(index);
|
||||
RespawnOnClientSpawn(index);
|
||||
ZHPOnClientSpawn(index);
|
||||
@ -241,7 +244,7 @@ public Action:PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
|
||||
// Forward event to modules.
|
||||
ClassAlphaUpdate(index);
|
||||
ZombieSoundsOnClientHurt(index);
|
||||
SEffectsOnClientHurt(index);
|
||||
KnockbackOnClientHurt(index, attacker, weapon, hitgroup, dmg_health);
|
||||
ZHPOnPlayerHurt(index);
|
||||
}
|
||||
@ -308,7 +311,7 @@ public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
|
||||
// Forward event to modules.
|
||||
ClassOnClientDeath(index);
|
||||
ZombieSoundsOnClientDeath(index);
|
||||
SEffectsOnClientDeath(index);
|
||||
SpawnProtectOnClientDeath(index);
|
||||
RespawnOnClientDeath(index, attacker, weapon);
|
||||
ZHPOnClientDeath(index);
|
||||
|
@ -16,57 +16,67 @@
|
||||
*/
|
||||
KnockbackOnClientHurt(client, attacker, const String:weapon[], hitgroup, dmg_health)
|
||||
{
|
||||
// Check if the attacker is a player.
|
||||
if (attacker != 0)
|
||||
// If attacker is invalid, then stop.
|
||||
if (!ZRIsValidClient(attacker))
|
||||
{
|
||||
// Check if a human attacks a zombie.
|
||||
if (IsPlayerZombie(client) && IsPlayerHuman(attacker))
|
||||
return;
|
||||
}
|
||||
|
||||
// Client is a human, then stop.
|
||||
if (IsPlayerHuman(client))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// If attacker is a zombie, then stop.
|
||||
if (IsPlayerZombie(attacker))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get zombie knockback value.
|
||||
new Float:knockback = ClassGetKnockback(client);
|
||||
|
||||
new Float:clientloc[3];
|
||||
new Float:attackerloc[3];
|
||||
|
||||
GetClientAbsOrigin(client, clientloc);
|
||||
|
||||
// Check if a grenade was thrown.
|
||||
if (StrEqual(weapon, "hegrenade"))
|
||||
{
|
||||
// Get the location of the grenade.
|
||||
if (KnockbackFindExplodingGrenade(attackerloc) == -1)
|
||||
{
|
||||
// Get zombie knockback value.
|
||||
new Float:knockback = ClassGetKnockback(client);
|
||||
|
||||
new Float:clientloc[3];
|
||||
new Float:attackerloc[3];
|
||||
|
||||
GetClientAbsOrigin(client, clientloc);
|
||||
|
||||
// Check if a grenade was thrown.
|
||||
if (StrEqual(weapon, "hegrenade"))
|
||||
{
|
||||
// Get the location of the grenade.
|
||||
if (KnockbackFindExplodingGrenade(attackerloc) == -1)
|
||||
{
|
||||
// If the grenade wasn't found, then stop.
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get attackers eye position.
|
||||
GetPlayerEyePosition(attacker, attackerloc);
|
||||
|
||||
// Get attackers eye angles.
|
||||
new Float:attackerang[3];
|
||||
GetPlayerEyeAngles(attacker, attackerang);
|
||||
|
||||
// Calculate knockback end-vector.
|
||||
TR_TraceRayFilter(attackerloc, attackerang, MASK_ALL, RayType_Infinite, KnockbackTRFilter);
|
||||
TR_GetEndPosition(clientloc);
|
||||
}
|
||||
|
||||
// Retrieve weapon knockback boost.
|
||||
new Float:boostWeapon = WeaponGetWeaponKnockback(weapon);
|
||||
|
||||
// Retrieve hitgroup knockback boost.
|
||||
new Float:boostHitgroup = HitgroupsGetHitgroupKnockback(hitgroup);
|
||||
|
||||
// Apply all knockback multipliers.
|
||||
knockback *= float(dmg_health) * boostWeapon * boostHitgroup;
|
||||
|
||||
// Apply knockback.
|
||||
KnockbackSetVelocity(client, attackerloc, clientloc, knockback);
|
||||
// If the grenade wasn't found, then stop.
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get attackers eye position.
|
||||
GetPlayerEyePosition(attacker, attackerloc);
|
||||
|
||||
// Get attackers eye angles.
|
||||
new Float:attackerang[3];
|
||||
GetPlayerEyeAngles(attacker, attackerang);
|
||||
|
||||
// Calculate knockback end-vector.
|
||||
TR_TraceRayFilter(attackerloc, attackerang, MASK_ALL, RayType_Infinite, KnockbackTRFilter);
|
||||
TR_GetEndPosition(clientloc);
|
||||
}
|
||||
|
||||
// Retrieve weapon knockback boost.
|
||||
new Float:boostWeapon = WeaponGetWeaponKnockback(weapon);
|
||||
|
||||
// Retrieve hitgroup knockback boost.
|
||||
new Float:boostHitgroup = HitgroupsGetHitgroupKnockback(hitgroup);
|
||||
|
||||
// Apply all knockback multipliers.
|
||||
knockback *= float(dmg_health) * boostWeapon * boostHitgroup;
|
||||
|
||||
// Apply knockback.
|
||||
KnockbackSetVelocity(client, attackerloc, clientloc, knockback);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,14 +75,6 @@ public Action:SayCommand(client, argc)
|
||||
{
|
||||
ZR_PrintToChat(client, "!ztele stuck");
|
||||
}
|
||||
else if (StrEqual(args, "play", false))
|
||||
{
|
||||
SEffectsEmitAmbientSound("ambient/machines/heli_pass_distant1.wav");
|
||||
}
|
||||
else if (StrEqual(args, "stop", false))
|
||||
{
|
||||
SEffectsStopAmbientSound("ambient/machines/heli_pass_distant1.wav");
|
||||
}
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
214
src/zr/soundeffects/ambientsounds.inc
Normal file
214
src/zr/soundeffects/ambientsounds.inc
Normal file
@ -0,0 +1,214 @@
|
||||
/*
|
||||
* ============================================================================
|
||||
*
|
||||
* Zombie:Reloaded
|
||||
*
|
||||
* File: ambientsounds.inc
|
||||
* Description: Plays ambient sounds to clients.
|
||||
*
|
||||
* ============================================================================
|
||||
*/
|
||||
|
||||
/**
|
||||
* Global variable that tells if ambient sound cvar data was loaded successfully.
|
||||
*/
|
||||
new bool:g_bAmbientSounds;
|
||||
|
||||
/**
|
||||
* Global variable to store ambient sounds timer handle.
|
||||
*/
|
||||
new Handle:tAmbientSounds = INVALID_HANDLE;
|
||||
|
||||
/**
|
||||
* Array for flagging client to play sound.
|
||||
*/
|
||||
new bool:bAmbientSoundsIsPlaying[MAXPLAYERS + 1];
|
||||
|
||||
/**
|
||||
* Load ambient sound data.
|
||||
*/
|
||||
AmbientSoundsLoad()
|
||||
{
|
||||
// Validate cvars.
|
||||
g_bAmbientSounds = AmbientSoundsValidateConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Client is joining the server.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
AmbientSoundsClientInit(client)
|
||||
{
|
||||
// Reset flag to play sound on client.
|
||||
bAmbientSoundsIsPlaying[client] = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ambient sounds cvars.
|
||||
*/
|
||||
bool:AmbientSoundsValidateConfig()
|
||||
{
|
||||
// If ambience is disabled, then stop.
|
||||
new bool:ambience = GetConVarBool(gCvars[CVAR_AMBIENTSOUNDS]);
|
||||
if (!ambience)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// If logging is disabled for ambient sounds, then stop.
|
||||
if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_AMBIENTSOUNDS))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get ambient sound file.
|
||||
decl String:sound[SOUND_MAX_PATH];
|
||||
GetConVarString(gCvars[CVAR_AMBIENTSOUNDS_FILE], sound, sizeof(sound));
|
||||
Format(sound, sizeof(sound), "sound/%s", sound);
|
||||
|
||||
// If file doesn't exist, then log error and stop.
|
||||
if (!FileExists(sound, true))
|
||||
{
|
||||
// Log invalid sound file error.
|
||||
ZR_LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Invalid sound file specified in zr_ambientsounds_file.", LOG_FORMAT_TYPE_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
// If volume is muted or invalid, then log error and stop.
|
||||
new Float:ambientvolume = GetConVarFloat(gCvars[CVAR_AMBIENTSOUNDS_VOLUME]);
|
||||
if (ambientvolume <= 0.0)
|
||||
{
|
||||
// Log invalid ambient sound volume error.
|
||||
ZR_LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Ambient sound is either muted or invalid.", LOG_FORMAT_TYPE_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
// If length is invalid, then log error and stop.
|
||||
new Float:ambientlength = GetConVarFloat(gCvars[CVAR_AMBIENTSOUNDS_LENGTH]);
|
||||
if (ambientlength <= 0.0)
|
||||
{
|
||||
// Log invalid ambient sound length error.
|
||||
ZR_LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Ambient sound length is invalid.", LOG_FORMAT_TYPE_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add sound file to downloads table.
|
||||
AddFileToDownloadsTable(sound);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Map is starting.
|
||||
*/
|
||||
AmbientSoundsOnMapStart()
|
||||
{
|
||||
// Reset timer handle.
|
||||
tAmbientSounds = INVALID_HANDLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* The round is starting.
|
||||
*/
|
||||
AmbientSoundsOnRoundStart()
|
||||
{
|
||||
// Restart ambient sound for all clients.
|
||||
AmbientSoundsRestart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Client is spawning into the game.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
AmbientSoundsOnClientSpawn(client)
|
||||
{
|
||||
// If ambience is disabled, then stop.
|
||||
if (!g_bAmbientSounds)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// If flag is enabled, then stop.
|
||||
if (bAmbientSoundsIsPlaying[client])
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get ambient sound file.
|
||||
decl String:sound[SOUND_MAX_PATH];
|
||||
GetConVarString(gCvars[CVAR_AMBIENTSOUNDS_FILE], sound, sizeof(sound));
|
||||
|
||||
// Get ambient sound volume.
|
||||
new Float:ambientvolume = GetConVarFloat(gCvars[CVAR_AMBIENTSOUNDS_VOLUME]);
|
||||
|
||||
// Emit ambient sound.
|
||||
SEffectsEmitAmbientSound(sound, ambientvolume, client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restart ambient sound for all clients.
|
||||
*/
|
||||
AmbientSoundsRestart()
|
||||
{
|
||||
// If timer is running, kill it.
|
||||
if (tAmbientSounds != INVALID_HANDLE)
|
||||
{
|
||||
KillTimer(tAmbientSounds);
|
||||
}
|
||||
|
||||
// If ambience is disabled, then stop.
|
||||
if (!g_bAmbientSounds)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// x = client index
|
||||
for (new x = 1; x <= MaxClients; x++)
|
||||
{
|
||||
// If client isn't in-game, then stop.
|
||||
if (!IsClientInGame(x))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bAmbientSoundsIsPlaying[x] = false;
|
||||
}
|
||||
|
||||
// Get ambient sound length.
|
||||
new Float:ambientlength = GetConVarFloat(gCvars[CVAR_AMBIENTSOUNDS_LENGTH]);
|
||||
|
||||
// Start ambient sounds timer.
|
||||
tAmbientSounds = CreateTimer(ambientlength, AmbientSoundsTimer, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Timer callback, Replays ambient sound on all clients.
|
||||
*
|
||||
* @param timer The timer handle.
|
||||
*/
|
||||
public Action:AmbientSoundsTimer(Handle:timer)
|
||||
{
|
||||
// If ambience is disabled, then stop.
|
||||
if (!g_bAmbientSounds)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get ambient sound file.
|
||||
decl String:sound[SOUND_MAX_PATH];
|
||||
GetConVarString(gCvars[CVAR_AMBIENTSOUNDS_FILE], sound, sizeof(sound));
|
||||
|
||||
// Get ambient sound volume.
|
||||
new Float:ambientvolume = GetConVarFloat(gCvars[CVAR_AMBIENTSOUNDS_VOLUME]);
|
||||
|
||||
// Emit ambient sound.
|
||||
SEffectsEmitAmbientSound(sound, ambientvolume);
|
||||
|
||||
// Get ambient sound length.
|
||||
new Float:ambientlength = GetConVarFloat(gCvars[CVAR_AMBIENTSOUNDS_LENGTH]);
|
||||
|
||||
// Start new timer with sound length as delay.
|
||||
tAmbientSounds = CreateTimer(ambientlength, AmbientSoundsTimer, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
@ -19,22 +19,139 @@
|
||||
*/
|
||||
#define SOUND_AMBIENT_CHANNEL 8
|
||||
|
||||
#include "zr/soundeffects/ambientsounds"
|
||||
#include "zr/soundeffects/zombiesounds"
|
||||
|
||||
/**
|
||||
* Emits an ambient sound
|
||||
* Load sound effects data.
|
||||
*/
|
||||
SEffectsEmitAmbientSound(const String:sound[], Float:soundvolume = 1.0)
|
||||
SEffectsLoad()
|
||||
{
|
||||
// Load ambient sound cvars.
|
||||
AmbientSoundsLoad();
|
||||
}
|
||||
|
||||
/**
|
||||
* Map is starting.
|
||||
*/
|
||||
SEffectsOnMapStart()
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
AmbientSoundsOnMapStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Client is joining the server.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
SEffectsClientInit(client)
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
AmbientSoundsClientInit(client);
|
||||
ZombieSoundsClientInit(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* The round is starting.
|
||||
*/
|
||||
SEffectsOnRoundStart()
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
AmbientSoundsOnRoundStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Client is spawning into the game.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
SEffectsOnClientSpawn(client)
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
AmbientSoundsOnClientSpawn(client);
|
||||
ZombieSoundsOnClientSpawn(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Client has been killed.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
SEffectsOnClientDeath(client)
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
ZombieSoundsOnClientDeath(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Client has been hurt.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
SEffectsOnClientHurt(client)
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
ZombieSoundsOnClientHurt(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Client has been infected.
|
||||
*
|
||||
* @param client The client index.
|
||||
*/
|
||||
SEffectsOnClientInfected(client)
|
||||
{
|
||||
// Forward event to sub-modules.
|
||||
ZombieSoundsOnClientInfected(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Emits an ambient sound
|
||||
*
|
||||
* @param sound The path to the sound file (relative to sounds/)
|
||||
* @param soundvolume The volume of the sound (0.0 - 1.0)
|
||||
* @param client (Optional) Client index to play sound to.
|
||||
*/
|
||||
SEffectsEmitAmbientSound(const String:sound[], Float:ambientvolume = 1.0, client = -1)
|
||||
{
|
||||
// Precache sound before playing.
|
||||
PrecacheSound(sound);
|
||||
|
||||
// Emit ambient sound.
|
||||
EmitSoundToAll(sound, SOUND_FROM_PLAYER, SOUND_AMBIENT_CHANNEL, _, _, soundvolume);
|
||||
// Stop sound before playing again.
|
||||
SEffectsStopAmbientSound(sound);
|
||||
|
||||
if (ZRIsValidClient(client))
|
||||
{
|
||||
// Emit ambient sound.
|
||||
EmitSoundToClient(client, sound, SOUND_FROM_PLAYER, SOUND_AMBIENT_CHANNEL, _, _, ambientvolume);
|
||||
|
||||
// Flag client that sound is playing.
|
||||
bAmbientSoundsIsPlaying[client] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (new x = 1; x <= MaxClients; x++)
|
||||
{
|
||||
// If client isn't in-game, then stop.
|
||||
if (!IsClientInGame(x))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Emit ambient sound.
|
||||
EmitSoundToClient(x, sound, SOUND_FROM_PLAYER, SOUND_AMBIENT_CHANNEL, _, _, ambientvolume);
|
||||
|
||||
// Flag client that sound is playing.
|
||||
bAmbientSoundsIsPlaying[x] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop an ambient sound
|
||||
*
|
||||
* @param sound The path to the sound file (relative to sounds/)
|
||||
*/
|
||||
SEffectsStopAmbientSound(const String:sound[])
|
||||
{
|
||||
@ -52,6 +169,12 @@ SEffectsStopAmbientSound(const String:sound[])
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replay an ambient sound
|
||||
*
|
||||
* @param sound The path to the sound file (relative to sounds/)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Emits a sound from a client.
|
||||
*
|
||||
|
@ -176,7 +176,8 @@ ZombieSoundsOnClientInfected(client)
|
||||
/**
|
||||
* Gets a random zombie sound from hl2 folder.
|
||||
*
|
||||
* @param sound The randomly picked moan sound.
|
||||
* @param sound The randomly picked sound.
|
||||
* @param soundtype The type of sound to get. (See enum ZombieSounds)
|
||||
* @return True if sound was successfully picked, false otherwise.
|
||||
*/
|
||||
bool:ZombieSoundsGetRandomSound(String:sound[], ZombieSounds:soundtype)
|
||||
|
@ -81,7 +81,7 @@ WeaponsLoad()
|
||||
|
||||
/**
|
||||
* Validate weapon config file and settings.
|
||||
*/
|
||||
*/
|
||||
WeaponsValidateConfig()
|
||||
{
|
||||
// If log flag check fails, don't log.
|
||||
|
@ -514,7 +514,7 @@ ZRLogFlagsMenu(client)
|
||||
decl String:z_log_ignore_console[64];
|
||||
decl String:z_log_modules_enabled[64];
|
||||
decl String:z_log_module_zombie[64];
|
||||
decl String:z_log_module_ambience[64];
|
||||
decl String:z_log_module_ambientsounds[64];
|
||||
decl String:z_log_module_overlays[64];
|
||||
decl String:z_log_module_saytriggers[64];
|
||||
decl String:z_log_module_teleport[64];
|
||||
@ -537,7 +537,7 @@ ZRLogFlagsMenu(client)
|
||||
Format(z_log_ignore_console, sizeof(z_log_ignore_console), "Don't log messages from the console (%d)", LogHasFlag(LOG_IGNORE_CONSOLE));
|
||||
Format(z_log_modules_enabled, sizeof(z_log_modules_enabled), "Module based log control (%d)", LogHasFlag(LOG_MODULES_ENABLED));
|
||||
Format(z_log_module_zombie, sizeof(z_log_module_zombie), "Zombie (%d)", LogHasFlag(LOG_MODULE_ZOMBIE));
|
||||
Format(z_log_module_ambience, sizeof(z_log_module_ambience), "Ambience (%d)", LogHasFlag(LOG_MODULE_AMBIENCE));
|
||||
Format(z_log_module_ambientsounds, sizeof(z_log_module_ambientsounds), "Ambient Sounds (%d)", LogHasFlag(LOG_MODULE_AMBIENTSOUNDS));
|
||||
Format(z_log_module_overlays, sizeof(z_log_module_overlays), "Overlays (%d)", LogHasFlag(LOG_MODULE_OVERLAYS));
|
||||
Format(z_log_module_saytriggers, sizeof(z_log_module_saytriggers), "Chat commands (%d)", LogHasFlag(LOG_MODULE_SAYTRIGGERS));
|
||||
Format(z_log_module_teleport, sizeof(z_log_module_teleport), "Teleporter (%d)", LogHasFlag(LOG_MODULE_TELEPORT));
|
||||
@ -560,7 +560,7 @@ ZRLogFlagsMenu(client)
|
||||
AddMenuItem(menu_log_flags, z_log_ignore_console, z_log_ignore_console, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_modules_enabled, z_log_modules_enabled, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_module_zombie, z_log_module_zombie, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_module_ambience, z_log_module_ambience, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_module_ambientsounds, z_log_module_ambientsounds, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_module_overlays, z_log_module_overlays, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_module_saytriggers, z_log_module_saytriggers, item_state);
|
||||
AddMenuItem(menu_log_flags, z_log_module_teleport, z_log_module_teleport, item_state);
|
||||
@ -638,7 +638,7 @@ public ZRLogFlagsMenuHandle(Handle:menu_log_flags, MenuAction:action, client, sl
|
||||
}
|
||||
case 11:
|
||||
{
|
||||
ToggleLogFlag(LOG_MODULE_AMBIENCE);
|
||||
ToggleLogFlag(LOG_MODULE_AMBIENTSOUNDS);
|
||||
ZRLogFlagsMenu(client);
|
||||
}
|
||||
case 12:
|
||||
|
@ -202,7 +202,7 @@ InfectPlayer(client, attacker = -1, bool:motherinfect = false)
|
||||
|
||||
// Forward event to modules.
|
||||
ClassOnClientInfected(client, motherinfect);
|
||||
ZombieSoundsOnClientInfected(client);
|
||||
SEffectsOnClientInfected(client);
|
||||
ZHPOnClientInfected(client);
|
||||
AbortTeleport(client);
|
||||
|
||||
|
@ -51,7 +51,7 @@ enum ZTeam
|
||||
#define LOG_MODULE_CLASSES 4096 /** Class system - playerclasses/ *.inc */
|
||||
#define LOG_MODULE_ZOMBIE 8192 /** zombie.inc */
|
||||
#define LOG_MODULE_SAYTRIGGERS 16384 /** sayhooks.inc */
|
||||
#define LOG_MODULE_AMBIENCE 32768 /** ambience.inc */
|
||||
#define LOG_MODULE_AMBIENTSOUNDS 32768 /** ambientsounds.inc */
|
||||
#define LOG_MODULE_OVERLAYS 65536 /** overlays.inc */
|
||||
#define LOG_MODULE_TELEPORT 131072 /** teleport.inc */
|
||||
#define LOG_MODULE_WEAPONS 262144 /** Weapons module - weapons/ *.inc */
|
||||
|
Loading…
Reference in New Issue
Block a user