当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇脚本开发实战:Hero与3K引擎@@InPutString/@@InPutInteger全流程对比

热度:
一、两条指令到底干什么
@@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变量落地→回调段处理;差别只在回调标签前缀和过滤段名,按端型抄对应模板就不会偏。
[顶部]