魔兽世界图像处理
World of Warcraft image processing
当我寻找一种创建插件的方法时,它会检查 WoW-PvP-Queue-Status,以创建 REST 服务,我被告知不可能有一个实时的插件和 REST 服务之间的连接。所以我正在考虑另一种方法来解决我的问题,并得出结论,我考虑分析 WoW-Window 并搜索视觉模式来完成我正在寻找的东西。
我的程序应该检查并告诉我,每当程序的用户正在排队等待战场时,还应该告诉我 he/she 在哪个战场排队,这样我就可以收集数据并将其 post 到我的service/website。我可以使用 WoW-Addon 创建一些视觉反馈,用于我正在寻找的事件......就像一个信号,它告诉我的程序要做什么。
所以我想知道,我将如何完成创建这样的信号解释器(就像屏幕抓取器一样)。我在考虑 OpenCV,但不知道从哪里开始,特别是我有点好奇 Warden(反作弊引擎)会如何解释这样的程序,我真的不希望我的用户因为这样的事情而被禁止。它应该真的只是解释我创建的插件的视觉反馈。
例如:
如果用户排队等待 Arathi Basin,应该弹出一个黄色信号,如果弹出黄色信号,程序会告诉我的服务玩家 xyz 已经排队,稍后应该显示在...在我的主页上即时的。如果用户排队等待战歌,又弹出一个信号等
我目前刚刚接触过 C#/.NET 的早期阶段,并且会用这样的服务开始一个小项目,那么我需要学习什么来构建这个东西?
我真的很想知道我需要哪些知识来解决这个问题。
对于Windows是可行的,但是抓取WinAPI有点不稳定。
所以编写新的应用程序:
- 您需要找到 WoW 客户端 window(它的句柄)
将其 canvas 抓取为位图
如果 gfx 驱动程序允许,则尝试获取桌面图像。所以创建 canvas 为:
Canvas->handle = GetDC(WOW_window_handle);
你得到的尺寸是这样的:
RECT r; GetWindowRect(WOW_window_handle,&r);
所以现在只需将矩形从 canvas 复制到您的位图中进行处理...
然后你就可以做你想做的事了
由于图像是计算机生成的,因此不会有太多噪音,只是缩放 +/- 一些过滤器,因此应该相对容易检测图像是否包含战场信息。另外detect/read里面的文字应该很简单
如果搜索 event/info 检测到
然后将数据发送到您的 WEB
如果您还需要在 ADDON 中获取此信息
那么您需要寻找一些接收方式。我不熟悉 WoW 插件编程所以不知道...
但我会尝试:
如果您从 Addon 获得了任何 IPC 功能,请使用它
如果您有权访问文件
然后继续从插件中扫描文件并将信息发送到那里(注意多个文件访问冲突)
可以尝试将击键发送到您的 WoW 客户端
如果你可以从插件或特定操作检测到它们,比如写特定的短信(不与你的移动键冲突)
如果你能破解你的 Server/Clienet TCP/IP 流
您可以注入具有特定含义的数据包,例如传入的私人消息等,但您需要熟悉 WoW Server/Client 通信(如果我没记错的话,WoW 使用 SRP6 ) 并且它会增加 ping 滞后......你仍然需要能够从插件中检测到它,另一方面你应该能够检测到与战场相关的数据包并且不需要 OCR/CV魔兽形象...
查看这些相关的 Q/A:
- list windows handle from outside app
- simple OCR
- How to recognize UI elements in image
- Putting an application in between client and server ...包含我的 post 那里的 WoW SRP6 协议数据包示例
- MaNGOS source repository ...可以从中学到很多关于魔兽世界的知识
[备注]
每个项目符号都适合单独的问题,所以开始编码,遇到问题时提出具体问题
当我寻找一种创建插件的方法时,它会检查 WoW-PvP-Queue-Status,以创建 REST 服务,我被告知不可能有一个实时的插件和 REST 服务之间的连接。所以我正在考虑另一种方法来解决我的问题,并得出结论,我考虑分析 WoW-Window 并搜索视觉模式来完成我正在寻找的东西。 我的程序应该检查并告诉我,每当程序的用户正在排队等待战场时,还应该告诉我 he/she 在哪个战场排队,这样我就可以收集数据并将其 post 到我的service/website。我可以使用 WoW-Addon 创建一些视觉反馈,用于我正在寻找的事件......就像一个信号,它告诉我的程序要做什么。
所以我想知道,我将如何完成创建这样的信号解释器(就像屏幕抓取器一样)。我在考虑 OpenCV,但不知道从哪里开始,特别是我有点好奇 Warden(反作弊引擎)会如何解释这样的程序,我真的不希望我的用户因为这样的事情而被禁止。它应该真的只是解释我创建的插件的视觉反馈。
例如:
如果用户排队等待 Arathi Basin,应该弹出一个黄色信号,如果弹出黄色信号,程序会告诉我的服务玩家 xyz 已经排队,稍后应该显示在...在我的主页上即时的。如果用户排队等待战歌,又弹出一个信号等
我目前刚刚接触过 C#/.NET 的早期阶段,并且会用这样的服务开始一个小项目,那么我需要学习什么来构建这个东西?
我真的很想知道我需要哪些知识来解决这个问题。
对于Windows是可行的,但是抓取WinAPI有点不稳定。
所以编写新的应用程序:
- 您需要找到 WoW 客户端 window(它的句柄)
将其 canvas 抓取为位图
如果 gfx 驱动程序允许,则尝试获取桌面图像。所以创建 canvas 为:
Canvas->handle = GetDC(WOW_window_handle);
你得到的尺寸是这样的:
RECT r; GetWindowRect(WOW_window_handle,&r);
所以现在只需将矩形从 canvas 复制到您的位图中进行处理...
然后你就可以做你想做的事了
由于图像是计算机生成的,因此不会有太多噪音,只是缩放 +/- 一些过滤器,因此应该相对容易检测图像是否包含战场信息。另外detect/read里面的文字应该很简单
如果搜索 event/info 检测到
然后将数据发送到您的 WEB
如果您还需要在 ADDON 中获取此信息
那么您需要寻找一些接收方式。我不熟悉 WoW 插件编程所以不知道...
但我会尝试:
如果您从 Addon 获得了任何 IPC 功能,请使用它
如果您有权访问文件
然后继续从插件中扫描文件并将信息发送到那里(注意多个文件访问冲突)
可以尝试将击键发送到您的 WoW 客户端
如果你可以从插件或特定操作检测到它们,比如写特定的短信(不与你的移动键冲突)
如果你能破解你的 Server/Clienet TCP/IP 流
您可以注入具有特定含义的数据包,例如传入的私人消息等,但您需要熟悉 WoW Server/Client 通信(如果我没记错的话,WoW 使用 SRP6 ) 并且它会增加 ping 滞后......你仍然需要能够从插件中检测到它,另一方面你应该能够检测到与战场相关的数据包并且不需要 OCR/CV魔兽形象...
查看这些相关的 Q/A:
- list windows handle from outside app
- simple OCR
- How to recognize UI elements in image
- Putting an application in between client and server ...包含我的 post 那里的 WoW SRP6 协议数据包示例
- MaNGOS source repository ...可以从中学到很多关于魔兽世界的知识
[备注]
每个项目符号都适合单独的问题,所以开始编码,遇到问题时提出具体问题