一、两条指令到底干什么
@@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
EQUALN210
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
EQUALN210
act
MESSAGEBOX冷却不能为零
GOTO@main
elsesay
密码S20已记,冷却N21秒。
[@MsgFilter]
SAY
字符非法,含屏蔽词或特殊符号,回去重输。
[@exit]
say
再见。
四、Hero/3K关键差异对照
维度Hero引擎3K引擎
字符串回调段[@CallInPutStringX][@InPutStringX]
数字回调段[@CallInPutIntegerX][@InPutIntegerX]
过滤非法字符跳转[@IsInFilterList][@MsgFilter]
存储变量SX/NXSX/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
SENDMSG7充值成功,增加50000元宝
GOTO@main
elsesay
卡号无效或已使用。
;3K端把[@CallInPutString22]改成[@InPutString22]即可
2.数字范围投票/次数限制
[@main]
SAY
投票(1-3):\
[@callvote]
@@InPutInteger30
[@CallInPutInteger30]
if
SMALLN301
act
MESSAGEBOX太小
elsesay
if
LARGEN303
act
MESSAGEBOX超出范围
else
act
INCG$票N301
SENDMSG6投票成功: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变量落地→回调段处理;差别只在回调标签前缀和过滤段名,按端型抄对应模板就不会偏。
@@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
EQUALN210
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
EQUALN210
act
MESSAGEBOX冷却不能为零
GOTO@main
elsesay
密码S20已记,冷却N21秒。
[@MsgFilter]
SAY
字符非法,含屏蔽词或特殊符号,回去重输。
[@exit]
say
再见。
四、Hero/3K关键差异对照
维度Hero引擎3K引擎
字符串回调段[@CallInPutStringX][@InPutStringX]
数字回调段[@CallInPutIntegerX][@InPutIntegerX]
过滤非法字符跳转[@IsInFilterList][@MsgFilter]
存储变量SX/NXSX/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
SENDMSG7充值成功,增加50000元宝
GOTO@main
elsesay
卡号无效或已使用。
;3K端把[@CallInPutString22]改成[@InPutString22]即可
2.数字范围投票/次数限制
[@main]
SAY
投票(1-3):\
[@callvote]
@@InPutInteger30
[@CallInPutInteger30]
if
SMALLN301
act
MESSAGEBOX太小
elsesay
if
LARGEN303
act
MESSAGEBOX超出范围
else
act
INCG$票N301
SENDMSG6投票成功: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变量落地→回调段处理;差别只在回调标签前缀和过滤段名,按端型抄对应模板就不会偏。

