Untitled diff

Created Diff never expires
1 removal
193 lines
18 additions
210 lines
/**
/**
* vim: set ts=4 :
* vim: set ts=4 :
* =============================================================================
* =============================================================================
* EmitSoundAny
* EmitSoundAny
* Play sounds in a cross-game friendly way CS:GO and DOTA2 friendly way.
* Play sounds in a cross-game friendly way CS:GO and DOTA2 friendly way.
*
*
* EmitSoundAny (C)2014 AlliedModders and Powerlord (Ross Bemrose)
* EmitSoundAny (C)2014 AlliedModders and Powerlord (Ross Bemrose)
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
* =============================================================================
* =============================================================================
*
*
* This program is free software; you can redistribute it and/or modify it under
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the
* the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation.
* Free Software Foundation.
*
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* details.
*
*
* You should have received a copy of the GNU General Public License along with
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
* this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* As a special exception, AlliedModders LLC gives you permission to link the
* As a special exception, AlliedModders LLC gives you permission to link the
* code of this program (as well as its derivative works) to "Half-Life 2," the
* code of this program (as well as its derivative works) to "Half-Life 2," the
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
* by the Valve Corporation. You must obey the GNU General Public License in
* by the Valve Corporation. You must obey the GNU General Public License in
* all respects for all other code used. Additionally, AlliedModders LLC grants
* all respects for all other code used. Additionally, AlliedModders LLC grants
* this exception to all derivative works. AlliedModders LLC defines further
* this exception to all derivative works. AlliedModders LLC defines further
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
* or <http://www.sourcemod.net/license.php>.
* or <http://www.sourcemod.net/license.php>.
*
*
* Version: 1.0.2
* Version: 1.0.3
*/
*/
#if defined _emitsoundany_included
#if defined _emitsoundany_included
#endinput
#endinput
#endif
#endif
#define _emitsoundany_included
#define _emitsoundany_included


#include <sdktools>
#include <sdktools>


static bool:g_bCheckedEngine = false;
static bool:g_bCheckedEngine = false;
static bool:g_bNeedsFakePrecache = false;
static bool:g_bNeedsFakePrecache = false;


stock static EmitSoundCheckEngineVersion()
stock static EmitSoundCheckEngineVersion()
{
{
if (g_bCheckedEngine)
if (g_bCheckedEngine)
{
{
return;
return;
}
}


new EngineVersion:engVersion = GetEngineVersion();
new EngineVersion:engVersion = GetEngineVersion();
if (engVersion == Engine_CSGO || engVersion == Engine_DOTA)
if (engVersion == Engine_CSGO || engVersion == Engine_DOTA)
{
{
g_bNeedsFakePrecache = true;
g_bNeedsFakePrecache = true;
}
}
g_bCheckedEngine = true;
g_bCheckedEngine = true;
}
}


stock static bool:FakePrecacheSoundEx( const String:szPath[] )
stock static bool:FakePrecacheSoundEx( const String:szPath[] )
{
{
decl String:szPathStar[PLATFORM_MAX_PATH];
decl String:szPathStar[PLATFORM_MAX_PATH];
Format(szPathStar, sizeof(szPathStar), "*%s", szPath);
Format(szPathStar, sizeof(szPathStar), "*%s", szPath);
AddToStringTable( FindStringTable( "soundprecache" ), szPathStar );
AddToStringTable( FindStringTable( "soundprecache" ), szPathStar );
return true;
return true;
}
}


stock bool:PrecacheSoundAny( const String:szPath[], bool:preload=false)
stock bool:PrecacheSoundAny( const String:szPath[], bool:preload=false)
{
{
EmitSoundCheckEngineVersion();
EmitSoundCheckEngineVersion();
if (g_bNeedsFakePrecache)
if (g_bNeedsFakePrecache)
{
{
return FakePrecacheSoundEx(szPath);
return FakePrecacheSoundEx(szPath);
}
}
else
else
{
{
return PrecacheSound(szPath, preload);
return PrecacheSound(szPath, preload);
}
}
}
}


stock EmitSoundAny(const clients[],
stock EmitSoundAny(const clients[],
numClients,
numClients,
const String:sample[],
const String:sample[],
entity = SOUND_FROM_PLAYER,
entity = SOUND_FROM_PLAYER,
channel = SNDCHAN_AUTO,
channel = SNDCHAN_AUTO,
level = SNDLEVEL_NORMAL,
level = SNDLEVEL_NORMAL,
flags = SND_NOFLAGS,
flags = SND_NOFLAGS,
Float:volume = SNDVOL_NORMAL,
Float:volume = SNDVOL_NORMAL,
pitch = SNDPITCH_NORMAL,
pitch = SNDPITCH_NORMAL,
speakerentity = -1,
speakerentity = -1,
const Float:origin[3] = NULL_VECTOR,
const Float:origin[3] = NULL_VECTOR,
const Float:dir[3] = NULL_VECTOR,
const Float:dir[3] = NULL_VECTOR,
bool:updatePos = true,
bool:updatePos = true,
Float:soundtime = 0.0)
Float:soundtime = 0.0)
{
{
EmitSoundCheckEngineVersion();
EmitSoundCheckEngineVersion();


decl String:szSound[PLATFORM_MAX_PATH];
decl String:szSound[PLATFORM_MAX_PATH];
if (g_bNeedsFakePrecache)
if (g_bNeedsFakePrecache)
{
{
Format(szSound, sizeof(szSound), "*%s", sample);
Format(szSound, sizeof(szSound), "*%s", sample);
}
}
else
else
{
{
strcopy(szSound, sizeof(szSound), sample);
strcopy(szSound, sizeof(szSound), sample);
}
}
EmitSound(clients, numClients, szSound, entity, channel, level, flags, volume, pitch, speakerentity, origin, dir, updatePos, soundtime);
EmitSound(clients, numClients, szSound, entity, channel, level, flags, volume, pitch, speakerentity, origin, dir, updatePos, soundtime);
}
}


