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

传奇NPC输入框开发:@@InPutString与@@InPutInteger完整教程

热度:
NPC交互输入框通过@@InPutString和@@InPutInteger两个命令实现,分别对应文本输入和数字输入。玩家点击带有这两个命令的链接后,客户端弹出输入窗口,输入内容存入指定变量,脚本再对变量进行校验和处理。

输入命令后面的数字X表示变量编号,取值范围0-99。@@InPutStringX将输入内容存入S变量,S代表字符串类型;@@InPutIntegerX存入N变量,N代表数字类型。例如@@InPutString85触发后,玩家输入的文字存入S85;@@InPutInteger85存入N85。

两种引擎在回调标签的写法上有明显区别。Hero引擎需要在输入命令对应的回调标签前加"Call"前缀。玩家输入完成后,脚本跳转到@CallInPutStringX或@CallInPutIntegerX段执行后续逻辑。

Hero引擎写法示例:
```
[@Main]
请输入角色名:<输入/@@InPutString15>\
请输入等级:<输入/@@InPutInteger10>\

[@CallInPutString15]
#SAY
你输入的角色名是<$STR(S15)>\
<返回/@Main>

[@CallInPutInteger10]
#SAY
你输入的等级是<$STR(N10)>\
<返回/@Main>
```

3K引擎省去了Call前缀,输入完成后直接跳转到@InPutStringX或@InPutIntegerX段。

3K引擎写法示例:
```
[@Main]
请输入角色名:<输入/@@InPutString1>\
请输入数量:<输入/@@InPutInteger1>\

[@InPutString1]
#SAY
你输入的角色名是<$STR(S1)>\
<返回/@Main>

[@InPutInteger1]
#SAY
你输入的数量是<$STR(N1)>\
<返回/@Main>
```

变量编号的选择需要避开系统占用。建议从10开始使用,避免与底层系统变量冲突。如果编号不够用,可以使用大于100的数字,此时@@InPutString150的输入内容存入S0,@@InPutInteger150存入N0。

非法字符过滤通过引擎列表信息中的其他设置进行配置。Hero引擎检测到非法字符后跳转到@IsInFilterList标签,3K引擎则跳转到@MsgFilter标签。

非法过滤脚本段:
```
[@IsInFilterList]
#ACT
MESSAGEBOX输入内容包含非法字符,请重新编辑!
GOTO@Main
```

输入内容的后端校验是脚本稳定运行的关键。字符串需检测空值和长度限制,数字需检测范围边界。以行会名称为例,使用CHECKLEN命令限制2-8个字符,先检测空值再检测长度。

字符串校验完整写法:
```
[@CallInPutString85]
#IF
EQUALS85""
#ACT
MESSAGEBOX名称不能为空!
GOTO@Main
BREAK

#IF
CHECKLENS85<2
#ACT
MESSAGEBOX名称至少2个字符!
GOTO@Main
BREAK

#IF
CHECKLENS85>8
#ACT
MESSAGEBOX名称不超过8个字符!
GOTO@Main
BREAK

#SAY
你输入的名称是<$STR(S85)>,确认创建?
<确认/@DoCreate>
```

数字输入需校验是否为有效数值范围。N变量仅支持整数,浮点数会被截断。使用CHECKVALUE命令检测数字范围。

数字校验写法:
```
[@CallInPutInteger10]
#IF
CHECKVALUEN10<1
#ACT
MESSAGEBOX数字必须大于0!
GOTO@Main
BREAK

#IF
CHECKVALUEN10>100
#ACT
MESSAGEBOX数字不能超过100!
GOTO@Main
BREAK

#SAY
你输入的数字是<$STR(N10)>,确认执行?
<确认/@DoExecute>
```

输入框存在网络延迟时可能被重复点击触发多次执行。使用DelayGoto命令加延迟跳转可过滤多重操作。执行逻辑放在延迟跳转的目标段中处理。
[顶部]