游戏机器人如何看待游戏世界和其他实体?


52

这个问题在我心中已经存在了一段时间……主要是因为我看到了诸如《魔兽世界》之类的各种游戏的机器人。我的问题是;机器人如何知道屏幕上出现了什么?我没有玩《魔兽世界》,所以我的示例可能是错误的,但是例如,如果有一个怪物,机器人将如何知道屏幕上该怪物的位置以及如何与之交互?

您可以将其应用于任何游戏还是针对每个游戏?如果问题不清楚,我感到很抱歉...我不是在问如何制造机器人,而是要问他们如何在屏幕上检测到东西,这对我非常着迷!

提前致谢 :)


14
在大多数情况下,这些漫游器会钩在游戏的内存上并直接读取游戏元素的位置,而不是试图了解屏幕上的内容。
Alexandre Desbiens

2
Aceboy1993,您是程序员吗?请编辑问题,并让我们知道其中一种方式。答案可能需要稍有不同,这取决于答案。
Panzercrisis

3
只是为了清楚起见;您是在说非内置的游戏自动化,对吗?黄金养殖机器人,瞄准机器人等?还是您是指AI玩家?
Anko 2015年

嗨,我是一名程序员。是的,我在谈论金牌种植机器人和瞄准机器人,但我也对AI玩家感兴趣:)
TheRapture87

3
@ Aceboy1993覆盖这两个问题会使这个问题过于广泛。请把它们分开。
2015年

Answers:


77

机器人可以在很多方面将自己注入到游戏中。

  • 屏幕是其中之一,但到目前为止并不是最有用的。但是,我曾经见过一个非常早期的反恐精英瞄准机器人,它使用了颜色编码。它带有带有单色纹理的替代角色模型(游戏对游戏友好,足以允许这样做),然后仅检测到了这些颜色的像素。但是,这不是一种非常有效的方法。那时它已经很笨拙,并且变得越来越不可行,因为图形引擎变得越来越强大,这意味着越来越多的细节会使任何光学识别算法感到困惑。

  • 另一点是直接读取内存[1]。您的计算机上可能有一个程序读取另一个程序的内存。因此,开发人员只需找出游戏将与机器人相关的信息保存在哪个内存地址即可。有一些工具可以通过创建内存映像并提供各种搜索工具来帮助开发人员找到他们想要的东西。一种对策是使用地址布局随机化,但是智能机器人可能仍然能够自动找到他们想要的东西。

  • 可以修改游戏可执行文件本身。为了做到这一点,机器人开发人员需要能够在汇编器中进行读取和编程,这在某些实践中并不难。然后,他们寻找处理他们感兴趣的信息的代码,并将其重写以传递给他们的机器人。从游戏开发者的角度来看,一种可能的对策是使用混淆器来降低游戏的汇编代码的可读性,但是这些通常不利于性能,并且有许多工具可以使混淆器逆转其工作。

  • 然后是网络代码。在在线游戏中,服务器通过网络发送游戏中所有对象的属性和位置。服务器和客户端之间的网络数据流可以被拦截和分析。一个流行的工具是wireshark。当开发人员对网络代码进行逆向工程时,他们可以编写一个可以拦截网络流量的漫游器,就像Wireshark一样,并使用该信息来做出决定。当开发人员更有动力时,他们甚至可以从头开始开发一个完整的游戏客户端,该客户端实现网络协议并玩游戏,甚至没有任何图形输出。这类机器人在金农中非常受欢迎,因为没有图形输出,客户端通常对资源更加友好,这意味着它们可以在小型服务器上一次运行很多。


1:由于您提到了WoW,所以值得指出的是,早期臭名昭著的WoWGlider引导程序使用了直接内存访问。暴雪有一个名为Warden的子程序,该子程序旨在检测并阻止外部程序访问WoW的内部游戏状态。由于漫游器程序绕过了这种保护并未经允许就读取了内存,因此2006年的MDY v Blizzard诉讼被判决支持暴雪,理由是该漫游器制造商鼓励并允许其用户侵犯版权并违反DMCA


评论不作进一步讨论;此对话已转移至聊天
乔什

18

机器人是玩家。他们就像其他所有玩家一样,从服务器读取玩家/怪物的位置,然后将这些值与简单的AI脚本结合使用,以编程方式模拟键盘笔触和鼠标点击,从而在游戏中执行动作。如果机器人实际上有一种算法可以检测屏幕上的怪物并与其进行交互,那么那将是一款相当出色的软件,价值数百万美元。这基本上是机器人的AI。


2
进行遮挡检查和射线投射以检查机器人是否会看到怪物,然后使用动画状态检查怪物在做什么,这比较简单。
棘手怪胎2015年

为此,您必须对游戏进行反向工程,实施射线投射并读取怪物的动画状态,这需要注入代码并修改.exe。与读取从服务器接收的网络软件包(使用Phillip建议的Wireshark),然后简单地让AI脚本根据网络数据包模拟键盘/鼠标操作相比,这更简单吗?
dimitris93

2
我假设使用的是“ AI对手”机器人,而不是改装的客户端机器人。
棘轮怪胎2015年

