Звук в радиусе от игрока для всех

Kruzi

Участник
Сообщения
153
Реакции
20
Подскажите полный код как добавить звук в закачку, как его воспроизвести в определённом радиусе от игрока, чтобы слышали все. Если есть примеры с таким описанием, тоже давайте.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
в определённом радиусе от игрока
Получаешь координаты/позицию точки/игрока, от которого нужно воспроизвести звук, а потом то же самое делаешь с остальными в цикле, проверяя GetVectorDistance. Если меньше или равно нужному - воспроизводишь этому индекс-игроку звук.
 

Kruzi

Участник
Сообщения
153
Реакции
20
Получаешь координаты/позицию точки/игрока, от которого нужно воспроизвести звук, а потом то же самое делаешь с остальными в цикле, проверяя GetVectorDistance. Если меньше или равно нужному - воспроизводишь этому индекс-игроку звук.
Можешь на конкретном примере показать?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
воспроизвести в определённом радиусе от игрока, чтобы слышали все
PHP:
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);
        }
    }
}
Float:center[3] - координаты источника звука (центра);
String:sound - путь к воспроизводимому звуку, начиная от папки sound;
Float:Radius - радиус от источника, в котором любой игрок услышит звук.
PHP:
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);
		}
	}
}
 

Kruzi

Участник
Сообщения
153
Реакции
20
Почему-то звук не воспроизводит, вместо него там очень слабый щелчёк вроде как ошибки, который еле слышно. В консоли видно только это.
[Sound] S_StartSound(): Failed to load sound 'sound1\sound1.mp3'. Can't create mixer.
Как пофиксить?
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@AlmazON, кажется это лог клиента) И говорит о том, что у звука не поддерживаемый битрейт. А вообще хз что он говорит, обычно меняешь битрейт, перезаливаешь и становится норм.
 

SenatoR

Участник
Сообщения
773
Реакции
344
@AlmazON, а зачем ты так извращался, когда воспроизведение звука в радиусе от игрока это обычный EmitSoundToAll
 

TolikCorp

Участник
Сообщения
874
Реакции
334
В плагин медика залезь, там конкретно на примере увидишь.
 

Kruzi

Участник
Сообщения
153
Реакции
20
@AlmazON, кажется это лог клиента) И говорит о том, что у звука не поддерживаемый битрейт. А вообще хз что он говорит, обычно меняешь битрейт, перезаливаешь и становится норм.
Так какой битрейт должен быть?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
воспроизведение звука в радиусе от игрока это обычный EmitSoundToAll
в определённом радиусе
И где же вы видите параметр для указания конкретного (определённого) радиуса?
@Kruzi, кастомный звук ещё нужно поставить в загрузку для любой игры.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Это та же громкость звука, предустановка. А автору, как я понял, нужен одинаковый уровень звука для всех игроков, находящихся в строго определённом круге (расстоянии от центра). Никакой точности натив не даёт на этот счёт.
 
Последнее редактирование:

Kruzi

Участник
Сообщения
153
Реакции
20
И где же вы видите параметр для указания конкретного (определённого) радиуса?
@Kruzi, кастомный звук ещё нужно поставить в загрузку для любой игры.
Я поставил в загрузку как показано в CSGO Quirks - AlliedModders Wiki. Файл скачивает, но не воспроизводит мне(не знаю как в радиусе от меня) Скорее всего дело в битрейте, т.к. звук старый ещё с кс1.6 Когда поменяю звук, я отпишу
 

Kruzi

Участник
Сообщения
153
Реакции
20
Чтобы не гадать, прикрепи полный код, чего сделал.
И да, звук музыки в клиенте выкрути на максимум, чтобы услышать - пример плагина зависим от него.
Вот что я по добавлял (вроде бы всё). Сам файл исходник прикрепил.
PHP:
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 );
}
 

Вложения

  • hgr.inc
    10.3 КБ · Просмотры: 4
  • hookgrabrope.sp
    73 КБ · Просмотры: 11
Сверху Снизу