传奇NPC脚本里的“输入框”不是单一命令,按引擎内核分成两条路线:老派Hero/3K/LegendM2走@@InPutStringX/@@InPutIntegerX弹系统对话框,把内容写进人物S/N变量;新派GEE/GXX/翎风走INPUTTEXT:/INPUTNUM:在自定义NPC面板里嵌可视输入框,用<$NPCINPUT(id)>回读;GOM系另有SendInputBox/INPUT/INPUTBOX变体。下面按调用机制、变量存储、引擎差异、实战样例、排错顺序直拆。
一、基础调用机制(Hero/3K/LegendM2系)
触发命令写在#SAY或对话文本里:
•@@InPutStringX→弹文本输入框,X为0—99编号,输入存人物S变量(S0—S99,扩展引擎支持S0—S499及S$自定义名)
•@@InPutIntegerX→弹数字输入框,输入存人物N变量(N0—N99)
•玩家确定后脚本跳到回调段:@InPutStringX/@InPutIntegerX(3K、LegendM2)或@CallInPutStringX/@CallInPutIntegerX(Hero)
-非法字符过滤:Hero跳@IsInFilterList,3K跳@MsgFilter,LegendM2同Hero;过滤词表在M2→查看→列表信息→其他设置或GuildRankNameFilter.txt配
-防连点:LegendM2要求回调段加DelayGoto1~InPutStringX防网络抖动重复触发
最小可用样例(Hero引擎,充值卡号):
[@Main]
请输入充值卡卡号:\<请输入充值卡卡号/@@InPutString22>\
[@CallInPutString22]
#IF
CHECKTEXTLIST..\QuestDiary\卡号\50000.txt<$STR(S22)>
#ACT
DELTEXTLIST..\QuestDiary\卡号\50000.txt<$STR(S22)>
GAMEGOLD+50000
SENDMSG7充值成功,增加50000元宝
GOTO@Main
#ELSEACT
SENDMSG7卡号错误或被使用!
GOTO@Main
回读必须用<$STR(S22)>(文本)或<$N(N8)>(数字),直接写S22不解析。
二、GEE/GXX/翎风系:面板内嵌输入框
不走系统弹窗,在#SAY里直接画控件:
INPUTTEXT:输入框ID:X:Y:宽:高:背景色:边框色:文字色:最小长度:最大长度:非法提示:占位提示:提示色
INPUTNUM:输入框ID:X:Y:宽:高:背景色:边框色:文字色:最小值:最大值:非法提示:占位提示:提示色
•输入框ID1—40,背景-1透明、边框-1无边框
•最小/最大长度为0表示不判断;INPUTNUM最小=最大=0表示不限
•配提交按钮:text:显示名:X:Y:提交类型:输入框ID列表/@回调标签
-提交类型1=全提交,或写123只提交指定ID
•回读用<$NPCINPUT(1)><$NPCINPUT(2)>,不是S/N变量
GEE完整样例:
[@main]
姓名:INPUTTEXT:1:0:0:80:15:0:249:255:4:10:姓名必须4-10位:输入姓名:160
年龄:INPUTNUM:2:0:2:80:15:0:249:255:1:100:年龄1-100:输入年龄:160
性别:INPUTNUM:3:0:4:80:15:0:249:255:0:1:男(0)女(1):选择性别:160
text:提交全部:10:6:1/@全部提交
text:只提交姓名年龄:10:8:12/@提交部分
[@提交部分]
#ACT
SendMsg5姓名:<$NPCINPUT(1)>年龄:<$NPCINPUT(2)>
[@全部提交]
#ACT
SendMsg5姓名:<$NPCINPUT(1)>年龄:<$NPCINPUT(2)>性别:<$NPCINPUT(3)>
非法字符触发@InputBoxFilter或@inputboxFilter段。
三、GOM/996/Blue系变体
•GOM:SendInputBox标题提示类型最大长度初始值(类型0文本、1数字),回读用GetInputString或$INPUTMSG/$INPUTNUM;老GOM也认@@InPutStringX
•简化写法:INPUT提示文字最小最大→存$INPUTNUM;INPUTBOX标题提示最小最大→存$INPUTNUM
•Blue:支持#InputString原生命令,回调同@InPutStringX
•变量引用:GOM用$STR(G111)转字符串,Hero/Legend用<$STR(Sxx)>,GEE用<$NPCINPUT(id)>切勿混用
四、引擎差异对照表
维度Hero3KLegendM2GEE/GXXGOM
文本输入命令@@InPutStringX@@InPutStringX@@InPutStringXINPUTTEXT:SendInputBox/INPUT
数字输入命令@@InPutIntegerX@@InPutIntegerX@@InPutIntegerXINPUTNUM:INPUT/INPUTBOX
回调段前缀@CallInPut…@InPut…@InPut…(建议DelayGoto)@按钮回调@回调标签
文本存储S变量<$STR(SX)>S变量S变量<$NPCINPUT(id)>$INPUTMSG/$STR()
数字存储N变量<$N(X)>N变量N变量<$NPCINPUT(id)>$INPUTNUM
非法字符跳段@IsInFilterList@MsgFilter@IsInFilterList@InputBoxFilterM2过滤列表
弹窗形式系统模态框系统模态框系统模态框NPC面板内嵌系统模态框
Hero转GEE最常见坑:把@CallInPutString22原样搬进GEE,玩家点链接无反应→GEE必须改面板INPUTTEXT:+<$NPCINPUT(1)>回读。
五、典型业务落地片段
1.行会创建取名(GOM):
[@Main]
<申请创建行会/SendInputBox行会创建请输入行会名称012无>
[@创建回调]
#IF
CheckGuildExist$INPUTMSG
#ACT
SENDMSG7行会已存在
GOTO@Main
#ELSEACT
CreateGuild$INPUTMSG
SENDMSG7行会<$INPUTMSG>创建成功
GEE版把SendInputBox换成INPUTTEXT:1:…+text:确定:10:6:1/@创建回调,判断用CheckGuildExist<$NPCINPUT(1)>。
2.自定义称号(Hero):
[@Main]
<设置我的称号/@@InPutString5>\
[@CallInPutString5]
#ACT
MOVS10<$STR(S5)>
SetRankName<$STR(S5)>
SENDMSG7称号已变更为:<$STR(S5)>
3.数量兑换(GOM/GEE通用逻辑):
INPUT请输入兑换数量(1-1000)11000
SETG111$INPUTNUM
#IF
CHECKNUM1<$N(G111)>
CHECKNUM1000<$N(G111)>
#ACT
TAKE龙鳞刀<$N(G111)>
GAMEGOLD+<$CALC(<$N(G111)>*50)>
GEE若输入框不弹,查GEE.ini里EnableInputBox=1及缓存目录GeeCache是否未清。
六、排错清单
•点链接不弹框:Hero查@CallInPut…前缀、GEE查是否误用@@InPut而非INPUTTEXT、GOM查SendInputBox拼写及M2输入权限
•回读为空:Hero/3K用<$STR(SX)>而非SX;GEE用<$NPCINPUT(id)>而非S变量;GOM用$INPUTMSG而非S变量
•非法字符不拦截:M2→列表信息→其他设置填过滤表,Hero/Legend跳@IsInFilterList,GEE跳@InputBoxFilter
•输完没反应:回调段名拼错、QuestDiary路径.与..不对(GEE要求..\)、未清GeeCache/GomCache
-变量串号:S/N0—99槽位冲突,多个输入框用连续编号,扩展引擎用S$自定义名隔离
输入框脚本本质就是“言引擎命令+回调段命名合规+用对应变量宏回读+非法字符跳段接住”四件事对齐,跨引擎搬运先过一遍上表再改路径与变量宏,不会出现点了没反应或回读空值。
一、基础调用机制(Hero/3K/LegendM2系)
触发命令写在#SAY或对话文本里:
•@@InPutStringX→弹文本输入框,X为0—99编号,输入存人物S变量(S0—S99,扩展引擎支持S0—S499及S$自定义名)
•@@InPutIntegerX→弹数字输入框,输入存人物N变量(N0—N99)
•玩家确定后脚本跳到回调段:@InPutStringX/@InPutIntegerX(3K、LegendM2)或@CallInPutStringX/@CallInPutIntegerX(Hero)
-非法字符过滤:Hero跳@IsInFilterList,3K跳@MsgFilter,LegendM2同Hero;过滤词表在M2→查看→列表信息→其他设置或GuildRankNameFilter.txt配
-防连点:LegendM2要求回调段加DelayGoto1~InPutStringX防网络抖动重复触发
最小可用样例(Hero引擎,充值卡号):
[@Main]
请输入充值卡卡号:\<请输入充值卡卡号/@@InPutString22>\
[@CallInPutString22]
#IF
CHECKTEXTLIST..\QuestDiary\卡号\50000.txt<$STR(S22)>
#ACT
DELTEXTLIST..\QuestDiary\卡号\50000.txt<$STR(S22)>
GAMEGOLD+50000
SENDMSG7充值成功,增加50000元宝
GOTO@Main
#ELSEACT
SENDMSG7卡号错误或被使用!
GOTO@Main
回读必须用<$STR(S22)>(文本)或<$N(N8)>(数字),直接写S22不解析。
二、GEE/GXX/翎风系:面板内嵌输入框
不走系统弹窗,在#SAY里直接画控件:
INPUTTEXT:输入框ID:X:Y:宽:高:背景色:边框色:文字色:最小长度:最大长度:非法提示:占位提示:提示色
INPUTNUM:输入框ID:X:Y:宽:高:背景色:边框色:文字色:最小值:最大值:非法提示:占位提示:提示色
•输入框ID1—40,背景-1透明、边框-1无边框
•最小/最大长度为0表示不判断;INPUTNUM最小=最大=0表示不限
•配提交按钮:text:显示名:X:Y:提交类型:输入框ID列表/@回调标签
-提交类型1=全提交,或写123只提交指定ID
•回读用<$NPCINPUT(1)><$NPCINPUT(2)>,不是S/N变量
GEE完整样例:
[@main]
姓名:INPUTTEXT:1:0:0:80:15:0:249:255:4:10:姓名必须4-10位:输入姓名:160
年龄:INPUTNUM:2:0:2:80:15:0:249:255:1:100:年龄1-100:输入年龄:160
性别:INPUTNUM:3:0:4:80:15:0:249:255:0:1:男(0)女(1):选择性别:160
text:提交全部:10:6:1/@全部提交
text:只提交姓名年龄:10:8:12/@提交部分
[@提交部分]
#ACT
SendMsg5姓名:<$NPCINPUT(1)>年龄:<$NPCINPUT(2)>
[@全部提交]
#ACT
SendMsg5姓名:<$NPCINPUT(1)>年龄:<$NPCINPUT(2)>性别:<$NPCINPUT(3)>
非法字符触发@InputBoxFilter或@inputboxFilter段。
三、GOM/996/Blue系变体
•GOM:SendInputBox标题提示类型最大长度初始值(类型0文本、1数字),回读用GetInputString或$INPUTMSG/$INPUTNUM;老GOM也认@@InPutStringX
•简化写法:INPUT提示文字最小最大→存$INPUTNUM;INPUTBOX标题提示最小最大→存$INPUTNUM
•Blue:支持#InputString原生命令,回调同@InPutStringX
•变量引用:GOM用$STR(G111)转字符串,Hero/Legend用<$STR(Sxx)>,GEE用<$NPCINPUT(id)>切勿混用
四、引擎差异对照表
维度Hero3KLegendM2GEE/GXXGOM
文本输入命令@@InPutStringX@@InPutStringX@@InPutStringXINPUTTEXT:SendInputBox/INPUT
数字输入命令@@InPutIntegerX@@InPutIntegerX@@InPutIntegerXINPUTNUM:INPUT/INPUTBOX
回调段前缀@CallInPut…@InPut…@InPut…(建议DelayGoto)@按钮回调@回调标签
文本存储S变量<$STR(SX)>S变量S变量<$NPCINPUT(id)>$INPUTMSG/$STR()
数字存储N变量<$N(X)>N变量N变量<$NPCINPUT(id)>$INPUTNUM
非法字符跳段@IsInFilterList@MsgFilter@IsInFilterList@InputBoxFilterM2过滤列表
弹窗形式系统模态框系统模态框系统模态框NPC面板内嵌系统模态框
Hero转GEE最常见坑:把@CallInPutString22原样搬进GEE,玩家点链接无反应→GEE必须改面板INPUTTEXT:+<$NPCINPUT(1)>回读。
五、典型业务落地片段
1.行会创建取名(GOM):
[@Main]
<申请创建行会/SendInputBox行会创建请输入行会名称012无>
[@创建回调]
#IF
CheckGuildExist$INPUTMSG
#ACT
SENDMSG7行会已存在
GOTO@Main
#ELSEACT
CreateGuild$INPUTMSG
SENDMSG7行会<$INPUTMSG>创建成功
GEE版把SendInputBox换成INPUTTEXT:1:…+text:确定:10:6:1/@创建回调,判断用CheckGuildExist<$NPCINPUT(1)>。
2.自定义称号(Hero):
[@Main]
<设置我的称号/@@InPutString5>\
[@CallInPutString5]
#ACT
MOVS10<$STR(S5)>
SetRankName<$STR(S5)>
SENDMSG7称号已变更为:<$STR(S5)>
3.数量兑换(GOM/GEE通用逻辑):
INPUT请输入兑换数量(1-1000)11000
SETG111$INPUTNUM
#IF
CHECKNUM1<$N(G111)>
CHECKNUM1000<$N(G111)>
#ACT
TAKE龙鳞刀<$N(G111)>
GAMEGOLD+<$CALC(<$N(G111)>*50)>
GEE若输入框不弹,查GEE.ini里EnableInputBox=1及缓存目录GeeCache是否未清。
六、排错清单
•点链接不弹框:Hero查@CallInPut…前缀、GEE查是否误用@@InPut而非INPUTTEXT、GOM查SendInputBox拼写及M2输入权限
•回读为空:Hero/3K用<$STR(SX)>而非SX;GEE用<$NPCINPUT(id)>而非S变量;GOM用$INPUTMSG而非S变量
•非法字符不拦截:M2→列表信息→其他设置填过滤表,Hero/Legend跳@IsInFilterList,GEE跳@InputBoxFilter
•输完没反应:回调段名拼错、QuestDiary路径.与..不对(GEE要求..\)、未清GeeCache/GomCache
-变量串号:S/N0—99槽位冲突,多个输入框用连续编号,扩展引擎用S$自定义名隔离
输入框脚本本质就是“言引擎命令+回调段命名合规+用对应变量宏回读+非法字符跳段接住”四件事对齐,跨引擎搬运先过一遍上表再改路径与变量宏,不会出现点了没反应或回读空值。

