sampvoice - 是一个软件开发套件 (SDK),用于以 Pawn 语言为 SA:MP 服务器实现语音通信系统。
为了使插件正常工作,它必须由玩家安装并安装在服务器上。该插件有一个客户端和服务器部分。
玩家可以使用 2 个安装选项:自动(通过安装程序)和手动(通过存档)。
releases
页面并选择所需的插件版本。releases
页面并下载具有所需客户端版本的存档。releases
页面下载适合您平台的所需版本的插件。要开始使用该插件,请阅读服务器端附带的文档。为此,请使用 Windows 参考打开sampvoice .chm文件。 (如果文档未打开,请右键单击文档文件,然后选择“属性”->“取消阻止”->“确定”)
要开始使用插件功能,请包含头文件:
#include < sampvoice >
您需要知道该插件使用自己的类型和常量系统。尽管这只是 Pawn 基本类型的包装,但它有助于导航插件本身的类型而不是混淆指针。
要将音频流量从播放器 A 重定向到播放器 B,您需要创建一个音频流(使用SvCreateStream ),然后将其附加到播放器 A 的扬声器通道(使用SvAttachStream ),然后将播放器 B 附加到音频流(使用SvAttachListener ) 。完成,现在当玩家 A 的麦克风被激活时(例如,使用SvPlay功能),他的音频流量将被传输,然后由玩家 B 收听。
声音流非常方便。可以使用 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平台的插件的客户端和服务器部分,请在 Visual Studio 2019(或更高版本)中打开sampvoice .sln项目并编译它:
构建 -> 构建解决方案 (F7)
确保您已安装所有依赖项:
sudo apt install build-essential gcc-multilib g++-multilib
要为Linux x86平台构建控制服务器,请按照以下说明操作:
cd control
make
cd ..
要构建适用于Linux x86平台的语音服务器,请按照以下说明操作:
cd voice
make
cd ..