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
CHECKSTRS85==
#ACTMESSAGEBOX行会名称不能为空,请重新输入!
BREAK
#IF
CHECKLENS8528
#ACTMESSAGEBOX行会名称长度需在2-8字符之间!
BREAK
#ELSEACT
#SAY你输入的行会名称为:<S85><br>确认创建?<br>\
<确认/@BuildGuild><取消/@Main>
[@BuildGuild]
#ACT
BuildGuild<S85>
#SAY行会创建成功!名称:<S85>
[@CallInPutInteger8]
#IF
SMALLN81
#ACTMESSAGEBOX成员数至少1人!
BREAK
#ELSEACT
#SAY你计划招募成员数:<N8>人<br>\
<确定/@Main>
[@IsInFilterList]
#ACTMESSAGEBOX输入内容包含非法字符,请重新编辑!
#SAY<返回/@Main>
要点:@@InPutString85在#SAY里当超链接触发;输入完引擎跳[@CallInPutString85];空值用CHECKSTRS85==判,长度用CHECKLENS8528,数字范围用SMALL/LARGE/EQUAL判N变量。
三、3K引擎标准写法(不加Call,直接@InPutIntegerX)
3K/部分老内核回调段名就是指令名本体,过滤跳@MsgFilter:
[@Main]
#SAY请输入传送地图编号:<br>\
<输入数字/@InPutInteger1><输入昵称/@InPutString1>
[@InPutInteger1]
#IF
LARGEN10
#ACT
#SAY你输入的地图编号是:<N1><br>\
<前往/@GoMap>
#ELSEACT
MESSAGEBOX编号必须大于0!
[@GoMap]
#ACT
MAPN1
[@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
LARGEN60
#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变量拿到空串:玩家取消输入,未用CHECKSTRSX==兜底
-N变量变0:输入超Integer上限(Hero明确超界归零)或输了非数字被吞
•变量互相覆盖:多个NPC共用S85/N8,长会话用高位编号(S70+)减少冲突
•链接不显示:@InPutStringX必须写在#SAY的反斜杠换行后当<文本/@指令>触发,不能直接当动作执行
七、实战:自定义传送NPC(Hero版)
[@Main]
#SAY自定义传送员<br>输入地图号(如0比奇3盟重11苍月):<br>\
<输入地图号/@InPutInteger3>
[@CallInPutInteger3]
#IF
EQUALN30
#ACTMAP0
#IF
EQUALN33
#ACTMAP3
#IF
EQUALN311
#ACTMAP11
#ELSEACT
MESSAGEBOX暂无该地图编号!
[@IsInFilterList]
#SAY非法输入<br><返回/@Main>
3K版仅改标签为[@InPutInteger3]、删Call、过滤段改名@MsgFilter即可同逻辑跑通。
脚本本质就是@@InPutStringX/@@InPutIntegerX触发弹窗→引擎写SX/NX→跳回调标签→#IF校验→#ACT执行;Hero与3K唯一硬差别在回调段前缀Call与过滤段命名,其余变量、判断、命令完全通用。
一、变量与指令对应关系
•@@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
CHECKSTRS85==
#ACTMESSAGEBOX行会名称不能为空,请重新输入!
BREAK
#IF
CHECKLENS8528
#ACTMESSAGEBOX行会名称长度需在2-8字符之间!
BREAK
#ELSEACT
#SAY你输入的行会名称为:<S85><br>确认创建?<br>\
<确认/@BuildGuild><取消/@Main>
[@BuildGuild]
#ACT
BuildGuild<S85>
#SAY行会创建成功!名称:<S85>
[@CallInPutInteger8]
#IF
SMALLN81
#ACTMESSAGEBOX成员数至少1人!
BREAK
#ELSEACT
#SAY你计划招募成员数:<N8>人<br>\
<确定/@Main>
[@IsInFilterList]
#ACTMESSAGEBOX输入内容包含非法字符,请重新编辑!
#SAY<返回/@Main>
要点:@@InPutString85在#SAY里当超链接触发;输入完引擎跳[@CallInPutString85];空值用CHECKSTRS85==判,长度用CHECKLENS8528,数字范围用SMALL/LARGE/EQUAL判N变量。
三、3K引擎标准写法(不加Call,直接@InPutIntegerX)
3K/部分老内核回调段名就是指令名本体,过滤跳@MsgFilter:
[@Main]
#SAY请输入传送地图编号:<br>\
<输入数字/@InPutInteger1><输入昵称/@InPutString1>
[@InPutInteger1]
#IF
LARGEN10
#ACT
#SAY你输入的地图编号是:<N1><br>\
<前往/@GoMap>
#ELSEACT
MESSAGEBOX编号必须大于0!
[@GoMap]
#ACT
MAPN1
[@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
LARGEN60
#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变量拿到空串:玩家取消输入,未用CHECKSTRSX==兜底
-N变量变0:输入超Integer上限(Hero明确超界归零)或输了非数字被吞
•变量互相覆盖:多个NPC共用S85/N8,长会话用高位编号(S70+)减少冲突
•链接不显示:@InPutStringX必须写在#SAY的反斜杠换行后当<文本/@指令>触发,不能直接当动作执行
七、实战:自定义传送NPC(Hero版)
[@Main]
#SAY自定义传送员<br>输入地图号(如0比奇3盟重11苍月):<br>\
<输入地图号/@InPutInteger3>
[@CallInPutInteger3]
#IF
EQUALN30
#ACTMAP0
#IF
EQUALN33
#ACTMAP3
#IF
EQUALN311
#ACTMAP11
#ELSEACT
MESSAGEBOX暂无该地图编号!
[@IsInFilterList]
#SAY非法输入<br><返回/@Main>
3K版仅改标签为[@InPutInteger3]、删Call、过滤段改名@MsgFilter即可同逻辑跑通。
脚本本质就是@@InPutStringX/@@InPutIntegerX触发弹窗→引擎写SX/NX→跳回调标签→#IF校验→#ACT执行;Hero与3K唯一硬差别在回调段前缀Call与过滤段命名,其余变量、判断、命令完全通用。

