using Mir2Assistant.Common.Functions; using Mir2Assistant.Common.Models; using Mir2Assistant.Common.TabForms; using Mir2Assistant.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window; namespace Mir2Assistant.TabForms.DailyTask { /// /// 玄武岛任务 /// [Order(100)] public partial class XuanWuForm : Form, ITabForm { public XuanWuForm() { InitializeComponent(); } public string Title => "玄武任务"; public MirGameInstanceModel? GameInstance { get; set; } private DailyTaskService? dt; private void XuanWuForm_Load(object sender, EventArgs e) { dt = new DailyTaskService(GameInstance!); dt.CompleteEvent += () => this.Invoke(() => button1.Enabled = true); } private void button1_Click(object sender, EventArgs e) { if (listBox1.SelectedItem == null) { return; } button1.Enabled = false; doTask(listBox1.SelectedItem.ToString()); } CancellationTokenSource cts = new CancellationTokenSource(); private void button2_Click(object sender, EventArgs e) { cts.Cancel(); dt!.Complete = true; button1.Enabled = true; } private void checkBox1_CheckedChanged(object sender, EventArgs e) { dt!.Pause = checkBox1.Checked; } private void button3_Click(object sender, EventArgs e) { GoRunFunction.FlyCY(GameInstance!); } private void button4_Click(object sender, EventArgs e) { GoRunFunction.GoXuanWu(GameInstance!); } private void button6_Click(object sender, EventArgs e) { GoRunFunction.BackTu(GameInstance!); } private string? getTaskMonster(string? str) { if (string.IsNullOrEmpty(str)) { return null; } var regex = new Regex(@"只\<(.*?)\/c"); Match match = regex.Match(str); if(match.Success) { return match.Groups[1].Value; } regex = new Regex("只(.*?),|。"); match = regex.Match(str); if (match.Success) { return match.Groups[1].Value; } else { return null; } } /// /// 领奖领任务 /// /// private async Task getTask() { await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者"); await NpcFunction.Talk2Text(GameInstance!, "周常任务"); await NpcFunction.Talk2Text(GameInstance!, "异兽悬赏"); await NpcFunction.Talk2Text(GameInstance!, "领取奖励"); await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者"); await NpcFunction.Talk2Text(GameInstance!, "周常任务"); await NpcFunction.Talk2Text(GameInstance!, "异兽悬赏"); string? str = await NpcFunction.Talk2Text(GameInstance!, "领取任务"); str = getTaskMonster(str); if (!string.IsNullOrEmpty(str)) { return str; } await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者"); await NpcFunction.Talk2Text(GameInstance!, "日常任务"); await NpcFunction.Talk2Text(GameInstance!, "玄武岛除妖任务"); await NpcFunction.Talk2Text(GameInstance!, "领取奖励"); await NpcFunction.Talk2Text(GameInstance!, "领取奖励"); await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者"); await NpcFunction.Talk2Text(GameInstance!, "日常任务"); await NpcFunction.Talk2Text(GameInstance!, "玄武岛除妖任务"); str = await NpcFunction.Talk2Text(GameInstance!, "领取任务"); return getTaskMonster(str); } private async Task doTask(string taskMonster) { dt!.FindPath.Clear(); switch (taskMonster) { case "噬魂毒牙": dt.AddTaskMonster("噬魂毒牙", 3); dt.FindPath.Enqueue(new Point(319, 146)); dt.FindPath.Enqueue(new Point(280, 202)); dt.FindPath.Enqueue(new Point(292, 302)); dt.FindPath.Enqueue(new Point(343, 330)); dt.FindPath.Enqueue(new Point(409, 273)); break; case "圣山竹鼠": dt.AddTaskMonster("圣山竹鼠", 3); dt.FindPath.Enqueue(new Point(142, 296)); dt.FindPath.Enqueue(new Point(270, 281)); dt.FindPath.Enqueue(new Point(263, 200)); dt.FindPath.Enqueue(new Point(360, 325)); dt.FindPath.Enqueue(new Point(409, 273)); break; case "幽冥毒牙": dt.AddTaskMonster("幽冥毒牙", 3); dt.FindPath.Enqueue(new Point(157, 164)); dt.FindPath.Enqueue(new Point(218, 359)); dt.FindPath.Enqueue(new Point(333, 330)); dt.FindPath.Enqueue(new Point(409, 273)); break; case "赤狐弩手": dt.AddTaskMonster("赤狐弩手", 3); dt.FindPath.Enqueue(new Point(289, 135)); dt.FindPath.Enqueue(new Point(255, 361)); dt.FindPath.Enqueue(new Point(328, 299)); dt.FindPath.Enqueue(new Point(365, 315)); break; case "赤狐劫掠者": dt.AddTaskMonster("赤狐劫掠者", 3); dt.FindPath.Enqueue(new Point(270, 130)); dt.FindPath.Enqueue(new Point(282, 302)); dt.FindPath.Enqueue(new Point(358, 322)); dt.FindPath.Enqueue(new Point(233, 361)); break; case "白狐刀客": dt.AddTaskMonster("白狐刀客", 3); dt.FindPath.Enqueue(new Point(270, 130)); dt.FindPath.Enqueue(new Point(253, 359)); dt.FindPath.Enqueue(new Point(358, 322)); dt.FindPath.Enqueue(new Point(233, 361)); break; case "浪客帮拳师": dt.AddTaskMonster("浪客帮拳师", 3); dt.FindPath.Enqueue(new Point(142, 68)); dt.FindPath.Enqueue(new Point(110, 96)); dt.FindPath.Enqueue(new Point(149, 138)); dt.FindPath.Enqueue(new Point(375, 465)); break; case "浪客帮香女": dt.AddTaskMonster("浪客帮香女", 3); dt.FindPath.Enqueue(new Point(142, 68)); dt.FindPath.Enqueue(new Point(110, 96)); dt.FindPath.Enqueue(new Point(149, 138)); dt.FindPath.Enqueue(new Point(375, 465)); break; case "浪客帮斧手": dt.AddTaskMonster("浪客帮斧手", 3); dt.FindPath.Enqueue(new Point(142, 68)); dt.FindPath.Enqueue(new Point(110, 96)); dt.FindPath.Enqueue(new Point(149, 138)); dt.FindPath.Enqueue(new Point(375, 465)); break; case "黑狐滚刀手": dt.AddTaskMonster("黑狐滚刀手", 1); dt.FindPath.Enqueue(new Point(255, 140)); dt.FindPath.Enqueue(new Point(272, 304)); dt.FindPath.Enqueue(new Point(238, 419)); dt.FindPath.Enqueue(new Point(385, 335)); break; case "浪客帮舵主": dt.AddTaskMonster("浪客帮舵主", 1); dt.FindPath.Enqueue(new Point(392, 452)); dt.FindPath.Enqueue(new Point(142, 68)); dt.FindPath.Enqueue(new Point(110, 96)); dt.FindPath.Enqueue(new Point(149, 138)); break; case "狱焰巨蛛": dt.AddTaskMonster("狱焰巨蛛", 1); dt.FindPath.Enqueue(new Point(314, 128)); dt.FindPath.Enqueue(new Point(322, 98)); break; case "野狐统领": dt.AddTaskMonster("野狐统领", 1); dt.FindPath.Enqueue(new Point(307, 289)); dt.FindPath.Enqueue(new Point(330, 289)); break; case "圣域猎人": dt.AddTaskMonster("圣域猎人", 1); dt.FindPath.Enqueue(new Point(349, 281)); dt.FindPath.Enqueue(new Point(365, 294)); break; case "时红夜蛇": dt.AddTaskMonster("时红夜蛇", 1); dt.FindPath.Enqueue(new Point(329, 335)); dt.FindPath.Enqueue(new Point(326, 362)); break; case "虎头海雕": dt.AddTaskMonster("虎头海雕", 1); dt.FindPath.Enqueue(new Point(93, 429)); dt.FindPath.Enqueue(new Point(72, 441)); break; } await dt.RunTask(); await GoRunFunction.GoXuanWu(GameInstance!); } /// /// 兑主号钻石凭证 /// /// private async Task HumanExp() { await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使"); await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为"); while (await NpcFunction.Talk2Text(GameInstance!, "使用10张白金修为凭证兑换10000点主号修为") != "请查看背包中兑换材料是否足够。\\") { Task.Delay(100).Wait(); } await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使"); await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为"); while (await NpcFunction.Talk2Text(GameInstance!, "使用1张白金修为凭证兑换1000点主号修为") != "请查看背包中兑换材料是否足够。\\") { Task.Delay(100).Wait(); } await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使"); await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为"); await NpcFunction.Talk2Text(GameInstance!, "下一页"); while (await NpcFunction.Talk2Text(GameInstance!, "使用10张钻石修为凭证兑换100000点主号修为") != "请查看背包中兑换材料是否足够。\\") { Task.Delay(100).Wait(); } await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使"); await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为"); await NpcFunction.Talk2Text(GameInstance!, "下一页"); while (await NpcFunction.Talk2Text(GameInstance!, "使用1张钻石修为凭证兑换10000点主号修为") != "请查看背包中兑换材料是否足够。\\") { Task.Delay(100).Wait(); } } /// /// 秘境天罡正气 /// /// private async Task tgzq() { await NpcFunction.ClickNPC(GameInstance!, "玄武老兵"); await NpcFunction.Talk2Text(GameInstance!, "我要去玄武洞天"); await NpcFunction.WaitNPC(GameInstance!, "狐人族长老"); await NpcFunction.ClickNPC(GameInstance!, "狐人族长老"); await NpcFunction.Talk2Text(GameInstance!, "关于转生神技"); await NpcFunction.Talk2Text(GameInstance!, "传送至玄武石窟"); await NpcFunction.WaitNPC(GameInstance!, "修行接引人"); await NpcFunction.ClickNPC(GameInstance!, "修行接引人"); await NpcFunction.Talk2Text(GameInstance!, "挑战石窟秘境"); await NpcFunction.WaitNPC(GameInstance!, "修行教头"); await NpcFunction.ClickNPC(GameInstance!, "修行教头"); if (GameInstance!.TalkCmds.Any(o => o.StartsWith("免费接受挑战"))) { await NpcFunction.Talk2Text(GameInstance!, "免费接受挑战"); dt!.FindPath.Clear(); dt.AddTaskMonster("秘境幽冥毒牙", 1); dt.FindPath.Enqueue(new Point(28, 18)); dt.FindPath.Enqueue(new Point(16, 38)); dt.FindPath.Enqueue(new Point(39, 35)); await dt.RunTask(); } } private async void button5_Click(object sender, EventArgs e) { cts.Dispose(); cts = new CancellationTokenSource(); try { await Task.Run(async () => { await GoRunFunction.GoXuanWu(GameInstance!); cts.Token.ThrowIfCancellationRequested(); var taskMonster = await getTask(); while (!string.IsNullOrEmpty(taskMonster)) { cts.Token.ThrowIfCancellationRequested(); this.Invoke(() => listBox1.Text = taskMonster); await doTask(taskMonster); taskMonster = await getTask(); } await HumanExp(); cts.Token.ThrowIfCancellationRequested(); await tgzq(); cts.Token.ThrowIfCancellationRequested(); await GoRunFunction.BackTu(GameInstance!); }, cts.Token); } catch (OperationCanceledException) { Console.WriteLine("任务被取消"); } } private async void button7_Click(object sender, EventArgs e) { button7.Enabled = false; await Task.Run(async () => { await NpcFunction.WaitNPC(GameInstance!, "玛法神秘商人", int.MaxValue); await NpcFunction.ClickNPC(GameInstance!, "玛法神秘商人"); await NpcFunction.Talk2Text(GameInstance!, "先到先得限时收购"); await NpcFunction.Talk2Text(GameInstance!, "参与先到先得限量收购"); }); button7.Enabled = true; } private async void button8_Click(object sender, EventArgs e) { if (GameInstance!.CharacterStatus!.MapName == "盟重省" && GameInstance.Monsters.Values.Any(o => o.TypeStr == "NPC" && o.Name == "店小二")) { await NpcFunction.ClickNPC(GameInstance!, "店小二"); await NpcFunction.Talk2Text(GameInstance!, "返回盟重"); await NpcFunction.WaitNPC(GameInstance!, "坐骑商人"); } await NpcFunction.ClickNPC(GameInstance!, "坐骑商人"); await NpcFunction.Talk2Text(GameInstance!, "兑换马牌"); await NpcFunction.Talk2Text(GameInstance!, "使用5个马牌令兑换1个马牌"); } private async void button9_Click(object sender, EventArgs e) { button9.Enabled = false; if (GameInstance!.CharacterStatus!.MapName == "盟重省" && GameInstance.Monsters.Values.Any(o => o.TypeStr == "NPC" && o.Name == "店小二")) { await NpcFunction.ClickNPC(GameInstance!, "店小二"); await NpcFunction.Talk2Text(GameInstance!, "返回盟重"); await NpcFunction.WaitNPC(GameInstance!, "坐骑商人"); } await Task.Run(async () => { while (DateTime.Now.Hour > 0 || DateTime.Now.Minute < 1) { Task.Delay(1000).Wait(); } while (DateTime.Now.Minute < 5) { await NpcFunction.ClickNPC(GameInstance!, "坐骑商人"); await NpcFunction.Talk2Text(GameInstance!, "兑换马牌"); await NpcFunction.Talk2Text(GameInstance!, "使用5个马牌令兑换1个马牌"); } }); button9.Enabled = true; } } }