sampvoice — это комплект разработки программного обеспечения (SDK) для реализации систем голосовой связи на языке Pawn для серверов SA:MP.
Для работы плагина он должен быть установлен игроками и на сервере. Для этого в плагине есть клиентская и серверная часть.
Игрокам доступны 2 варианта установки: автоматический (через установщик) и ручной (через архив).
releases
и выберите нужную версию плагина.releases
и скачайте архив с нужной версией клиента.releases
нужную версию плагина для вашей платформы.Чтобы начать использовать плагин, прочтите документацию, прилагаемую к серверной части. Для этого откройте файл sampvoice .chm, используя ссылку Windows. (Если документация не открывается, щелкните правой кнопкой мыши по файлу документации, затем Свойства -> Разблокировать -> ОК)
Чтобы начать использовать функциональность плагина, подключите заголовочный файл:
#include < sampvoice >
Вам необходимо знать, что плагин использует свои собственные типы и систему констант. Несмотря на то, что это всего лишь обертка над базовыми типами Pawn, она помогает ориентироваться в типах самого плагина и не путать указатели.
Чтобы перенаправить аудиотрафик от игрока A к игроку B, вам необходимо создать аудиопоток (с помощью SvCreateStream ), затем подключить его к каналу динамика игрока A (с помощью SvAttachStream ), затем подключить проигрывателя B к аудиопотоку (с помощью SvAttachListener ). . Готово, теперь при активации микрофона игрока А (например, с помощью функции SvPlay ) его аудиотрафик будет передаваться и затем прослушиваться игроком Б.
Звуковые потоки очень удобны. Их можно визуализировать на примере Discord:
Игроки могут быть одновременно и спикерами, и слушателями. В этом случае аудиотрафик плеера ему перенаправлен не будет.
Давайте рассмотрим некоторые возможности плагина на практическом примере. Ниже мы создадим сервер, который будет привязывать всех подключенных игроков к глобальному потоку, а также создадим локальный поток для каждого игрока. Таким образом, игроки смогут общаться через глобальный (слышно одинаково в любой точке карты) и локальный (слышно только рядом с игроком) чаты.
#include < sampvoice >
# define GLOBAL_CHANNEL 0
# define LOCAL_CHANNEL 1
new SV_UINT: gstream = SV_NONE;
new SV_UINT: lstream[MAX_PLAYERS] = { SV_NONE, ... };
public OnPlayerConnect (playerid)
{
if ( SvGetVersion (playerid) == 0 ) // Checking for plugin availability
{
SendClientMessage (playerid, - 1 , " Failed to find plugin. " );
}
else if ( SvHasMicro (playerid) == SV_FALSE) // Checking for microphone availability
{
SendClientMessage (playerid, - 1 , " Failed to find microphone. " );
}
else
{
if (gstream != SV_NONE)
{
SvSetKey (playerid, 0x 5A , GLOBAL_CHANNEL); // Z key
SvAttachStream (playerid, gstream, GLOBAL_CHANNEL);
SvAttachListener (gstream, playerid);
SvSetIcon (gstream, " speaker " );
SendClientMessage (playerid, - 1 , " Press Z to talk to global chat. " );
}
if ((lstream[playerid] = SvCreateStream ( 40 . 0 )) != SV_NONE)
{
SvSetKey (playerid, 0x 42 , LOCAL_CHANNEL); // B key
SvAttachStream (playerid, lstream[playerid], LOCAL_CHANNEL);
SvSetTarget (lstream[playerid], SvMakePlayer (playerid));
SvSetIcon (lstream[playerid], " speaker " );
SendClientMessage (playerid, - 1 , " Press B to talk to local chat. " );
}
}
}
public OnPlayerDisconnect (playerid, reason)
{
// Removing the player's local stream after disconnecting
if (lstream[playerid] != SV_NONE)
{
SvDeleteStream (lstream[playerid]);
lstream[playerid] = SV_NONE;
}
}
public OnGameModeInit ()
{
// Uncomment the line to enable debug mode
// SvEnableDebug();
gstream = SvCreateStream ();
}
public OnGameModeExit ()
{
if (gstream != SV_NONE)
{
SvDeleteStream (gstream);
gstream = SV_NONE;
}
}
Плагин компилируется для платформ Win32 и Linux x86 . Скомпилированные файлы будут находиться в каталоге sampvoice /binaries .
Ниже приведены дальнейшие инструкции:
Клонируйте репозиторий на свой компьютер и перейдите в каталог плагина:
git clone https://github.com/CyberMor/sampvoice.git
cd sampvoice
Для компиляции клиентской части плагина вам понадобится DirectX 9 SDK . По умолчанию клиентская часть компилируется для версии SA:MP 0.3.7(R1) , но вы также можете явно указать компилятору версию для сборки с помощью макросов SAMP_R1 и SAMP_R3 . Чтобы собрать клиентскую и серверную части плагина для платформы Win32 , откройте проект sampvoice в Visual Studio 2019 (или выше) и скомпилируйте его:
Сборка -> Сборка решения (F7)
Убедитесь, что у вас установлены все зависимости:
sudo apt install build-essential gcc-multilib g++-multilib
Чтобы собрать сервер управления для платформы Linux x86 , следуйте этим инструкциям:
cd control
make
cd ..
Чтобы собрать голосовой сервер для платформы Linux x86 , следуйте этим инструкциям:
cd voice
make
cd ..