一、命令本质与文件路径
@接受歌曲 和 @关闭音乐 并非引擎内置的固定指令,而是由GM在 QFunction-0.txt(QuestDiary功能脚本)中自定义的触发标签。当玩家在聊天框输入对应文字时,引擎会跳转到该标签执行预设的播放或停止动作。脚本文件位于服务端 Mir200\Envir\Market_Def\QFunction-0.txt。
二、GOM引擎标准脚本写法
针对目前主流的GOM引擎,以下是完整的点歌与关闭逻辑脚本,直接复制到 QFunction-0.txt 即可。
1. @接受歌曲脚本(播放音乐)
[@接受歌曲]
#IF
#ACT
PlayMP3 0
SendMsg 5 音乐播放成功!输入“@关闭音乐”可停止。
Break
参数说明:PlayMP3 0 中的数字 0 代表播放次数,0为循环播放。若需播放指定文件,可改为 PlayMP3 歌曲名.mp3(文件需放在客户端Music目录)。
2. @关闭音乐脚本(停止播放)
[@关闭音乐]
#IF
#ACT
StopPlayMP3
SendMsg 5 音乐已关闭。
Break
命令说明:StopPlayMP3 是GOM引擎专用的停止背景音乐命令,与PlayMP3配套使用。
三、Hero引擎(老版本)兼容写法
若服务端使用老版Hero引擎,播放命令不同,需使用 PLAYSOUND。
[@接受歌曲]
#IF
#ACT
PLAYSOUND 1 0
SendMsg 5 开始播放音乐。
Break
[@关闭音乐]
#IF
#ACT
PLAYSOUND 0 0
SendMsg 5 音乐已静音。
Break
参数差异:PLAYSOUND 1 0 中第一个参数1=播放,0=停止;第二个参数0=仅自己听见,1=全服听见(慎用)。
四、点歌触发与变量传递逻辑
你提到的“给某人点歌需对方接受”,核心在于变量传递。点歌方脚本需将歌曲信息存入变量,对方接受时读取变量播放。
点歌NPC脚本示例(节选):
[@点歌]
#IF
CheckVar HUMAN 点歌状态 = 0 ; 检测对方是否已有待接受歌曲
#ACT
SetVar HUMAN 点歌歌曲 = 1 ; 1代表歌曲ID,可自定义
SetVar HUMAN 点歌状态 = 1 ; 标记为“有待接受”
SendMsg 6 点歌请求已发送,等待对方接受。
Break
接受脚本联动:
[@接受歌曲]
#IF
CheckVar HUMAN 点歌状态 = 1
CheckVar HUMAN 点歌歌曲 = 1
#ACT
PlayMP3 0 ; 播放对应歌曲
SetVar HUMAN 点歌状态 = 0 ; 重置状态
Break
五、常见问题排查
• 输入命令无反应:检查 QFunction-0.txt 中标签名是否与玩家输入完全一致(如“@接受歌曲”不能写成“@接受音乐”)。
- 播放失败:确认客户端 Music 文件夹内有对应的MP3文件,且脚本中文件名大小写匹配。
- 变量不传递:点歌方和目标玩家的变量名(如“点歌状态”)必须完全一致,建议使用全局变量或文件存储。
修改脚本后,必须在M2Server控制台点击“重新加载-功能脚本(QF)”使配置生效。

