脚本基础

NPC对话框

说明传奇游戏 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 页面里可以同时放普通文字、可点击按钮和带提示的入口。

相关阅读