4

我有一个 Adafruit (Gemma) / Arduino 和一个 Neopixel LED 环,我想从《魔兽世界》游戏内事件中控制它们。这部分是焊接和工作的。

问题:

有什么方法可以在《魔兽世界》和 PC 上的某种监听器之间发送通信,然后通过 USB 将消息发送到 Arduino/Gemma 设备?

我的目标是创建一个桌面 LED 指示灯,例如,如果我是一名治疗师,那么我希望绿/黄/红灯代表每个团队/团队成员的健康状况 - 因此需要高速刷新(0.5 / 秒)。

提前感谢您的反馈,并欢迎即将发布的德拉诺之王在未来的任何可能性。

4

3 回答 3

2

有没有办法在魔兽世界和PC上的某种监听器之间发送通信

不直接通过 WoW API。我想出了一个我从未分享过的方法,因为我的使用违反了暴雪的规则。但是我已经好几年没玩了,所以来吧。:)

我使用插件在 WoW 窗口的左上角创建了一个像素帧。我操纵了这个像素的颜色来向外界发送数据。

“侦听器”应用程序可以通过三个 Win32 调用读取此像素:

  HWND hwnd = FindWindow(NULL, "World of Warcraft"); // find WoW window
  HDC hdc = GetDC(hwnd); // get the device context (graphics drawing abstraction)
  COLORREF color = GetPixel(hdc, 0,0); // read the pixel at x 0, y 0

然后我像这样解释颜色的位:

  4:  sequence number
  7:  checksum: (sequence + key code + ctrl + alt + shift + win)/6
  8:  key code or ASCII character
  1:  1: virtual key code, 0: ASCII
  1:  CTRL key pressed
  1:  ALT key pressed
  1:  SHIFT key pressed
  2:  WINDOWS key pressed

“序列号”只是检测新消息已发布到像素的手段。校验和是为了防止在我的特殊像素未激活时进行虚假读取,例如在加载屏幕期间。其余的是击键信息。这使我能够从插件生成击键。整个watcher app大概100行C。很简单。

我编写了一个游戏内脚本编辑器,并将它与“pixelbot”一起使用来自动化游戏中的事情。在我的《魔兽世界》生命即将结束时,我为《魔兽世界》编写代码比玩它更有趣,这说明了很多,因为它是一款有趣的游戏。:) 曾几何时,我知道有关《魔兽世界》插件编程的所有知识,但我现在已经过时了好几年。不过,我会看看我是否可以挖掘一些像素机器人 Lua 代码。

无论如何,您可以调整此方案以发送您喜欢的任何消息。例如:

  4: sequence number
  7: checksum (sequence + player number + LED color)/3
  5: player number
  2: LED color (0: green, 1: yellow, 2: red)
  6: *reserved*

至于速度,我从未真正测量过它,但它超过了你 0.5 秒的要求。写入和读取之间最多只有几毫秒的延迟。


然后可以通过 USB 向 Arduino/Gemma 设备发送消息?

这只是在“watcher”应用程序中写入串行端口,并使用 Arduino 库从设备内部的串行端口读取。


我有“监听器”应用程序(像素观察器)和向像素写入消息的 WoW 端的源代码。如果您有兴趣,请告诉我,我会在乐队外为您提供帮助或大幅增加这篇文章的内容。

于 2014-08-22T16:19:23.470 回答
0

在不破坏 ToU 的情况下,与游戏客户端通信只有两种方式:

  1. 在会话之间保存变量。这意味着您可以让插件读取和写入其存储文件,但这需要您重新登录或/重新加载 UI 以便写入和读取此文件。简而言之,这不会那么可行。
  2. 让插件使用屏幕上的一小块空间来写入颜色,并通过读取屏幕上的像素使用所述颜色与您的外部软件进行通信。

有很多方法可以实现第二个建议。您只需要能够为游戏编写此插件。然后编写一个外部程序来读取像素。将命令发送回游戏需要热键或在聊天窗口中发送。

请注意,您仍然受限于需要硬件事件的游戏内 API。因此,对于那些您必须按下按钮或使用鼠标来购买通行证的人。

于 2014-09-09T17:26:06.733 回答
0

经过一番研究,我没有发现任何内置功能可以与外部软件进行信号/管道/通信。我相信这是由于反机器人暴雪政策。实际上,您可以使用内存监视器(就像 CheatEngine 一样)来执行此操作,但是您有可能会因为使用它而被禁止。

如果您找不到任何东西,您唯一可以做的就是在官方论坛上提问,并希望技术友好的蓝色海报能够回答=)

如果您发现任何东西,请更新您的帖子,您的想法很有趣=)

于 2014-08-22T14:42:44.030 回答