我有一个Adafruit (Gemma)/Arduino和一个Neopixel LED环,我想从魔兽世界游戏内事件控制。这部分是焊接和工作。
问题:
有没有办法在魔兽世界和PC上的某种监听器之间发送通信,然后可以反过来通过USB发送消息到Arduino/Gemma设备?
我的目标是创建一个桌面上的LED指示灯,例如,如果我是一个治疗者,那么我想要绿色/黄色/红色的灯来代表每个raid/团队成员的生命值-所以刷新将需要高速率(0.5/秒)。
感谢您的反馈,并欢迎任何未来的可能性与即将发布的德拉诺之王
有没有办法在魔兽世界和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
"序列号"只是检测新消息已发布到像素的手段。校验和是为了防止在我的特殊像素不活跃时(比如在加载屏幕期间)进行虚假读取。其余的是击键信息。这允许我从一个插件生成按键。整个watch应用程序大约有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*
至于速度,我从来没有实际测量过,但它超过了你0.5秒的要求。写和读之间最多几毫秒的延迟。
,然后可以反过来通过USB发送消息到Arduino/Gemma设备?
这只是在"观察者"应用程序中写入串口,并使用Arduino库从设备内的串口读取。
我有源代码的"监听器"应用程序(像素观察者)和WoW方面的东西,写消息的像素。如果你感兴趣,请告诉我,我会帮助你走出乐队或戏剧性地增加这篇文章的侧面。
经过一些研究,我没有发现任何内置的功能来信号/管道/与外部软件通信。我相信这是由于暴雪的反机器人政策。实际上,你可以用内存监视器(就像CheatEngine)来做这件事,但有可能你会被禁止使用这个。
如果你找不到任何东西,你唯一能做的就是在官方论坛上提问,并希望一个技术友好的蓝色海报会回答=)
如果你发现什么,更新你的帖子,你的想法很有趣=)
只有两种方法可以在不违反条款的情况下与游戏客户端进行通信:
- 在会话之间保存变量。这意味着你可以让一个插件读取和写入它的存储文件,但这需要你重新记录或重新加载UI来写入和读取这个文件。总之,这是不可行的。
- 有一个插件使用屏幕上的一个小空间来写颜色,并使用所述颜色通过读取屏幕上的像素来与外部软件通信。
有很多方法可以实现第二个建议。你只需要能够为游戏编写这个插件。然后编写一个外部程序来读取像素。将命令发送回游戏需要热键或在聊天窗口中发送。
请注意,您仍然限于需要硬件事件的游戏内API。因此,对于那些你必须按下按钮或使用鼠标来购买。