让你的游戏可以播放客户端音效

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.wavweather/*.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目录中了。

京ICP备13031296号-4