/// <summary> /// 招募武将 /// </summary> /// <param name="dmGuid"></param> /// <param name="staff"></param> public static bool GetStaff(string dmGuid, WlyStaffType staff) { WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_招募); // 先在左边的列表中确认是否已经存在 if (DMService.Instance.FindStr(dmGuid, 总成_武将.武将列表, staff.ToString(), WlyColor.StaffColor)) { return(true); } // 开始进行招募 FlowLogicHelper.RepeatRun(() => { // 在当前页寻找武将 var find = DMService.Instance.FindStr(dmGuid, new WxRect(321, 331, 653, 450), staff.ToString(), WlyColor.StaffColor, out var x, out var y); if (find) { DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y), TimeSpan.FromSeconds(1)); if (DMService.Instance.FindStr(dmGuid, new WxRect(714, 305, 801, 329), staff.ToString(), WlyColor.StaffColor)) { DMService.Instance.LeftClick(dmGuid, new WxPoint(612, 462)); Thread.Sleep(1000); } return(true); } // 进行翻页 var pageStr = DMService.Instance.GetWords(dmGuid, new WxRect(468, 453, 514, 476), "ffffff-000000"); var index = pageStr.IndexOf("/", StringComparison.Ordinal); var current = int.Parse(pageStr.Substring(0, index)); var total = int.Parse(pageStr.Substring(index + 1)); if (current == total) { return(true); } DMService.Instance.LeftClick(dmGuid, new WxPoint(524, 464)); return(false); }, TimeSpan.FromSeconds(10)); // 确认招募成功情况 if (DMService.Instance.FindStr(dmGuid, 总成_武将.武将列表, staff.ToString(), WlyColor.StaffColor)) { return(true); } return(false); }
/// <summary> /// 武将转职 /// </summary> /// <param name="staff"></param> /// <param name="dmGuid"></param> public static void Evolve(WlyStaffType staff, string dmGuid) { WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_武将); var result = WlyUtilityBiz.SelectStaffInList(dmGuid, staff); if (!result) { throw new InvalidOperationException($"未能选择到武将{staff.ToString()}"); } DMService.Instance.LeftClick(dmGuid, new WxPoint(581, 341)); if (DMService.Instance.FindStr(dmGuid, new WxRect(429, 342, 475, 371), "确定", WlyColor.Normal)) { DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 360)); } }
/// <summary> /// 在强化界面选择武将指定部位的装备 /// </summary> /// <param name="dmGuid"></param> /// <param name="staff"></param> /// <param name="equip"></param> private static bool SelectUpgradeEquipCore(string dmGuid, WlyStaffType staff, WlyEquipType equip) { var result = DMService.Instance.FindStrEx(dmGuid, new WxRect(188, 201, 417, 439), staff.ToString(), WlyColor.White); if (!string.IsNullOrWhiteSpace(result)) { var points = result.Split('|') .Select(o => { var ps = o.Split(','); return(new WxPoint(int.Parse(ps[1]), int.Parse(ps[2]))); }); foreach (var p in points) { DMService.Instance.LeftClick(dmGuid, p); if (DMService.Instance.FindStr(dmGuid, new WxRect(712, 339, 808, 358), equip.ToString(), "f3f3da-000000")) { return(true); } } } DMService.Instance.RepeatLeftClick(dmGuid, new WxPoint(426, 427), 14, 100); result = DMService.Instance.FindStrEx(dmGuid, new WxRect(188, 201, 417, 439), staff.ToString(), WlyColor.White); if (!string.IsNullOrWhiteSpace(result)) { var points = result.Split('|') .Select(o => { var ps = o.Split(','); return(new WxPoint(int.Parse(ps[1]), int.Parse(ps[2]))); }); foreach (var p in points) { DMService.Instance.LeftClick(dmGuid, p); if (DMService.Instance.FindStr(dmGuid, new WxRect(712, 339, 808, 358), equip.ToString(), "f3f3da-000000")) { return(true); } } } throw new InvalidOperationException($"无法找到{staff.ToString()}的装备{equip.ToString()}"); }
/// <summary> /// 武将下野 /// </summary> /// <param name="dmGuid"></param> /// <param name="staff"></param> /// <returns></returns> public static bool ThrowStaff(string dmGuid, WlyStaffType staff) { WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_招募); // 无法选中则当做下野已经成功 if (!WlyUtilityBiz.SelectStaffInList(dmGuid, staff)) { return(true); } // 点击下野 DMService.Instance.LeftClick(dmGuid, new WxPoint(270, 476)); DMService.Instance.LeftClick(dmGuid, new WxPoint(453, 332)); // 操作确认 return(!DMService.Instance.FindStr(dmGuid, 总成_武将.武将列表, staff.ToString(), WlyColor.StaffColor)); }
/// <summary> /// 在武将列表中选择指定的武将 /// </summary> /// <param name="dmGuid"></param> /// <param name="staff"></param> public static bool SelectStaffInList(string dmGuid, WlyStaffType staff) { var name = staff.ToString(); return(FlowLogicHelper.RepeatRun(() => { if (DMService.Instance.FindStr(dmGuid, new WxRect(193, 205, 304, 462), name, WlyColor.Selected)) { return true; } if (DMService.Instance.FindStr(dmGuid, new WxRect(193, 205, 304, 462), name, GetStaffQualityStr(), out var x, out var y)) { DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y)); } Thread.Sleep(500); return false; }, TimeSpan.FromSeconds(10))); }
/// <summary> /// 武将上阵 /// </summary> /// <param name="staff"></param> /// <param name="formation"></param> /// <param name="index"></param> /// <param name="dmGuid"></param> public static void SetStaff(WlyStaffType staff, WlyFormationType formation, int index, string dmGuid) { SetFormation(formation, dmGuid); WlyUtilityBiz.SelectStaffInList(dmGuid, staff); if (DMService.Instance.FindStr(dmGuid, new WxRect(228, 458, 267, 487), "下阵", WlyColor.Normal)) { DMService.Instance.LeftClick(dmGuid, new WxPoint(251, 471)); WlyUtilityBiz.SelectStaffInList(dmGuid, staff); } DMService.Instance.LeftClick(dmGuid, new WxPoint(248, 474)); DMService.Instance.LeftClick(dmGuid, _locationMap[index]); DMService.Instance.LeftClick(dmGuid, new WxPoint(386, 449)); // 检测 DMService.Instance.LeftClick(dmGuid, _locationMap[index]); var result = DMService.Instance.FindStr(dmGuid, new WxRect(718, 307, 796, 328), staff.ToString(), WlyUtilityBiz.GetStaffQualityStr()); if (!result) { throw new InvalidOperationException("武将上阵失败"); } }
/// <summary> /// 顿悟武将到指定的品级 /// </summary> /// <param name="dmGuid"></param> /// <param name="staff"></param> /// <param name="quality"></param> /// <returns></returns> public static bool EnvolveStaff(string dmGuid, WlyStaffType staff, WlyQualityType quality) { SelectStaff(dmGuid, staff, WlyViewType.功能_武将); var currentQuality = WlyUtilityBiz.GetQuality(dmGuid, new WxRect(715, 308, 796, 326)); if (currentQuality >= quality) { return(true); } // 点击进入顿悟 var wait = FlowLogicHelper.RepeatRun(() => { DMService.Instance.LeftClick(dmGuid, new WxPoint(764, 275), TimeSpan.FromSeconds(2)); if (DMService.Instance.FindStr(dmGuid, new WxRect(477, 96, 523, 120), "顿悟", WlyColor.Normal)) { return(true); } return(false); }, TimeSpan.FromSeconds(10)); if (!wait) { throw new InvalidOperationException("无法点开顿悟界面"); } while (DMService.Instance.FindColor(WlyColor.Normal, new WxRect(244, 414, 699, 454), dmGuid, out var x, out var y)) { DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y)); if (DMService.Instance.FindStr(dmGuid, new WxRect(521, 266, 600, 313), staff.ToString(), WlyColor.StaffColor)) { DMService.Instance.LeftClick(dmGuid, new WxPoint(456, 329)); } else { DMService.Instance.LeftClick(dmGuid, new WxPoint(543, 329)); DMService.Instance.LeftClick(dmGuid, new WxPoint(801, 120)); return(false); } } DMService.Instance.LeftClick(dmGuid, new WxPoint(769, 415)); DMService.Instance.LeftClick(dmGuid, new WxPoint(452, 334)); wait = FlowLogicHelper.RepeatRun(() => { var result = DMService.Instance.FindStr(dmGuid, new WxRect(444, 371, 546, 443), "顿悟", WlyColor.Normal); if (result) { return(true); } Thread.Sleep(1000); return(false); }, TimeSpan.FromSeconds(20)); if (wait) { DMService.Instance.LeftClick(dmGuid, new WxPoint(496, 403)); return(true); } DMService.Instance.LeftClick(dmGuid, new WxPoint(804, 117)); return(false); }