传奇M2引擎新NPC面板下拉菜单编写教程 MenuItem菜单参数详解
摘要:本文详细讲解传奇M2引擎新NPC面板下拉菜单开发规范,包含界面兼容要求、MenuItem全参数解析、npcparams指令用法,附带可直接复用的新人福利NPC完整脚本,帮助传奇开发者快速掌握下拉菜单编写技巧,解决界面错乱、变量读取异常等问题。…
一、前置运行规范(必看)
在编写传奇NPC下拉菜单功能前,需优先处理界面兼容问题,这是脚本正常运行的核心前提:
新NPC界面与旧版写法界面支持双向兼容,但单个NPC界面仅能使用一种写法,禁止新旧代码混用。如需启用新面板写法,必须在M2引擎后台完成配置:路径为M2-客户端控制-页面显示,勾选【启用新NPC面板写法】选项,未配置将导致菜单加载异常、界面错乱。
二、下拉菜单核心标签基础定义
2.1 基础标签标识
传奇NPC下拉菜单功能专属核心标签:<menuid>,该标签用于定义下拉菜单唯一标识,是数据提交、变量传递的核心载体,仅适配新NPC面板写法。
2.2 变量传递规则
menuid参数仅支持传奇S型变量,包含系统基础变量与自定义变量两类,选择菜单选项后,可通过字符调取指令获取变量值:
示例1:menuid=S0,选中后取值语法:<$STR(S0)>
示例2:menuid=S$自定义变量,选中后取值语法:<$STR(S$自定义变量)>
三、MenuItem下拉菜单全参数详解
MenuItem为下拉菜单核心组建指令,通过不同参数控制界面素材、布局、文本及交互逻辑,所有参数支持留空,留空时自动调用引擎默认素材与配置,具体参数说明如下:
参数名称 | 功能说明 | 默认素材/配置值 |
menuid | 下拉菜单ID,用于提交存储选择数据,仅支持S变量 | 无(必填参数) |
img | 菜单展示底图资源 | NewopUI-2000 |
arrowimg | 下拉箭头图标资源 | NewopUI-1448、1451 |
selectimg | 选项选中状态图片资源 | NewopUI-2047 |
listimg | 下拉列表背景底图资源 | NewopUI-2000 |
width | 菜单整体宽度 | 调用素材原生宽度 |
height | 菜单整体高度 | 调用素材原生高度 |
itemname | 菜单列表文本,多选项用#符号分隔 | 无(必填参数) |
select | 菜单默认显示文本 | 无 |
direction | 菜单弹出方向,0=下拉,1=上拉 | 0(下拉) |
itemhei | 列表中单条选项的行高 | 引擎默认配置 |
fontcolor | 普通状态字体颜色值 | 引擎默认色值 |
selectcolor | 选中状态字体颜色值 | 引擎默认色值 |
maxhei | 列表最大显示高度,超出后支持上下滑动 | 无限制 |
link | 选项选中后跳转的触发脚本段 | 无 |
四、NPC参数调取指令说明
4.1 指令基础语法
语法格式:<$npcparams(类型,变量)>
4.2 参数释义
类型:用于区分NPC交互组件类型,固定对应数值
1=输入框,2=勾选框,3=滑动条,4=下拉菜单(MenuItem专用)
变量:绑定的面板传递S变量,与menuid定义变量一致
4.3 基础示范代码
<MenuItem|menuid=S0|x=300|y=50|itemname=刘德华#张学友#黎明#郭富城|select=刘德华|direction=0|fontcolor=250|selectcolor=254|select=选择人物|itemhei=30>
五、完整实战脚本示例(可直接复用)
以下为传奇新人福利NPC完整脚本,包含双下拉菜单、物品领取、分类界面跳转功能,适配所有启用新NPC面板的M2引擎版本,代码无冗余可直接导入服务端使用。
[@main]
#ACT
MOV S1 裁决之杖
MOV S$自定义
#say
<Text|x=22.0|y=69.0|color=251|size=18|text=福利多多:新人免费领取一件物品!>
; 上拉式物品选择下拉菜单
<MenuItem|menuid=S1|x=180|y=166|itemname=裁决之杖#骨玉权杖#龙纹剑#1000元宝|select=裁决之杖|direction=1|fontcolor=255|selectcolor=254|select=裁决之杖|itemhei=30|link=@菜单触发1>
; 下拉式功能导航菜单
<MenuItem|menuid=S$自定义|x=525|y=58|itemname=我要变强#我要装备#我要经验#我要元宝#我要转生#地图介绍|select=我要变强|direction=0|fontcolor=250|selectcolor=254|select=游戏帮助|itemhei=30|link=@菜单触发2>
<Button|x=202.0|y=134.0|color=255|wil=Newopui|pcpimg=143|pcnimg=141|pcmimg=142|text=免费领取|link=@领取>
[@菜单触发1]
#act
sendmsg 6 你选择了:<$npcparams(4,S1)>
MOV S1 <$npcparams(4,S1)>
[@领取]
#act
GIVE <$str(S1)> 1
sendmsg 6 免费领取了【<$str(S1)>】物品!
[@菜单触发2]
#IF
equal S$自定义 我要变强
#say
<Text|a=0|x=32|y=60|tipsx=10|tipsy=80|color=255|size=18|text=我要变强的界面 >
<Text|a=0|x=384|y=80|tipsx=10|tipsy=80|color=251|size=18|text=返回|link=@MAIN>
#IF
equal S$自定义 我要装备
#say
<Text|a=0|x=32|y=60|tipsx=10|tipsy=80|color=255|size=18|text=我要装备的界面 >
<Text|a=0|x=384|y=80|tipsx=10|tipsy=80|color=251|size=18|text=返回|link=@MAIN>
#IF
equal S$自定义 我要经验
#say
<Text|a=0|x=32|y=60|tipsx=10|tipsy=80|color=255|size=18|text=我要经验的界面 >
<Text|a=0|x=384|y=80|tipsx=10|tipsy=80|color=251|size=18|text=返回|link=@MAIN>
#IF
equal S$自定义 我要元宝
#say
<Text|a=0|x=32|y=60|tipsx=10|tipsy=80|color=255|size=18|text=我要元宝的界面 >
<Text|a=0|x=384|y=80|tipsx=10|tipsy=80|color=251|size=18|text=返回|link=@MAIN>
#IF
equal S$自定义 我要转生
#say
<Text|a=0|x=32|y=60|tipsx=10|tipsy=80|color=255|size=18|text=我要转生的界面 >
<Text|a=0|x=384|y=80|tipsx=10|tipsy=80|color=251|size=18|text=返回|link=@MAIN>
#IF
equal S$自定义 地图介绍
#say
<Text|a=0|x=32|y=60|tipsx=10|tipsy=80|color=255|size=18|text=地图介绍的界面 >
<Text|a=0|x=384|y=80|tipsx=10|tipsy=80|color=251|size=18|text=返回|link=@MAIN>
六、常见报错排查要点
1、界面错乱:检查是否勾选M2新NPC面板开关,排查单界面是否混用新旧写法;
2、变量无数据:确认menuid仅使用S变量,核对npcparams指令中类型参数为4(下拉菜单专用);
3、素材缺失:未自定义图片资源时,确保客户端包含NewopUI系列默认素材文件。


