English | Русский
SAMPVOICE - это набор разработчика для реализации голосовых систем на языке Pawn под сервера SA:MP. В данный момент плагин поддерживает только версию SA:MP 0.3.7-R1.
- Контролируемая передача голосового потока
- Воспроизведение звуковых файлов
- Запись голосового потока в буфер и его трансляция
- Управление микрофоном игрока
- Создание звуковых эффектов
- Привязка голосового потока к игровым объектам
- И ещё множество мелочей...
Для работы плагина, его необходимо установить игрокам и на сервер. Для этого есть серверная и клиентская версии плагина.
Игрокам доступны 2 вариант установки: автоматический(через установщик) и ручной(через архив).
- Для того, чтобы скачать установщик перейдите по ссылке и выберите подходящую версию плагина.
- После скачивания запустите установщик, выберите язык установки, затем установщик автоматически определит директорию игры.
- Нажмите "ОК" и дождитесь конца установки.
- Перейдите по ссылке и скачайте архив с необходимой версией клиента.
- Распакуйте содержимое архива в корневую директорию игры с заменой файлов.
- Загрузите архив с необходимой версией плагина для вашей платформы по ссылке.
- Распакуйте архив в корневую директорию сервера.
- Добавьте в файл конфигурации сервера server.cfg строку "plugins sampvoice" для Win32 и "plugins sampvoice.so" для Linux x86 (Если у вас стоит плагин Pawn.RakNet обязательно разместите плагин в конфиге после него).
Для того, чтобы начать использовать плагин, прочтите документацию, которая входит в комплект с серверной частью. Для этого откройте файл sampvoice.chm с помощью справочника Windows.
Вам необходимо знать, что в плагине используется своя система типов и констант. Не смотря на то, что это всего лишь оболочка над базовыми типами Pawn, она помогает ориентироваться в типах самого плагина и не путать указатели.
Чтобы начать использовать функционал плагина, подключите заголовочный файл:
#include <sampvoice>
Для того, чтобы ваш скрипт принимал звуковые пакеты добавьте в него паблик OnPlayerVoice. Пакет невозможно отправить напрямую игроку, для этого в SV есть звуковые потоки. Так называемые "звуковые потоки" это абстрактные сущности, к которым можно подключать игроков и в которые можно отправлять звуковые пакеты. Так же в них можно создавать звуковые эффекты и воспроизводить звуковые файлы. Это довольно универсальная вещь.
Давайте рассмотрим некоторые возможности плагина на практическом примере. Ниже мы создадим сервер, который будет принимать пакет и отправлять его обратно игроку, тем самым игрок будет слышать сам себя.
#include <sampvoice>
new SV_GSTREAM:player_stream[MAX_PLAYERS]; // Массив глобальных потоков для каждого игрока
public OnGameModeInit() {
sv_init(6000, SV_FREQUENCY_VERY_HIGH, SV_VOICE_RATE_100MS); // Инициализируем настройки плагина
return 1;
}
public OnPlayerConnect(playerid) {
// Проверка наличия и актуальности клиентского плагина
if(sv_get_version(playerid) == SV_NULL) {
SendClientMessage(playerid, -1, "У вас не установлен плагин SampVoice.");
} else if(sv_get_version(playerid) < SV_VERSION) {
SendClientMessage(playerid, -1, "У вас устаревшая версия плагина, возможна несовместимость. Обновите её.");
}
// Проверка наличия микрофона у игрока
if(!sv_has_micro(playerid)) {
SendClientMessage(playerid, -1, "У вас отсутствует микрофон. Вы можете слышать, но не сможете общаться.");
}
// Создание глобального потока для игрока и подключения игрока к нему
player_stream[playerid] = sv_gstream_create();
sv_stream_player_attach(player_stream[playerid], playerid);
// Установка клавиши активации микрофона игроку
sv_set_key(playerid, 0x32); // 0x32 - это код клавиши '2'
return 1;
}
public OnPlayerDisconnect(playerid) {
sv_stream_delete(player_stream[playerid]); // Удаляем глобальный поток игрока
return 1;
}
public SV_BOOL:OnPlayerVoice(
SV_UINT:playerid, // ID игрока-отправителя
SV_PACKET:packet, // Дескриптор пакета
SV_UINT:volume // Уровень громкости звука [0-32768]
) {
sv_send_packet(packet, player_stream[playerid]); // Отправляем обратно игроку
return SV_TRUE; // Удалять ли пакет? (SV_TRUE - да, SV_FALSE - нет)
}
Для того, чтобы один игрок слышал другого, необходимо подключить его к потоку другого игрока функцией sv_stream_player_attach(stream, playerid).
Плагин компилируется под платформы Win32 и Linux x86. Ниже прилагаются подробные инструкции:
Склонируйте репозиторий себе на компьютер и перейдите в директорию плагина:
git clone https://github.com/CyberMor/sampvoice.git
cd sampvoice
Для компиляции клиентской версии плагина вам понадобится DirectX SDK. Для того, чтобы собрать клиентскую и серверную версию плагина под платформу Win32 откройте проект sampvoice.sln в MS Visual Studio 2017 и скомпилируйте его:
Build -> Build Solution
Для того, чтобы собрать серверную версию плагина выполните следующие инструкции:
cd ./server
make
Вы можете мотивировать разработчика заниматься проектом, пожертвовав небольшую сумму денег.