我一直想知道的东西,尤其是因为它让我在小时候开始编程,这是视频游戏机器人的工作原理吗?我确信有很多不同的方法,但是MMORPG的自动化呢?甚至是FPS型机器人?
我在谈论玩家制造的自动化机器人.
要"游戏"游戏,您需要能够以编程方式执行两项操作:检测游戏中正在发生的事情,并为游戏提供输入.
检测游戏中发生的事情往往是两者中最难的.执行此操作的一些方法是:
屏幕抓取 这种技术捕获屏幕上的图像并对其进行解析,寻找敌人,玩家状态,能量提升,游戏消息,时钟等等.这往往是一种特别困难的方法. OCR技术可用于处理文本,但如果文本是在游戏世界之上编写的(而不是在具有纯实背景的UI元素上),则不断变化的背景会使得难以获得准确且一致的结果.在屏幕上查找非文本对象可能更加困难,尤其是在3D世界中,因为单个对象可能存在许多不同的位置和方向.
音频提示 在某些游戏中,动作和事件伴随着独特的音效.可以通过监视游戏的音频输出并将其与相关音效的记录相匹配来检测这些事件.有些游戏允许玩家为事件提供自己的声音效果,这允许使用设计为易于收听和过滤的声音效果.
内存监控如果很好地理解了游戏的内部工作原理,那么您可以通过检查游戏的内存空间来监控游戏的状态.一些用于控制台系统的作弊工具(例如Game Genie)使用这种方法.通过检测游戏更新的内存,可以检测游戏正在做什么.有些游戏会随机化每次启动时使用的内存位置,以试图阻止此漏洞.
数据包分析使用适当的驱动程序,您可以截取游戏的数据包,因为它们被发送到网卡或从网络中检索(对于在线游戏). 分析这些数据包可以揭示您的游戏客户端与服务器通信的内容,这通常围绕玩家/敌人的行为.
游戏脚本一些游戏有一个内置的脚本界面.如果可用,这通常是最简单的方法,因为它是游戏软件的设计目标(以前的方法通常都算作"黑客").有些脚本必须在游戏中运行(通过控制台或通过附加系统),有些脚本可以通过已发布的API通过游戏进行通信的外部程序运行.
将输入事件生成回游戏通常是更容易的任务.一些方法包括:
内存"Poking"类似于上面的内存监控部分,内存调用是将数据直接写入游戏内存空间的行为.这是Game Genie用于应用其作弊码的方法.鉴于现代游戏的复杂性,这是一项非常困难的任务,并且可能会使整个游戏崩溃.
输入仿真可以生成"假"键盘或鼠标信号来代替直接的人机交互.这可以使用AutoIt等工具在软件中完成.也可以使用硬件黑客,例如连接到计算机的USB或PS/2端口并且系统看起来像是键盘的设备,而是根据从计算机接收的信号生成假的按键事件(例如,通过串行端口).这些方法对于游戏来说可能更难以检测.
游戏脚本如上所述,一些游戏提供了以编程方式控制它的内置方法,并且利用这些工具通常是最简单的(但也许不是最强大的)技术.
请注意,在游戏中运行"僵尸程序"通常违反游戏的使用条款,可能会导致您被暂停,禁止或更糟.在某些司法管辖区,这可能会受到刑事处罚.这是使用游戏内置脚本功能的另一个好处; 如果它被设计成游戏软件的一部分,那么游戏发行商很可能不会禁止你使用它.
有一次我自己写了一个简单的MMORPG机器人.我用过AutoHotkey.
它提供了许多模拟用户输入的方法 - 一个可以工作.用C++编写自己的工作程序是很繁琐的(或者查看AutoHotkey的源代码).
它可以直接在屏幕上搜索像素模式,甚至是游戏画面(DirectX)
所以我所做的就是在屏幕上搜索敌人的名字(存储为带有游戏字体的图片),脚本点击它下方的几个像素进行攻击.如果它太低,它还会跟踪健康栏和盆.
非常琐事.但我知道一个使用AutoHotkey制作的WoW机器人.而且我看到很多其他人都有同样的想法(我的不是魔兽,但也可能是非法的).
更高级的技术不会捕获屏幕,而是直接读取游戏的内存.你必须做很多逆向工程才能完成这项工作.它会在游戏更新时停止工作.
个人如何日常工作?
这是游戏中的AI解决的问题.
您希望您的实体做什么?编码您的实体来做到这一点.如果你想让你的怪物追逐玩家的化身,怪物只需要面对化身然后向它移动.当该怪物进入合适的距离时,它可以选择咬住玩家头像,并且这种选择可以简单AmICloseEnough(monster, player);
或更复杂甚至随机.
FPS中的机器人很难做到正确,因为它很容易让它们变得完美但却不那么容易让它们变得有趣.例如,他们总是知道玩家的确切位置(gPlayer.GetPosition()
),因此每次都可以轻松地将玩家击中.让机器人像人类一样移动需要一些"艺术".