当前位置 : 145z游戏站 | 魔域 | 技术教程 | 

魔域按键精灵后台快速幻化脚本写法与思路

热度:
后台幻化和前台点鼠标不一样,前台是 MoveTo+LeftClick 让按键精灵真去动鼠标,后台是用 Windows 消息、内存坐标、插件接口让游戏窗口收到点击/按键但不占用你本机鼠标。按键精灵原生对魔域这种 DirectX/易语言客户端支持一般,纯后台得靠 Windows API 发消息,或者大漠、天使、360 插件做后台图色+后台鼠标。

先说能落地的结构:

一、前台版快速幻化(最稳,先调通再谈后台)
幻化流程一般是:打开幻化界面→放主宠/副宠→选幻化类型→点开始幻化→等动画→关结果→再放副宠。
按键精灵前台写法:

Plugin Window.Find("元素窗口类", "魔域")
Delay 500
// 打开幻化师
MoveTo 420, 320
LeftClick 1
Delay 800
// 点幻化按钮
MoveTo 610, 360
LeftClick 1
Delay 600
// 主宠位
MoveTo 540, 300
LeftClick 1
Delay 300
// 副宠位
MoveTo 700, 300
LeftClick 1
Delay 300
// 开始幻化
MoveTo 650, 520
LeftClick 1
Delay 1500
// 关弹窗
MoveTo 800, 120
LeftClick 1
Delay 500


把上面包成 Sub,用 For 循环跑副宠:

For i = 1 To 50
Call 幻化一次()
Next

Sub 幻化一次()
// 放主宠
MoveTo 540, 300 : LeftClick 1 : Delay 300
// 放副宠
MoveTo 700, 300 : LeftClick 1 : Delay 300
// 开始
MoveTo 650, 520 : LeftClick 1 : Delay 1200
// 关提示
MoveTo 800, 120 : LeftClick 1 : Delay 400
End Sub


二、后台版思路(不抢鼠标)
按键精灵里用 Lib 调 user32:

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


鼠标消息:
• WM_MOUSEMOVE = 512

• WM_LBUTTONDOWN = 513

• WM_LBUTTONUP = 514

lParam 是坐标:x + (y << 16)

例:给窗口 hwnd 在 (610,360) 发左键点击

Dim hwnd, x, y, lp
hwnd = Plugin.Window.Find("类名", "魔域")
x = 610 : y = 360
lp = x + (y * 65536)
Call PostMessage(hwnd, 512, 0, lp)
Call PostMessage(hwnd, 513, 1, lp)
Call PostMessage(hwnd, 514, 0, lp)


键盘后台用 WM_KEYDOWN=256 / WM_KEYUP=257:

Call PostMessage(hwnd, 256, 13, 0) // 回车
Call PostMessage(hwnd, 257, 13, 0)


但魔域客户端常屏蔽 PostMessage,SendMessage 也不一定认,DirectX 窗口很多情况只吃真实鼠标。这时候就走“后台图色+前台鼠标”混合:大漠插件后台找图找字,按键精灵再用 MoveTo 点;或者沙盘/虚拟机里跑前台,主机干别的。

三、用大漠插件做后台幻化(实战里最多人用)
注册大dm:

Set dm = createobject("dm.dmsoft")
Call dm.SetPath("C:\plugin")
ret = dm.BindWindow(hwnd, "gdi", "windows", "windows", 0)


找“幻化”按钮图:

ret = dm.FindPic(0,0,1024,768,"huanhua.bmp","000000",0.9,0,intX,intY)
If ret = 0 Then
dm.MoveTo intX, intY
dm.LeftClick
dm.delay 800
End If


放副宠:

ret = dm.FindPic(0,0,1024,768,"fuchong.bmp","000000",0.9,0,fx,fy)
If ret = 0 Then
dm.MoveTo fx, fy
dm.LeftClick
dm.delay 400
dm.KeyPress 13
dm.delay 1000
End If


快速幻化的“快”不在点击本身,而在:
1. 界面别关了重开,幻化师界面常驻;
2. 副宠从背包固定格位拿,用格子坐标不用找图;
3. 结果弹窗用图片特征直接关,不等动画播完;
4. 主宠锁死不动,只换副宠;
5. 每次循环前用颜色/字点确认“幻化成功/失败/副宠不足”。

背包格位点击例子(假设副宠都在背包第 2 行):

For col = 1 To 6
x = 420 + col * 50
y = 280
MoveTo x, y
LeftClick 1
Delay 300
MoveTo 700, 300 // 拖到副宠位,实际看游戏是点击还是拖拽
LeftClick 1
Delay 300
MoveTo 650, 520 // 开始幻化
LeftClick 1
Delay 900
MoveTo 800, 120 // 关结果
LeftClick 1
Delay 300
Next


四、防卡死
每次循环加超时和状态复位:

start = Now
Do
// 找“确定”
FindPic 0,0,1024,768,"ok.bmp",x,y
If x>0 Then Exit Do
If DateDiff("s", start, Now) > 8 Then
// 卡住了:ESC、点空白、重开界面
KeyPress 27, 1
Delay 500
Exit Do
End If
Delay 300
Loop


五、现实情况
魔域对自动幻化、批量操作、连点器有检测,后台发消息容易被拦,图色脚本也可能被行为检测盯上。真要写,先前台手感跑通,再加大漠后台找图,别一上来就 PostMessage 硬发。幻化前副宠类型、转世、等级、幸运、星级、兽魂这些规则得自己配表,脚本只负责“按规则放宠+点开始+收结果”,判断哪只副宠该用是另一层逻辑。

一个能跑的极简骨架:

hwnd = Plugin.Window.Find("ElementClient Window", "魔域")
Call 打开幻化师()
For i = 1 To 100
Call 放主宠()
Call 取副宠(副宠列表(i))
Call 点开始幻化()
Call 等结果()
Call 关弹窗()
If 副宠用完 Then Exit For
Next

Sub 点开始幻化()
FindPic 0,0,1024,768,"start.bmp",x,y
If x>0 Then MoveTo x,y : LeftClick 1
Delay 1000
End Sub


坐标、类名、图片都得你本机截。别人发你的“后台快速幻化脚本”大多是大漠找图+模拟点击+循环放副宠,核心不是多高深,是把界面坐标和等待时间调准,让每次幻化间隔压到 2~3 秒一圈,同时别在交易/幻化界面外乱点导致切界面。

真后台不抢鼠标那种,要么大漠 BindWindow 成功,要么用内存插件读宠物数组再发命令;按键精灵单靠 PostMessage 对魔域基本是玩具级,能点开界面都算顺利。写的时候把“找界面—找主宠位—找副宠位—找开始键—找成功提示—找失败/弹窗”六步拆开,每一步都留截图和容差,比抄一整段代码有用。
[顶部]