思路
图像识别找到怪物
深度强化学习训练策略模型
GPT 方案设计
纯按键版本
pip install pyautogui
识图版本
https://claude.ai/chat/640507fe-f354-48ef-bdcf-f8a6ab4f289a
1 2 3
| 写一个魔兽世界的脚本,用来自动识别怪物和打怪,请帮我进行方案设计、技术选型、并给出代码。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 好的,我来为您设计一个魔兽世界自动打怪脚本的方案,并给出相应的代码实现。 首先,让我们来进行方案设计和技术选型:
方案设计:
使用图像识别来检测屏幕上的怪物 实现自动寻路和移动角色的功能 设计战斗循环,包括技能释放和目标切换 添加简单的物品拾取功能
技术选型:
编程语言: Python (易于使用,有丰富的库支持) 图像识别: OpenCV (用于屏幕捕获和图像处理) GUI自动化: PyAutoGUI (用于模拟键盘和鼠标输入) 游戏内存读取: ReadWriteMemory (用于读取游戏内存中的数据)
现在,让我们来实现这个脚本的基本框架: 魔兽世界自动打怪脚本Click to open code 这个脚本提供了一个基本的框架,实现了怪物检测、移动、战斗和拾取的功能。以下是对脚本各部分的简要说明:
detect_monster(): 使用OpenCV检测屏幕上的怪物。目前的实现是检测红色像素,你可能需要根据具体游戏画面调整这个算法。 move_to_target(): 模拟按下"W"键向前移动。你可能需要根据游戏中的实际情况调整移动逻辑。 combat_rotation(): 实现了一个简单的战斗循环,按顺序使用三个技能。你需要根据你的角色类型和技能来调整这个函数。 loot(): 模拟按下"V"键拾取物品。请确保这与你的游戏设置一致。 run(): 主循环,不断检测怪物,进行移动、战斗和拾取。
请注意,这个脚本仅提供了一个基本框架,你可能需要根据具体的游戏版本、角色类型和个人需求进行调整。此外,使用自动化脚本可能违反游戏的使用条款,请谨慎使用。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import cv2 import numpy as np import pyautogui import time from ReadWriteMemory import ReadWriteMemory
class WoWBot: def __init__(self): self.rwm = ReadWriteMemory() self.process = self.rwm.get_process_by_name("Wow.exe") self.process.open()
def detect_monster(self): screenshot = pyautogui.screenshot() screenshot = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
lower_red = np.array([0, 0, 100]) upper_red = np.array([100, 100, 255]) mask = cv2.inRange(screenshot, lower_red, upper_red)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if contours: return True return False
def move_to_target(self): pyautogui.keyDown('w') time.sleep(2) pyautogui.keyUp('w')
def combat_rotation(self): pyautogui.press('1') time.sleep(1.5) pyautogui.press('2') time.sleep(1.5) pyautogui.press('3') time.sleep(1.5)
def loot(self): pyautogui.press('v')
def run(self): while True: if self.detect_monster(): self.move_to_target() while self.detect_monster(): self.combat_rotation() self.loot() else: self.move_to_target() time.sleep(0.5)
if __name__ == "__main__": bot = WoWBot() bot.run()
|
按键精灵
https://blog.csdn.net/weixin_39606048/article/details/111455776
思路:通过头像颜色判断是否进入攻击范围、是否已被击杀等等。
待改进:
1、能否判断与怪物的距离?
2、如何正确识别怪物与人的相对方向(检查技能是否可用:尝试使用一个需要面对目标的技能,如果失败则调整方向)?
3、如何向怪物跑过去(跑几步的算法)?
4、如何限制范围,避免跑远了卡住?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| Hwnd = Plugin.Window.Find(0, "魔兽世界")
//设置换视角标志1=刚切换视角 0否
//UserVar Flag1 = 0
Rem 开始
//按Tab寻找目标
Call Plugin.Bkgnd.KeyPress(Hwnd, 9)
Delay 1000
//抓到头像判断颜色
IfColor 320,69,"009400",0 Then
//抓取到怪后进入打怪子过程
Call KillObject()
Else
//没找到怪偏转视角
Call TurnView()
End If
Goto 开始
//打怪
Sub KillObject()
Rem 打怪循环
//能两不足
IfColor 112, 78, "2D59B2", 0 Then
//优先使用技能7 急速射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 55)
//优先使用技能8 群兽奔腾
Call Plugin.Bkgnd.KeyPress(Hwnd, 56)
//优先使用技能9 夺命乌鸦
Call Plugin.Bkgnd.KeyPress(Hwnd, 57)
//优先使用技能6 杀戮射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 54)
//优先使用技能R 飞刃
Call Plugin.Bkgnd.KeyPress(Hwnd, 82)
//优先使用技能2 爆炸射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 50)
//技能C 奥术射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 67)
Else
//优先使用技能7 急速射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 55)
//优先使用技能8 群兽奔腾
Call Plugin.Bkgnd.KeyPress(Hwnd, 55)
//优先使用技能6 杀戮射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 54)
//优先使用技能2 爆炸射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 50)
//技能 E 眼镜蛇射击
Call Plugin.Bkgnd.KeyPress(Hwnd, 69)
//技能释放时间
Delay 600
End If
//公共CD延迟
Delay 1000
//判断目标怪是否存活
IfColor 320,69,"009400",0 Then
//存活就继续循环打怪
Goto 打怪循环
Else
//退出子过程
End If
End Sub
//转换视角
Sub TurnView()
Call Plugin.Bkgnd.KeyDown(Hwnd, 65)
Delay 100
Call Plugin.Bkgnd.KeyUp(Hwnd, 65)
End Sub
|
常用函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| [General] SyntaxVersion=2 BeginHotkey=121 BeginHotkeyMod=0 PauseHotkey=0 PauseHotkeyMod=0 StopHotkey=123 StopHotkeyMod=0 RunOnce=1 EnableWindow= MacroID=17711ebe-dee7-4100-877f-98ceb167e95a Description=我的脚本1 Enable=1 AutoRun=0 [Repeat] Type=0 Number=1 [Relative] SetupOCXFile= [Comment]
[Script]
//Call RunApp("notepad.exe") Delay 5000 //下面这句是得到当前最前面的窗口句柄 Hwnd = Plugin.Window.Foreground() MsgBox "得到当前最前面的窗口句柄为:"& Hwnd //下面这句是得到窗口句柄的类名 Class1 = Plugin.Window.GetClass(Hwnd) MsgBox "得到窗口句柄的类名为:" & Class1
Delay 5000 //Hwnd = Plugin.Window.Find("GxWindowClass", "魔兽世界")
Hwnd = Plugin.Window.Find("GxWindowClass", "暴雪战网")
MsgBox "得到当前最前面的窗口句柄为:"& Hwnd Delay 5000
Call Plugin.Bkgnd.MoveTo(Hwnd, 100, 100)
Call Plugin.Bkgnd.KeyPress(Hwnd, 32)
Call Plugin.Bkgnd.KeyDown(Hwnd, 38) Delay 5000 Call Plugin.Bkgnd.KeyUp(Hwnd, 38)
|
参考资料
KeymouseGo
Python AI 全自动刷怪升级:
https://www.bilibili.com/video/BV1SN41117La/
贪吃蛇:
https://www.bilibili.com/video/BV1ag4y1F7x4/
街头霸王:
https://www.bilibili.com/video/BV1DT411H7ph/
(精)超级马里奥:
https://www.bilibili.com/video/BV1iL411A7zo/
星际争霸 2:
https://www.bilibili.com/video/BV16a411d71p/
王者荣耀:
https://www.bilibili.com/video/BV13V411W7aW/
读取魔兽世界怀旧服内存的研究:
https://wkings.blog/archives/406