docs: AsstProxy

This commit is contained in:
Helloworld
2022-07-31 16:13:26 +08:00
parent adb299a948
commit 83c265d8e0

View File

@@ -30,6 +30,9 @@ namespace MeoAsstGui
#pragma warning restore SA1135 // Using directives should be qualified
#pragma warning disable SA1121 // Use built-in type alias
/// <summary>
/// MeoAssistant 代理类。
/// </summary>
public class AsstProxy
{
private delegate void CallbackDelegate(int msg, IntPtr json_buffer, IntPtr custom_arg);
@@ -86,6 +89,10 @@ namespace MeoAsstGui
[DllImport("MeoAssistant.dll")]
private static extern void AsstLog(byte[] level, byte[] message);
/// <summary>
/// 记录日志。
/// </summary>
/// <param name="message">日志内容。</param>
public static void AsstLog(string message)
{
AsstLog(Encoding.UTF8.GetBytes("GUI"), Encoding.UTF8.GetBytes(message));
@@ -93,6 +100,11 @@ namespace MeoAsstGui
private readonly CallbackDelegate _callback;
/// <summary>
/// Initializes a new instance of the <see cref="AsstProxy"/> class.
/// </summary>
/// <param name="container">IoC 容器。</param>
/// <param name="windowManager">当前窗口。</param>
public AsstProxy(IContainer container, IWindowManager windowManager)
{
_container = container;
@@ -100,6 +112,9 @@ namespace MeoAsstGui
_callback = CallbackFunction;
}
/// <summary>
/// Finalizes an instance of the <see cref="AsstProxy"/> class.
/// </summary>
~AsstProxy()
{
if (_handle != IntPtr.Zero)
@@ -110,6 +125,10 @@ namespace MeoAsstGui
private string _curResource = "_Unloaded";
/// <summary>
/// 加载全局资源。
/// </summary>
/// <returns>是否成功。</returns>
public bool LoadGlobalResource()
{
var settingsModel = _container.Get<SettingsViewModel>();
@@ -159,6 +178,9 @@ namespace MeoAsstGui
return loaded;
}
/// <summary>
/// 初始化。
/// </summary>
public void Init()
{
bool loaded = LoadGlobalResource();
@@ -191,10 +213,16 @@ namespace MeoAsstGui
});
}
/// <summary>
/// Determines the length of the specified string (not including the terminating null character).
/// </summary>
/// <param name="ptr">The null-terminated string to be checked.</param>
/// <returns>
/// The function returns the length of the string, in characters.
/// If <paramref name="ptr"/> is <see cref="IntPtr.Zero"/>, the function returns <c>0</c>.
/// </returns>
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
#pragma warning disable SA1300 // Element should begin with upper-case letter
internal static extern int lstrlenA(IntPtr ptr);
#pragma warning restore SA1300 // Element should begin with upper-case letter
private static string PtrToStringCustom(IntPtr ptr, Encoding enc)
{
@@ -856,6 +884,12 @@ namespace MeoAsstGui
}
}
/// <summary>
/// 连接模拟器。
/// </summary>
/// <param name="error">具体的连接错误。</param>
/// <param name="firsttry">是否为第一次尝试。</param>
/// <returns>是否成功。</returns>
public bool AsstConnect(ref string error, bool firsttry = false)
{
if (!LoadGlobalResource())
@@ -969,6 +1003,16 @@ namespace MeoAsstGui
return task_params;
}
/// <summary>
/// 刷理智。
/// </summary>
/// <param name="stage">关卡名。</param>
/// <param name="max_medicine">最大使用理智药数量。</param>
/// <param name="max_stone">最大吃石头数量。</param>
/// <param name="max_times">指定次数。</param>
/// <param name="drops_item_id">指定掉落 ID。</param>
/// <param name="drops_item_quantity">指定掉落数量。</param>
/// <returns>是否成功。</returns>
public bool AsstAppendFight(string stage, int max_medicine, int max_stone, int max_times, string drops_item_id, int drops_item_quantity)
{
var task_params = SerializeFightTaskParams(stage, max_medicine, max_stone, max_times, drops_item_id, drops_item_quantity);
@@ -977,12 +1021,26 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 设置刷理智任务参数。
/// </summary>
/// <param name="stage">关卡名。</param>
/// <param name="max_medicine">最大使用理智药数量。</param>
/// <param name="max_stone">最大吃石头数量。</param>
/// <param name="max_times">指定次数。</param>
/// <param name="drops_item_id">指定掉落 ID。</param>
/// <param name="drops_item_quantity">指定掉落数量。</param>
/// <returns>是否成功。</returns>
public bool AsstSetFightTaskParams(string stage, int max_medicine, int max_stone, int max_times, string drops_item_id, int drops_item_quantity)
{
var task_params = SerializeFightTaskParams(stage, max_medicine, max_stone, max_times, drops_item_id, drops_item_quantity);
return AsstSetTaskParamsWithEncoding(_latestTaskId.TryGetValue(TaskType.Fight, out var task_id) ? task_id : 0, task_params);
}
/// <summary>
/// 领取日常奖励。
/// </summary>
/// <returns>是否成功。</returns>
public bool AsstAppendAward()
{
TaskId id = AsstAppendTaskWithEncoding("Award");
@@ -990,6 +1048,12 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 开始唤醒。
/// </summary>
/// <param name="client_type">客户端版本。</param>
/// <param name="enable">是否自动启动客户端。</param>
/// <returns>是否成功。</returns>
public bool AsstAppendStartUp(string client_type, bool enable)
{
var task_params = new JObject();
@@ -1000,6 +1064,10 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// <c>CloseDown</c> 任务。
/// </summary>
/// <returns>是否成功。</returns>
public bool AsstStartCloseDown()
{
AsstStop();
@@ -1008,6 +1076,10 @@ namespace MeoAsstGui
return id != 0 && AsstStart();
}
/// <summary>
/// 访问好友。
/// </summary>
/// <returns>是否成功。</returns>
public bool AsstAppendVisit()
{
TaskId id = AsstAppendTaskWithEncoding("Visit");
@@ -1015,6 +1087,13 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 领取信用及商店购物。
/// </summary>
/// <param name="with_shopping">是否购物。</param>
/// <param name="firstlist">优先购买列表。</param>
/// <param name="blacklist">黑名单列表。</param>
/// <returns>是否成功。</returns>
public bool AsstAppendMall(bool with_shopping, string[] firstlist, string[] blacklist)
{
var task_params = new JObject();
@@ -1026,6 +1105,18 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 公开招募。
/// </summary>
/// <param name="max_times">加急次数,仅在 <paramref name="use_expedited"/> 为 <see langword="true"/> 时有效。</param>
/// <param name="select_level">会去点击标签的 Tag 等级。</param>
/// <param name="required_len"><paramref name="required_len"/> 不使用。</param>
/// <param name="confirm_level">会去点击确认的 Tag 等级。若仅公招计算,可设置为空数组。</param>
/// <param name="confirm_len"><paramref name="confirm_len"/> 不使用。</param>
/// <param name="need_refresh">是否刷新三星 Tags。</param>
/// <param name="use_expedited">是否使用加急许可。</param>
/// <param name="skip_robot">是否在识别到小车词条时跳过。</param>
/// <returns>是否成功。</returns>
public bool AsstAppendRecruit(int max_times, int[] select_level, int required_len, int[] confirm_level, int confirm_len, bool need_refresh, bool use_expedited, bool skip_robot)
{
var task_params = new JObject();
@@ -1042,6 +1133,26 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 基建换班。
/// </summary>
/// <param name="work_mode"><paramref name="work_mode"/> 不使用。</param>
/// <param name="order">要换班的设施(有序)。</param>
/// <param name="order_len"><paramref name="order_len"/> 不使用。</param>
/// <param name="uses_of_drones">
/// 无人机用途。可用值包括:
/// <list type="bullet">
/// <item><c>_NotUse</c></item>
/// <item><c>Money</c></item>
/// <item><c>SyntheticJade</c></item>
/// <item><c>CombatRecord</c></item>
/// <item><c>PureGold</c></item>
/// <item><c>OriginStone</c></item>
/// <item><c>Chip</c></item>
/// </list>
/// </param>
/// <param name="dorm_threshold">宿舍进驻心情阈值。</param>
/// <returns>是否成功。</returns>
public bool AsstAppendInfrast(int work_mode, string[] order, int order_len, string uses_of_drones, double dorm_threshold)
{
var task_params = new JObject();
@@ -1056,6 +1167,37 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 无限刷肉鸽。
/// </summary>
/// <param name="mode">
/// 模式。可用值包括:
/// <list type="bullet">
/// <item>
/// <term><c>0</c></term>
/// <description>刷蜡烛,尽可能稳定的打更多层数。</description>
/// </item>
/// <item>
/// <term><c>1</c></term>
/// <description>刷源石锭,第一层投资完就退出。</description>
/// </item>
/// <item>
/// <term><c>2</c></term>
/// <description><b>【即将弃用】</b>两者兼顾,投资过后再退出,没有投资就继续往后打。</description>
/// </item>
/// <item>
/// <term><c>3</c></term>
/// <description><b>【开发中】</b>尝试通关,尽可能打的远。</description>
/// </item>
/// </list>
/// </param>
/// <param name="starts">开始探索次数。</param>
/// <param name="invests">投资源石锭次数。</param>
/// <param name="stop_when_full">投资满了自动停止任务。</param>
/// <param name="squad"><paramref name="squad"/> TODO.</param>
/// <param name="roles"><paramref name="roles"/> TODO.</param>
/// <param name="core_char"><paramref name="core_char"/> TODO.</param>
/// <returns>是否成功。</returns>
public bool AsstAppendRoguelike(int mode, int starts, int invests, bool stop_when_full,
string squad, string roles, string core_char)
{
@@ -1084,6 +1226,13 @@ namespace MeoAsstGui
return id != 0;
}
/// <summary>
/// 公招识别。
/// </summary>
/// <param name="select_level">会去点击标签的 Tag 等级。</param>
/// <param name="required_len"><paramref name="required_len"/> 不使用。</param>
/// <param name="set_time">是否设置 9 小时。</param>
/// <returns>是否成功。</returns>
public bool AsstStartRecruitCalc(int[] select_level, int required_len, bool set_time)
{
var task_params = new JObject();
@@ -1099,6 +1248,13 @@ namespace MeoAsstGui
return id != 0 && AsstStart();
}
/// <summary>
/// 自动抄作业。
/// </summary>
/// <param name="stage_name">关卡名,需要与作业 JSON 中的 <c>stage_name</c> 字段相同。</param>
/// <param name="filename">作业 JSON 的文件路径,绝对、相对路径均可。</param>
/// <param name="formation">是否进行 “快捷编队”。</param>
/// <returns>是否成功。</returns>
public bool AsstStartCopilot(string stage_name, string filename, bool formation)
{
var task_params = new JObject();
@@ -1110,11 +1266,19 @@ namespace MeoAsstGui
return id != 0 && AsstStart();
}
/// <summary>
/// 启动。
/// </summary>
/// <returns>是否成功。</returns>
public bool AsstStart()
{
return AsstStart(_handle);
}
/// <summary>
/// 停止。
/// </summary>
/// <returns>是否成功。</returns>
public bool AsstStop()
{
bool ret = AsstStop(_handle);
@@ -1122,29 +1286,85 @@ namespace MeoAsstGui
return ret;
}
/// <summary>
/// 销毁。
/// </summary>
public void AsstDestroy()
{
AsstDestroy(_handle);
}
}
/// <summary>
/// MeoAssistant 消息。
/// </summary>
public enum AsstMsg
{
/* Global Info */
InternalError = 0, // 内部错误
InitFailed, // 初始化失败
ConnectionInfo, // 连接相关错误
AllTasksCompleted, // 全部任务完成
/// <summary>
/// 内部错误
/// </summary>
InternalError = 0,
/// <summary>
/// 初始化失败。
/// </summary>
InitFailed,
/// <summary>
/// 连接相关错误。
/// </summary>
ConnectionInfo,
/// <summary>
/// 全部任务完成。
/// </summary>
AllTasksCompleted,
/* TaskChain Info */
TaskChainError = 10000, // 任务链执行/识别错误
TaskChainStart, // 任务链开始
TaskChainCompleted, // 任务链完成
TaskChainExtraInfo, // 任务链额外信息
/// <summary>
/// 任务链执行/识别错误。
/// </summary>
TaskChainError = 10000,
/// <summary>
/// 任务链开始。
/// </summary>
TaskChainStart,
/// <summary>
/// 任务链完成。
/// </summary>
TaskChainCompleted,
/// <summary>
/// 任务链额外信息。
/// </summary>
TaskChainExtraInfo,
/* SubTask Info */
SubTaskError = 20000, // 原子任务执行/识别错误
SubTaskStart, // 原子任务开始
SubTaskCompleted, // 原子任务完成
SubTaskExtraInfo, // 原子任务额外信息
/// <summary>
/// 原子任务执行/识别错误。
/// </summary>
SubTaskError = 20000,
/// <summary>
/// 原子任务开始。
/// </summary>
SubTaskStart,
/// <summary>
/// 原子任务完成。
/// </summary>
SubTaskCompleted,
/// <summary>
/// 原子任务额外信息。
/// </summary>
SubTaskExtraInfo,
}
}
#pragma warning restore SA1121 // Use built-in type alias