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

热血传奇NPC脚本开发:@@InPutString与@@InPutInteger玩家交互实现及Hero3K引擎差异

热度:
NPC交互输入框靠@@InPutString(字符串)和@@InPutInteger(整数)两个触发标签实现,玩家点击对话框选项后弹出输入框,输入内容存入临时变量,脚本通过检测变量值决定后续流程。两个标签只在QF触发文件或QManage定时脚本里生效,直接写NPC对话文本不触发。

一、@@InPutString字符串输入实现
用途:收玩家输入文本,如角色名、自定义称号、留言、物品名。
触发格式:

<输入角色名/@inputname>


[@inputname]
#IF
#ACT
@@InPutString请输入要查询的角色名:
#ELSEACT
#SAY
输入取消或异常。

玩家输入后,引擎将内容存入STR(N),N为当前触发序号。取值用:

#IF
#ACT
SENDMSG6你输入的是:$STR(1)

实战示例(查询角色信息):

[@main]
#SAY
查询角色信息,请输入角色名:
<开始查询/@query>
[@query]
#IF
#ACT
@@InPutString请输入角色名:
#ELSEACT
#SAY
已取消。
[@query_ok]
#IF
#ACT
GETUSERINFO$STR(1)
SENDMSG6角色等级:$USERLEVEL行会:$GUILDNAME

字符串变量上限255字节,超长截断。输入为空或点取消走#ELSEACT分支。

二、@@InPutInteger整数输入实现
用途:收数字,如充值金额、数量、次数、密码数字。
触发格式:

<输入数量/@inputnum>


[@inputnum]
#IF
#ACT
@@InPutInteger请输入数量(1-9999):
#ELSEACT
#SAY
已取消。

输入值存入INT(N),取值:

#IF
#ACT
SENDMSG6你输入的数量是:$INT(1)

实战示例(批量购买物品):

[@buyitem]
#IF
#ACT
@@InPutInteger请输入购买数量(1-100):
#ELSEACT
#SAY
已取消。
[@buyitem_ok]
#IF
#ACT
MOVN$数量$INT(1)
#IF
LARGEN$数量0
SMALLN$数量101
#ACT
TAKE金币<$STR(N$数量)*1000>
GIVE强效太阳水$STR(N$数量)
SENDMSG6购买成功,获得$STR(N$数量)个强效太阳水。
#ELSEACT
SENDMSG6数量无效,请输入1-100之间的整数。

整数输入非数字字符自动转0,负数部分引擎按0处理。输入范围校验必须脚本里用LARGE/SMALL/EQUAL自行判断,引擎不自带范围限制。

三、Hero引擎与3K引擎差异对照
1.变量命名与取值
Hero引擎:字符串用STR(N),整数用INT(N),N从1开始递增,同一触发链内序号连续。
3K引擎:字符串用INPUTSTR,整数用INPUTINT,不区分序号,每次输入覆盖上一值。3K取值直接写INPUTSTR即可,不需要序号后缀。
Hero写法:

SENDMSG6输入内容:$STR(1)

3K写法:

SENDMSG6输入内容:$INPUTSTR$


2.触发位置限制
Hero引擎:@@InPutString/@@InPutInteger可在QF、QManage、NPC对话的#ACT段触发,部分版本支持在#IF段嵌套调用。
3K引擎:仅允许在QF的#ACT段和NPC对话的按钮响应里触发,QManager定时脚本里直接调用无效,需通过Mov中转变量再判断。

3.输入长度与类型校验
Hero引擎:字符串最长255字节,整数范围-2147483648到2147483647,超出截断或归零。支持在@@InPutInteger后紧跟参数限制位数,如@@InPutInteger请输入6位密码:6(限制6位数字)。
3K引擎:字符串最长200字节,整数范围同Hero。不支持位数限制参数,只能脚本里用STRLEN/LARGE/SMALL二次校验。

4.取消与异常处理
Hero引擎:玩家点取消或关闭输入框,STR(N)/INT(N)返回空字符串或-1,脚本用EQUALSTR(1)""或EQUALINT(1)-1判断。
3K引擎:取消后变量保持上一次值不变,首次无上一次值时返回空。判断取消需先MOV变量默认值再检测是否变化。

5.多轮输入串联
Hero引擎支持连续触发多个输入框,变量序号递增互不覆盖:

#ACT
@@InPutString输入A:
@@InPutInteger输入B:

取值:STR(1)为A,INT(2)为B。
3K引擎连续触发会覆盖,需在第一轮输入后跳转到新标签处理完再触发第二轮:

[@step1]
#ACT
@@InPutString输入A:
[@step1_ok]
#IF
#ACT
MOVS$A$INPUTSTR$
@@InPutInteger输入B:
[@step2_ok]
#ACT
MOVN$B$INPUTINT$


6.脚本文件位置
Hero引擎:QF默认路径Mir200\Envir\QuestDiary\QF.txt,QManager在Mir200\Envir\QManager.txt。
3K引擎:QF路径Mir200\Envir\QF.txt,QManager在Mir200\Envir\QManager.txt,文件名大小写敏感,部分Linux架设环境需全大写。

四、完整实战脚本(Hero引擎版——角色查询+整数输入充值)

[@main]
#SAY
欢迎使用自助服务。
<查询角色/@query>
<充值金币/@charge>
<退出/@exit>

[@query]
#IF
#ACT
@@InPutString请输入要查询的角色名:
#ELSEACT
#SAY
已取消查询。

[@query_ok]
#IF
#ACT
GETUSERINFO$STR(1)
SENDMSG6角色:$STR(1)等级:$USERLEVEL职业:$USERJOB

[@charge]
#IF
#ACT
@@InPutInteger请输入充值金币数量(1000-100000):
#ELSEACT
#SAY
已取消充值。

[@charge_ok]
#IF
#ACT
MOVN$AMOUNT$INT(1)
#IF
LARGEN$AMOUNT999
LARGE100001N$AMOUNT
#ACT
TAKE元宝1
ADDGAMEGOLDN$AMOUNT
SENDMSG6充值成功,获得$STR(N$AMOUNT)金币。
#ELSEACT
SENDMSG6数量超出范围,请输入1000-100000之间的整数。


3K引擎对应改写要点:把STR(1)换成INPUTSTR,INT(1)换成INPUTINT,多轮输入拆标签跳转,QF.txt放Mir200\Envir\根目录。

脚本调试时M2开调试模式(选项→参数设置→M2调试),输入异常直接看M2控制台报错行号。QF脚本改完不用重启M2,等几秒自动重载;QManager改完需手动重载或重启。输入框不弹窗优先查触发标签是否写在#ACT段、NPC对话是否用<文字/@标签>格式、引擎版本是否支持该标签。
[顶部]