一、两条指令到底干什么
@@InPutStringX:客户端弹出文本输入框,只能输字符/汉字/符号,X取值0–99,输入结果写入人物 S 变量(SX)。
@@InPutIntegerX:客户端弹出数字输入框,只能输纯整数,X取值0–99,输入结果写入人物 N 变量(NX)。
X 就是变量槽位编号,@@InPutString5 → S5,@@InPutInteger12 → N12;超出0–99时部分引擎回落到 S0/N0,数值型受整数上限约束溢出归0。
脚本位置不变:MerChant.txt 挂 NPC,Market_Def\脚本名-地图号.txt 写逻辑,QuestDiary 下也可放复杂任务段,Q-Function0.txt 里同样能触发输入指令。
二、Hero引擎标准写法(带 Call 前缀回调)
玩家点菜单 → 弹框 → 输入确认 → 引擎跳到 [@CallInPutStringX] 或 [@CallInPutIntegerX] 段继续执行。
过滤命中(敏感词/特殊符)跳 [@IsInFilterList]。
完整示例(盟重加“自定义传送密码”NPC):
[@main]
SAY
输入你想设置的传送密码(文字):\
输入传送冷却秒数(数字):\
<提交/@ok> <关闭/@exit>
[@ok]
@@InPutString20
@@InPutInteger21
[@CallInPutString20]
SAY
你设置的密码是:\
<继续设数字/@next> <返回/@main>
[@next]
@@InPutInteger21
[@CallInPutInteger21]
if
EQUAL N21 0
act
MESSAGEBOX 冷却秒数不能为0
GOTO @main
elsesay
密码: S20 \
冷却: N21 秒\
已记录到人物变量,关NPC生效。
[@IsInFilterList]
act
MESSAGEBOX 输入含非法字符,重新输入
GOTO @main
[@exit]
say
慢走。
要点:
• 菜单里写 @@InPutString20 是直接触发弹框,不是标签
- 回调段必须叫 [@CallInPutString20] / [@CallInPutInteger21],少 Call 不跳
• S20 用 <文本 S20> 或 S20 直接输出,N21 用 N21
- 过滤词在 M2 → 查看 → 列表信息 → 其他设置 → 过滤字符里维护
三、3K引擎标准写法(无 Call 前缀)
回调段名直接对应指令:[@InPutStringX]、[@InPutIntegerX];过滤命中跳 [@MsgFilter],不是 [@IsInFilterList]。
同上功能3K版:
[@main]
SAY
输入传送密码:\
输入冷却秒数:\
<提交/@ok> <关闭/@exit>
[@ok]
@@InPutString20
@@InPutInteger21
[@InPutString20]
SAY
你输入的密码:\
<继续/@next>
[@next]
@@InPutInteger21
[@InPutInteger21]
if
EQUAL N21 0
act
MESSAGEBOX 冷却不能为零
GOTO @main
elsesay
密码 S20 已记,冷却 N21 秒。
[@MsgFilter]
SAY
字符非法,含屏蔽词或特殊符号,回去重输。
[@exit]
say
再见。
四、Hero / 3K 关键差异对照
维度 Hero引擎 3K引擎
字符串回调段 [@CallInPutStringX] [@InPutStringX]
数字回调段 [@CallInPutIntegerX] [@InPutIntegerX]
过滤非法字符跳转 [@IsInFilterList] [@MsgFilter]
存储变量 SX / NX SX / NX
X范围 0–99(超界落S0/N0) 0–99(超界落S0/N0)
典型用途 任务密码、行会名、充值卡号 同上,语法更短
踩坑:把3K脚本直接丢Hero端,弹框后能输入但不执行后续 → 因为 [@InPutString20] 在Hero里不会自动回调,必须改 [@CallInPutString20];反向同理。
五、实用业务片段
1. 充值卡号校验(InPutString + 文本列表)
[@main]
SAY
请输入充值卡号:\
<确定/@do>
[@do]
@@InPutString22
;Hero端
[@CallInPutString22]
if
CHECKTEXTLIST ..\QuestDiary\元宝充值\card.txt $STR(S22)
act
DELTEXTLIST ..\QuestDiary\元宝充值\card.txt $STR(S22)
GAMEGOLD + 50000
SENDMSG 7 充值成功,增加50000元宝
GOTO @main
elsesay
卡号无效或已使用。
;3K端把 [@CallInPutString22] 改成 [@InPutString22] 即可
2. 数字范围投票 / 次数限制
[@main]
SAY
投票(1-3):\
[@callvote]
@@InPutInteger30
[@CallInPutInteger30]
if
SMALL N30 1
act
MESSAGEBOX 太小
elsesay
if
LARGE N30 3
act
MESSAGEBOX 超出范围
else
act
INC G$票N30 1
SENDMSG 6 投票成功:N30
3. 行会命名过滤
@@InPutString1 → S1 存名 → EQUAL / CHECKTEXTLIST 校验 → 命中 [@IsInFilterList] 拒回
六、调试与常见起不来原因
• 弹框不出:菜单行没写 @@InPutStringX,只在 #SAY 写了文字;或 NPC 没重载(@ReloadNpc / M2重载所有NPC)
• 输入后没反应:回调段名拼错(Hero少 Call、3K多 Call),或脚本文件不在 Market_Def / QuestDiary 对应路径
• 变量读空:输出写成 S20 但用的是 @@InPutInteger20(应读 N20);或 X 超出99落到 S0/N0 没对应上
• 中文乱码:脚本文件存成 UTF-8,改 ANSI
• 过滤总触发:M2过滤列表里带了常用字,清掉误加项
• 数字变0:输入超过整数上限,或 N 变量被别处覆盖
两套引擎输入交互本质一样:弹框 → S/N 变量落地 → 回调段处理;差别只在回调标签前缀和过滤段名,按端型抄对应模板就不会偏。
传奇脚本开发实战:Hero与3K引擎@@InPutString/@@InPutInteger全流程对比
来源:
作者:
点击:

