传奇脚本NPC输入交互实战:@@InPutString与@@InPutInteger用法及Hero/3K差异解析

来源: 作者: 点击:
在传奇服务端 NPC 脚本里,让玩家主动录入文字或数字再回写逻辑,靠的就是 @@InPutStringX 与 @@InPutIntegerX 两条触发指令。X 为 0–99 的编号,直接决定数据落进哪一组人物变量:字符串进 S 变量(S0–S99),整数进 N 变量(N0–N99)。执行到该指令时客户端弹出系统输入框,玩家确认后脚本跳到对应回调段继续跑,未确认前后续脚本不执行。

一、@@InPutStringX 文本输入底层规则
语法:@@InPutStringX(X=0~99)
触发后弹文本输入框,允许汉字、字母、符号混合录入,回车确认后内容写入 SX。
Hero 引擎回调标签:[@CallInPutStringX]
3K 引擎回调标签:[@InPutStringX]
若录入字符命中过滤列表(Hero 路径:查看→列表信息→其他设置;部分版本读 GuildRankNameFilter.txt),跳 [@IsInFilterList](3K 跳 [@MsgFilter])。

二、@@InPutIntegerX 数字输入底层规则
语法:@@InPutIntegerX(X=0~99)
客户端仅收数字字符,非数字直接拒录,确认后写入 NX。受 Integer 上限约束,溢出归 0。
Hero 回调:[@CallInPutIntegerX]
3K 回调:[@InPutIntegerX]

三、Hero 引擎完整可跑样例(装备刻印 NPC)
[@Main]
欢迎来到装备刻印师!\
请为武器命名(点下方):<输入名称/@InPutStr>\
请输入强化等级1-10(点下方):<输入等级/@InPutNum>\

[@InPutStr]
@@InPutString10 请输入武器名称:
; Hero 实际跳转 [@CallInPutString10]

[@InPutNum]
@@InPutInteger11 请输入强化等级:
; Hero 实际跳转 [@CallInPutInteger11]

[@CallInPutString10]
#IF
CheckStrLen <$STR(S10)> 1
#ACT
MESSAGEBOX 武器名称已记录:<$STR(S10)>
GOTO @CallInPutInteger11
#ELSE
MESSAGEBOX 名称不能为空!
GOTO @Main

[@CallInPutInteger11]
#IF
LARGE N11 10
SMALL N11 1
#ACT
MESSAGEBOX 等级必须在1-10之间!
GOTO @Main
#ELSE
MESSAGEBOX 刻印成功!名称:<$STR(S10)> 等级:<&N11>
CLOSE

说明:S10 存武器名,N11 存等级;Hero 必须写 [@CallInPutXXX] 回调段,漏写则输入完无响应。

四、3K 引擎同逻辑改写要点
3K 不认 Call 前缀,回调段名直接等于指令名:
[@Main]
请输入角色改名:<执行/@InPutString1>\
请输入兑换数量:<执行/@InPutInteger1>\

[@InPutString1]
@@InPutString1 请输入新名字:

[@InPutInteger1]
@@InPutInteger1 请输入数量:

[@InPutString1]
#IF
EQUAL S1
#ACT
MESSAGEBOX 名字不能为空!
GOTO @Main
#ELSE
MESSAGEBOX 你输入的名字:<$STR(S1)>
CLOSE

[@InPutInteger1]
#IF
SMALL N1 1
#ACT
MESSAGEBOX 数量错误!
GOTO @Main
#ELSE
MESSAGEBOX 兑换数量:<&N1>
CLOSE

[@MsgFilter]
#SAY
输入的字符命中过滤列表,请重新输入!
GOTO @Main

注意:3K 里 [@InPutString1] 既是触发入口也是回调段,Hero 转 3K 最常见错就是把 [@CallInPutString1] 原样搬过去,结果点击无弹窗。

五、Hero 与 3K 核心差异对照
1. 回调标签:Hero 用 [@CallInPutStringX]/[@CallInPutIntegerX];3K 用 [@InPutStringX]/[@InPutIntegerX]
2. 过滤分支:Hero 跳 [@IsInFilterList];3K 跳 [@MsgFilter]
3. 变量槽位:两者一致,SX / NX,X=0~99;Hero 支持扩号 >99(如 150)但回写仍落 S0/N0,3K 严格 0–99
4. 指令书写:@@ 前缀两引擎通用,差异只在回调段命名与过滤标签名
5. 空值表现:Hero 推荐 CheckStrLen 判空;3K 常用 EQUAL SX 判空,直接读 <$STR(SX)> 空串不崩

六、常见落地场景
• 行会创建/自定义称号:@@InPutString 存 S 变量,配合 EQUAL/CheckStrLen 做敏感词与长度校验

• 批量兑换/抽奖次数:@@InPutInteger 存 N 变量,用 LARGE/SMALL/EQUAL 做区间判定

• 密码门任务:@@InPutString 录密语,EQUAL SX "龙之密语" 开隐藏剧情

• 管理员封号/荣誉名单写 TXT:@@InPutString 录名 → WRITETEXT 落盘 → SendMsg 回执

七、调试与排错习惯
• 弹窗点了没反应:先查回调段名是否按引擎写对(Hero 缺 Call、3K 多 Call 都死)

• 变量读出来空:确认 @@InPutStringX 与读取的 SX 编号一致,别写成 S8 读 S10

• 数字变 0:录入值超 Integer 上限或录了非纯数字被 3K/Hero 拒写

• 过滤误杀:Hero 去“列表信息→其他设置”删词;3K 查插件消息过滤列表

• 防连点重入:Hero 可在 #ACT 加 DelayGoto 1 ~InPutStringX 锁一次执行

八、变量规划建议
0–9 留给临时显示;10–19 任务线输入;20–29 交易/兑换数量;30–39 行会/称号名;40+ 留扩展。别满屏用 S0/S1,版本迭代多人改脚本时极难追值。N 变量同理,纯数字逻辑别混用 S 变量做判断,类型搞错是传奇脚本最隐蔽的坑。