- 按键认证大神
- 728264
- 3501
- 18
- 1898 朵
- 27453 个
- 1717 个
- 82980
- 2011-08-04
|
1#
t
T
发表于 2022-03-19 11:45
|
|只看楼主
采集的条件与技巧: 1、需要使用长柄武器、单手剑、双手剑的角色对树木进行物理攻击,才能掉落木材。 2、树木中的木材采集完后,树木不会消失。 3、账号小退重进入游戏后,会刷新树木中的木材,且角色会出现在角色最后一次落地的位置。 思路: 根据上述技巧,我们只需要让角色站在树木比较集中的地方,在原地按一次空格进行跳跃,让游戏记录角色落地位置。然后让角色进行物理攻击,攻击树木一定次数,然后小退重新进入游戏,角色便会出现在上次跳跃后落地的位置,同时刷新树木中的木材。然后将角色攻击步骤的代码和账号小退重登步骤的代码,写成循环,即可自动采集木材。根据采集的条件,我们需要使用长柄武器、单手剑、双手剑的角色,在这3种武器类型的角色中,本人推荐单手剑和双手剑角色。原因是部分双手剑角色,在施放重击时会造成大范围的物理攻击,如诺艾尔、辛焱等。而部分单手剑角色,在施放重击时会造成较大范围的物理攻击,且能自动后撤,如刻晴、凯亚等。只有这样搭配起来,我们的脚本才能稳定地采集木材,否则角色可能偏离树木或采集效率较低。动画演示:流程图:源码:- Public Declare Function SetDllPathW Lib ".\plugin\dmreg.dll" Alias "SetDllPathW" (ByVal path As String, ByVal mode As Long) As Long
- Dim 脚本ID, 脚本文件存放路径
- 脚本ID = GetMacroID()
- 脚本文件存放路径 = "C:\原神伐木\" & 脚本ID & "\"
- Call 创建文件夹Ex(脚本文件存放路径)
- Call 释放文件
- Call 注册大漠插件到系统
- Call 创建大漠对象
- Call 设置大漠相对路径(脚本文件存放路径)
- Dim hwnd
- hwnd = dm.FindWindow("UnityWndClass", "原神")
- If hwnd = 0 Then
- MessageBox "未能找到游戏窗口!"
- ExitScript
- End If
- dm_ret = dm.BindWindowEx(hwnd, "normal", "normal", "normal", "", 0)
- If dm_ret = 0 Then
- MessageBox "游戏绑定失败,错误代码:" & dm.GetLastError()
- ExitScript
- End If
- Dim 重击次数
- 重击次数 = 5
- Do
- For 重击次数
- Call 人物重击
- Next
- Delay 1000
- Call 退出游戏
- Call 进入游戏
- Delay 1000
- Loop
- Function 打开系统菜单
- Do
- dm.keypress 27
- Delay 50
- Loop Until 是否找到了系统菜单(40, 50, true)(0) <> - 1
- Delay 50
- End Function
- Function 选择退出游戏
- Do
- Call 移动左单击(43, 1025)
- Delay 50
- Loop Until 是否找到了系统菜单(40, 50, false)(0) = - 1
- Delay 50
- End Function
- Function 确认退出游戏
- Do
- Call 移动左单击(1179,751)
- Delay 50
- Loop Until 是否找到了确认退出游戏(40, 50, false)(0) = - 1
- Delay 50
- End Function
- Function 退出游戏
- Call 打开系统菜单
- Call 选择退出游戏
- Call 等待确认退出
- Call 确认退出游戏
- End Function
- Function 进入游戏
- Call 等待返回登录界面
- Call 等待登录界面加载完毕
- Call 点击进入游戏
- Call 等待游戏进入完毕
- End Function
- Function 点击进入游戏
- Do
- Call 移动左单击(954,1018)
- Delay 50
- Loop Until 是否找到了点击进入提示(40, 50, false)(0) = - 1
- Delay 50
- End Function
- Function 等待确认退出
- If 是否找到了确认退出游戏(40, 50, true)(0) <> - 1 Then
- 等待确认退出 = 1
- Else
- 等待确认退出 = 0
- End If
- End Function
- Function 等待返回登录界面
- While 是否找到了关闭游戏按钮(1, 50, true)(0) = - 1
- Delay 50
- Wend
- Delay 50
- End Function
- Function 等待游戏进入完毕
- While 是否找到了派蒙头像(1, 50, true)(0) = - 1
- Delay 50
- Wend
- Delay 50
- End Function
- Function 等待登录界面加载完毕
- While 是否找到了点击进入提示(1, 50, true)(0) = - 1
- Delay 50
- Wend
- Delay 50
- End Function
- Function 是否找到了派蒙头像(查找次数, 查找间隔, 返回条件)
- 是否找到了派蒙头像=循环查找指定图片E_扩展(40,35,75,70, "派蒙头像.bmp", "101010", 0.95, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 是否找到了点击进入提示(查找次数, 查找间隔, 返回条件)
- 是否找到了点击进入提示=循环查找指定图片E_扩展(900,1000,1015,1040, "点击进入提示.bmp", "101010", 0.95, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 是否找到了关闭游戏按钮(查找次数, 查找间隔, 返回条件)
- 是否找到了关闭游戏按钮=循环查找指定图片E_扩展(80,960,110,1000, "关闭游戏按钮.bmp", "101010", 0.95, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 是否找到了确认退出游戏(查找次数, 查找间隔, 返回条件)
- 是否找到了确认退出游戏=循环查找指定图片E_扩展(840,500,1040,530, "确认退出游戏.bmp", "101010", 0.95, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 是否找到了系统菜单(查找次数, 查找间隔, 返回条件)
- 是否找到了系统菜单 = 循环查找指定图片E_扩展(30, 30, 65, 65, "系统菜单.bmp", "101010", 0.95, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 移动左单击(x, y)
- dm.Moveto x, y
- Delay 10
- dm.LeftClick
- End Function
- Function 人物重击
- dm.LeftDown
- Delay 生成随机数(400, 600)
- dm.LeftUp
- Delay 生成随机数(600, 800)
- End Function
- Function 生成随机数(最小值, 最大值)
- Randomize
- 生成随机数 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)
- End Function
- Function 循环查找指定图片E(x1, y1, x2, y2, 图片名, 查找次数, 查找间隔, 返回条件)
- Dim ret
- For 查找次数
- ret = dm.FindPicE(x1, y1, x2, y2, 图片名, "000000", 0.9, 0)
- If 返回条件 = true Then
- If ret <> "-1|-1|-1" Then
- Exit For
- End If
- End If
- If 返回条件 = false Then
- If ret = "-1|-1|-1" Then
- Exit For
- End If
- End If
- delay 查找间隔
- Next
- ret = Split(ret, "|")
- 循环查找指定图片E = Array(CLng(ret(0)), CLng(ret(1)), CLng(ret(2)))
- End Function
- Function 循环查找指定图片E_扩展(x1, y1, x2, y2, 图片名, 偏色, 精准度, 查找方向, 查找次数, 查找间隔, 返回条件)
- Dim ret
- For 查找次数
- ret = dm.FindPicE(x1, y1, x2, y2, 图片名, 偏色, 精准度, 查找方向)
- If 返回条件 = true Then
- If ret <> "-1|-1|-1" Then
- Exit For
- End If
- End If
- If 返回条件 = false Then
- If ret = "-1|-1|-1" Then
- Exit For
- End If
- End If
- Delay 查找间隔
- Next
- ret = Split(ret, "|")
- 循环查找指定图片E_扩展 = Array(CLng(ret(0)), CLng(ret(1)), CLng(ret(2)))
- End Function
- Sub OnScriptExit()
- Call dm.UnBindWindow()
- End Sub
- Sub 释放文件
- PutAttachment 脚本文件存放路径, "*.*"
- PutAttachment ".\plugin", "dmreg.dll"
- End Sub
- Sub 创建大漠对象
- Set dm = createobject("dm.dmsoft")
- End Sub
- Sub 设置大漠相对路径(路径)
- dm_ret = dm.SetPath(路径)
- End Sub
- Sub 注册大漠插件到系统()
- Dim ver, need_ver
- need_ver="3.1233"
- Call SetDllPathW(脚本文件存放路径 & "dm.dll", 0)
- Set dm = createobject("dm.dmsoft")
- ver = dm.ver()
- If ver = "" Then
- MessageBox "插件对象创建失败!"
- ElseIf ver <> need_ver Then
- MessageBox "插件版本错误,当前使用的版本是:" & ver & ",插件所在目录是:" & dm.GetBasePath()
- End If
- End Sub
- Sub 创建文件夹Ex(路径)
- Dim 当前路径
- If 获取路径基本名称(路径) <> "" Then
- 当前路径 = 路径
- 路径 = 获取路径父文件夹(路径)
- Call 创建文件夹Ex(路径)
- Call 创建文件夹(当前路径)
- End If
- End Sub
- Function 获取路径父文件夹(DriveSpec)
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- 获取路径父文件夹 = fso.GetParentFolderName(Drivespec)
- set fso = nothing
- End Function
- Function 获取路径基本名称(filespec)
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- 获取路径基本名称 = fso.GetBaseName(filespec)
- set fso = nothing
- End Function
- Sub 创建文件夹(路径)
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- fso.CreateFolder 路径
- set fso = nothing
- End Sub
复制代码 源文件:- test.zip (, 下载次数:227)
注:源码与源文件的运行环境为Windows7 64位操作系统,游戏分辨率1920X1080。本帖仅为分享思路,若不能正常运行代码,请自行修改代码。
|