stock EmitSoundToClientAny(client,
stock EmitSoundToClientAny(client,
const String:sample[],
const String:sample[],
entity = SOUND_FROM_PLAYER,
entity = SOUND_FROM_PLAYER,
channel = SNDCHAN_AUTO,
channel = SNDCHAN_AUTO,
level = SNDLEVEL_NORMAL,
level = SNDLEVEL_NORMAL,
flags = SND_NOFLAGS,
flags = SND_NOFLAGS,
Float:volume = SNDVOL_NORMAL,
Float:volume = SNDVOL_NORMAL,
pitch = SNDPITCH_NORMAL,
pitch = SNDPITCH_NORMAL,
speakerentity = -1,
speakerentity = -1,
const Float:origin[3] = NULL_VECTOR,
const Float:origin[3] = NULL_VECTOR,
const Float:dir[3] = NULL_VECTOR,
const Float:dir[3] = NULL_VECTOR,
bool:updatePos = true,
bool:updatePos = true,
Float:soundtime = 0.0)
Float:soundtime = 0.0)
{
{
new clients[1];
new clients[1];
clients[0] = client;
clients[0] = client;
/* Save some work for SDKTools and remove SOUND_FROM_PLAYER references */
/* Save some work for SDKTools and remove SOUND_FROM_PLAYER references */
entity = (entity == SOUND_FROM_PLAYER) ? client : entity;
entity = (entity == SOUND_FROM_PLAYER) ? client : entity;
EmitSoundAny(clients, 1, sample, entity, channel,
EmitSoundAny(clients, 1, sample, entity, channel,
level, flags, volume, pitch, speakerentity,
level, flags, volume, pitch, speakerentity,
origin, dir, updatePos, soundtime);
origin, dir, updatePos, soundtime);
}
}


stock EmitSoundToAllAny(const String:sample[],
stock EmitSoundToAllAny(const String:sample[],
entity = SOUND_FROM_PLAYER,
entity = SOUND_FROM_PLAYER,
channel = SNDCHAN_AUTO,
channel = SNDCHAN_AUTO,
level = SNDLEVEL_NORMAL,
level = SNDLEVEL_NORMAL,
flags = SND_NOFLAGS,
flags = SND_NOFLAGS,
Float:volume = SNDVOL_NORMAL,
Float:volume = SNDVOL_NORMAL,
pitch = SNDPITCH_NORMAL,
pitch = SNDPITCH_NORMAL,
speakerentity = -1,
speakerentity = -1,
const Float:origin[3] = NULL_VECTOR,
const Float:origin[3] = NULL_VECTOR,
const Float:dir[3] = NULL_VECTOR,
const Float:dir[3] = NULL_VECTOR,
bool:updatePos = true,
bool:updatePos = true,
Float:soundtime = 0.0)
Float:soundtime = 0.0)
{
{
new clients[MaxClients];
new clients[MaxClients];
new total = 0;
new total = 0;
for (new i=1; i<=MaxClients; i++)
for (new i=1; i<=MaxClients; i++)
{
{
if (IsClientInGame(i))
if (IsClientInGame(i))
{
{
clients[total++] = i;
clients[total++] = i;
}
}
}
}
if (!total)
if (!total)
{
{
return;
return;
}
}
EmitSoundAny(clients, total, sample, entity, channel,
EmitSoundAny(clients, total, sample, entity, channel,
level, flags, volume, pitch, speakerentity,
level, flags, volume, pitch, speakerentity,
origin, dir, updatePos, soundtime);
origin, dir, updatePos, soundtime);
}
}


stock EmitAmbientSoundAny(const String:name[],
stock EmitAmbientSoundAny(const String:name[],
const Float:pos[3],
const Float:pos[3],
entity = SOUND_FROM_WORLD,
entity = SOUND_FROM_WORLD,
level = SNDLEVEL_NORMAL,
level = SNDLEVEL_NORMAL,
flags = SND_NOFLAGS,
flags = SND_NOFLAGS,
Float:vol = SNDVOL_NORMAL,
Float:vol = SNDVOL_NORMAL,
pitch = SNDPITCH_NORMAL,
pitch = SNDPITCH_NORMAL,
Float:delay = 0.0)
Float:delay = 0.0)
{
{
decl String:szSound[PLATFORM_MAX_PATH];
decl String:szSound[PLATFORM_MAX_PATH];
if (g_bNeedsFakePrecache)
if (g_bNeedsFakePrecache)
{
{
Format(szSound, sizeof(szSound), "*%s", sample);
Format(szSound, sizeof(szSound), "*%s", sample);
}
}
else
else
{
{
strcopy(szSound, sizeof(szSound), sample);
strcopy(szSound, sizeof(szSound), sample);
}
}
EmitAmbientSound(szSound, pos, entity, level, flags, vol, pitch, delay);
EmitAmbientSound(szSound, pos, entity, level, flags, vol, pitch, delay);
}
}


stock StopSoundAny(entity, channel, const String:name[])
{
EmitSoundCheckEngineVersion();
decl String:szSound[PLATFORM_MAX_PATH];
if (g_bNeedsFakePrecache)
{
Format(szSound, sizeof(szSound), "*%s", name);
}
else
{
strcopy(szSound, sizeof(szSound), name);
}
StopSound(entity, channel, szSound);
}