XuanWuForm.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. using Mir2Assistant.Common.Functions;
  2. using Mir2Assistant.Common.Models;
  3. using Mir2Assistant.Common.TabForms;
  4. using Mir2Assistant.Utils;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Text.RegularExpressions;
  13. using System.Threading.Tasks;
  14. using System.Windows.Forms;
  15. using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
  16. namespace Mir2Assistant.TabForms.DailyTask
  17. {
  18. /// <summary>
  19. /// 玄武岛任务
  20. /// </summary>
  21. [Order(100)]
  22. public partial class XuanWuForm : Form, ITabForm
  23. {
  24. public XuanWuForm()
  25. {
  26. InitializeComponent();
  27. }
  28. public string Title => "玄武任务";
  29. public MirGameInstanceModel? GameInstance { get; set; }
  30. private DailyTaskService? dt;
  31. private void XuanWuForm_Load(object sender, EventArgs e)
  32. {
  33. dt = new DailyTaskService(GameInstance!);
  34. dt.CompleteEvent += () => this.Invoke(() => button1.Enabled = true);
  35. }
  36. private void button1_Click(object sender, EventArgs e)
  37. {
  38. if (listBox1.SelectedItem == null)
  39. {
  40. return;
  41. }
  42. button1.Enabled = false;
  43. doTask(listBox1.SelectedItem.ToString());
  44. }
  45. CancellationTokenSource cts = new CancellationTokenSource();
  46. private void button2_Click(object sender, EventArgs e)
  47. {
  48. cts.Cancel();
  49. dt!.Complete = true;
  50. button1.Enabled = true;
  51. }
  52. private void checkBox1_CheckedChanged(object sender, EventArgs e)
  53. {
  54. dt!.Pause = checkBox1.Checked;
  55. }
  56. private void button3_Click(object sender, EventArgs e)
  57. {
  58. GoRunFunction.FlyCY(GameInstance!);
  59. }
  60. private void button4_Click(object sender, EventArgs e)
  61. {
  62. GoRunFunction.GoXuanWu(GameInstance!);
  63. }
  64. private void button6_Click(object sender, EventArgs e)
  65. {
  66. GoRunFunction.BackTu(GameInstance!);
  67. }
  68. private string? getTaskMonster(string? str)
  69. {
  70. if (string.IsNullOrEmpty(str))
  71. {
  72. return null;
  73. }
  74. var regex = new Regex(@"只\<(.*?)\/c");
  75. Match match = regex.Match(str);
  76. if(match.Success)
  77. {
  78. return match.Groups[1].Value;
  79. }
  80. regex = new Regex("只(.*?),|。");
  81. match = regex.Match(str);
  82. if (match.Success)
  83. {
  84. return match.Groups[1].Value;
  85. }
  86. else
  87. {
  88. return null;
  89. }
  90. }
  91. /// <summary>
  92. /// 领奖领任务
  93. /// </summary>
  94. /// <returns></returns>
  95. private async Task<string?> getTask()
  96. {
  97. await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者");
  98. await NpcFunction.Talk2Text(GameInstance!, "周常任务");
  99. await NpcFunction.Talk2Text(GameInstance!, "异兽悬赏");
  100. await NpcFunction.Talk2Text(GameInstance!, "领取奖励");
  101. await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者");
  102. await NpcFunction.Talk2Text(GameInstance!, "周常任务");
  103. await NpcFunction.Talk2Text(GameInstance!, "异兽悬赏");
  104. string? str = await NpcFunction.Talk2Text(GameInstance!, "领取任务");
  105. str = getTaskMonster(str);
  106. if (!string.IsNullOrEmpty(str))
  107. {
  108. return str;
  109. }
  110. await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者");
  111. await NpcFunction.Talk2Text(GameInstance!, "日常任务");
  112. await NpcFunction.Talk2Text(GameInstance!, "玄武岛除妖任务");
  113. await NpcFunction.Talk2Text(GameInstance!, "领取奖励");
  114. await NpcFunction.Talk2Text(GameInstance!, "领取奖励");
  115. await NpcFunction.ClickNPC(GameInstance!, "玄武任务使者");
  116. await NpcFunction.Talk2Text(GameInstance!, "日常任务");
  117. await NpcFunction.Talk2Text(GameInstance!, "玄武岛除妖任务");
  118. str = await NpcFunction.Talk2Text(GameInstance!, "领取任务");
  119. return getTaskMonster(str);
  120. }
  121. private async Task doTask(string taskMonster)
  122. {
  123. dt!.FindPath.Clear();
  124. switch (taskMonster)
  125. {
  126. case "噬魂毒牙":
  127. dt.AddTaskMonster("噬魂毒牙", 3);
  128. dt.FindPath.Enqueue(new Point(319, 146));
  129. dt.FindPath.Enqueue(new Point(280, 202));
  130. dt.FindPath.Enqueue(new Point(292, 302));
  131. dt.FindPath.Enqueue(new Point(343, 330));
  132. dt.FindPath.Enqueue(new Point(409, 273));
  133. break;
  134. case "圣山竹鼠":
  135. dt.AddTaskMonster("圣山竹鼠", 3);
  136. dt.FindPath.Enqueue(new Point(142, 296));
  137. dt.FindPath.Enqueue(new Point(270, 281));
  138. dt.FindPath.Enqueue(new Point(263, 200));
  139. dt.FindPath.Enqueue(new Point(360, 325));
  140. dt.FindPath.Enqueue(new Point(409, 273));
  141. break;
  142. case "幽冥毒牙":
  143. dt.AddTaskMonster("幽冥毒牙", 3);
  144. dt.FindPath.Enqueue(new Point(157, 164));
  145. dt.FindPath.Enqueue(new Point(218, 359));
  146. dt.FindPath.Enqueue(new Point(333, 330));
  147. dt.FindPath.Enqueue(new Point(409, 273));
  148. break;
  149. case "赤狐弩手":
  150. dt.AddTaskMonster("赤狐弩手", 3);
  151. dt.FindPath.Enqueue(new Point(289, 135));
  152. dt.FindPath.Enqueue(new Point(255, 361));
  153. dt.FindPath.Enqueue(new Point(328, 299));
  154. dt.FindPath.Enqueue(new Point(365, 315));
  155. break;
  156. case "赤狐劫掠者":
  157. dt.AddTaskMonster("赤狐劫掠者", 3);
  158. dt.FindPath.Enqueue(new Point(270, 130));
  159. dt.FindPath.Enqueue(new Point(282, 302));
  160. dt.FindPath.Enqueue(new Point(358, 322));
  161. dt.FindPath.Enqueue(new Point(233, 361));
  162. break;
  163. case "白狐刀客":
  164. dt.AddTaskMonster("白狐刀客", 3);
  165. dt.FindPath.Enqueue(new Point(270, 130));
  166. dt.FindPath.Enqueue(new Point(253, 359));
  167. dt.FindPath.Enqueue(new Point(358, 322));
  168. dt.FindPath.Enqueue(new Point(233, 361));
  169. break;
  170. case "浪客帮拳师":
  171. dt.AddTaskMonster("浪客帮拳师", 3);
  172. dt.FindPath.Enqueue(new Point(142, 68));
  173. dt.FindPath.Enqueue(new Point(110, 96));
  174. dt.FindPath.Enqueue(new Point(149, 138));
  175. dt.FindPath.Enqueue(new Point(375, 465));
  176. break;
  177. case "浪客帮香女":
  178. dt.AddTaskMonster("浪客帮香女", 3);
  179. dt.FindPath.Enqueue(new Point(142, 68));
  180. dt.FindPath.Enqueue(new Point(110, 96));
  181. dt.FindPath.Enqueue(new Point(149, 138));
  182. dt.FindPath.Enqueue(new Point(375, 465));
  183. break;
  184. case "浪客帮斧手":
  185. dt.AddTaskMonster("浪客帮斧手", 3);
  186. dt.FindPath.Enqueue(new Point(142, 68));
  187. dt.FindPath.Enqueue(new Point(110, 96));
  188. dt.FindPath.Enqueue(new Point(149, 138));
  189. dt.FindPath.Enqueue(new Point(375, 465));
  190. break;
  191. case "黑狐滚刀手":
  192. dt.AddTaskMonster("黑狐滚刀手", 1);
  193. dt.FindPath.Enqueue(new Point(255, 140));
  194. dt.FindPath.Enqueue(new Point(272, 304));
  195. dt.FindPath.Enqueue(new Point(238, 419));
  196. dt.FindPath.Enqueue(new Point(385, 335));
  197. break;
  198. case "浪客帮舵主":
  199. dt.AddTaskMonster("浪客帮舵主", 1);
  200. dt.FindPath.Enqueue(new Point(392, 452));
  201. dt.FindPath.Enqueue(new Point(142, 68));
  202. dt.FindPath.Enqueue(new Point(110, 96));
  203. dt.FindPath.Enqueue(new Point(149, 138));
  204. break;
  205. case "狱焰巨蛛":
  206. dt.AddTaskMonster("狱焰巨蛛", 1);
  207. dt.FindPath.Enqueue(new Point(314, 128));
  208. dt.FindPath.Enqueue(new Point(322, 98));
  209. break;
  210. case "野狐统领":
  211. dt.AddTaskMonster("野狐统领", 1);
  212. dt.FindPath.Enqueue(new Point(307, 289));
  213. dt.FindPath.Enqueue(new Point(330, 289));
  214. break;
  215. case "圣域猎人":
  216. dt.AddTaskMonster("圣域猎人", 1);
  217. dt.FindPath.Enqueue(new Point(349, 281));
  218. dt.FindPath.Enqueue(new Point(365, 294));
  219. break;
  220. case "时红夜蛇":
  221. dt.AddTaskMonster("时红夜蛇", 1);
  222. dt.FindPath.Enqueue(new Point(329, 335));
  223. dt.FindPath.Enqueue(new Point(326, 362));
  224. break;
  225. case "虎头海雕":
  226. dt.AddTaskMonster("虎头海雕", 1);
  227. dt.FindPath.Enqueue(new Point(93, 429));
  228. dt.FindPath.Enqueue(new Point(72, 441));
  229. break;
  230. }
  231. await dt.RunTask();
  232. await GoRunFunction.GoXuanWu(GameInstance!);
  233. }
  234. /// <summary>
  235. /// 兑主号钻石凭证
  236. /// </summary>
  237. /// <returns></returns>
  238. private async Task HumanExp()
  239. {
  240. await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使");
  241. await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为");
  242. while (await NpcFunction.Talk2Text(GameInstance!, "使用10张白金修为凭证兑换10000点主号修为") != "请查看背包中兑换材料是否足够。\\")
  243. {
  244. Task.Delay(100).Wait();
  245. }
  246. await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使");
  247. await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为");
  248. while (await NpcFunction.Talk2Text(GameInstance!, "使用1张白金修为凭证兑换1000点主号修为") != "请查看背包中兑换材料是否足够。\\")
  249. {
  250. Task.Delay(100).Wait();
  251. }
  252. await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使");
  253. await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为");
  254. await NpcFunction.Talk2Text(GameInstance!, "下一页");
  255. while (await NpcFunction.Talk2Text(GameInstance!, "使用10张钻石修为凭证兑换100000点主号修为") != "请查看背包中兑换材料是否足够。\\")
  256. {
  257. Task.Delay(100).Wait();
  258. }
  259. await NpcFunction.ClickNPC(GameInstance!, "修为兑换大使");
  260. await NpcFunction.Talk2Text(GameInstance!, "兑换主号修为");
  261. await NpcFunction.Talk2Text(GameInstance!, "下一页");
  262. while (await NpcFunction.Talk2Text(GameInstance!, "使用1张钻石修为凭证兑换10000点主号修为") != "请查看背包中兑换材料是否足够。\\")
  263. {
  264. Task.Delay(100).Wait();
  265. }
  266. }
  267. /// <summary>
  268. /// 秘境天罡正气
  269. /// </summary>
  270. /// <returns></returns>
  271. private async Task tgzq()
  272. {
  273. await NpcFunction.ClickNPC(GameInstance!, "玄武老兵");
  274. await NpcFunction.Talk2Text(GameInstance!, "我要去玄武洞天");
  275. await NpcFunction.WaitNPC(GameInstance!, "狐人族长老");
  276. await NpcFunction.ClickNPC(GameInstance!, "狐人族长老");
  277. await NpcFunction.Talk2Text(GameInstance!, "关于转生神技");
  278. await NpcFunction.Talk2Text(GameInstance!, "传送至玄武石窟");
  279. await NpcFunction.WaitNPC(GameInstance!, "修行接引人");
  280. await NpcFunction.ClickNPC(GameInstance!, "修行接引人");
  281. await NpcFunction.Talk2Text(GameInstance!, "挑战石窟秘境");
  282. await NpcFunction.WaitNPC(GameInstance!, "修行教头");
  283. await NpcFunction.ClickNPC(GameInstance!, "修行教头");
  284. if (GameInstance!.TalkCmds.Any(o => o.StartsWith("免费接受挑战")))
  285. {
  286. await NpcFunction.Talk2Text(GameInstance!, "免费接受挑战");
  287. dt!.FindPath.Clear();
  288. dt.AddTaskMonster("秘境幽冥毒牙", 1);
  289. dt.FindPath.Enqueue(new Point(28, 18));
  290. dt.FindPath.Enqueue(new Point(16, 38));
  291. dt.FindPath.Enqueue(new Point(39, 35));
  292. await dt.RunTask();
  293. }
  294. }
  295. private async void button5_Click(object sender, EventArgs e)
  296. {
  297. cts.Dispose();
  298. cts = new CancellationTokenSource();
  299. try
  300. {
  301. await Task.Run(async () =>
  302. {
  303. await GoRunFunction.GoXuanWu(GameInstance!);
  304. cts.Token.ThrowIfCancellationRequested();
  305. var taskMonster = await getTask();
  306. while (!string.IsNullOrEmpty(taskMonster))
  307. {
  308. cts.Token.ThrowIfCancellationRequested();
  309. this.Invoke(() => listBox1.Text = taskMonster);
  310. await doTask(taskMonster);
  311. taskMonster = await getTask();
  312. }
  313. await HumanExp();
  314. cts.Token.ThrowIfCancellationRequested();
  315. await tgzq();
  316. cts.Token.ThrowIfCancellationRequested();
  317. await GoRunFunction.BackTu(GameInstance!);
  318. }, cts.Token);
  319. }
  320. catch (OperationCanceledException)
  321. {
  322. Console.WriteLine("任务被取消");
  323. }
  324. }
  325. private async void button7_Click(object sender, EventArgs e)
  326. {
  327. button7.Enabled = false;
  328. await Task.Run(async () =>
  329. {
  330. await NpcFunction.WaitNPC(GameInstance!, "玛法神秘商人", int.MaxValue);
  331. await NpcFunction.ClickNPC(GameInstance!, "玛法神秘商人");
  332. await NpcFunction.Talk2Text(GameInstance!, "先到先得限时收购");
  333. await NpcFunction.Talk2Text(GameInstance!, "参与先到先得限量收购");
  334. });
  335. button7.Enabled = true;
  336. }
  337. private async void button8_Click(object sender, EventArgs e)
  338. {
  339. if (GameInstance!.CharacterStatus!.MapName == "盟重省" && GameInstance.Monsters.Values.Any(o => o.TypeStr == "NPC" && o.Name == "店小二"))
  340. {
  341. await NpcFunction.ClickNPC(GameInstance!, "店小二");
  342. await NpcFunction.Talk2Text(GameInstance!, "返回盟重");
  343. await NpcFunction.WaitNPC(GameInstance!, "坐骑商人");
  344. }
  345. await NpcFunction.ClickNPC(GameInstance!, "坐骑商人");
  346. await NpcFunction.Talk2Text(GameInstance!, "兑换马牌");
  347. await NpcFunction.Talk2Text(GameInstance!, "使用5个马牌令兑换1个马牌");
  348. }
  349. private async void button9_Click(object sender, EventArgs e)
  350. {
  351. button9.Enabled = false;
  352. if (GameInstance!.CharacterStatus!.MapName == "盟重省" && GameInstance.Monsters.Values.Any(o => o.TypeStr == "NPC" && o.Name == "店小二"))
  353. {
  354. await NpcFunction.ClickNPC(GameInstance!, "店小二");
  355. await NpcFunction.Talk2Text(GameInstance!, "返回盟重");
  356. await NpcFunction.WaitNPC(GameInstance!, "坐骑商人");
  357. }
  358. await Task.Run(async () =>
  359. {
  360. while (DateTime.Now.Hour > 0 || DateTime.Now.Minute < 1)
  361. {
  362. Task.Delay(1000).Wait();
  363. }
  364. while (DateTime.Now.Minute < 5)
  365. {
  366. await NpcFunction.ClickNPC(GameInstance!, "坐骑商人");
  367. await NpcFunction.Talk2Text(GameInstance!, "兑换马牌");
  368. await NpcFunction.Talk2Text(GameInstance!, "使用5个马牌令兑换1个马牌");
  369. }
  370. });
  371. button9.Enabled = true;
  372. }
  373. }
  374. }