魔兽世界 (Lua) 与 Adafruit Gemma 的通信

Dan*_*bdn 5 lua arduino world-of-warcraft

我有一个 Adafruit (Gemma) / Arduino 和一个 Neopixel LED 环,我想通过《魔兽世界》游戏内活动来控制它们。该部件已焊接并可以工作。

问题:

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

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

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

Mud*_*Mud 3

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

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

我使用一个插件在《魔兽世界》窗口的左上角创建一个单像素框架。我操纵这个像素的颜色来向外界发送数据。

“侦听器”应用程序可以通过三个 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
Run Code Online (Sandbox Code Playgroud)

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

  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
Run Code Online (Sandbox Code Playgroud)

“序列号”只是检测是否有新消息已发布到像素的方法。校验和是为了防止当我的特殊像素不活动时(例如在加载屏幕期间)进行虚假读取。其余的是击键信息。这使我能够从插件生成击键。整个watcher应用程序大约有100行C语言。非常简单。

我编写了一个游戏内脚本编辑器,并将其与“pixelbot”一起使用来自动化游戏中的操作。在我的《魔兽世界》生命即将结束时,我为《魔兽世界》编写代码比玩它更有趣,这说明了很多,因为这是一个有趣的游戏。:) 曾几何时,我知道有关《魔兽世界》插件编程的一切,但现在已经落伍好几年了。不过,我会看看是否可以挖掘一些 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*
Run Code Online (Sandbox Code Playgroud)

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


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

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


我有“监听器”应用程序(像素观察器)的源代码以及将消息写入像素的魔兽世界相关内容的源代码。如果您有兴趣,请告诉我,我会为您提供额外帮助或大幅增加这篇文章的内容。