NPC对话框
说明
这一页说明 NPC 对话框文本在 #SAY 等场景中的常见写法,包括:
- 普通文字和颜色设置
- 点击按钮与标签跳转
- 图片标签和提示说明
- 绝对坐标与换行规则
- 物品字符串的展示方式
需要先确认布局时,也可以直接使用在线可视化设计工具:https://ui.bluem2.cn
#SAY 和 #ACT 分别负责什么
简单理解时,可以先记这一句:#SAY 负责排版,#ACT 负责执行。
#SAY 更适合做 NPC 页面、按钮页和说明页;如果只是直接提示结果,很多场景会优先使用 MessageBox 或 SENDMSG,不一定专门再写一段 #SAY。
进入新的 #SAY 页面后,如果还要回主界面,通常还要再提供按钮或通过脚本显式跳回去。
基础写法
NPC 对话框常见写法以尖括号包裹内容,再通过大括号追加颜色、提示和坐标等参数。
普通文字
#SAY
<文字内容>
带颜色和位置的文字
#SAY
<文字{X=2,Y=3,C=clBlue,T=tips,AX=11,AY=22}>
常用参数
| 参数 | 说明 |
|---|---|
C | 文字颜色,例如 clBlue、$321321 |
T | 鼠标提示文本 |
X | 相对横向偏移 |
Y | 相对纵向偏移 |
AX | 绝对横向坐标,不参与自动换行计算 |
AY | 绝对纵向坐标,不参与自动换行计算;最终显示时通常会叠加基础行偏移 |
大括号中的参数会覆盖外层 color=、hint= 等写法。
颜色写法
颜色可以使用颜色名,也可以直接写颜色值。
颜色值格式按 $BBGGRR 解析,手动配色时如果颜色和预期不一致,优先检查颜色通道顺序是否写反。
下面两种写法效果一致:
#SAY
<COLOR=clgreen 文字{X=11,Y=22}HINT=tips>
#SAY
<文字{X=11,Y=22,C=clgreen,T=tips}>
对话框背景图
除了在 #SAY 中排版文字和按钮,也可以先通过命令设置 NPC 对话框背景图;需要进一步控制对话框行为和位置时,可再配合 NPC_DLG_OPTIONS。
常见写法如下:
#ACT
SetMerchantDlgImgName dialog.png
这条命令用于设置当前 NPC 对话框使用的背景图片。
dialog.png 默认调用 lui.pkg 内的图片资源,因此在使用前需要先把对应图片放入客户端资源包中。
还不熟悉客户端资源包组织方式时,可继续查看 目录结构。
这类命令通常先在 #ACT 中执行,再由后面的 #SAY 输出文字、按钮和图片标签。
例如:
#ACT
SetMerchantDlgImgName dialog.png
#SAY
<综合服务{C=clLime,AX=24,AY=18}>
<传送服务/@TeleportService>
文字、变量和按钮
普通文字加颜色
#SAY
<内容绿色{C=$00FC7C}>
变量加颜色
#SAY
<><$SERVERNAME>{C=CLLIME}</>
按钮文字
#SAY
<内容{C=cllime,AX=30,AY=22}/@execlab>
带提示的执行标签按钮
#SAY
<CMD=@LEBAL HINT=注释1\注释2\注释3\>标题</>
PIC 图片标签
NPC 对话框里可以直接插入图片标签,并配合点击标签或提示使用。
基础写法
#SAY
<PIC=items,55,1,0,0,-40,8 LABEL=@execlab HINT=裁决>
当前示例中的常见参数顺序如下:
| 顺序 | 参数 | 说明 |
|---|---|---|
| 1 | 文件名 | 图片库名,例如 items |
| 2 | 索引 | 图片索引值 |
| 3 | 图片数 | 要读取的图片数量 |
| 4 | 循环 | 是否循环 |
| 5 | 透明 | 透明相关参数 |
| 6 | 偏移X | 相对横向偏移 |
| 7 | 偏移Y | 相对纵向偏移 |
物品展示
NPC 对话框中除了文字和图片,也可以直接展示物品内容。
底层写法会显示成 ITEM=looks&IDX=物品ID 这一类物品信息字符串,但实际写脚本时通常不需要手写这段内容。
常见做法是先用 SetDlgItem 生成物品显示内容,再通过 Mov 取出 <$DLGITEMSHOW>,最后在 #SAY 中输出。
#ACT
SetDlgItem 基本剑术
Mov SITEM <$DLGITEMSHOW>
#SAY
<$STR(SITEM)>
这条写法适合最基础的物品展示,不额外改位置时,普通网关也能直接使用。
AX、AY 这种绝对定位写法需要 AC 封挂网关支持。普通网关只适合直接输出 SetDlgItem 生成的内联物品展示,不要再额外改成 AX、AY 定位。AC 封挂网关示例
#ACT
SetDlgItem 基本剑术
Mov SITEM <$DLGITEMSHOW>
StringReplace SITEM >< {AX=236,AY=104}><
#SAY
<$STR(SITEM)>
这类写法本质上是对 SetDlgItem 生成出来的物品显示字符串继续加工,把它改成绝对坐标显示,适合配合自定义背景图、定制按钮布局或固定位置面板使用。
普通网关示例
#ACT
SetDlgItem 基本剑术
Mov SITEM <$DLGITEMSHOW>
#SAY
<$STR(SITEM)>
普通网关下建议保持这类内联输出写法,让物品跟随正文自然排版,不要再额外去手改底层物品显示串的定位参数。
分隔线标签
对话框中还可以使用分隔线标签插入一条横线:
#SAY
<LINE=clBlue>
坐标与换行规则
常用规则如下:
AX=0、AY=0表示 NPC 描述区的初始坐标AX主要控制左右绝对位置,AY主要控制上下绝对位置#SAY正文中使用\作为换行符- 默认换行高度通常按
15处理
也就是说,在同一段 #SAY 内容里,如果你想让后面的文字、按钮或标签另起一行,通常就在上一行末尾补一个 \。
例如:
#SAY
第一行\
第二行
这条规则同样适用于按钮或其它可显示内容;如果不写 \,后面的内容通常会继续接在当前行后面。
排版展示示例
下面这段主要用来查看颜色、变量、绝对坐标和多行排版的组合效果。
#SAY
<服务器名:{C=$00FC7C}><><$SERVERNAME>{C=clRed,AX=60,AY=0}</>
<文本颜色与坐标示例:{C=$00A5FF,AX=0,AY=15}>
<第一行说明文字{AX=0,AY=30}>
<第二行说明文字{AX=0,AY=45}>
<第三行说明文字{AX=0,AY=60}>
<重点提示内容{C=$F79600,AX=0,AY=75}>
这类示例适合先看“同一页里的文字怎么排”,不强调按钮跳转和交互流程。
按钮与提示示例
下面这段主要用来查看按钮、提示和标签跳转的组合写法。
#SAY
<综合服务{C=clLime,AX=0,AY=0}>
<进入地图{C=cllime,AX=0,AY=20}/@进入地图>\
<查看说明{C=clAqua,AX=0,AY=35}/@查看说明>\
<CMD=@LEBAL HINT=战士\法师\道士>玩家转职</>
这类示例更适合拿来理解:一个 #SAY 页面里可以同时放普通文字、可点击按钮和带提示的入口。
