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

问题:

有没有办法在World of Warcraft和PC之间发送通信,并且可以将消息通过USB发送到Arduino/Gemma设备上?

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

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

点赞
用户3937316
用户3937316

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

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

如果您找到了任何东西,请更新您的帖子,您的想法非常有趣=)

2014-08-22 14:42:44
用户501459
用户501459

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

不能通过WoW API直接实现。我想出过一种方法,但我从未分享过,因为我的使用违反了暴雪的规则。但是,我已经很多年都没有玩过了,所以我分享给你们吧。

我使用了一个插件在WoW窗口的左上角创建了一个像素框架。我操纵该像素的颜色以向外部世界发送数据。

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

  HWND hwnd = FindWindow(NULL, "World of Warcraft"); // 查找WoW窗口
  HDC hdc = GetDC(hwnd); // 获取设备上下文(图形绘制抽象)
  COLORREF color = GetPixel(hdc, 0,0); // 读取x 0,y 0的像素

我然后解释了颜色的位:

  4:序列号
  7:校验和:(序列+ keycode + ctrl + alt + shift + win)/ 6
  8:键代码或ASCII字符
  1:1:虚拟键代码,0:ASCII
  1:按下CTRL键
  1:按下ALT键
  1:按下SHIFT键
  2:按下WINDOWS键

“序列号”只是检测到像素已发布新消息的一种方式。校验和是为了防止在我特殊的像素非活动状态下出现虚假读取,例如在加载屏幕期间。其余是按键信息。这使我能够从插件生成按键。整个watcher应用程序大约有100行C。非常简单。

我编写了一个内置脚本编辑器,并与“pixelbot”一起使用,自动化游戏中的事物。在我玩WoW的最后时期,我对为Wow编程更感兴趣,而不是玩它,这说了很多,因为它是一个有趣的游戏。 :)曾经,我了解有关WoW插件编程的所有知识,但现在已经过时了几年了。不过,我会看看能否找到一些pixelbot Lua代码。

无论如何,您都可以将此方案适应发送您喜欢的任何消息。例如:

  4:序列号
  7:校验和(序列+玩家编号+LED颜色)/ 3
  5:玩家号码
  2:LED颜色(0:绿色,1:黄色,2:红色)
  6:*保留*

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


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

那只需在“watcher”应用程序中写入串行端口即可,并在设备内使用Arduino库从串行端口读取。


我有“监听器”应用程序(像素监视器)的源代码以及用于向像素写入消息的WoW端的源代码。如果您有兴趣,请告诉我,我将帮助您解决这个问题,或者大大扩大这篇文章的范围。

2014-08-22 16:19:23
用户1048829
用户1048829

只有两种方法可以在不违反ToU的情况下与游戏客户端进行通信:

  1. 在游戏会话之间保存变量。 这意味着你可以让插件读取和写入其存储文件,但这需要你重新登录或/reload UI,以使文件被写入并从中读取。简而言之,这不是很可行。
  2. 让插件在屏幕上使用一个小空间来写入颜色,并通过读取屏幕上的像素来与你的外部软件进行通信。

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

请注意,你仍然受限于需要硬件事件的游戏内API。所以对于那些,你必须按下按钮或使用鼠标来绕过。

2014-09-09 17:26:06