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 ..