传奇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要求回调段加 DelayGoto 1 ~InPutStringX 防网络抖动重复触发
最小可用样例(Hero引擎,充值卡号):
[@Main]
请输入充值卡卡号:\ <请输入充值卡卡号/@@InPutString22>\
[@CallInPutString22]
#IF
CHECKTEXTLIST ..\QuestDiary\卡号\50000.txt <$STR(S22)>
#ACT
DELTEXTLIST ..\QuestDiary\卡号\50000.txt <$STR(S22)>
GAMEGOLD + 50000
SENDMSG 7 充值成功,增加50000元宝
GOTO @Main
#ELSEACT
SENDMSG 7 卡号错误或被使用!
GOTO @Main
回读必须用 <$STR(S22)>(文本)或 <$N(N8)>(数字),直接写 S22 不解析。
二、GEE / GXX / 翎风系:面板内嵌输入框
不走系统弹窗,在 #SAY 里直接画控件:
INPUTTEXT:输入框ID:X:Y:宽:高:背景色:边框色:文字色:最小长度:最大长度:非法提示:占位提示:提示色
INPUTNUM:输入框ID:X:Y:宽:高:背景色:边框色:文字色:最小值:最大值:非法提示:占位提示:提示色
• 输入框ID 1—40,背景-1透明、边框-1无边框
• 最小/最大长度为0表示不判断;INPUTNUM 最小=最大=0表示不限
• 配提交按钮:text:显示名:X:Y:提交类型:输入框ID列表/@回调标签
- 提交类型1=全提交,或写 1,2,3 只提交指定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:1,2/@提交部分
[@提交部分]
#ACT
SendMsg 5 姓名:<$NPCINPUT(1)> 年龄:<$NPCINPUT(2)>
[@全部提交]
#ACT
SendMsg 5 姓名:<$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)> 切勿混用
四、引擎差异对照表
维度 Hero 3K LegendM2 GEE/GXX GOM
文本输入命令 @@InPutStringX @@InPutStringX @@InPutStringX INPUTTEXT: SendInputBox / INPUT
数字输入命令 @@InPutIntegerX @@InPutIntegerX @@InPutIntegerX INPUTNUM: 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 @InputBoxFilter M2过滤列表
弹窗形式 系统模态框 系统模态框 系统模态框 NPC面板内嵌 系统模态框
Hero转GEE最常见坑:把 @CallInPutString22 原样搬进GEE,玩家点链接无反应 → GEE必须改面板 INPUTTEXT: + <$NPCINPUT(1)> 回读。
五、典型业务落地片段
1. 行会创建取名(GOM):
[@Main]
<申请创建行会/ SendInputBox 行会创建 请输入行会名称 0 12 无>
[@创建回调]
#IF
CheckGuildExist $INPUTMSG
#ACT
SENDMSG 7 行会已存在
GOTO @Main
#ELSEACT
CreateGuild $INPUTMSG
SENDMSG 7 行会<$INPUTMSG>创建成功
GEE版把 SendInputBox 换成 INPUTTEXT:1:… + text:确定:10:6:1/@创建回调,判断用 CheckGuildExist <$NPCINPUT(1)>。
2. 自定义称号(Hero):
[@Main]
<设置我的称号/@@InPutString5>\
[@CallInPutString5]
#ACT
MOV S10 <$STR(S5)>
SetRankName <$STR(S5)>
SENDMSG 7 称号已变更为:<$STR(S5)>
3. 数量兑换(GOM/GEE通用逻辑):
INPUT 请输入兑换数量(1-1000) 1 1000
SETG111 $INPUTNUM
#IF
CHECKNUM1 <$N(G111)>
CHECKNUM 1000 <$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/N 0—99 槽位冲突,多个输入框用连续编号,扩展引擎用 S$自定义名隔离
输入框脚本本质就是“选对引擎命令 + 回调段命名合规 + 用对应变量宏回读 + 非法字符跳段接住”四件事对齐,跨引擎搬运先过一遍上表再改路径与变量宏,不会出现点了没反应或回读空值。
热血传奇脚本开发输入框调用:InPutString与GEE对话框引擎差异全解析
来源:
作者:
点击:

