#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#include <sdktools>
ConVar g_hCvarMixer;
int g_iCvarMixer;
// Storm state triggers
int g_iStormLayer, g_iVoip, g_iVoipIn, g_iVoipOut;
public void OnPluginStart()
{
g_hCvarMixer = CreateConVar("l4d2_storm_mixer", "1", "0=Off, 1=Turn down the voip voice transmit volume during the storm state.", FCVAR_NOTIFY);
g_iCvarMixer = g_hCvarMixer.IntValue;
LoadStorm();
}
void LoadStorm()
{
if( g_iCvarMixer )
CreateMixer();
}
void CreateMixer()
{
g_iStormLayer = CreateEntityByName("sound_mix_layer");
if( g_iStormLayer != -1 )
{
DispatchKeyValue(g_iStormLayer, "targetname", "silver_rainLayer_voip");
DispatchKeyValue(g_iStormLayer, "MixLayerName", "stormLayer");
DispatchKeyValue(g_iStormLayer, "Level", "1");
DispatchSpawn(g_iStormLayer);
ActivateEntity(g_iStormLayer);
g_iStormLayer = EntIndexToEntRef(g_iStormLayer);
}
else
LogError("Failed to create g_iStormLayer 'sound_mix_layer'");
g_iVoip = CreateEntityByName("sound_mix_layer");
if( g_iVoip != -1 )
{
DispatchKeyValue(g_iVoip, "targetname", "silver_rainLayer_voip");
DispatchKeyValue(g_iVoip, "MixLayerName", "voipLayer");
DispatchSpawn(g_iVoip);
g_iVoip = EntIndexToEntRef(g_iVoip);
}
else
LogError("Failed to create g_iVoip 'sound_mix_layer'");
g_iVoipIn = CreateEntityByName("logic_relay");
if( g_iVoipIn != -1 )
{
DispatchKeyValue(g_iVoipIn, "targetname", "silver_relay_mix_blendin");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.2:0:-1");
AcceptEntityInput(g_iVoipIn, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.4:1:-1");
AcceptEntityInput(g_iVoipIn, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.6:2:-1");
AcceptEntityInput(g_iVoipIn, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.8:3:-1");
AcceptEntityInput(g_iVoipIn, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:1:4:-1");
AcceptEntityInput(g_iVoipIn, "AddOutput");
DispatchSpawn(g_iVoipIn);
ActivateEntity(g_iVoipIn);
}
else
LogError("Failed to create g_iVoipIn 'logic_relay'");
g_iVoipOut = CreateEntityByName("logic_relay");
if( g_iVoipOut != -1 )
{
DispatchKeyValue(g_iVoipOut, "targetname", "silver_relay_mix_blendout");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:1:0:-1");
AcceptEntityInput(g_iVoipOut, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.8:1:-1");
AcceptEntityInput(g_iVoipOut, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.6:2:-1");
AcceptEntityInput(g_iVoipOut, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.4:3:-1");
AcceptEntityInput(g_iVoipOut, "AddOutput");
SetVariantString("OnTrigger silver_rainLayer_voip:Level:.2:4:-1");
AcceptEntityInput(g_iVoipOut, "AddOutput");
DispatchSpawn(g_iVoipOut);
ActivateEntity(g_iVoipOut);
}
else
LogError("Failed to create g_iVoipOut 'logic_relay'");
}
public void OnMapEnd()
{
ResetPlugin();
}
void ResetPlugin()
{
if( IsValidEntRef(g_iStormLayer) )
AcceptEntityInput(g_iStormLayer, "Kill");
g_iStormLayer = 0;
if( IsValidEntRef(g_iVoip) )
AcceptEntityInput(g_iVoip, "Kill");
g_iVoip = 0;
if( IsValidEntRef(g_iVoipIn) )
AcceptEntityInput(g_iVoipIn, "Kill");
g_iVoipIn = 0;
if( IsValidEntRef(g_iVoipOut) )
AcceptEntityInput(g_iVoipOut, "Kill");
g_iVoipOut = 0;
}
bool IsValidEntRef(int entity)
{
if( entity && EntRefToEntIndex(entity) != INVALID_ENT_REFERENCE )
return true;
return false;
}