mudlet客户端支持gmcp/msp等协议,让服务端可以直接控制客户端,其中msp协议是MUD Sound Protocol(MUD声音协议),开启后服务端可以发送协议指令播放客户端的音效。
在 FluffOS v2019.20220507版本开始,服务端新增了msp的支持,提供了一个外部函数telnet_msp_oob()
可以发送msp数据给客户端。
在玩家对象中增加以下代码:
// 发送msp数据到客户端
void msp_oob(string req)
{
efun::telnet_msp_oob(req);
}
然后在需要播放音效的地方调用,如战斗开始:user->msp_oob("!!SOUND(fight.wav L=1 V=100)")
,这会自动播放mudlet客户端玩家配置文件中media
目录下的fight.wav音效文件1次,音量🔊100。
提示:mudlet玩家配置文件目录可以在mudlet中输入指令
lua getMudletHomeDir()
查看。
参数格式说明:
!!SOUND(fName Parameters)
!!MUSIC(fName Parameters)
!!SOUND播放wav音效,!!MUSIC播放mid音乐。实测SOUND和MUSIC模式都可以正常播放mp3音乐。
fName 为音乐文件,可以使用通配符*
,合法格式如:lightning.wav
、weather/*.wav
。
Parameters格式为:<param-name>=<param-value>
,param-name可用参数如下:
- V:音量大小,取值范围0~100,默认值100
- L:重复次数,取值范围-1或>0,-1代表无限循环,默认值1
- P:SOUND优先级,如果还在播放时收到新的数据且优先级更高,播放新音效,取值范围0~100,默认值50
- C:MUSIC继续播放还是重新开始,取值范围0或1,默认值1
- T:音效类别,对应media下的目录
- U:资源网址,如果media下找不到文件,会从此地址下载
另外可以使用!!SOUND(Off)
和!!MUSIC(Off)
停止播放。
关于MSP的资料可以看看这里:https://www.zuggsoft.com/zmud/msp.htm
示例:
!!SOUND(thunder V=100 L=1 P=30 T=weather)
!!SOUND(weather/rain.wav V=80 P=20 T=weather)
!!SOUND(alarm*.wav P=100 T=utility)
!!SOUND(Off)
!!SOUND(Off U=http://www.example.org:5000/sounds)
!!MUSIC(fugue.mid V=100 L=1 C=1 T=music U=http://www.example.net/)
!!MUSIC(berlioz/fantas? V=80 L=-1 C=1 T=music)
!!MUSIC(Off)
最新的lpc-test项目已经内置支持,项目地址:https://github.com/fluffos/lpc-test
项目在线测试地址:test.mud.ren 4004
你可以使用mudlet客户端进入游戏,输入tutorial 6
开启相关能力,然后进入传送门,就能听到音乐了。
或者输入wizard
指令获取eval权限后输入以下指令测试:
eval me->msp_oob("!!SOUND(10001.wav L=1 V=100 U=https://mud.ren/storage/wav/)")
eval me->msp_oob("!!MUSIC(1001.mp3 L=1 V=100 U=https://mud.ren/storage/wav/)")
是不是听到美妙的音效了?这里10001可以换成10001~10011,1001可以换成3001~3012,有兴趣可以试试。
注意因为指定U=https://mud.ren/storage/wav/
后播放音乐第一次是从网上下载,如果网速慢或文件大,会有延迟。比如以下测试:
eval me->msp_oob("!!MUSIC(2007.mp3 L=1 V=100 U=https://mud.ren/storage/wav/)")
这个音乐文件有4.4M大,第一次执行指令后可能要等一会儿才能听到音乐,但再次执行时就不用等了,因为文件已经缓存到本地玩家配置文件的media目录中了。