This commit is contained in:
2025-12-27 22:47:15 +08:00
parent 8f17366bd3
commit 8112ddbce6
9 changed files with 209 additions and 70 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Threading.Tasks;
using UnityEngine;
using WulaFallenEmpire.EventSystem.AI.Agent;
namespace WulaFallenEmpire.EventSystem.AI.Tools
{
@@ -14,12 +15,12 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
public override string Description =>
"在指定的屏幕位置执行鼠标点击。坐标使用比例值 (0-1)(0,0) 是左上角,(1,1) 是右下角。" +
"适用于点击无法通过 API 操作的 mod 按钮或 UI 元素。先使用 analyze_screen 获取目标位置。";
"适用于点击无法通过 API 操作的 mod 按钮或 UI 元素。先使用 analyze_screen 获取目标位置分析。";
public override string UsageSchema =>
"<visual_click><x>0-1之间的X比例</x><y>0-1之间的Y比例</y><right_click>可选true为右键</right_click></visual_click>";
public override string Execute(string args)
public override Task<string> ExecuteAsync(string args)
{
try
{
@@ -28,19 +29,19 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
// 解析 X 坐标
if (!argsDict.TryGetValue("x", out string xStr) || !float.TryParse(xStr, out float x))
{
return "Error: 缺少有效的 x 坐标 (0-1之间的比例值)";
return Task.FromResult("Error: 缺少有效的 x 坐标 (0-1之间的比例值)");
}
// 解析 Y 坐标
if (!argsDict.TryGetValue("y", out string yStr) || !float.TryParse(yStr, out float y))
{
return "Error: 缺少有效的 y 坐标 (0-1之间的比例值)";
return Task.FromResult("Error: 缺少有效的 y 坐标 (0-1之间的比例值)");
}
// 验证范围
if (x < 0 || x > 1 || y < 0 || y > 1)
{
return $"Error: 坐标 ({x}, {y}) 超出范围,必须在 0-1 之间";
return Task.FromResult($"Error: 坐标 ({x}, {y}) 超出范围,必须在 0-1 之间");
}
// 解析右键选项
@@ -60,17 +61,17 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
int screenY = Mathf.RoundToInt(y * Screen.height);
WulaLog.Debug($"[Tool_VisualClick] {clickType}点击 ({x:F3}, {y:F3}) -> 屏幕 ({screenX}, {screenY})");
return $"Success: 已在屏幕位置 ({screenX}, {screenY}) 执行{clickType}点击";
return Task.FromResult($"Success: 已在屏幕位置 ({screenX}, {screenY}) 执行{clickType}点击");
}
else
{
return "Error: 点击操作失败";
return Task.FromResult("Error: 点击操作失败");
}
}
catch (Exception ex)
{
WulaLog.Debug($"[Tool_VisualClick] Error: {ex}");
return $"Error: 点击操作失败 - {ex.Message}";
return Task.FromResult($"Error: 点击操作失败 - {ex.Message}");
}
}
}
@@ -88,7 +89,7 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
public override string UsageSchema =>
"<visual_type_text><text>要输入的文本</text></visual_type_text>";
public override string Execute(string args)
public override Task<string> ExecuteAsync(string args)
{
try
{
@@ -96,23 +97,23 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
if (!argsDict.TryGetValue("text", out string text) || string.IsNullOrEmpty(text))
{
return "Error: 缺少要输入的文本";
return Task.FromResult("Error: 缺少要输入的文本");
}
// 使用剪贴板方式输入(支持中文)
GUIUtility.systemCopyBuffer = text;
// 获取当前鼠标位置
var pos = MouseSimulator.GetCurrentPosition();
// 模拟 Ctrl+V 粘贴
// 注意:这需要额外的键盘模拟实现
// 暂时返回成功,实际使用时需要完善
float propX = Mathf.Clamp01((float)pos.x / Screen.width);
float propY = Mathf.Clamp01((float)pos.y / Screen.height);
WulaLog.Debug($"[Tool_VisualTypeText] 已将文本复制到剪贴板: {text}");
return $"Success: 已将文本复制到剪贴板。请手动按 Ctrl+V 粘贴,或等待键盘模拟功能完善。";
WulaLog.Debug($"[VisualTypeText] Current Pos: ({pos.x}, {pos.y}) -> Proportional: ({propX:F3}, {propY:F3})");
return Task.FromResult(VisualInteractionTools.TypeText(propX, propY, text));
}
catch (Exception ex)
{
WulaLog.Debug($"[Tool_VisualTypeText] Error: {ex}");
return $"Error: 输入文本失败 - {ex.Message}";
return Task.FromResult($"Error: 输入文本失败 - {ex.Message}");
}
}
}
@@ -130,7 +131,7 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
public override string UsageSchema =>
"<visual_scroll><delta>滚动量,正数向上负数向下</delta><x>可选0-1 X坐标</x><y>可选0-1 Y坐标</y></visual_scroll>";
public override string Execute(string args)
public override Task<string> ExecuteAsync(string args)
{
try
{
@@ -138,7 +139,7 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
if (!argsDict.TryGetValue("delta", out string deltaStr) || !int.TryParse(deltaStr, out int delta))
{
return "Error: 缺少有效的 delta 值";
return Task.FromResult("Error: 缺少有效的 delta 值");
}
// 可选:先移动到指定位置
@@ -154,12 +155,12 @@ namespace WulaFallenEmpire.EventSystem.AI.Tools
Agent.MouseSimulator.Scroll(delta);
string direction = delta > 0 ? "向上" : "向下";
return $"Success: 已{direction}滚动 {Math.Abs(delta)} 单位";
return Task.FromResult($"Success: 已{direction}滚动 {Math.Abs(delta)} 单位");
}
catch (Exception ex)
{
WulaLog.Debug($"[Tool_VisualScroll] Error: {ex}");
return $"Error: 滚动操作失败 - {ex.Message}";
return Task.FromResult($"Error: 滚动操作失败 - {ex.Message}");
}
}
}