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) 声明,再写按钮入口和对应标签。

相关命令