NPC交互输入框靠 @@InPutString(字符串)和 @@InPutInteger(整数)两个触发标签实现,玩家点击对话框选项后弹出输入框,输入内容存入临时变量,脚本通过检测变量值决定后续流程。两个标签只在 QF 触发文件或 QManage 定时脚本里生效,直接写 NPC 对话文本不触发。
一、@@InPutString 字符串输入实现
用途:收玩家输入文本,如角色名、自定义称号、留言、物品名。
触发格式:
<输入角色名/@inputname>
[@inputname]
#IF
#ACT
@@InPutString 请输入要查询的角色名:
#ELSEACT
#SAY
输入取消或异常。
玩家输入后,引擎将内容存入 STR(N),N 为当前触发序号。取值用:
#IF
#ACT
SENDMSG 6 你输入的是:$STR(1)
实战示例(查询角色信息):
[@main]
#SAY
查询角色信息,请输入角色名:
<开始查询/@query>
[@query]
#IF
#ACT
@@InPutString 请输入角色名:
#ELSEACT
#SAY
已取消。
[@query_ok]
#IF
#ACT
GETUSERINFO $STR(1)
SENDMSG 6 角色等级:$USERLEVEL 行会:$GUILDNAME
字符串变量上限 255 字节,超长截断。输入为空或点取消走 #ELSEACT 分支。
二、@@InPutInteger 整数输入实现
用途:收数字,如充值金额、数量、次数、密码数字。
触发格式:
<输入数量/@inputnum>
[@inputnum]
#IF
#ACT
@@InPutInteger 请输入数量(1-9999):
#ELSEACT
#SAY
已取消。
输入值存入 INT(N),取值:
#IF
#ACT
SENDMSG 6 你输入的数量是:$INT(1)
实战示例(批量购买物品):
[@buyitem]
#IF
#ACT
@@InPutInteger 请输入购买数量(1-100):
#ELSEACT
#SAY
已取消。
[@buyitem_ok]
#IF
#ACT
MOV N$数量 $INT(1)
#IF
LARGE N$数量 0
SMALL N$数量 101
#ACT
TAKE 金币 <$STR(N$数量) * 1000>
GIVE 强效太阳水 $STR(N$数量)
SENDMSG 6 购买成功,获得 $STR(N$数量) 个强效太阳水。
#ELSEACT
SENDMSG 6 数量无效,请输入1-100之间的整数。
整数输入非数字字符自动转 0,负数部分引擎按 0 处理。输入范围校验必须脚本里用 LARGE/SMALL/EQUAL 自行判断,引擎不自带范围限制。
三、Hero 引擎与 3K 引擎差异对照
1. 变量命名与取值
Hero 引擎:字符串用 STR(N),整数用 INT(N),N 从 1 开始递增,同一触发链内序号连续。
3K 引擎:字符串用 INPUTSTR,整数用 INPUTINT,不区分序号,每次输入覆盖上一值。3K 取值直接写 INPUTSTR 即可,不需要序号后缀。
Hero 写法:
SENDMSG 6 输入内容:$STR(1)
3K 写法:
SENDMSG 6 输入内容:$INPUTSTR$
2. 触发位置限制
Hero 引擎:@@InPutString / @@InPutInteger 可在 QF、QManage、NPC 对话的 #ACT 段触发,部分版本支持在 #IF 段嵌套调用。
3K 引擎:仅允许在 QF 的 #ACT 段和 NPC 对话的按钮响应里触发,QManager 定时脚本里直接调用无效,需通过 Mov 中转变量再判断。
3. 输入长度与类型校验
Hero 引擎:字符串最长 255 字节,整数范围 -2147483648 到 2147483647,超出截断或归零。支持在 @@InPutInteger 后紧跟参数限制位数,如 @@InPutInteger 请输入6位密码:6(限制6位数字)。
3K 引擎:字符串最长 200 字节,整数范围同 Hero。不支持位数限制参数,只能脚本里用 STRLEN / LARGE / SMALL 二次校验。
4. 取消与异常处理
Hero 引擎:玩家点取消或关闭输入框,STR(N) / INT(N) 返回空字符串或 -1,脚本用 EQUAL STR(1) "" 或 EQUAL INT(1) -1 判断。
3K 引擎:取消后变量保持上一次值不变,首次无上一次值时返回空。判断取消需先 MOV 变量默认值再检测是否变化。
5. 多轮输入串联
Hero 引擎支持连续触发多个输入框,变量序号递增互不覆盖:
#ACT
@@InPutString 输入A:
@@InPutInteger 输入B:
取值:STR(1) 为A,INT(2) 为B。
3K 引擎连续触发会覆盖,需在第一轮输入后跳转到新标签处理完再触发第二轮:
[@step1]
#ACT
@@InPutString 输入A:
[@step1_ok]
#IF
#ACT
MOV S$A $INPUTSTR$
@@InPutInteger 输入B:
[@step2_ok]
#ACT
MOV N$B $INPUTINT$
6. 脚本文件位置
Hero 引擎:QF 默认路径 Mir200\Envir\QuestDiary\QF.txt,QManager 在 Mir200\Envir\QManager.txt。
3K 引擎:QF 路径 Mir200\Envir\QF.txt,QManager 在 Mir200\Envir\QManager.txt,文件名大小写敏感,部分 Linux 架设环境需全大写。
四、完整实战脚本(Hero 引擎版——角色查询+整数输入充值)
[@main]
#SAY
欢迎使用自助服务。
<查询角色/@query>
<充值金币/@charge>
<退出/@exit>
[@query]
#IF
#ACT
@@InPutString 请输入要查询的角色名:
#ELSEACT
#SAY
已取消查询。
[@query_ok]
#IF
#ACT
GETUSERINFO $STR(1)
SENDMSG 6 角色:$STR(1) 等级:$USERLEVEL 职业:$USERJOB
[@charge]
#IF
#ACT
@@InPutInteger 请输入充值金币数量(1000-100000):
#ELSEACT
#SAY
已取消充值。
[@charge_ok]
#IF
#ACT
MOV N$AMOUNT $INT(1)
#IF
LARGE N$AMOUNT 999
LARGE 100001 N$AMOUNT
#ACT
TAKE 元宝 1
ADDGAMEGOLD N$AMOUNT
SENDMSG 6 充值成功,获得 $STR(N$AMOUNT) 金币。
#ELSEACT
SENDMSG 6 数量超出范围,请输入1000-100000之间的整数。
3K 引擎对应改写要点:把 STR(1) 换成 INPUTSTR,INT(1) 换成 INPUTINT,多轮输入拆标签跳转,QF.txt 放 Mir200\Envir\ 根目录。
脚本调试时 M2 开调试模式(选项→参数设置→M2调试),输入异常直接看 M2 控制台报错行号。QF 脚本改完不用重启 M2,等几秒自动重载;QManager 改完需手动重载或重启。输入框不弹窗优先查触发标签是否写在 #ACT 段、NPC 对话是否用 <文字/@标签> 格式、引擎版本是否支持该标签。
热血传奇NPC脚本开发:@@InPutString与@@InPutInteger玩家交互实现及Hero3K引擎差异
来源:
作者:
点击:

