一、命令本质与变量映射
@@InPutStringX:客户端弹文本输入框,玩家确认后内容写入当前角色S变量(SX),X=0~99,如@@InPutString10→存S10。
@@InPutIntegerX:客户端弹数字输入框(仅收0-9、正负号,非数字拒收),写入当前角色N变量(NX),如@@InPutInteger8→存N8。数值受32位有符号整数上限约束(2147483647),溢出归0。
X>99时(如150),部分Hero分支仍可用,但回写强制落S0/N0,不在原号变量;写脚本前先在本机M2实测目标引擎版本行为。
命令仅在Merchant市场脚本与QFunction-0.txt(QF)内有效,触发后引擎中断当前对话流,弹框,输入完成跳转对应回调标签。
二、Hero/HeroM2引擎标准写法
触发指令写在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→查看→列表信息→其他设置/过滤字符列表(或GuildRankNameFilter.txt)配置,命中即跳@IsInPutList。
-高频点击加DelayGoto过滤连击:@@InPutInteger5→#ACTDelayGoto1~InPutInteger5→[~InPutInteger5]写逻辑。
三、3K/3KM2引擎写法差异
3K去掉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找不到标签直接断链
四、进阶:文本库校验与扣费逻辑
数字框做范围与货币扣费:
[@@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
文本输入落盘(写行会申请记录):
[@CallInPutString5]
#IF
EQUALS5
#ACT
MESSAGEBOX不能为空!
GOTO@Main
#ELSE
#ACT
AddTextList.\Envir\QuestDiary\行会申请.txt<$USERNAME>:<$STR(S5)>
SENDMSG6申请已提交:<$STR(S5)>
GOTO@Main
大数金额(超21亿)别用@@InPutInteger,改用@@InPutString接字符串后脚本解析,避免溢出归0。
五、常见坏象与定位
•点链接不弹框:NPC脚本未重读(M2→控制→重读NPC脚本)、命令拼成@InPutStringX少了@@、X>99且引擎不支持、脚本首行未声明(@@InPutString@@InPutInteger)(3K要求)。
-弹框后NPC无反应:Hero回调写成@InPutStringX没加Call;3K回调写成@CallInPutStringX多加Call。
•取到空值:玩家取消输入,SX/NX保持旧值,判断分支必须先EQUALSX拦空。
-特殊符号被吞:命中过滤列表,M2列表信息里删对应字符或改@IsInFilterList/@MsgFilter提示。
•大数变0:@@InPutInteger超出32位有符号上限,换@@InPutString接字符串。
-变量串味:多NPC共用S10/N10不清理,进分支前MOVS10或DelayGoto隔离。
六、落地书写规范
任务输入用S10-S19、交易用S20-S29、数值兑换用N10-N19,避开QF触发变量撞车;回调标签名严格按引擎加不加Call;过滤提示标签Hero用@IsInFilterList、3K用@MsgFilter;Merchant改完重读NPC,QF改完重读脚本。命令、回调标签、变量号、过滤标签四者对齐,输入交互链路即通。
@@InPutStringX:客户端弹文本输入框,玩家确认后内容写入当前角色S变量(SX),X=0~99,如@@InPutString10→存S10。
@@InPutIntegerX:客户端弹数字输入框(仅收0-9、正负号,非数字拒收),写入当前角色N变量(NX),如@@InPutInteger8→存N8。数值受32位有符号整数上限约束(2147483647),溢出归0。
X>99时(如150),部分Hero分支仍可用,但回写强制落S0/N0,不在原号变量;写脚本前先在本机M2实测目标引擎版本行为。
命令仅在Merchant市场脚本与QFunction-0.txt(QF)内有效,触发后引擎中断当前对话流,弹框,输入完成跳转对应回调标签。
二、Hero/HeroM2引擎标准写法
触发指令写在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→查看→列表信息→其他设置/过滤字符列表(或GuildRankNameFilter.txt)配置,命中即跳@IsInPutList。
-高频点击加DelayGoto过滤连击:@@InPutInteger5→#ACTDelayGoto1~InPutInteger5→[~InPutInteger5]写逻辑。
三、3K/3KM2引擎写法差异
3K去掉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找不到标签直接断链
四、进阶:文本库校验与扣费逻辑
数字框做范围与货币扣费:
[@@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
文本输入落盘(写行会申请记录):
[@CallInPutString5]
#IF
EQUALS5
#ACT
MESSAGEBOX不能为空!
GOTO@Main
#ELSE
#ACT
AddTextList.\Envir\QuestDiary\行会申请.txt<$USERNAME>:<$STR(S5)>
SENDMSG6申请已提交:<$STR(S5)>
GOTO@Main
大数金额(超21亿)别用@@InPutInteger,改用@@InPutString接字符串后脚本解析,避免溢出归0。
五、常见坏象与定位
•点链接不弹框:NPC脚本未重读(M2→控制→重读NPC脚本)、命令拼成@InPutStringX少了@@、X>99且引擎不支持、脚本首行未声明(@@InPutString@@InPutInteger)(3K要求)。
-弹框后NPC无反应:Hero回调写成@InPutStringX没加Call;3K回调写成@CallInPutStringX多加Call。
•取到空值:玩家取消输入,SX/NX保持旧值,判断分支必须先EQUALSX拦空。
-特殊符号被吞:命中过滤列表,M2列表信息里删对应字符或改@IsInFilterList/@MsgFilter提示。
•大数变0:@@InPutInteger超出32位有符号上限,换@@InPutString接字符串。
-变量串味:多NPC共用S10/N10不清理,进分支前MOVS10或DelayGoto隔离。
六、落地书写规范
任务输入用S10-S19、交易用S20-S29、数值兑换用N10-N19,避开QF触发变量撞车;回调标签名严格按引擎加不加Call;过滤提示标签Hero用@IsInFilterList、3K用@MsgFilter;Merchant改完重读NPC,QF改完重读脚本。命令、回调标签、变量号、过滤标签四者对齐,输入交互链路即通。

