命令本质:自定义聊天命令映射
@接受歌曲 和 @关闭音乐 不是引擎内置的固定命令,而是通过 QFunction-0.txt 将聊天输入映射到具体脚本段。当玩家在聊天框输入 @接受歌曲,引擎会去 QFunction-0.txt 查找 [@UserCmd_接受歌曲] 标签并执行其中的动作。真正的“播放/停止”逻辑由 PlaySound 或 PlayMP3 等指令实现,QuestDiary 仅用于存放被调用的子脚本文件。
核心脚本配置:QFunction-0.txt
这是实现 @命令 功能的唯一入口文件,必须在此文件中建立聊天输入与脚本段的关联。
标准配置脚本(Mir200\Envir\QFunction-0.txt):
;--- @接受歌曲 命令映射 ---
[@UserCmd_接受歌曲]
#IF
; 可添加条件,如检测是否有点歌请求
#ACT
; 调用子脚本(可选),或直接在此处写播放逻辑
#CALL [\游戏功能\点歌系统.txt] @接受点歌
SENDMSG 6 提示:点歌请求已接受,开始播放音乐。
;--- @关闭音乐 命令映射 ---
[@UserCmd_关闭音乐]
#IF
#ACT
PlaySound Stop ; 停止当前播放的声音
; 或使用 PlayMP3 Stop (视引擎而定)
SENDMSG 6 提示:背景音乐已关闭。
BREAK
关键点:
• 标签命名规则必须为 [@UserCmd_命令内容],且“命令内容”需与玩家输入的 @ 后内容完全一致(如输入 @接受歌曲 对应 UserCmd_接受歌曲)。
- 若版本中已存在该命令但功能失效,优先检查此文件中的标签名是否有拼写错误或重复定义。
子脚本存放:QuestDiary目录结构
QuestDiary 是服务端存放可调用脚本文件的目录。如果你的点歌逻辑较复杂(如涉及选歌列表、记录状态),通常会在此目录下创建子文件,并由 QFunction-0.txt 通过 #CALL 指令调用。
典型 QuestDiary 点歌文件路径示例:
D:\MirServer\Mir200\Envir\QuestDiary\游戏功能\点歌系统.txt
点歌系统.txt 内容示例(@接受点歌段):
[@接受点歌]
#IF
CHECKBAGGAGE ; 示例条件:检测背包是否有空间(实际应为检测点歌状态变量)
#ACT
; 播放音乐命令(根据引擎选择其一)
PlaySound .\Wav\bgmusic.wav 0 ; BLUE/LEG引擎,0不循环,1循环
; PlayMP3 http://yourdomain.com/song.mp3 ; GOM/GEE引擎支持网络MP3
MOV S10 正在播放 ; 设置状态变量
SENDMSG 6 点歌成功,音乐加载中...
#ELSEACT
SENDMSG 6 错误:未检测到点歌请求或状态异常。
注意:QuestDiary 中的脚本不能直接通过 @命令 触发,必须经由 QFunction-0.txt 或 NPC 脚本中的 #CALL 指令调用。
不同引擎的播放与停止命令差异
虽然 @命令 的触发方式相同,但底层播放指令因引擎而异,这是导致“有命令但没声音”的常见原因。
引擎类型 播放音乐命令 停止音乐命令 关键参数
BLUE/LEG PlaySound 路径 循环(0/1) PlaySound Stop 路径需为客户端内Wav文件
GOM/GEE PlayMP3 网络URL/路径 PlayMP3 Stop 支持在线MP3链接
HERO PlaySound 路径 PlaySound Stop 仅支持本地文件
常用示例:
• 播放:PlaySound .\Wav\Login.wav 1 (播放Login.wav并循环)
• 停止:PlaySound Stop (停止所有由脚本播放的声音)
配置流程与常见问题修复
正确添加流程(SOP)
1. 编辑 QFunction-0.txt:在文件末尾添加 [@UserCmd_接受歌曲] 和 [@UserCmd_关闭音乐] 段。
2. 编写播放逻辑:在 #ACT 下写入 PlaySound 或 PlayMP3 指令。
3. (可选)创建子脚本:若逻辑复杂,在 QuestDiary 新建 点歌系统.txt,并在 QFunction-0.txt 中使用 #CALL 调用。
4. 重启M2:修改 QFunction-0.txt 后必须重启M2Server才能生效(重读脚本)。
高频问题排查
• 输入命令无反应:检查 QFunction-0.txt 中的标签名是否与命令完全一致(如多打了空格)。
• 提示“未知命令”:说明 QFunction-0.txt 中未定义该 @UserCmd_ 标签,或M2未重启。
• 有提示但无声音:
◦ 检查播放命令的文件路径是否正确(客户端必须存在该.wav文件)。
◦ 确认引擎支持(如BLUE引擎不支持直接播放MP3,需转换格式)。
◦ 检查是否被其他停止命令中断。
实用调试技巧
在 [@UserCmd_接受歌曲] 段内临时加入简单的提示语句,测试命令是否被正确触发:
[@UserCmd_接受歌曲]
#ACT
SENDMSG 6 调试:@接受歌曲命令已触发!
BREAK
若上线输入命令后能看到此提示,说明命令映射成功,问题出在后续的播放逻辑或文件路径上。
传奇点歌功能@接受歌曲与@关闭音乐脚本命令详解
来源:
作者:
点击:

