写“魔域来了”挂机脚本只做合规的屏幕识别+模拟点击,不碰内存读写、不碰网络封包、不碰验证码自动过、不碰防封端口。官方网游用自动脚本可能违反用户协议并导致封号,下面方案仅适合单机版、私有学习端、或游戏明确允许宏/辅助的场景;官服正式号请先看清协议再用小号测试。
一、先定挂机边界(避免写成外挂)
只做四类安全操作:
屏幕截图识别按钮/血条/怪物名/掉落名;
鼠标键盘模拟人工点击,选怪、放技能、喝药、拾取、回城;
按时间/状态循环,带随机延迟和日志;
异常掉线、卡屏、弹窗验证码时暂停或告警,不自动识别绕过。
不写四类高危功能:
ReadProcessMemory/注入DLL改血量攻防;
抓socket封包重发、模拟登录协议;
自动过滑动/图文验证码;
内置“防封”“躲检测”“改概率”模块。
二、工具按端选
PC客户端/模拟器横屏:按键精灵PC、大漠图色(需授权)、Python+PyAutoGUI+OpenCV。魔域类选怪可用Tab或点击怪物,技能用1/2/F1,喝药用F2类快捷键,拾取用固定区域或找图。
安卓手游:Auto.js/AutoX(无障碍+悬浮窗,免Root)、按键精灵手机助手、触动精灵;配合雷电/夜神/MuMu模拟器抓坐标最方便。
纯学习图像:Python开窗口模式,OpenCV模板匹配血条、技能CD、掉落、NPC对话框,PyAutoGUI点击。
三、PC按键精灵基础骨架(1280×720示例)
思路:进挂点→选怪→技能1/技能2→等CD→找图拾取→血条找色喝药→超时复位。
Delay 2000
Rem main
// 选怪:Tab或点怪物区域
KeyPress "Tab", 1
Delay 300
// 技能,按自己快捷键改
KeyPress "1", 1
Delay 800
KeyPress "2", 1
Delay 2000
// 拾取:固定区域多点点,或改用FindPic
MoveTo 650, 580
LeftClick 1
Delay 400
MoveTo 670, 610
LeftClick 1
Delay 400
// 血条判断:满血某点红色,消失就喝药
IfColor 1200, 680, "FF0000", 0
// 血够,不处理
Else
KeyPress "F2", 1
End If
// 随机延迟拟人
Randomize
r = Int((Rnd*400)+1)
Delay 1500 + r
// 长时间无变化复位可加计数
Goto main
拾取别写死坐标,改找图更稳:
FindPic 400,400,900,700,"Attachment:drop.bmp","000000",0,0.85,x,y
If x > -1
MoveTo x, y
LeftClick 1
Delay 500
End If
魔域野外挂机常规链路就是选怪→输出→拾取→低血回药→偶尔微走位防卡墙,副本则把“进本→分段清怪→BOSS→结算→退本”拆成子程序。
四、Python+OpenCV状态机(推荐长期维护)
用状态替代死循环:IDLE(待机)、SELECT(选怪)、FIGHT(输出)、LOOT(拾取)、HEAL(回血)、BACK(回城)、ERROR(异常)。
import pyautogui, cv2, numpy as np, time, random, logging
logging.basicConfig(filename='moyu.log', level=logging.INFO)
pyautogui.PAUSE = 0.1
STOP_HOTKEY = 'F12'
def human_click(x, y):
x += random.randint(-6,6); y += random.randint(-6,6)
pyautogui.moveTo(x, y, duration=random.uniform(0.1,0.3))
pyautogui.click()
time.sleep(random.uniform(0.6,1.2))
def match(template, region=None, conf=0.85):
shot = pyautogui.screenshot(region=region)
img = cv2.cvtColor(np.array(shot), cv2.COLOR_RGB2BGR)
tpl = cv2.imread(template)
res = cv2.matchTemplate(img, tpl, cv2.TM_CCOEFF_NORMED)
_, maxv, _, maxl = cv2.minMaxLoc(res)
if maxv >= conf and maxl:
# region偏移补回绝对坐标
rx = region[0]+maxl[0] if region else maxl[0]
ry = region[1]+maxl[1] if region else maxl[1]
return rx, ry, maxv
return None
def hp_low():
# 截血条区域,统计红色占比;按你分辨率改region
shot = pyautogui.screenshot(region=(1100,660,160,40))
arr = np.array(shot)
red = cv2.inRange(arr, (200,0,0), (255,80,80))
return cv2.countNonZero(red) < 2000 # 阈值自调
state = 'SELECT'
no_target_count = 0
while True:
try:
if state == 'SELECT':
pyautogui.press('tab'); time.sleep(0.3)
mob = match('mob_name.png', region=(300,200,900,600))
if mob:
state = 'FIGHT'; no_target_count=0
else:
no_target_count += 1
if no_target_count > 5:
human_click(random.randint(600,700), random.randint(500,600)) # 微走位
time.sleep(1)
elif state == 'FIGHT':
human_click(*skill_pos(1)); pyautogui.press('1'); time.sleep(0.8)
human_click(*skill_pos(2)); pyautogui.press('2'); time.sleep(2)
if hp_low():
state = 'HEAL'
else:
state = 'LOOT'
elif state == 'LOOT':
drop = match('drop.png', region=(400,400,900,700))
if drop:
human_click(drop[0], drop[1])
state = 'SELECT'
elif state == 'HEAL':
pyautogui.press('f2'); time.sleep(1)
state = 'FIGHT' if not hp_low() else 'BACK'
# ERROR复位:超过N秒无截图变化就回登录或重选点
except Exception as e:
logging.error('loop err %s', e)
state = 'SELECT'
time.sleep(5)
血条也可直接用IfColor式找色,不引入OpenCV;但多分辨率、多皮肤时用模板匹配更稳。 所有点击加±5~6像素偏移、间隔0.6~1.2秒随机,能降低“完全机械”特征,但不等于能避封。
五、手机/模拟器Auto.js示例
固定模拟器分辨率如720×1280或1280×720,开无障碍、悬浮窗,用布局分析或截图取技能/拾取/血条坐标。
var skill1=[360,1850], skill2=[480,1850], hpArea=[80,120,300,40], pick=[540,1400];
function tapR(p, dx, dy){ tap(p[0]+random(dx), p[1]+random(dy)); sleep(800+random(400)); }
while(true){
// 简单血条:截图取色,低血点药
if(images.readHpColor? null:null){}
tapR(skill1,-8,8);
tapR(skill2,-8,8);
tapR(pick,-20,20);
// 低血示例:用找图替代
if(exists('hp_low.png')) tap(120,1900);
sleep(1500+random(800));
}
模拟器多开每个窗口换不同随机种子,避免同时同坐标同节奏;分辨率一变全部重抓。
六、魔域具体场景参数
选怪:野外用Tab循环,或找怪物名牌图;宝宝/幻兽类若游戏内有“自动出战”开关,优先开系统开关,脚本只做补给药、补忠诚、低血回城。
技能:法师风珠/暴风雪、战士砍杀/旋风、异能者根据具体按键绑定;CD长的技能用“释放后固定等待+下次找图确认CD完毕”双判断,别只写死Delay。
拾取:地面掉落先用找图,找不到再扫区域;过滤只捡装备/幻兽蛋/星级材料时,把对应图标做模板,其它忽略。
回血回蓝:血条找色阈值设满血30%触发小药、10%触发大药+回城;蓝条同理,避免空技能。
卡墙处理:连续5次未识别到怪物且角色坐标截图无变化,执行微走位(小幅度W/A/S/D或点击小地图邻近点),仍不行回主城重进挂点。
日常/副本:把“接任务NPC→进本→自动战斗→领奖→交任务”做成子函数,每步先找图再点击,超时3次跳错误处理,不无限等待。
七、调试与避坑
固定分辨率:PC窗口模式+100%缩放,模拟器固定DPI,换分辨率所有坐标/模板重抓。
先单步后循环:手动跑一次选怪→技能→拾取→喝药,日志打印每次识别结果,再开无限循环。
模板质量:截图原尺寸、去UI高光,血条和按钮分开做;OpenCV置信度0.8~0.9,太低误点、太高不识别。
杀软与权限:Python脚本、按键精灵、Auto.js都加目录白名单;模拟器开悬浮窗但别装来路“增强插件”。
掉线/验证码:脚本检测到登录界面、验证码界面、断开重连弹窗,立刻写日志并暂停,不自动过码;人工处理后再继续。
账号风险:官服用任何自动点击都可能被判定异常,正式资产号别长期挂;学习用单机端、测试小号、私有服务端最合适。
不买“魔域万能辅助”:第三方破解包常绑木马、盗号、要求关杀软,即使能点技能也别用。
按上面状态机写,比纯录制宏稳很多;后期可接OCR识别系统频道喊话、交易行价格、任务文本,但OCR只做本地决策,不自动发协议、不自动交易刷钱。
一、先定挂机边界(避免写成外挂)
只做四类安全操作:
屏幕截图识别按钮/血条/怪物名/掉落名;
鼠标键盘模拟人工点击,选怪、放技能、喝药、拾取、回城;
按时间/状态循环,带随机延迟和日志;
异常掉线、卡屏、弹窗验证码时暂停或告警,不自动识别绕过。
不写四类高危功能:
ReadProcessMemory/注入DLL改血量攻防;
抓socket封包重发、模拟登录协议;
自动过滑动/图文验证码;
内置“防封”“躲检测”“改概率”模块。
二、工具按端选
PC客户端/模拟器横屏:按键精灵PC、大漠图色(需授权)、Python+PyAutoGUI+OpenCV。魔域类选怪可用Tab或点击怪物,技能用1/2/F1,喝药用F2类快捷键,拾取用固定区域或找图。
安卓手游:Auto.js/AutoX(无障碍+悬浮窗,免Root)、按键精灵手机助手、触动精灵;配合雷电/夜神/MuMu模拟器抓坐标最方便。
纯学习图像:Python开窗口模式,OpenCV模板匹配血条、技能CD、掉落、NPC对话框,PyAutoGUI点击。
三、PC按键精灵基础骨架(1280×720示例)
思路:进挂点→选怪→技能1/技能2→等CD→找图拾取→血条找色喝药→超时复位。
Delay 2000
Rem main
// 选怪:Tab或点怪物区域
KeyPress "Tab", 1
Delay 300
// 技能,按自己快捷键改
KeyPress "1", 1
Delay 800
KeyPress "2", 1
Delay 2000
// 拾取:固定区域多点点,或改用FindPic
MoveTo 650, 580
LeftClick 1
Delay 400
MoveTo 670, 610
LeftClick 1
Delay 400
// 血条判断:满血某点红色,消失就喝药
IfColor 1200, 680, "FF0000", 0
// 血够,不处理
Else
KeyPress "F2", 1
End If
// 随机延迟拟人
Randomize
r = Int((Rnd*400)+1)
Delay 1500 + r
// 长时间无变化复位可加计数
Goto main
拾取别写死坐标,改找图更稳:
FindPic 400,400,900,700,"Attachment:drop.bmp","000000",0,0.85,x,y
If x > -1
MoveTo x, y
LeftClick 1
Delay 500
End If
魔域野外挂机常规链路就是选怪→输出→拾取→低血回药→偶尔微走位防卡墙,副本则把“进本→分段清怪→BOSS→结算→退本”拆成子程序。
四、Python+OpenCV状态机(推荐长期维护)
用状态替代死循环:IDLE(待机)、SELECT(选怪)、FIGHT(输出)、LOOT(拾取)、HEAL(回血)、BACK(回城)、ERROR(异常)。
import pyautogui, cv2, numpy as np, time, random, logging
logging.basicConfig(filename='moyu.log', level=logging.INFO)
pyautogui.PAUSE = 0.1
STOP_HOTKEY = 'F12'
def human_click(x, y):
x += random.randint(-6,6); y += random.randint(-6,6)
pyautogui.moveTo(x, y, duration=random.uniform(0.1,0.3))
pyautogui.click()
time.sleep(random.uniform(0.6,1.2))
def match(template, region=None, conf=0.85):
shot = pyautogui.screenshot(region=region)
img = cv2.cvtColor(np.array(shot), cv2.COLOR_RGB2BGR)
tpl = cv2.imread(template)
res = cv2.matchTemplate(img, tpl, cv2.TM_CCOEFF_NORMED)
_, maxv, _, maxl = cv2.minMaxLoc(res)
if maxv >= conf and maxl:
# region偏移补回绝对坐标
rx = region[0]+maxl[0] if region else maxl[0]
ry = region[1]+maxl[1] if region else maxl[1]
return rx, ry, maxv
return None
def hp_low():
# 截血条区域,统计红色占比;按你分辨率改region
shot = pyautogui.screenshot(region=(1100,660,160,40))
arr = np.array(shot)
red = cv2.inRange(arr, (200,0,0), (255,80,80))
return cv2.countNonZero(red) < 2000 # 阈值自调
state = 'SELECT'
no_target_count = 0
while True:
try:
if state == 'SELECT':
pyautogui.press('tab'); time.sleep(0.3)
mob = match('mob_name.png', region=(300,200,900,600))
if mob:
state = 'FIGHT'; no_target_count=0
else:
no_target_count += 1
if no_target_count > 5:
human_click(random.randint(600,700), random.randint(500,600)) # 微走位
time.sleep(1)
elif state == 'FIGHT':
human_click(*skill_pos(1)); pyautogui.press('1'); time.sleep(0.8)
human_click(*skill_pos(2)); pyautogui.press('2'); time.sleep(2)
if hp_low():
state = 'HEAL'
else:
state = 'LOOT'
elif state == 'LOOT':
drop = match('drop.png', region=(400,400,900,700))
if drop:
human_click(drop[0], drop[1])
state = 'SELECT'
elif state == 'HEAL':
pyautogui.press('f2'); time.sleep(1)
state = 'FIGHT' if not hp_low() else 'BACK'
# ERROR复位:超过N秒无截图变化就回登录或重选点
except Exception as e:
logging.error('loop err %s', e)
state = 'SELECT'
time.sleep(5)
血条也可直接用IfColor式找色,不引入OpenCV;但多分辨率、多皮肤时用模板匹配更稳。 所有点击加±5~6像素偏移、间隔0.6~1.2秒随机,能降低“完全机械”特征,但不等于能避封。
五、手机/模拟器Auto.js示例
固定模拟器分辨率如720×1280或1280×720,开无障碍、悬浮窗,用布局分析或截图取技能/拾取/血条坐标。
var skill1=[360,1850], skill2=[480,1850], hpArea=[80,120,300,40], pick=[540,1400];
function tapR(p, dx, dy){ tap(p[0]+random(dx), p[1]+random(dy)); sleep(800+random(400)); }
while(true){
// 简单血条:截图取色,低血点药
if(images.readHpColor? null:null){}
tapR(skill1,-8,8);
tapR(skill2,-8,8);
tapR(pick,-20,20);
// 低血示例:用找图替代
if(exists('hp_low.png')) tap(120,1900);
sleep(1500+random(800));
}
模拟器多开每个窗口换不同随机种子,避免同时同坐标同节奏;分辨率一变全部重抓。
六、魔域具体场景参数
选怪:野外用Tab循环,或找怪物名牌图;宝宝/幻兽类若游戏内有“自动出战”开关,优先开系统开关,脚本只做补给药、补忠诚、低血回城。
技能:法师风珠/暴风雪、战士砍杀/旋风、异能者根据具体按键绑定;CD长的技能用“释放后固定等待+下次找图确认CD完毕”双判断,别只写死Delay。
拾取:地面掉落先用找图,找不到再扫区域;过滤只捡装备/幻兽蛋/星级材料时,把对应图标做模板,其它忽略。
回血回蓝:血条找色阈值设满血30%触发小药、10%触发大药+回城;蓝条同理,避免空技能。
卡墙处理:连续5次未识别到怪物且角色坐标截图无变化,执行微走位(小幅度W/A/S/D或点击小地图邻近点),仍不行回主城重进挂点。
日常/副本:把“接任务NPC→进本→自动战斗→领奖→交任务”做成子函数,每步先找图再点击,超时3次跳错误处理,不无限等待。
七、调试与避坑
固定分辨率:PC窗口模式+100%缩放,模拟器固定DPI,换分辨率所有坐标/模板重抓。
先单步后循环:手动跑一次选怪→技能→拾取→喝药,日志打印每次识别结果,再开无限循环。
模板质量:截图原尺寸、去UI高光,血条和按钮分开做;OpenCV置信度0.8~0.9,太低误点、太高不识别。
杀软与权限:Python脚本、按键精灵、Auto.js都加目录白名单;模拟器开悬浮窗但别装来路“增强插件”。
掉线/验证码:脚本检测到登录界面、验证码界面、断开重连弹窗,立刻写日志并暂停,不自动过码;人工处理后再继续。
账号风险:官服用任何自动点击都可能被判定异常,正式资产号别长期挂;学习用单机端、测试小号、私有服务端最合适。
不买“魔域万能辅助”:第三方破解包常绑木马、盗号、要求关杀软,即使能点技能也别用。
按上面状态机写,比纯录制宏稳很多;后期可接OCR识别系统频道喊话、交易行价格、任务文本,但OCR只做本地决策,不自动发协议、不自动交易刷钱。

