热血传奇NPC脚本教程:@@InPutString与@@InPutInteger玩家交互Hero/3K差异

来源: 作者: 点击:
一、两条指令的基础定义
@@InPutStringX:弹文本输入框,玩家可输汉字/字母/符号,结果写入人物 S 变量(SX),X=0–99。
@@InPutIntegerX:弹数字输入框,仅允许纯整数,结果写入人物 N 变量(NX),X=0–99,超出 Integer 上限归 0。
X 即变量槽位:@@InPutString10 → S10,@@InPutInteger21 → N21;X>99 时部分引擎回落到 S0/N0。

触发位置:Market_Def\NPC名-地图号.txt、QuestDiary\子目录.txt、Q-Function0.txt 均可使用,菜单行或 #ACT 段直接写 @@InPutStringX 即弹框。

二、Hero引擎标准写法(带 Call 前缀回调)
输入确认后引擎跳到 [@CallInPutStringX] / [@CallInPutIntegerX] 段;命中过滤列表跳 [@IsInFilterList]。

完整示例(盟重加“武器刻印命名”NPC):
[@main]
SAY

欢迎使用武器刻印,先给武器起名,再填强化等级:\
<开始/@do> <关闭/@exit>

[@do]
@@InPutString10
@@InPutInteger11

[@CallInPutString10]
SAY

你输入的武器名:\
<继续填等级/@next>

[@next]
@@InPutInteger11

[@CallInPutInteger11]
if

SMALL N11 1
act

MESSAGEBOX 强化等级最低1
GOTO @main
elsesay

if

LARGE N11 10
act

MESSAGEBOX 强化等级最高10
GOTO @main
elsesay

act

MESSAGEBOX 刻印成功: S10 强化+N11
SENDMSG 6 武器[ S10 ]已刻印强化+N11

[@IsInFilterList]
act

MESSAGEBOX 输入含非法字符,请重新输入
GOTO @main

[@exit]
say

慢走。

要点:回调段名必须是 [@CallInPutString10]、[@CallInPutInteger11],少 Call 不跳转;S10 用 输出,N11 用 。

三、3K引擎标准写法(无 Call 前缀)
回调段直接叫 [@InPutStringX] / [@InPutIntegerX];过滤命中跳 [@MsgFilter],不是 [@IsInFilterList]。

同上功能3K版:
[@main]
SAY

欢迎使用武器刻印:\
<开始/@do> <关闭/@exit>

[@do]
@@InPutString10
@@InPutInteger11

[@InPutString10]
SAY

你输入的武器名:\
<继续/@next>

[@next]
@@InPutInteger11

[@InPutInteger11]
if

LARGE N11 10
act

MESSAGEBOX 超过最大等级
GOTO @main
elsesay

if

SMALL N11 1
act

MESSAGEBOX 低于最小等级
GOTO @main
elsesay

act

MESSAGEBOX 刻印成功: S10 强化+N11

[@MsgFilter]
SAY

输入字符非法,含屏蔽词或特殊符号。

[@exit]
say

再见。

四、Hero / 3K 核心差异对照
维度 Hero引擎 3K引擎
字符串回调段 [@CallInPutStringX] [@InPutStringX]
数字回调段 [@CallInPutIntegerX] [@InPutIntegerX]
过滤非法跳转 [@IsInFilterList] [@MsgFilter]
变量存储 SX / NX SX / NX
X范围 0–99(>99落S0/N0) 0–99(>99落S0/N0)
适用脚本位置 Market_Def / QuestDiary / Q-Function0 同左


踩坑:Hero脚本丢3K端 → 弹框能输但不继续跑,因 [@CallInPutStringX] 不被识别;3K脚本丢Hero端 → 需补 Call 前缀否则无回调。

五、过滤字符配置位置
M2控制器 → 查看 → 列表信息 → 其他设置 → 过滤字符(或 GuildRankNameFilter.txt),填入敏感词、特殊符号;玩家输入命中即跳过滤段,不写入 S/N 变量。

六、实用业务片段
1. 行会命名 + 人数上限申请
[@main]
SAY

输入新行会名称:\
<确定/@name>

[@name]
@@InPutString5

[@CallInPutString5]
SAY

再输入招收上限(10-200):\
<提交/@max>

[@max]
@@InPutInteger6

[@CallInPutInteger6]
if

SMALL N6 10
act

MESSAGEBOX 最少10人
GOTO @main
elsesay

if

LARGE N6 200
act

MESSAGEBOX 最多200人
GOTO @main
elsesay

act

MESSAGEBOX 行会[ S5 ]上限N6已登记

2. 投票 / 选项选择
[@CallInPutInteger20]
if

EQUAL N20 1
act

INC G$票1 1
SENDMSG 6 已投1号
elsesay

if

EQUAL N20 2
act

INC G$票2 1
SENDMSG 6 已投2号
elsesay

if

EQUAL N20 3
act

INC G$票3 1
SENDMSG 6 已投3号
elsesay

act

MESSAGEBOX 仅限1-3

3. 任务密码校验
[@CallInPutString10]
if

EQUAL S10 龙之密语
act

GOTO @openhide
elsesay

MESSAGEBOX 密码错误
GOTO @main

七、调试与常见不起效原因
• 弹框不出:菜单只写了说明文字没写 @@InPutStringX;或 NPC 未重载(@ReloadNpc / M2重载所有NPC)

• 输入后无反应:Hero端回调段漏 Call、3K端多 Call;或脚本不在 Market_Def / QuestDiary 正确路径

• 变量读空:@@InPutIntegerX 结果用 读(应 ),或 X>99 落到 N0 没对接

• 中文乱码:脚本存成 UTF-8,改 ANSI

• 过滤总触发:M2过滤列表误加常用字,清理后重载

• 数字变0:输入超 Integer 上限,或 N 变量被别处覆盖

• Q-Function0.txt 使用时建议加 DelayGoto 防连点重入

两套引擎输入交互本质一致:弹框 → S/N 变量落地 → 回调段处理;唯一硬差异在回调标签前缀与过滤段名,按端型抄对应模板即可跑通。