3
@ratchetfreak哦,这很有意义。问题中的《魔兽世界》参考实际上暗示“机器人”基本上是淘金者,而不是AI反对者。
dimitris93

7

Phillip已经对大多数机器人的工作方式进行了很好的概述,但是我只是想更详细地介绍一下内容,因为我有一些自己的经验,可以在他所涉及的所有类型的机器人上进行开发。

在Runescape中,有一个大型项目(RSBot),可以将内存的内容从Runescape客户端复制到其本地内存中,然后在这里可以查看游戏的整个状态,而不会出现客户端被追上的风险。为了找到指向数据的指针,需要进行一些逆向工程来确定在内存中查找的位置,但是一旦这样做,他们就公开了API以利用信息。通过获取对象的坐标,然后使用相机变换矩阵对其进行变换以获取屏幕上的位置,它将确切地知道世界上什么地方。命中遮罩也是可读的,因此准确确定将鼠标移到哪个范围以获取所需结果并不容易。

该机器人提供了一堆调试信息,例如,注释告知开发人员哪些图块坐标在哪里,该对象具有哪个ID,属于给定项目的ID等。然后,这些信息可用于制造机器人。制作机器人脚本的实际过程实际上非常简单。该框架提供了许多实用程序功能,例如move_to(world_coordinates)mouse_move(x,y)将以某种令人信服的方式执行指定的操作(沿着随机样条线移动鼠标,通过小地图和屏幕反复移动等)。

同样在Runescape中,您可以选择大幅降低图形质量。通过拍摄屏幕并应用一些基本的计算机视觉概念来构建世界模型,制造某些类型的机器人实际上非常容易。我使用这种技术制作了一个诅咒机器人和一个熔炼机器人,两者都工作得很好。它只需要获取帧,尽可能地增加饱和度,然后尝试从中提取模式,然后可以为点击区域生成概率图。

在诅咒机器人的情况下,目标是较小的恶魔,这只是一个巨大的红色东西,很难找到。对于熔炼机器人,它将寻找一个灰色包围的小橙色梯形,那就是熔炉。它还会尝试找到一个大的浅灰色的“ L”形,即银行柜台。这只是通过缩减规模和基本启发式方法来完成的。它也可以使用迷你地图旁边的便捷指南针来定位自己,因此可以将相机定位在更可靠的位置以找到目标对象。

在各种Nexon游戏中,服务器非常信任客户端。在Maplestory中,我通过修改地图以消除危险或添加扭曲来滥用大量信息,从而使机器人不必几乎那么复杂。我还将监视往返服务器的流量,以建立一个世界模型,然后将其用于快速查找和杀死怪物。

一旦我意识到我不再玩MMO并自动将它们进行自动化,我决定完全停止玩MMO。如果我不担心自己会合法曝光,我可能会杀了销售MMO机器人,但我真的不想被起诉。这就是为什么我现在花时间进行真正的编程!


阿们在最后一段。我是通过1)玩《魔兽世界》 2)使《魔兽世界》 3)开始编写自己的Bot机器人而进入编程的。我在短短两年内获得的编程知识比我在学习时学到的其他任何东西都有价值(至少,对“实用”编程如此)。
塞巴斯蒂安·格拉夫

2

Phillip的回答很好,但是只需简单介绍一下Model / View / Controller模式,或者简称MVC。

您的屏幕是“视图”的一部分,“视图”显示来自“模型”的数据,如果您愿意,它是游戏的真实状态。机器人和您的角色都(在某种意义上)“存在”于模型中。想象一下,如果您拔下屏幕的电源,即使视图消失了,游戏也将继续。

在网络游戏中,“模型”的概念有点复杂,因为您实际上有很多模型。您在服务器上拥有模型,然后在每个客户端上都有模型,这部分地由于其从服务器接收的数据而进行更新。您可以将“模型”视为包含服务器模型和客户端模型的模型,也可以将其仅视为自己的客户端模型。无论哪种方式,这都是机器人的住所。因此,它们的“感知”(可以用作它们的数据输入和状态的简写)基于当时模型的状态以及模型中不同实体/对象之间的交互作用。实际上,每个bot可能都有一个称为“ refreshState”的函数,该函数每帧或某个帧运行一次,并导致其更新。


0

他们可以从文件或服务器读取光线,也可以通过光线碰撞检测系统读取。通常使用从机器人(在这种情况下)到他的外部的光线。如果射线与某物碰撞,则它将一些信息返回给机器人,例如射线发现是玩家,机器人,动物还是简单的墙壁。这是因为,例如在玩家和机器人的情况下,它们有一个看不见的胶囊,使它们完全包含有关其类型的信息(例如人类,机器人,...)。这样,例如,如果他们跟随您,它们可以避免撞到墙壁和其他物体。

您可以看到此页面的碰撞检测部分


那将需要您向实际游戏中注入代码
dimitris93

当然是。它都是经过编程的,但是对于自由路径或跟随您的机器人等情况很有用。在3D游戏中,AFAIK是最常见的方式,并且已经研究了至少不是mmorp的一种方式……也许哇,服务器上拥有所有信息,但是与大型mmorp有所不同。
Megasa3 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.