爽身粉大哥🐑 山羊胡子Goatee
若批评不自由,则赞美无意义
关注数: 25 粉丝数: 134 发帖数: 2,404 关注贴吧数: 95
[SDK] samp语音系统下载及使用说明 (0.37/0.3DL) 相信大家对samp语音插件都有所耳闻,实际上国外很早就有人实现了,只是大部分此类插件都是单独服务器专用,本贴介绍的sampvoice是开源项目,原作者为Daniel Mor,目前有许多网友fork并贡献了自己的开发成果,有兴趣的参与开发的可以在github上搜索「CyberMor」 SAMPVOICE,简称CV,是在samp服务器上实现语音通讯的开发工具,它不仅仅提供了语音聊天系统,还是一种创建语音的工具(可设置特定obj音效),它的功能有: -音频码率设置 -API接口调用记录 -插件版本更新设置 -检查玩家是否有麦克风 -麦克风开/关 -设置麦克风激活键 -玩家静音设置(开/关) -创建全局流(2D声音) -创建本地流(3D声音) -手动控制收听本地流的距离 -手动控制本地流扬声位置 -创建绑定到游戏obj的本地流 -自定义音效(对讲机、回声等,适用于RP) -更改流参数(音量、频率) SAMPVOICE支持的版本: -客户端:SA:MP 0.37(R1,R3), SA:MP 0.3DL -服务器端:SA:MP 0.37(R2), SA:MP 0.3DL 安装(安装包的链接会放在二楼): -玩家安装方法:打开安装包中的'玩家'文件夹,根据自己的samp版本(R1或R3)选择对应的客户端压缩包,解压到GTASA主目录 -开发者安装方法:打开'开发端'文件夹,同样选择自己对应的服务器版本(注意,这里的0.3DL版本不完整,关于0.3DL端的事宜后文会作说明) ,并根据操作系统选择sampvoice.dll或sampvoice.so(.so为linux系统),最后解压include文件 使用方法(非开发者请忽略): 打开服务器配置文件server.cfg,如果是win32系统,请添加一行"plugins sampvoice",如果是Linux x86系统,请添加一行"plugins sampvoice.so",如果服务器使用了Pawn.RakNet插件,务必将"SampVoice"加在"Pawn.RakNet"后面 最后不要忘了添加头文件: #include <sampvoice> 下面是一个功能实现的代码示例,首先将所有玩家加入到全局流(全图聊天),并为每个玩家创建一个本地流(附近聊天),目的是为了让玩家能分别通过全局流和本地流聊天,全局流即全图玩家,本地流即附近的玩家: #include <sampvoice> new SV_GSTREAM:gstream = SV_NULL; new SV_LSTREAM:lstream[MAX_PLAYERS] = { SV_NULL, ... }; /* public函数中OnPlayerActivationKeyPress和OnPlayerActivationKeyRelease的作用为: 玩家按下对应麦克风激活按键的同时,将玩家输入的音频重定向为对应的音频流 */ public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid) { // 如果玩家按下"B"键,则将玩家作为扬声器链接到本地流 if (keyid == 0x42 && lstream[playerid]) SvAttachSpeakerToStream(lstream[playerid], playerid); // 如果玩家按下"Z"键,则将玩家作为扬声器连接到全局流 if (keyid == 0x5A && gstream) SvAttachSpeakerToStream(gstream, playerid); } public SV_VOID:OnPlayerActivationKeyRelease(SV_UINT:playerid, SV_UINT:keyid) { // 如果玩家松开"B"键,则断开本地流 if (keyid == 0x42 && lstream[playerid]) SvDetachSpeakerFromStream(lstream[playerid], playerid); // 如果玩家松开"Z"键,则断开全局流 if (keyid == 0x5A && gstream) SvDetachSpeakerFromStream(gstream, playerid); } public OnPlayerConnect(playerid) { // 检查语音插件的可用性 if (SvGetVersion(playerid) == SV_NULL) { SendClientMessage(playerid, -1, "Could not find plugin sampvoice."); } // 检查麦克风 else if (SvHasMicro(playerid) == SV_FALSE) { SendClientMessage(playerid, -1, "The microphone could not be found."); } // 创建一个可听距离为40.0的本地流,并且不限制听众数量 // 创建一个为'Local'的名称标识 (标识'Local'将在玩家的扬声器列表中显示为红色) else if ((lstream[playerid] = SvCreateDLStreamAtPlayer(40.0, SV_INFINITY, playerid, 0xff0000ff, "Local"))) { SendClientMessage(playerid, -1, "按Z可全图聊天,按B可以和附近的人聊天"); // 让玩家作为听众加入到全局流 if (gstream) SvAttachListenerToStream(gstream, playerid); // 将麦克风激活键分配给玩家 SvAddKey(playerid, 0x42); SvAddKey(playerid, 0x5A); } } public OnPlayerDisconnect(playerid, reason) { // 玩家与服务器断开链接后移除该玩家的本地流 if (lstream[playerid]) { SvDeleteStream(lstream[playerid]); lstream[playerid] = SV_NULL; } } public OnGameModeInit() { // 取消下面一行的注释来debug // SvDebug(SV_TRUE); gstream = SvCreateGStream(0xffff0000, "Global"); } public OnGameModeExit() { if (gstream) SvDeleteStream(gstream); } 编译插件: 本插件可以在Win32和Linux x86平台上进行编译: 首先将github存储库克隆到您的计算机并转到语音插件目录: 「git clone http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fgithub.com%2FCyberMor%2Fsampvoice.git&urlrefer=44dcadf43e48405248ca4010476d9a31 cd sampvoice 」 -Windows(客户端与服务器端): 原版的0.37R1/R3的插件已经编译好了,可以在压缩包中下载,如果有其他的编译需求 ,请先安装DirectX SDK(编译客户端插件所需的软件),打开"开发端"中有"源代码"名称的文 件,在编译器中分别调用SAMP_R1、SAMP_R3、SAMP_DL宏来构建为所需的插件版本。对于 Windows32位操作系统,请在Visual Studio 2019中打开名称sampvoice.sln的工程文件, 然后用「Build -> Build Solution (F7)」来编译它 -Linux(服务器端) Linux x86平台的服务器端插件构建方法为: 「cd server make 」
首页 1 2 下一页