zc
This commit is contained in:
@@ -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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user