mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-04-15 21:03:42 +08:00
优化项目结构并新增任务和路径文件 主要更改: - 在 `BetterGenshinImpact.csproj` 文件中,添加了对 `GameTask\Common\Element\Assets\Json\**` 目录的处理,并确保其内容始终复制到输出目录。 - 在 `RecognitionObject.cs` 文件中,新增了多个静态方法 `Ocr` 和一个静态实例 `OcrThis`。 - 在 `PathExecutor.cs` 文件中,优化了路径执行逻辑,新增 `GetPosition` 方法,并调整了超时判断。 - 在 `AutoPickAssets.cs` 文件中,添加了多个 `using` 语句,新增 `_logger` 和 `PickRo` 字段,并在构造函数中添加了自定义拾取按键的处理逻辑。 - 在 `AutoPickTrigger.cs` 文件中,移除了自定义拾取按键的初始化逻辑。 - 在 `OneKeyExpeditionTask.cs` 文件中,注释掉了 `Cv2.ImWrite` 方法的调用。 - 在 `TpTask.cs` 文件中,添加了点位很近时不切换的判断逻辑。 - 在 `BvSimpleOperation.cs` 文件中,新增了多个点击按钮的方法和 `FindF`、`FindFAndPress` 方法。 - 在 `BvStatus.cs` 文件中,新增了多个方法用于判断是否在对话界面并等待对话界面加载完成。 - 在 `GameTaskManager.cs` 文件中,添加了 `MapAssets.DestroyInstance` 方法的调用。 - 在 `HotKeyPageViewModel.cs` 文件中,注释掉了 `ElementalCollectHandler` 的测试代码,并添加了 `GoToAdventurersGuildTask` 的测试代码。 - 在 `TaskSettingsPageViewModel.cs` 文件中,更新了 `OnGoToAutoGeniusInvokationUrlAsync` 方法中的 URL。 - 添加了 `BetterGenshinImpact - Backup.csproj` 文件,配置了项目属性、资源文件和包引用。 - 添加了 `冒险家协会_枫丹.json`、`合成台_枫丹.json` 和 `合成台_璃月.json` 文件,定义了前往相应地点的路径和动作。 - 添加了 `ChooseTalkOptionTask.cs` 文件,实现了选择对话选项的任务。 - 添加了 `GoToAdventurersGuildTask.cs` 文件,实现了前往冒险家协会领取奖励的任务。
202 lines
5.5 KiB
C#
202 lines
5.5 KiB
C#
using System.Windows.Documents;
|
|
using BetterGenshinImpact.Core.Recognition;
|
|
using BetterGenshinImpact.Core.Simulator;
|
|
using BetterGenshinImpact.GameTask.AutoPick.Assets;
|
|
using BetterGenshinImpact.GameTask.AutoSkip.Assets;
|
|
using BetterGenshinImpact.GameTask.Common.Element.Assets;
|
|
using BetterGenshinImpact.GameTask.Model.Area;
|
|
using OpenCvSharp;
|
|
using Vanara.PInvoke;
|
|
|
|
namespace BetterGenshinImpact.GameTask.Common.BgiVision;
|
|
|
|
/// <summary>
|
|
/// 模仿OpenCv的静态类
|
|
/// 用于原神的各类识别与控制操作
|
|
///
|
|
/// 此处主要是对游戏内的一些状态进行识别
|
|
/// </summary>
|
|
public static partial class Bv
|
|
{
|
|
/// <summary>
|
|
/// 点击白色确认按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickWhiteConfirmButton(ImageRegion captureRa)
|
|
{
|
|
var ra = captureRa.Find(ElementAssets.Instance.BtnWhiteConfirm);
|
|
if (ra.IsExist())
|
|
{
|
|
ra.Click();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击白色取消按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickWhiteCancelButton(ImageRegion captureRa)
|
|
{
|
|
var ra = captureRa.Find(ElementAssets.Instance.BtnWhiteCancel);
|
|
if (ra.IsExist())
|
|
{
|
|
ra.Click();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击黑色确认按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickBlackConfirmButton(ImageRegion captureRa)
|
|
{
|
|
var ra = captureRa.Find(ElementAssets.Instance.BtnBlackConfirm);
|
|
if (ra.IsExist())
|
|
{
|
|
ra.Click();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击黑色取消按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickBlackCancelButton(ImageRegion captureRa)
|
|
{
|
|
var ra = captureRa.Find(ElementAssets.Instance.BtnBlackCancel);
|
|
if (ra.IsExist())
|
|
{
|
|
ra.Click();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击联机确认按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickOnlineYesButton(ImageRegion captureRa)
|
|
{
|
|
var ra = captureRa.Find(ElementAssets.Instance.BtnOnlineYes);
|
|
if (ra.IsExist())
|
|
{
|
|
ra.Click();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击联机取消按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickOnlineNoButton(ImageRegion captureRa)
|
|
{
|
|
var ra = captureRa.Find(ElementAssets.Instance.BtnOnlineNo);
|
|
if (ra.IsExist())
|
|
{
|
|
ra.Click();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击确认按钮(优先点击白色背景的确认按钮)
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickConfirmButton(ImageRegion captureRa)
|
|
{
|
|
return ClickBlackConfirmButton(captureRa) || ClickWhiteConfirmButton(captureRa) || ClickOnlineYesButton(captureRa);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击取消按钮(优先点击白色背景的确认按钮)
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <returns></returns>
|
|
public static bool ClickCancelButton(ImageRegion captureRa)
|
|
{
|
|
return ClickBlackCancelButton(captureRa) || ClickWhiteCancelButton(captureRa) || ClickOnlineNoButton(captureRa);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 找到交互按钮
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <param name="text"></param>
|
|
/// <returns></returns>
|
|
public static bool FindF(ImageRegion captureRa, params string[] text)
|
|
{
|
|
using var ra = captureRa.Find(AutoPickAssets.Instance.PickRo);
|
|
if (ra.IsExist())
|
|
{
|
|
if (text.Length == 0)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
var scale = TaskContext.Instance().SystemInfo.AssetScale;
|
|
var config = TaskContext.Instance().Config.AutoPickConfig;
|
|
var textRect = new Rect(ra.X + (int)(config.ItemTextLeftOffset * scale), ra.Y,
|
|
(int)((config.ItemTextRightOffset - config.ItemTextLeftOffset) * scale), ra.Height);
|
|
|
|
var textRa = captureRa.DeriveCrop(textRect);
|
|
var list = textRa.FindMulti(RecognitionObject.OcrThis);
|
|
|
|
foreach (var item in list)
|
|
{
|
|
// 所有匹配成功才算成功
|
|
var success = true;
|
|
foreach (var t in text)
|
|
{
|
|
if (!item.Text.Contains(t))
|
|
{
|
|
success = false;
|
|
}
|
|
}
|
|
return success;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 找到交互按钮并点击
|
|
/// </summary>
|
|
/// <param name="captureRa"></param>
|
|
/// <param name="text"></param>
|
|
/// <returns></returns>
|
|
public static bool FindFAndPress(ImageRegion captureRa, params string[] text)
|
|
{
|
|
if (FindF(captureRa, text))
|
|
{
|
|
Simulation.SendInput.Keyboard.KeyPress(AutoPickAssets.Instance.PickVk);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|