NPC与界面
请求 Confirm 对话框
弹出输入或确认对话框,并把结果交给指定标签处理,适用于验证码、名称输入和简易确认流程。
命令用途
QueryValue 用于请求一个 Confirm 对话框,并把玩家输入或确认结果交给指定标签继续处理。
它常见于验证码输入、角色名输入、确认操作和跨 NPC 跳转流程。
命令名
QueryValue
调用格式
QueryValue <返回变量位> <类型> <允许长度> <确定后执行标签> <标题> [触发类型] [取消执行标签]
参数说明
| 参数 | 必填 | 说明 |
|---|---|---|
返回变量位 | 是 | 用于接收结果的变量位。文字结果通常回到 S 变量,数字结果通常回到 M 变量。 |
类型 | 是 | 返回值类型。0=文字、1=数字、2=无返回值。 |
允许长度 | 是 | 输入长度限制。英文按 1 字节、中文按 2 字节计算。 |
确定后执行标签 | 是 | 点击确定后跳转执行的标签。 |
标题 | 是 | 对话框标题或提示内容。 |
触发类型 | 否 | 指定后续跳转目标。常见值:QF、QM、QC,也可以留空表示当前 NPC。 |
取消执行标签 | 否 | 点击取消后执行的标签。 |
返回或影响
- 这是执行型命令,会弹出一个 Confirm 对话框。
- 玩家确认后,脚本会把结果写入对应变量,并跳转到指定标签继续执行。
- 常见用途是接收名称、验证码、数字或确认动作。
- 如果
类型为2,通常只处理确认动作,不依赖返回值。
示例
基础用法
#ACT
QueryValue 10 1 10 @CheckNo 请输入数字验证码:
[@CheckNo]
#SAY
你输入的是:<$STR(M10)>
这段写法适合读取一段数字输入,再在后续标签中继续处理。
常见变体
#ACT
QueryValue 2 0 20 @CheckName 请输入对方名称 QF @Cancel
[@Cancel]
#ACT
SendMsg 5 已取消操作。
这类写法适合把确认结果交给 QFunction 或其它全局入口继续处理,并且显式处理取消动作。
扩展写法:脚本顶部声明的输入入口
@@InPutInteger(X) 和 @@InPutString(X) 是 QueryValue 的扩展写法,适合直接挂在对话按钮上使用。
使用这组写法时,应先在脚本顶部声明:
(@@InPutInteger, @@InPutString)
声明完成后,才能在后面的 #SAY 按钮里写 @@InPutInteger5、@@InPutString5 这一类入口。
这组入口的返回位置固定:
@@InPutInteger(X)把结果写入个人数字变量M(X)@@InPutString(X)把结果写入个人字符变量S(X)X的常用范围为0..99
如果字符串输入命中过滤列表 GuildRankNameFilter.txt,流程会跳到 @IsInFilterList 继续处理。
完整示例如下:
(@@InPutInteger, @@InPutString)
[@Main]
#SAY
<输入数字/@@InPutInteger5>\
<输入字符/@@InPutString5>\
<关闭/@Exit>
[@@InPutInteger5]
#IF
CheckLevelEx > 0
#ACT
DelayGoto 1 ~InPutInteger5
[~InPutInteger5]
#IF
CheckLevelEX > 0
#SAY
你输入的数字是:<$STR(M5)>
[@@InPutString5]
#IF
CheckLevelEx > 0
#ACT
DelayGoto 1 ~InPutString5
[~InPutString5]
#IF
CheckLevelEX > 0
#SAY
你输入的字符是:<$STR(S5)>
[@IsInFilterList]
#IF
CheckLevelEx > 0
#ACT
MessageBox 输入数据中包含了非法字符,请重新输入。
GOTO @Main
这类写法里,DelayGoto 的主要作用是拦住连续点击或网络延迟下的重复触发,避免同一段输入流程被重复执行。
注意事项
返回变量位要和类型对应,避免把文字结果按数字变量读取,或反过来使用。- 如果要跳到
QFunction、QManage、QChatMission,应明确写清触发类型。 - 如果流程对取消操作敏感,最好显式填写
取消执行标签,不要让取消动作静默结束。 - 如果当前版本已经支持配套客户端更新,可以把
取消执行标签当作取消按钮执行的 NPC 宿主来用。 - 使用
@@InPutInteger(X)、@@InPutString(X)时,优先确认目标变量位没有被同段流程中的其它逻辑占用。 - 如果用的是这组扩展写法,先在脚本顶部补上
(@@InPutInteger, @@InPutString)声明,再写按钮入口和对应标签。
