传奇玩家输入自定义指令弹出游戏菜单361引擎命令捕捉与菜单界面完整配置教程

来源: 作者: 点击:
361引擎支持捕捉玩家在聊天框输入自定义指令,匹配关键字后调用内置菜单界面或者自定义GUI面板,整套功能依靠QFunction指令捕捉事件\(LEVEL>、<\)菜单配置文本\(LEVEL>、<\)界面素材绑定组合实现,引擎内置[@OnCommand]事件专门捕获玩家输入的聊天命令,编写前备份QFunction-0.txt以及菜单UI配置文件,避免语法错误造成服务端读取异常。

基础触发原理,玩家在游戏聊天框输入自定义命令,例如输入@menu,服务端触发[@OnCommand]事件,脚本读取玩家输入的指令字符串,对比预设关键字,匹配成功之后执行弹出菜单指令。361引擎区分指令大小写,@Menu和@menu判定为不同指令,编写脚本时统一使用小写命令方便玩家输入。指令可设置权限判定,普通玩家可用,或者仅管理员开放,还可以增加冷却时间,防止短时间重复输入指令频繁弹出界面。

[@OnCommand]基础捕捉脚本,写入QFunction-0.txt文件内。
[@OnCommand]
#IF
ISCMD @menu
#ACT
OPENMENU 自定义菜单
BREAK
#ELSEACT
BREAK
ISCMD用来判断玩家输入的聊天指令,匹配成功执行#ACT段,OPENMENU为361引擎打开菜单的内置命令,后面参数填写菜单文本名称,菜单文件放置在服务端菜单目录,文件名必须完全一致,不能带多余后缀。菜单文件后缀为ini或者txt,依照引擎版本要求放置,部分版本菜单存放路径为Menu文件夹。

菜单文件编写,新建自定义菜单.txt,按照361引擎菜单格式编写,第一行设置菜单标题\(LEVEL>、<\)窗口宽高。菜单内每一行代表一个按钮选项,支持点击执行脚本\(LEVEL>、<\)调用NPC段\(LEVEL>、<\)打开其他子菜单\(LEVEL>、<\)关闭菜单。
[MAIN]
Title=玩家快捷菜单
Width=400
Height=300
Item1=传送服务|@TeleportMenu
Item2=背包整理|@PackSort
Item3=属性查询|@QueryAttr
Item4=关闭菜单|@CloseMenu
点击菜单项会触发对应脚本标记,标记写在QFunction或者NPC脚本内,菜单点击事件和NPC点击逻辑共用一套脚本语法。@CloseMenu为关闭菜单内置指令,点击直接关闭当前窗口。

增加指令权限校验,限制等级\(LEVEL>、<\)行会\(LEVEL>、<\)是否在安全区等条件,不符合条件输入指令不会弹出菜单并发送提示。
[@OnCommand]
#IF
ISCMD @menu
CHECKLEVELEX > 30
#ACT
OPENMENU 自定义菜单
BREAK
#ELSEACT
SENDMSG 6 等级不足30级,无法打开快捷菜单
BREAK
可叠加CHECKSAFEAREA,设置仅安全区内允许呼出菜单,在地图内禁止调用。增加ISADMIN判定,管理员不受等级限制,随时打开菜单。

多命令区分处理,在同一个[@OnCommand]内编写多条ISCMD判断,实现不同指令呼出不同菜单。
[@OnCommand]
#IF
ISCMD @menu
#ACT
OPENMENU 自定义菜单
BREAK
#IF
ISCMD @help
#ACT
OPENMENU 帮助菜单
BREAK
#ELSEACT
BREAK

指令冷却控制,使用人物私有变量M0记录冷却时间,玩家输入指令时判断变量,冷却未结束直接拦截。在[@OnCommand]增加冷却判定。
[@OnCommand]
#IF
ISCMD @menu
EQUAL M0 0
#ACT
OPENMENU 自定义菜单
CALC M0 = 1
TIMERSET 1 5000
BREAK
#ELSEACT
SENDMSG 6 菜单冷却中,请稍后再试
BREAK
[@OnTimer1]
#ACT
CALC M0 = 0
BREAK
TIMERSET单位毫秒,5000代表5秒冷却,冷却期间再次输入指令不会重复弹出菜单。

菜单内子菜单跳转,主菜单按钮点击调用第二个菜单,实现多级菜单。主菜单添加 Item5=高级功能|@OpenAdvMenu,脚本段编写。
[@OpenAdvMenu]
#ACT
OPENMENU 高级菜单
BREAK
高级菜单文件独立编写,可返回上一级菜单,增加返回按钮调用主菜单。

菜单素材与界面样式配置,菜单支持背景图片\(LEVEL>、<\)按钮图片\(LEVEL>、<\)文字颜色,素材编号在菜单ini内配置,素材需要打包到客户端补丁,登录器加载补丁,否则菜单背景缺失,只显示文字按钮。图片素材编号不能和其他UI冲突,宽高需要和菜单Width\(LEVEL>、<\)Height参数匹配,图片尺寸不一致会出现拉伸错位。菜单文字颜色使用RGB参数,单独设置标题颜色\(LEVEL>、<\)按钮文字颜色。

参数传递与变量读取,菜单界面可以读取人物变量,在菜单文字中嵌入内置变量标签,<$LEVEL>\(LEVEL>、<\)<$HUMANNAME>\(LEVEL>、<\)<$GOLDPOINT>,打开菜单时自动替换为玩家实时数据,用来在菜单面板展示角色信息。菜单不支持直接在菜单文件内执行CALC计算,数值运算必须放到脚本段,点击按钮触发之后执行计算逻辑。

常见异常问题排查,[@OnCommand]事件没有写在QFunction-0,指令无法捕获。菜单文件名拼写错误,OPENMENU参数和实际文件名不一致,输入命令提示菜单不存在。菜单文件格式错误,缺少[MAIN]头部标记,菜单窗口空白。素材没有打入客户端补丁,菜单背景黑屏。指令大小写不匹配,玩家输入大写指令无法触发。脚本修改后没有重载QFunction,新指令捕捉逻辑不生效。菜单按钮对应的脚本标记不存在,点击按钮无响应。

性能相关注意事项,[@OnCommand]属于玩家聊天事件,每一条玩家发送的聊天文字都会经过该事件,不要在事件内部增加大量复杂循环运算,只保留简单判断,避免大量玩家在线时增加脚本压力。不要开放过长\(LEVEL>、<\)无过滤的自定义指令,防止恶意输入大量字符触发异常。菜单窗口打开之后,不会自动关闭,需要玩家手动点击关闭按钮,切换地图\(LEVEL>、<\)小退会自动销毁菜单界面。

调试步骤,编写脚本和菜单文件,重载QFunction,进入游戏输入@menu,查看菜单是否正常弹出。测试菜单各个按钮,确认每一项对应的脚本段正常执行。测试冷却逻辑,连续多次输入指令,校验冷却拦截提示。测试权限限制,使用低等级账号输入指令,确认无法呼出菜单。检查不同分辨率客户端,确认菜单UI不会超出屏幕边界。

扩展功能,增加指令开关全局变量,管理员可通过GM命令开启或者关闭该指令功能。增加菜单动态选项,根据人物变量显示不同按钮,任务完成状态改变菜单可点击项目。增加菜单弹窗提示,打开菜单时同步发送提示文字。增加指令黑名单,指定角色禁止使用该呼出命令。全部配置完成后多账号并行测试,确认不同角色调用菜单互不干扰,点击按钮执行逻辑稳定,不会出现菜单卡死\(LEVEL>、<\)重复弹出的问题。