有这么一款叫我的世界的游戏 我在玩游戏的过程中为了保持区块的实时更新 需要使用一个假人进行挂机 既然假人都有了 于是我也就给假人写入了更多的功能(不玩这个游戏的大可不必看这个帖子 除非你想学习一下)
声明:不要在服务器中挂大量的机器人,不要用机器人去自动做大量的事情,不然服主可能会以为被假人攻击给你ip ban了:)
一.准备工作
在开始编写之前我们需要做那么一些准备
1.安装一个代码编辑器(相信在坐的各位都有)这里我用的是Visual Studio Code
2.在 Visual Studio Code 中安装拓展内容:①NPM②npm Intellisense③JavaScript and Typescript Nightly(点击左侧拓展按钮搜索即可)
3.安装在编写时所需要用到的运行环境 Node.js 下载地址:https://nodejs.cn/download/
4.检查node.js是否安装成功 使用快捷键win+r输入powershell 在弹出的命令提示框中输入node -v 如果出现版本号即代表安装没有问题
5.在系统设置中依次点击 更新与安全-开发者选项 打开开发者模式 打开弹出来窗口上的按钮 如无法打开 在后面的系统设置中输入Set-ExecutionPolicy RemoteSigned 若还是失败在文件夹中找到powershell并用管理员身份打开 重复以上步骤
6.配置Node.js的包管理器npm 这里我们使用阿里巴巴的国内镜像源 打开powershell输入
npm config set registry https://registry.npmmirror.com/
完成之后如果没有反应即代表配置成功
二.创建文件夹
1.我们先创建一个名为Bot的文件夹 右键使用VS Code打开 右键左侧空白区域点击在集成终端中打开
2.在终端中输入npm init -y 开初始化项目
3.在终端中输入npm i mineflayer flying-squid 安装Mineflayer
4.在文件夹Bot中新建文件夹src 在src中新建一个名为main.js的文件
(由于要素过多 跳过了Hello World的测试)
三.创建服务器
如果你没有一个服务器用来测试bot 那么你就需要手动创建一个服务器 有的话请跳至第四部
1.使用flying-squid 来创建一个本地服务器 在Bot中新建文件夹server 在server中新建文件server.js
2.输入代码来实现本地服务器
const mcServer = require('flying-squid')
mcServer.createMCServer({
'motd': 'Bot 测试服',//服务器名称
'port': 25565,//端口
'max-players': 10,//最大人数
'online-mode': false,
'logging': false,
'gameMode': 1,//模式
'difficulty': 1,//难度
'worldFolder': './server/world',
'generation': {
'name': 'superflat',
'options': {
'worldHeight': 80
}
},
'kickTimeout': 10000,
'plugins': {
},
'modpe': false,
'view-distance': 10,
'player-list-text': {
'header': 'Flying squid',
'footer': 'Test server'
},
'everybody-op': true,
'max-entities': 100,
'version': '1.16.1'//版本
})
服务器最高版本仅支持1.16 在终端中输入node ./server/server.js 运行服务器 这时候我们使用客户端进入127.0.0.1会发现里面并没有机器人 这时候我们需要在src中新建文件config.json
{
"username": "Bot",
"account": "Bot",//正版邮箱 没有填名字就行
"host": "ip",
"port": 端口,
"version": "版本",
"offline": "microsoft",//是否为正版
"hideErrors": false,
"timeout": 30000,
"ViewDistance": 4,
"checkTimeoutInterval": 0,
"keepAlive": true
}
自行修改文件后 终端输入node ./src/config.json运行机器人
四.拓展内容
1.如果我们想要让机器人有更多的功能 打开刚刚创建的main.js文件
const mineflayer = require('mineflayer');
const config = require('./config.json');
输入上面两行代码 分别声明两个常量 并且加载mineflayer模块 和config.json文件
然后输入function initialize()声明一个名为initialize的函数 那么最终的代码长这个样子
const mineflayer = require('mineflayer');
const config = require('./config.json');
function initialize() {
bot = mineflayer.createBot(config)
bot.on('spawn', () => {
bot.chat('输入你的密码');
})
}
在这里我们使用了一个on方法在spawn事件中添加了一个事件处理函数 用于bot在服务器中登录 大部分服务器登录指令为/l 这里可以自行更改 就此我们完成了bot的基本功能
但是 只有这些又怎么够呢!
2.因为bot在运行的过程中没有办法通过后台控制(除了开关机)所以说为了让bot实现一些操作就需要检测玩家在游戏中的动作 比如说 玩家在游戏中输入了+菜单 bot就会发送一个菜单出来
bot.on('chat', (username, message) => {
if (username === bot.username) return
if (message === '+菜单')
bot.chat('help Bot信息 抽奖 彩蛋 今日运势(所有功能前需写入+ )')
})
这就是一段简单的菜单代码 这里使用了一个if来检测username是否是bot的名字 如果是的话通过return返回 防止在服务器中因为刷屏被ban 第二个if 使用message来检测聊天框内输出的信息 如果检测到+菜单 就会使用bot.chat()方法输出上面那一串文字
3.尝试使用bot来完成与一个简易的抽奖
bot.on('chat', function (username, message) {
if (message === '+今日运势') {
var randomNumber = Math.floor(Math.random() * 101);
if (randomNumber < 20) {
bot.chat("今日运势:倒霉蛋");
} else {
if (randomNumber < 40) {
bot.chat("今日运势:有点倒霉");
} else {
if (randomNumber < 60) {
bot.chat("今日运势:普普通通");
} else {
if (randomNumber < 80) {
bot.chat("今日运势:有点幸运");
} else {
bot.chat("今日运势:超级幸运")
}
}
}
}
}
});
这是一个类似于抽奖的内容 这里我们继续使用message来检测玩家输出的内容 然后使用var来创建一个名为randomNumber的变量 用于存储随机数的信息 我们又通过使用Math.random()方法来创建了一个0-1的随机数 然后乘以101并向下取证 这样我们就有了一个0-100的随机数 如果我们的随机数<20 那么bot就会输出 倒霉蛋 否则就会继续检测随机数是否小于40 就这么套娃一直套下去 知道最后随机数不小于20 40 60 80 就会输出一个超级幸运 而每一个阶段的概率都是百分之二十
4.这个就是我最近在研究的一个新玩法 其中一部分的代码是这个样子的
bot.on('chat', function (username, message) {
if (message === '+幸运抽奖') {
var randomNumber = Math.floor(Math.random() * 101);
if (randomNumber < 90) {
bot.chat("当前底金为1w元 是否继续(输入+不继续停止)");
if (answer === '+继续') {
var randomNumber2 = Math.floor(Math.random() * 101);
if (randomNumber2 < 70) {
bot.chat('您的底金为1.5w元 是否继续');
bot.on('chat', function (username, answer2) {
if (answer2 === '+继续') {
var randomNumber3 = Math.floor(Math.random() * 101);
if (randomNumber3 < 50) {
bot.chat('您的底金为2w元 是否继续');
} else {
bot.chat('您失败了');
}
} else if (answer2 === '+不继续') {
bot.chat('您获得了1.5w元');
}
});
} else {
bot.chat('您失败了');
}
} else if (answer === '+不继续') {
bot.chat('您获得了1w元');
};
} else {
bot.chat("您失败了!");
}
}
});
这里当我们输入+幸运抽奖 就会生成一个0-100的随机数 如果随机数小于90那么就会运行后面的代码 否则就会输出您失败了 如果成功又会声明randomNumber2 存储第二个随机数 如果小于70就会运行后面的代发 否则就会输出您失败了 后面的也就依次类推
上面就是我这次帖子的内容了 学的不算多 可能一些专业名词没说对什么的 见谅见谅 代码如果有什么问题也请大佬们帮忙改一改 尤其是最后一个 谢谢啦:))))))))))))))))))))))))))))))))))))))))