#pragma semicolon 1
#include <sourcemod>
#include <sdktools_sound>
#include <sdktools_stringtables>
public Plugin:myinfo =
{
name = "Round Start Music",
author = "wS (World-Source.Ru)",
version = "1.2.2"
};
new Handle:g_hAr = INVALID_HANDLE;
new g_Count;
new g_CurrentSound = -1;
new bool:g_CanListen[MAXPLAYERS + 1] = {true, ...};
new String:g_LastSound[PLATFORM_MAX_PATH];
public OnPluginStart()
{
HookEvent("round_freeze_end", round_freeze_end, EventHookMode_PostNoCopy);
RegConsoleCmd("sm_rsm", sm_rsm);
}
public OnMapStart()
{
g_Count = 0;
g_LastSound[0] = '\0';
if (g_hAr == INVALID_HANDLE) g_hAr = CreateArray(PLATFORM_MAX_PATH);
else ClearArray(g_hAr);
new Handle:hDir = OpenDirectory("sound/round_start_music");
if (hDir != INVALID_HANDLE)
{
decl String:sound[PLATFORM_MAX_PATH], FileType:type, i;
new bool:bCSGO = GetEngineVersion() == Engine_CSGO;
while (ReadDirEntry(hDir, sound, PLATFORM_MAX_PATH, type))
{
if (type == FileType_File && (i = FindCharInString(sound, '.', true)) > 0 && (!strcmp(sound[i], ".mp3", false) || !strcmp(sound[i], ".wav", false)))
{
Format(sound, PLATFORM_MAX_PATH, "sound/round_start_music/%s", sound);
AddFileToDownloadsTable(sound);
if (bCSGO)
{
Format(sound, PLATFORM_MAX_PATH, "*%s", sound[6]);
static t = INVALID_STRING_TABLE;
if (t != INVALID_STRING_TABLE || (t = FindStringTable("soundprecache")) != INVALID_STRING_TABLE) AddToStringTable(t, sound);
}
else
{
strcopy(sound, PLATFORM_MAX_PATH, sound[6]);
PrecacheSound(sound, true);
}
PushArrayString(g_hAr, sound);
g_Count++;
}
}
CloseHandle(hDir);
}
}
public round_freeze_end(Handle:event, const String:name[], bool:silent)
{
if (g_Count < 1) return;
if (++g_CurrentSound >= g_Count) g_CurrentSound = 0;
GetArrayString(g_hAr, g_CurrentSound, g_LastSound, PLATFORM_MAX_PATH);
for (new i = 1; i <= MaxClients; i++)
{
if (g_CanListen[i] && IsClientInGame(i) && !IsFakeClient(i))
EmitSoundToClient(i, g_LastSound);
}
}
public Action:sm_rsm(client, args)
{
if (g_Count && 0 < client <= MaxClients)
{
if ((g_CanListen[client] = !g_CanListen[client]))
{
PrintToChat(client, "Round Start Music: ON");
}
else
{
PrintToChat(client, "Round Start Music: OFF");
if (g_LastSound[0]) { for (new i = 0; i < 8; i++) StopSound(client, i, g_LastSound); }
}
}
return Plugin_Handled;
}
public OnClientPutInServer(client)
{
g_CanListen[client] = true;
}