NPC 输入框在传奇脚本里靠两条引擎内建指令驱动:@@InPutStringX 弹文本输入框,@@InPutIntegerX 弹数字输入框,X 取 0–99(Hero 引擎支持超过 100,存入 S0/N0 兜底),文本进人物 S 变量(SX),数字进人物 N 变量(NX),输入完成引擎自动跳到对应回调标签继续执行脚本 。下面按真写 Envir/NPCs 文件的顺序拆。
一、变量与指令对应关系
• @@InPutStringX → 玩家输入任意字符 → 存 SX(如 X=15 存 S15)→ 适用行会名、礼包码、留言、角色名查询
• @@InPutIntegerX → 玩家只能输整数 → 存 NX(如 X=8 存 N8)→ 适用数量、次数、等级、金额、编号
- X 范围 0–99,重复占用会互相覆盖;Hero 引擎 X>99 时统一落 S0/N0
• 非法字符命中 M2「列表信息→其他设置→过滤字符」→ 跳过滤标签,不进正常回调
二、Hero 引擎标准写法(必须 Call 前缀回调)
Hero / GOM 系在回调段名前加 Call,过滤跳 @IsInFilterList:
[@Main]
#SAY 欢迎来到申请官。<br>请输入行会名称:<br> \
<输入行会名/@InPutString85> <输入成员数/@InPutInteger8>
[@CallInPutString85]
#IF
CHECKSTR S85 ==
#ACT MESSAGEBOX 行会名称不能为空,请重新输入!
BREAK
#IF
CHECKLEN S85 2 8
#ACT MESSAGEBOX 行会名称长度需在2-8字符之间!
BREAK
#ELSEACT
#SAY 你输入的行会名称为:<S85><br>确认创建?<br> \
<确认/@BuildGuild> <取消/@Main>
[@BuildGuild]
#ACT
BuildGuild <S85>
#SAY 行会创建成功!名称:<S85>
[@CallInPutInteger8]
#IF
SMALL N8 1
#ACT MESSAGEBOX 成员数至少1人!
BREAK
#ELSEACT
#SAY 你计划招募成员数:<N8> 人<br> \
<确定/@Main>
[@IsInFilterList]
#ACT MESSAGEBOX 输入内容包含非法字符,请重新编辑!
#SAY <返回/@Main>
要点:@@InPutString85 在 #SAY 里当超链接触发;输入完引擎跳 [@CallInPutString85];空值用 CHECKSTR S85 == 判,长度用 CHECKLEN S85 2 8,数字范围用 SMALL / LARGE / EQUAL 判 N 变量 。
三、3K 引擎标准写法(不加 Call,直接 @InPutIntegerX)
3K / 部分老内核回调段名就是指令名本体,过滤跳 @MsgFilter:
[@Main]
#SAY 请输入传送地图编号:<br> \
<输入数字/@InPutInteger1> <输入昵称/@InPutString1>
[@InPutInteger1]
#IF
LARGE N1 0
#ACT
#SAY 你输入的地图编号是:<N1><br> \
<前往/@GoMap>
#ELSEACT
MESSAGEBOX 编号必须大于0!
[@GoMap]
#ACT
MAP N1
[@InPutString1]
#SAY 你输入的昵称是:<S1><br>查询中……
[@MsgFilter]
#SAY 输入的字符非法,包含屏蔽词或特殊符号。<br> \
<返回/@Main>
核心差异:Hero 是 [@CallInPutStringX] / [@CallInPutIntegerX],3K 是 [@InPutStringX] / [@InPutIntegerX];过滤段 Hero 叫 @IsInFilterList,3K 叫 @MsgFilter 。
四、Hero 与 3K 差异对照
维度 Hero / GOM 系 3K / 老内核
文本指令 @@InPutStringX @@InPutStringX
数字指令 @@InPutIntegerX @@InPutIntegerX
回调标签 [@CallInPutStringX] [@CallInPutIntegerX] [@InPutStringX] [@InPutIntegerX]
非法字符跳转 [@IsInFilterList] [@MsgFilter]
X>99 处理 支持,存 S0/N0 多数版本仅 0–99
变量作用域 人物会话级 S/N 人物会话级 S/N
过滤配置入口 M2→查看→列表信息→其他设置 M2→插件消息过滤列表
五、多输入框串联(先名后数再确认)
[@Main]
#SAY 行会招募登记<br> \
<第一步:输行会名/@InPutString5>
[@CallInPutString5]
#SAY 收到名称 <S5><br>第二步:输招募人数<br> \
<继续/@InPutInteger6>
[@CallInPutInteger6]
#IF
LARGE N6 0
#ACT
#SAY 名称 <S5> 人数 <N6><br> \
<提交/@SaveGuild>
#ELSEACT
MESSAGEBOX 人数错误!
[@SaveGuild]
#ACT
GUILDADD <S5> <N6>
#SAY 登记完成
串变量用 S/N 做中间态,每段只干一件事,避免一次弹两个框(引擎不支持同屏双输入)。
六、常见踩坑
• 回调不触发:Hero 漏写 Call 前缀、3K 多写 Call,标签名和 X 编号对不上
- 输入后脚本断在 Main:过滤列表命中,没写 @IsInFilterList / @MsgFilter 段
• S 变量拿到空串:玩家取消输入,未用 CHECKSTR SX == 兜底
- N 变量变 0:输入超 Integer 上限(Hero 明确超界归零)或输了非数字被吞
• 变量互相覆盖:多个 NPC 共用 S85/N8,长会话用高位编号(S70+)减少冲突
• 链接不显示:@InPutStringX 必须写在 #SAY 的反斜杠换行后当 <文本/@指令> 触发,不能直接当动作执行
七、实战:自定义传送 NPC(Hero 版)
[@Main]
#SAY 自定义传送员<br>输入地图号(如 0比奇 3盟重 11苍月):<br> \
<输入地图号/@InPutInteger3>
[@CallInPutInteger3]
#IF
EQUAL N3 0
#ACT MAP 0
#IF
EQUAL N3 3
#ACT MAP 3
#IF
EQUAL N3 11
#ACT MAP 11
#ELSEACT
MESSAGEBOX 暂无该地图编号!
[@IsInFilterList]
#SAY 非法输入<br><返回/@Main>
3K 版仅改标签为 [@InPutInteger3]、删 Call、过滤段改名 @MsgFilter 即可同逻辑跑通。
脚本本质就是 @@InPutStringX / @@InPutIntegerX 触发弹窗 → 引擎写 SX/NX → 跳回调标签 → #IF 校验 → #ACT 执行;Hero 与 3K 唯一硬差别在回调段前缀 Call 与过滤段命名,其余变量、判断、命令完全通用 。
热血传奇NPC脚本@@InPutString与@@InPutInteger交互开发Hero/3K区别详解
来源:
作者:
点击:

