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

Тема в разделе "Программирование / Скриптинг", создана пользователем Kruzi, 19 май 2016.

  1. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Подскажите полный код как добавить звук в закачку, как его воспроизвести в определённом радиусе от игрока, чтобы слышали все. Если есть примеры с таким описанием, тоже давайте.
     
  2. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.194
    Симпатии:
    427
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.583
    Симпатии:
    1.991
    Получаешь координаты/позицию точки/игрока, от которого нужно воспроизвести звук, а потом то же самое делаешь с остальными в цикле, проверяя GetVectorDistance. Если меньше или равно нужному - воспроизводишь этому индекс-игроку звук.
     
  4. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Можешь на конкретном примере показать?
     
  5. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.583
    Симпатии:
    1.991
    PHP:
    stock PlaySoundRadius(const Float:center[3], const String:sound[] = "buttons/blip2.wav", const Float:Radius 100.0)
    {
        
    decl Float:position[3];
        for (new 
    1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i))
            {
                
    GetClientAbsOrigin(iposition);
                if (
    GetVectorDistance(centerposition) <= RadiusClientCommand(i"playgamesound \"%s\""sound);
            }
        }
    }
    Float:center[3] - координаты источника звука (центра);
    String:sound - путь к воспроизводимому звуку, начиная от папки sound;
    Float:Radius - радиус от источника, в котором любой игрок услышит звук.
    PHP:
    public OnPluginStart() RegConsoleCmd("sm_playradius"PlaySound);

    public 
    Action:PlaySound(clientargs)
    {
        if (
    client)
        {
            
    decl Float:center[3];
            
    GetClientAbsOrigin(clientcenter);
            
    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 
    1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i))
            {
                
    GetClientAbsOrigin(iposition);
                if (
    GetVectorDistance(centerposition) <= RadiusClientCommand(i"playgamesound \"%s\""sound);
            }
        }
    }
     
    Kruzi нравится это.
  6. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Почему-то звук не воспроизводит, вместо него там очень слабый щелчёк вроде как ошибки, который еле слышно. В консоли видно только это.
    Как пофиксить?
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.583
    Симпатии:
    1.991
    Кастомные звуки нужно кэшировать для CS:S, а для CS:GO ставить */ в начале пути.
     
  8. gibs

    gibs Фитиль народного волненья

    Сообщения:
    541
    Симпатии:
    138
    @AlmazON, кажется это лог клиента) И говорит о том, что у звука не поддерживаемый битрейт. А вообще хз что он говорит, обычно меняешь битрейт, перезаливаешь и становится норм.
     
  9. SenatoR

    SenatoR Модератор

    Сообщения:
    712
    Симпатии:
    271
    @AlmazON, а зачем ты так извращался, когда воспроизведение звука в радиусе от игрока это обычный EmitSoundToAll
     
  10. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.003
    Симпатии:
    2.994
    EmitAmbientSound
     
    SenatoR нравится это.
  11. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    В плагин медика залезь, там конкретно на примере увидишь.
     
  12. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Так какой битрейт должен быть?
     
  13. gibs

    gibs Фитиль народного волненья

    Сообщения:
    541
    Симпатии:
    138
    @Kruzi, хз, попробуй 128
     
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.583
    Симпатии:
    1.991
    И где же вы видите параметр для указания конкретного (определённого) радиуса?
    @Kruzi, кастомный звук ещё нужно поставить в загрузку для любой игры.
     
    SenatoR нравится это.
  15. SenatoR

    SenatoR Модератор

    Сообщения:
    712
    Симпатии:
    271
    точняк, перепутал
     
  16. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.003
    Симпатии:
    2.994
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.583
    Симпатии:
    1.991
    Это та же громкость звука, предустановка. А автору, как я понял, нужен одинаковый уровень звука для всех игроков, находящихся в строго определённом круге (расстоянии от центра). Никакой точности натив не даёт на этот счёт.
     
    Последнее редактирование: 22 май 2016
  18. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Я поставил в загрузку как показано в CSGO Quirks - AlliedModders Wiki. Файл скачивает, но не воспроизводит мне(не знаю как в радиусе от меня) Скорее всего дело в битрейте, т.к. звук старый ещё с кс1.6 Когда поменяю звук, я отпишу
     
  19. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.583
    Симпатии:
    1.991
    Чтобы не гадать, прикрепи полный код, чего сделал.
    И да, звук музыки в клиенте выкрути на максимум, чтобы услышать - пример плагина зависим от него.
     
  20. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Вот что я по добавлял (вроде бы всё). Сам файл исходник прикрепил.
    PHP:
    new const String:FULL_SOUND_PATH[] = "sound/hooksound/hook.mp3";
    new const 
    String:RELATIVE_SOUND_PATH[] = "*/hooksound/hook.mp3";
    public 
    OnMapStart()
    {
        
    AddFileToDownloadsTableFULL_SOUND_PATH );
        
    FakePrecacheSoundRELATIVE_SOUND_PATH );
    }
                    
    // Finish hooking
                    
    SetEntityGravity(client0.0); // Set gravity to 0 so client floats in a straight line
                    
    PlaySound(client0);
                    
    EmitSoundFromOrigin(g_cvarSound[Hook], g_Location[client][0]); // Emit sound from where the hook landed
                    
    Hook_Push(client);
                    
    CreateTimer(0.1HookingclientTIMER_REPEAT); // Create hooking loop

    public Action:PlaySound(clientargs)
    {
        if (
    client)
        {
            
    decl Float:center[3];
            
    GetClientAbsOrigin(clientcenter);
            
    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 
    1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i))
            {
                
    GetClientAbsOrigin(iposition);
                if (
    GetVectorDistance(centerposition) <= RadiusClientCommand(i"playgamesound \"%s\""sound);
            }
        }
    }

    stock FakePrecacheSound( const String:szPath[] )
    {
        
    AddToStringTableFindStringTable"soundprecache" ), szPath );
    }
     

    Вложения:

    • hgr.inc
      Размер файла:
      10,3 КБ
      Просмотров:
      1
    • hookgrabrope.sp
      Размер файла:
      73 КБ
      Просмотров:
      3