魔兽世界(Lua)与Adafruit Gemma的交流

时间:2014-08-21 19:39:08

标签: lua arduino world-of-warcraft

我有一个Adafruit(Gemma)/ Arduino和一个Neopixel LED指环,我希望通过魔兽世界的游戏事件来控制它。这部分是焊接和工作的。

问题:

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

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

感谢您提前给予反馈,并欢迎即将发布的德拉诺军阀的任何未来可能性。

3 个答案:

答案 0 :(得分: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

“序列号”只是检测到新消息已发布到像素的方法。校验和是为了防止在我的特殊像素未激活时进行虚假读取,例如在加载屏幕期间。其余的是按键信息。这允许我从插件生成击键。整个观察者应用程序约有100行C.非常简单。

I wrote an in-game script editor并将其用于“pixelbot”以自动化游戏中的内容。在我的魔兽生命即将结束时,我为Wow编写了比播放它更有趣的乐趣,这说了很多,因为它是一个有趣的游戏。 :)曾几何时我都知道有关WoW插件编程的所有知识,但我现在已经好几年了。不过,我会看看我是否可以挖掘一些像素的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设备?

这只是writing to the serial port in the "watcher" app并使用Arduino库从设备内的串口读取。


我有“监听器”应用程序(像素监视器)的源代码,以及将消息写入像素的魔兽方面的东西。如果您有兴趣,请告诉我,我会帮助您带外或大幅增加这篇文章的一面。

答案 1 :(得分:0)

经过一些研究,我没有找到任何内置的功能来发信号/管道/与外部软件通信。我认为这是由于反机器人暴雪政策。实际上你可以用内存观察器(就像CheatEngine)这样做,但你有可能被禁止使用它。

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

如果您发现任何内容,请更新您的帖子,您的想法非常有趣=)

答案 2 :(得分:0)

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

  1. Saving variables between sessions.这意味着您可以对其存储文件进行插件读取和写入,但这需要您重新编写或重新加载用于写入和读取此文件的UI。简而言之,这不太可行。
  2. 让插件使用屏幕上的小空间来书写颜色,并通过读取屏幕上的像素使用所述颜色与外部软件进行通信。
  3. 有很多方法可以实现第二个建议。你只需要能够为游戏编写这个插件。然后写一个外部程序来读取像素。将命令发送回游戏需要热键或在聊天窗口中发送。

    请注意,您仍然只能使用需要硬件事件的游戏API。所以对于那些你必须按下按钮或使用鼠标来购买的人。