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

传奇NPC输入交互实战:@@InPutString与@@InPutInteger用法及Hero/3K差异

热度:
一、命令本质与变量映射规则
@@InPutStringX触发客户端弹文本输入框,玩家确认后内容写入当前角色S变量(SX),X取值0-99,如@@InPutString22→存S22。
@@InPutIntegerX触发客户端弹数字输入框(仅允许0-9及正负号,非数字自动拒收),写入当前角色N变量(NX),如@@InPutInteger8→存N8。数值受Integer上限约束,溢出归0。
X超出0-99时(如150),部分Hero引擎分支仍可用,但回写强制落S0/N0,不在原号变量;写脚本前先在M2实测目标引擎版本行为。

二、Hero/HEROM2引擎标准写法
触发指令写在Merchant或市场NPC的[@标签]对话段里,玩家点链接→弹框→输入完成→引擎跳转@CallInPutStringX/@CallInPutIntegerX回调标签。过滤命中跳转@IsInFilterList。
完整可跑模板(行会命名+数量兑换):

[@Main]
欢迎来到登记员处\
请输入你的行会名称:\
请输入要兑换的次数(1-10):\
<提交名称/@CallInPutString10>
<提交次数/@CallInPutInteger11>

[@CallInPutString10]
#IF
EQUALS10
#ACT
MESSAGEBOX名称不能为空!
GOTO@Main
#ELSEIF
ISONFILTERS10
#ACT
MESSAGEBOX含有非法字符!
GOTO@Main
#ELSE
#ACT
SENDMSG6已登记行会名:<$STR(S10)>
GOTO@Main

[@CallInPutInteger11]
#IF
EQUALN110
#ACT
MESSAGEBOX次数不能为0!
GOTO@Main
#ELSEIF
LARGEN1110
#ACT
MESSAGEBOX超过上限10!
GOTO@Main
#ELSE
#ACT
INCG10N11
SENDMSG6已记录兑换次数:<$STR(N11)>
GOTO@Main

[@IsInFilterList]
#ACT
MESSAGEBOX输入数据中包含了非法字符,请重新编辑!
GOTO@Main


要点:
•回调标签必须严格叫@CallInPutStringX/@CallInPutIntegerX,少Call在Hero不触发。

•过滤词在M2→查看→列表信息→其他设置/过滤字符列表配置,命中即跳@IsInFilterList。

-在Q-Function0.txt里用@@InPutStringX也有效,但Merchant市场脚本是最常用载体。

三、3K/3KM2引擎写法差异
3K/3KM2去掉Call前缀,输入完成直接跳@InPutStringX/@InPutIntegerX;过滤命中跳@MsgFilter(不是@IsInFilterList)。同一逻辑改写:

[@Main]
请输入你的行会名称:\
请输入要兑换的次数(1-10):\
<提交名称/@InPutString10>
<提交次数/@InPutInteger11>

[@InPutString10]
#IF
EQUALS10
#ACT
MESSAGEBOX名称不能为空!
GOTO@Main
#ELSE
#ACT
SENDMSG6已登记行会名:<$STR(S10)>
GOTO@Main

[@InPutInteger11]
#IF
LARGEN1110
#ACT
MESSAGEBOX超过上限10!
GOTO@Main
#ELSE
#ACT
INCG10N11
SENDMSG6已记录兑换次数:<$STR(N11)>
GOTO@Main

[@MsgFilter]
#SAY
输入的字符非法,请重新输入!\
GOTO@Main


差异速查表:
•Hero:触发@@InPutStringX,回调@CallInPutStringX,过滤@IsInFilterList

•3K:触发@@InPutStringX,回调@InPutStringX,过滤@MsgFilter

-变量存储两边一致:串→SX,数→NX
•3K转Hero最常见“输入无反应”就是回调标签没加Call前缀,M2找不到标签直接断链

四、进阶:延时防连点与文本库校验
高频点NPC会触发多次弹框,加DelayGoto过滤连击:

[@@InPutString5]
#ACT
DelayGoto1~InPutString5
[~InPutString5]
#IF
CHECKTEXTLIST..\QuestDiary\卡号\50000.txt$STR(S5)
#ACT
DELTEXTLIST..\QuestDiary\卡号\50000.txt$STR(S5)
GAMEGOLD+50000
SENDMSG7充值成功,增加50000元宝!
GOTO@Main
#ELSEACT
SENDMSG7卡号错误或已使用!
GOTO@Main

数字框做范围与扣费:

[@@InPutInteger3]
#ACT
DelayGoto1~InPutInteger3
[~InPutInteger3]
#IF
SMALLN31
#ACT
MESSAGEBOX最少1个!
GOTO@Main
#ELSEIF
LARGEN350
#ACT
MESSAGEBOX单次最多50个!
GOTO@Main
#ELSEIF
CHECKGAMEGOLD<$STR(N3)
#ACT
MESSAGEBOX元宝不足!
GOTO@Main
#ELSE
#ACT
GAMEGOLD-$STR(N3)
GIVE肉$STR(N3)
SENDMSG6成功购买<N3>个肉!
GOTO@Main


五、常见坏象与定位
•点链接不弹框:NPC脚本未重读(M2→控制→重读NPC脚本)、命令拼成@InPutStringX少了@@、X>99且引擎不支持。

•弹框后NPC无反应:Hero回调写成@InPutStringX没加Call;3K回调写成@CallInPutStringX多加Call。

-取到空值:玩家取消输入,SX/NX保持旧值,判断分支必须先EQUALSX拦空。
•特殊符号被吞:命中过滤列表,M2列表信息里删对应字符或改@IsInFilterList/@MsgFilter提示。

-大数变0:@@InPutInteger超出32位有符号上限(2147483647),超了归零,大额用@@InPutString接字符串再脚本解析。
•变量串味:多NPC共用S10/N10不清理,进分支前MOVS10或DelayGoto隔离。

六、落地书写规范
任务输入用S10-S19、交易用S20-S29、数值兑换用N10-N19,避免和QF触发变量撞车;回调标签名严格按引擎加不加Call;过滤提示标签Hero用@IsInFilterList、3K用@MsgFilter;Merchant改完重读NPC,QFunction改完重读脚本。命令、回调标签、变量号、过滤标签四者对齐,输入交互链路就通。
[顶部]