Получаешь координаты/позицию точки/игрока, от которого нужно воспроизвести звук, а потом то же самое делаешь с остальными в цикле, проверяя GetVectorDistance. Если меньше или равно нужному - воспроизводишь этому индекс-игроку звук.в определённом радиусе от игрока
Можешь на конкретном примере показать?Получаешь координаты/позицию точки/игрока, от которого нужно воспроизвести звук, а потом то же самое делаешь с остальными в цикле, проверяя GetVectorDistance. Если меньше или равно нужному - воспроизводишь этому индекс-игроку звук.
воспроизвести в определённом радиусе от игрока, чтобы слышали все
stock PlaySoundRadius(const Float:center[3], const String:sound[] = "buttons/blip2.wav", const Float:Radius = 100.0)
{
decl Float:position[3];
for (new i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
GetClientAbsOrigin(i, position);
if (GetVectorDistance(center, position) <= Radius) ClientCommand(i, "playgamesound \"%s\"", sound);
}
}
}
public OnPluginStart() RegConsoleCmd("sm_playradius", PlaySound);
public Action:PlaySound(client, args)
{
if (client)
{
decl Float:center[3];
GetClientAbsOrigin(client, center);
PlaySoundRadius(center);
}
return Plugin_Handled;
}
stock PlaySoundRadius(const Float:center[3], const String:sound[] = "buttons/blip2.wav", const Float:Radius = 100.0)
{
decl Float:position[3];
for (new i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
GetClientAbsOrigin(i, position);
if (GetVectorDistance(center, position) <= Radius) ClientCommand(i, "playgamesound \"%s\"", sound);
}
}
}
Как пофиксить?[Sound] S_StartSound(): Failed to load sound 'sound1\sound1.mp3'. Can't create mixer.
Кастомные звуки нужно кэшировать для CS:S, а для CS:GO ставить */ в начале пути.Как пофиксить?
воспроизведение звука в радиусе от игрока это обычный EmitSoundToAll
EmitAmbientSound
И где же вы видите параметр для указания конкретного (определённого) радиуса?в определённом радиусе
точняк, перепуталEmitAmbientSound
Это та же громкость звука, предустановка. А автору, как я понял, нужен одинаковый уровень звука для всех игроков, находящихся в строго определённом круге (расстоянии от центра). Никакой точности натив не даёт на этот счёт.можно SNDLEVEL
Я поставил в загрузку как показано в CSGO Quirks - AlliedModders Wiki. Файл скачивает, но не воспроизводит мне(не знаю как в радиусе от меня) Скорее всего дело в битрейте, т.к. звук старый ещё с кс1.6 Когда поменяю звук, я отпишуИ где же вы видите параметр для указания конкретного (определённого) радиуса?
@Kruzi, кастомный звук ещё нужно поставить в загрузку для любой игры.
Чтобы не гадать, прикрепи полный код, чего сделал.поставил в загрузку
Вот что я по добавлял (вроде бы всё). Сам файл исходник прикрепил.Чтобы не гадать, прикрепи полный код, чего сделал.
И да, звук музыки в клиенте выкрути на максимум, чтобы услышать - пример плагина зависим от него.
new const String:FULL_SOUND_PATH[] = "sound/hooksound/hook.mp3";
new const String:RELATIVE_SOUND_PATH[] = "*/hooksound/hook.mp3";
public OnMapStart()
{
AddFileToDownloadsTable( FULL_SOUND_PATH );
FakePrecacheSound( RELATIVE_SOUND_PATH );
}
// Finish hooking
SetEntityGravity(client, 0.0); // Set gravity to 0 so client floats in a straight line
PlaySound(client, 0);
EmitSoundFromOrigin(g_cvarSound[Hook], g_Location[client][0]); // Emit sound from where the hook landed
Hook_Push(client);
CreateTimer(0.1, Hooking, client, TIMER_REPEAT); // Create hooking loop
public Action:PlaySound(client, args)
{
if (client)
{
decl Float:center[3];
GetClientAbsOrigin(client, center);
PlaySoundRadius(center);
}
return Plugin_Handled;
}
stock PlaySoundRadius(const Float:center[3], const String:sound[] = FULL_SOUND_PATH, const Float:Radius = 100.0)
{
decl Float:position[3];
for (new i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
GetClientAbsOrigin(i, position);
if (GetVectorDistance(center, position) <= Radius) ClientCommand(i, "playgamesound \"%s\"", sound);
}
}
}
stock FakePrecacheSound( const String:szPath[] )
{
AddToStringTable( FindStringTable( "soundprecache" ), szPath );
}