北大侠客行Vscode版-js机器人示例讲解
我们以多个示例来讲解新版本客户端机器人代码的编写客户端核心函数其实就几个:api.alias()
api.action()
api.send()
api.echo()
其它的都是标准的 js 开发
第一个示例:找师父学特殊内功
data/attachment/forum/367bdae758002a7dfb5beb6ace96850e.png
我们一行行来分析
1. api.loops.xuemaster = true;
[解释]:api是一个全局对象,里面包含了最基本的函数,也可以用它来记录全局变量,这里约定死循环的结束标识都记录在api.loops里,当然这不是必须的,可以随便用一个局部变量也没问题
2. api.alias('xuemaster.stop', function () { api.loops.xuemaster = false })
[解释]:这里定义一个别名,输入 xuemaster.stop 指令的时候,可以停止这个学技能的循环
3. api.alias('xuemaster', async () => {
[解释]:这里定义一个别名,输入 xuemaster 指令的时候,循环启动
4. while (api.loops.xuemaster) {
[解释]:死循环,但是如果api.loops.xuemaster=false,会结束循环
5. if (api.session.player.data.neili < 30) {
[解释]:api.session.player 是玩家的实时数据对象,里面包含了GMCP相关数据,主要是房间信息,人物属性,人物属性包含了各种血量、内力、精力、经验等等,都是实时的数据,你可以通过 api.echo(JSON.stringify(api.session.player)) 来打印详情,这句话的意思如果内力小于30就开始睡觉
6. await sys.retry('sleep', '你一觉醒来,精神抖擞地活动了几下手脚', 5, 60);
[解释]:这里的sys对象是一些工具函数的封装,第一次打开游戏的时候会自动创建 init.js ,sys对象里面包含了很多函数,可以直接在里面看源码,这个函数(sys.retry) 的意思是尝试 sleep,然后等待醒过来,会尝试60次,每隔5秒尝试一次,如果中间醒过来了,这个函数就执行结束,也就是 '你一觉醒来,精神抖擞地活动了几下手脚'触发了就表示醒过来
这里sleep 有多种可能性,比如马上睡着或者提示 刚睡过,不能再睡,我们在这里不管这么多,直接用同步等待的方式,直接不停的sleep,直到睡醒
7. if (api.session.player.data.jing < 20) {
[解释]:同样判断一下当时的精力如果小于 20 的话就吸气
8. sys.sendAndEcho("e2");
[解释]:看名称就知道,就是发送指令并打印指令到屏幕(便于调试),封装的 api.send() 和 api.echo()
9.await sys.sleep(1);
[解释]:等待1秒
10. this.autofoodwater();
[解释]:这个是封装的一个函数,如果食物<200就吃干粮,水小于200就在剑心居drink,这个函数很多地方用的上,就封装成一个函数
11. await sys.sleep(1);
[解释]:等待1秒
14. sys.sendAndEcho('xue ding for huagong-dafa 5;xue ding for literate 5');
[解释]:真正开始学技能
总结:尽量使用同步的方式,代码看上去逻辑很清晰,如果设置多个action也能异步实现,但是不够简洁。 当然这个只是示例,还有一些特殊情况,需要处理,比如师父跑了,比如没潜能了,比如超出师父的最高等级了等等,都需要处理,不过还是尽量按照同步的方式,做不到再考虑用action 和变量来处理
页:
[1]