private void TaskStart() { TaskRunState = TaskRunState.Started; DmPlugin dm = Window.Dm; if (Window.Width != 1152 || Window.Height != 864) { throw new Exception("请将游戏分辨率设为1152*864!"); } bool flag = Delegater.WaitTrue(() => Window.BindFullBackground(), // dm.BindWindow(Window.Hwnd,DmBindDisplay.dx,DmBindMouse.windows,DmBindKeypad.normal,0)==1?true:false, () => dm.Delay(1000), 10); dm.Delay(500); if (!flag) { throw new Exception(string.Format("窗口“{0}”绑定失败.", Window.Title)); } else { Logger.Debug("窗口绑定成功!"); Window.IsBind = true; } TaskRunState = TaskRunState.Running; DoEventHandler(OnStateChanged, _taskEventArg); DoEventHandler(OnStarted, _taskEventArg); Logger.Debug("任务“{0}”启动成功.".FormatWith(_task.Name)); TaskResult result = null; try { result = _task.Run(); } catch (TaskRestartException ex) { Logger.Error("任务执行错误,正在重新启动:" + ex.Message); TaskStop(); TaskStart(); } catch (TaskInterruptException ex) { TaskStop(); Window.FlashWindow(); _workThread = null; SoftContext.MainWindow.ShowMessageAsync("任务中断", ex.Message); } if (result == null) { return; } if (result.ResultType == TaskResultType.Success) { SoftContext.MainWindow.ShowMessageAsync("任务完成", "任务“{0}”执行完毕:{1}".FormatWith(_task.Name, result.Message)); } if (result.ResultType == TaskResultType.Finished) { SoftContext.MainWindow.ShowMessageAsync("任务完成", "任务“{0}”执行结束,{1}".FormatWith(_task.Name, result.Message)); } }
private TaskResult RunStep6(TaskContext arg) { Role role = (Role)Role; if (Dm.GetColorNum(523, 379, 602, 450, "dc3146-303030", 0.9) > 50) { Delegater.WaitTrue(() => Dm.MoveToClick(30, 32), () => role.IsExistWindowMenu("设置"), () => Dm.Delay(1000)); Delegater.WaitTrue(() => role.OpenWindowMenu("设置"), () => Dm.IsExistPic(507, 99, 583, 163, @"\bmp\礼包.bmp"), () => Dm.Delay(1000)); Delegater.WaitTrue(() => { Dm.FindPicAndClick(507, 99, 583, 163, @"\bmp\礼包.bmp"); Dm.Delay(1000); if (Dm.FindPicAndClick(678, 241, 811, 344, @"\bmp\宝箱.bmp")) { Dm.Delay(2000); } else { return(true); } return(false); }, () => Dm.Delay(1000), 10); } role.CloseWindow(); return(TaskResult.Success); }
private TaskResult RunStep5(TaskContext arg) { Role role = (Role)Role; Delegater.WaitTrue(() => role.OpenTeshushijian(), () => Dm.IsExistPic(370, 81, 595, 139, @"\bmp\特殊事件3.bmp"), () => Dm.Delay(1000)); if (Dm.FindPicAndClick(114, 142, 827, 489, @"\bmp\恭贺奖励.bmp", 30, 0)) { Dm.Delay(1000); int count = 20; while (true) { while (Dm.IsExistPic(339, 76, 577, 146, @"\bmp\恭贺.bmp") && count != 0) { Dm.MoveToClick(478, 477); Dm.Delay(300); count--; } Dm.Delay(1000); if (!Dm.IsExistPic(339, 76, 577, 146, @"\bmp\恭贺.bmp")) { break; } if (count == 0) { break; } } } role.CloseWindow(); return(TaskResult.Success); }
private TaskResult RunStep4(TaskContext context) { Role role = (Role)context.Role; Delegater.WaitTrue(() => Dm.FindPicAndClick(856, 448, 958, 536, @"\bmp\菜单未打开.bmp"), () => Dm.IsExistPic(856, 448, 958, 536, @"\bmp\菜单打开.bmp"), () => Dm.Delay(1000)); Delegater.WaitTrue(() => role.OpenMenu("装备"), () => role.OpenWindowMenu("商店"), () => Dm.Delay(1000)); Delegater.WaitTrue(() => { Dm.FindStrAndClick(718, 448, 857, 502, "刷新", "86.17.70-5.5.25"); if (Dm.IsExistPic(283, 192, 668, 411, @"\bmp\金币秒CD.bmp")) { Dm.FindPicAndClick(283, 192, 668, 411, @"\bmp\商店取消.bmp"); return(true); } if (Dm.IsExistPic(283, 192, 668, 411, @"\bmp\适合您的装备.bmp")) { Dm.FindPicAndClick(283, 192, 668, 411, @"\bmp\商店确定.bmp"); } if (Dm.IsExistPic(283, 192, 668, 411, @"\bmp\稀有物品.bmp")) { Dm.FindPicAndClick(283, 192, 668, 411, @"\bmp\商店确定.bmp"); } return(Dm.IsExistStr(718, 448, 857, 502, "清除", "86.17.70-5.5.25")); }, () => Dm.Delay(500)); role.CloseWindow(); return(TaskResult.Finished); }
public bool CloseWindow() { OutSubMessage("开始关闭窗口..."); int intX, intY; return(Delegater.WaitTrue(() => { _dm.FindMultiColor(539, 0, 916, 298, "f4c792", "-11|4|be1a1c,-6|-7|fbd7c5,6|8|d9af79,-7|8|d6ab77,0|14|aa0305,-14|1|aa0305,13|-1|ac0507,1|-12|bb1719", 0.9, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.MoveToClick(intX, intY); _dm.Delay(1000); _dm.FindMultiColor(539, 0, 916, 298, "f4c792", "-11|4|be1a1c,-6|-7|fbd7c5,6|8|d9af79,-7|8|d6ab77,0|14|aa0305,-14|1|aa0305,13|-1|ac0507,1|-12|bb1719", 0.9, 0, out intX, out intY); if (intX > 0 && intY > 0) { OutSubMessage("关闭窗口失败!"); return false; } OutSubMessage("关闭窗口成功!"); return true; } OutSubMessage("关闭窗口成功!"); return true; }, () => _dm.Delay(1000), 5)); }
public bool GoToFubenArea(string area) { List <string> areas = new List <string>() { "虎牢关", "下邳", "官渡", "西蜀" }; string currentArea = ""; int intX, intY, i = 0; foreach (var a in areas) { _dm.FindPic(320, 453, 640, 534, @"\bmp\" + a + ".bmp", "303030", 0.7, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.DebugPrint("当前位于副本区域[" + a + "]"); currentArea = a; break; } } if (currentArea == area) { _dm.DebugPrint("已经在副本区域[" + area + "]"); return(true); } _dm.DebugPrint("正在移动到目标区域..."); return(Delegater.WaitTrue(() => { _dm.FindPic(320, 453, 640, 534, @"\bmp\" + area + ".bmp", "303030", 0.7, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.DebugPrint("已经在副本区域[" + area + "]"); return true; } else { int index = areas.IndexOf(area); foreach (var a in areas) { _dm.FindPic(320, 453, 640, 534, @"\bmp\" + a + ".bmp", "303030", 0.7, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.DebugPrint("当前位于副本区域[" + a + "]"); currentArea = a; break; } } int currentIndex = areas.IndexOf(currentArea); if (index > currentIndex) { _dm.Swipe(670, 427, 93, 415); } if (index < currentIndex) { _dm.Swipe(93, 415, 670, 427); } } return false; }, () => _dm.Delay(1000))); }
public bool OpenActivityBoard(string activity) { if (_dm.IsExistStr(75, 2, 909, 70, activity, "45.34.60-5.5.20|60.18.75-5.5.25")) { OutSubMessage("活动面板[" + activity + "]已经打开!"); return(Delegater.WaitTrue(() => { _dm.FindStrAndClick(75, 2, 909, 70, activity, "45.34.60-5.5.20"); _dm.Delay(500); if (_dm.IsExistStr(75, 2, 909, 70, activity, "60.18.75-5.5.25")) { return true; } return false; }, () => _dm.Delay(500), 10)); } else { CloseWindow(); } string points = _dm.FindPicEx(286, 37, 875, 284, @"\bmp\活动2.bmp", "202020", 0.8, 0); Debug.WriteLine(points); if (points == "") { CloseWindow(); return(false); } string[] t = points.Split('|'); foreach (var item in t) { string[] p = item.Split(','); _dm.MoveToClick(int.Parse(p[1]), int.Parse(p[2])); _dm.Delay(1000); if (_dm.IsExistStr(75, 2, 909, 70, activity, "45.34.60-5.5.20|60.18.75-5.5.25")) { return(Delegater.WaitTrue(() => { _dm.FindStrAndClick(75, 2, 909, 70, activity, "45.34.60-5.5.20"); _dm.Delay(500); if (_dm.IsExistStr(75, 2, 909, 70, activity, "60.18.75-5.5.25")) { return true; } return false; }, () => _dm.Delay(500), 10)); } else { CloseWindow(); } } CloseWindow(); return(false); }
/// <summary> /// Un-binds all behaviors from a group. /// </summary> /// <param name="delegater"></param> /// <param name="group"></param> public static void UnbindAll(this Delegater delegater, string group) { var boundBehaviors = delegater.Repository.GetAllBoundBehaviors(group); foreach (Behavior behavior in boundBehaviors) { delegater.Unbind(group, behavior); } }
int[] needs = new int[] { 0, 0, 0, 0, 0, 0 };//枪甲符马袍旗 private void GetEquipmentProperty(int x, int y, int i) { Dm.Delay(1000); Dm.MoveToClick(x, y); Dm.Delay(1000); int count = Dm.GetColorNum(205, 448, 264, 499, "201a19-202020", 0.9); if (Dm.GetColorNum(584, 76, 633, 114, "edd1a9 -202020|a49074-202020", 0.9) > 100) { if (count > 2000) { needs[i] += 1; return; } else { Dm.MoveToClick(234, 469); Dm.Delay(1000); Dm.MoveToClick(x, y); Dm.Delay(1000); } } if (IsOptimalColor() == false) { if (count > 2000) { needs[i] += 1; } else { Dm.MoveToClick(234, 469); Dm.Delay(1000); if (IsOptimalColor() == false) { needs[i] += 1; } else { Delegater.WaitTrue(() => { if (Dm.FindPicAndClick(658, 437, 782, 491, @"\bmp\穿上装备.bmp", 0, 0, 0.7)) { Dm.Delay(1000); if (Dm.IsExistPic(537, 194, 669, 277, @"\bmp\兵力损失.bmp")) { Dm.MoveToClick(415, 359); } return(true); } return(false); }, () => Dm.Delay(1000)); } } } }
public bool ClickXiaoQian() { return(Delegater.WaitTrue(() => { if (!Dm.FindPicAndClick(56, 240, 276, 469, @"\bmp\小倩.bmp")) { return true; } Dm.Delay(1000); return false; }, () => Dm.Delay(1000))); }
/// <summary> /// Re-names a group, and binds all bound behaviors to the new group. /// </summary> /// <param name="delegater">The BehaviorDelegater that maintains the behaviors.</param> /// <param name="oldGroup">The name of the group to re-name.</param> /// <param name="newGroup">The new name of the group.</param> public static void Rename(this Delegater delegater, string oldGroup, string newGroup) { var boundBehaviors = delegater.Repository.Behaviors.Where ( behavior => behavior.Group == oldGroup ); for (int i = boundBehaviors.Count() - 1; i >= 0; i--) { delegater.Bind(newGroup, boundBehaviors.ElementAt(i)); } }
private TaskResult RunStep4(TaskContext arg) { Role role = (Role)Role; role.OpenMenu("资源"); Delegater.WaitTrue(() => role.OpenWindowMenu("祭祀"), () => role.IsExistWindowMenu("祭祀"), () => Dm.Delay(1000)); Dm.FindPicAndClick(699, 63, 868, 118, @"\bmp\祭祀十次.bmp"); Dm.Delay(1000); Delegater.WaitTrue(() => { if (Dm.GetColorNum(738, 500, 761, 522, "79a03b-303030", 1.0) > 20) { Dm.MoveToClick(783, 512); Dm.Delay(1000); return(false); } return(true); }, () => Dm.Delay(50), 10); Dm.UseDict(1); Delegater.WaitTrue(() => { if (Dm.IsExistPic(197, 59, 288, 102, @"\bmp\祭祀0.bmp", 0.7)) { if (Dm.GetColorNum(204, 61, 278, 96, "C59E00-3A2E00", 0.9) < 75) { return(true); } } bool result = Dm.IsChangeColorNumEx(204, 61, 278, 96, "C59E00-3A2E00", () => { Dm.MoveToClick(322, 451); //祭祀木材 //Dm.MoveToClick(162, 454);//祭祀银子 Dm.Delay(500); }); if (!result) { Dm.DebugPrint("操作完颜色结果不变,可能已经完成!~"); if (Dm.FindPicAndClick(475, 315, 628, 415, @"\bmp\取消.bmp")) { Dm.Delay(1000); } return(true); } return(false); }, () => Dm.Delay(50), 40); Dm.UseDict(0); role.CloseWindow(); return(TaskResult.Success); }
private TaskResult RunStep8(TaskContext arg) { Role role = (Role)Role; Dm.UseDict(0); Delegater.WaitTrue(() => role.OpenMenu("武将"), () => role.IsExistWindowMenu("宴会"), () => Dm.Delay(1000)); Delegater.WaitTrue(() => role.OpenWindowMenu("宴会"), () => Dm.Delay(1000)); return(TaskResult.Success); }
public bool OpenWindowMenu(string menu) { //未选中:45.34.60-5.5.20 //选中:60.18.75-5.5.25 return(Delegater.WaitTrue(() => { _dm.FindStrAndClick(75, 2, 909, 70, menu, "45.34.60-5.5.20"); _dm.Delay(500); if (_dm.IsExistStr(75, 2, 909, 70, menu, "60.18.75-5.5.25")) { return true; } return false; })); }
public bool OpenMenu() { return(Delegater.WaitTrue(() => { if (_dm.IsExistPic(862, 454, 961, 537, @"\bmp\菜单打开.bmp", 0.8, false)) { return true; } if (_dm.IsExistPic(862, 454, 961, 537, @"\bmp\菜单未打开.bmp", 0.8, false)) { _dm.MoveToClick(918, 499); } return false; }, () => _dm.Delay(1000), 10)); }
private void ClosePopup(int x, int y) { Delegater.WaitTrue(() => { if (Dm.IsExistPic(379, 213, 475, 255, @"\bmp\隐藏技能.bmp", 0.8, false)) { Dm.MoveToClick(x, y); //点确定取消 // Dm.DebugPrint("点击坐标:" + x + " " + y); Dm.Delay(3000); if (!Dm.IsExistPic(379, 213, 475, 255, @"\bmp\隐藏技能.bmp", 0.8, false)) { return(true); } } return(false); }); Dm.Delay(1000); }
public bool GoToMap(string map) { switch (map) { case "世界": if (_dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && _dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp")) { OutSubMessage("已经在世界界面!"); break; } Delegater.WaitTrue(() => _dm.FindPicAndClick(818, 281, 953, 447, @"\bmp\世界.bmp", 0, 0, 0.7), () => _dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && _dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp"), () => _dm.Delay(1000)); break; case "副本": if (_dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && _dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp")) { OutSubMessage("已经在副本界面!"); break; } Delegater.WaitTrue(() => _dm.FindPicAndClick(818, 281, 953, 447, @"\bmp\副本.bmp", 0, 0, 0.7), () => _dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && _dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp"), () => _dm.Delay(1000)); break; case "主城": if (_dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp") && _dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp")) { OutSubMessage("已经在主城界面!"); break; } Delegater.WaitTrue(() => _dm.FindPicAndClick(818, 281, 953, 447, @"\bmp\主城.bmp", 0, 0, 0.7), () => _dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp") && _dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp"), () => _dm.Delay(1000)); break; default: OutSubMessage("输入地图错误,无法打开"); break; } _dm.Delay(2000); return(true); }
private TaskResult RunStep1(TaskContext context) { Role role = (Role)context.Role; DmPlugin dm = role.Window.Dm; role.GoToMap("世界"); role.CloseWindow(); dm.Delay(1000); if (Dm.IsExistPic(862, 454, 961, 537, @"\bmp\菜单打开.bmp")) { Delegater.WaitTrue(() => Dm.FindPicAndClick(862, 454, 961, 537, @"\bmp\菜单打开.bmp"), () => Dm.IsExistPic(862, 454, 961, 537, @"\bmp\菜单未打开.bmp"), () => Dm.Delay(1000), 2000); } role.OpenMap(); int intX, intY; while (true) { dm.FindStr(75, 246, 227, 296, "军资奖励", "44.34.64-10.10.25", 0.9, out intX, out intY); if (intX > 0 && intY > 0) { role.OutSubMessage("领取军资..."); dm.MoveToClick(156, 420); dm.Delay(50); if (dm.GetColorNum(157, 242, 227, 293, "f60000-101010", 0.9) > 5) { role.OutSubMessage("军资已经领取完成,正在冷却!"); break; } dm.Delay(300); } else { role.OutSubMessage("找不到军资奖励"); break; } } role.CloseMap(); return(TaskResult.Success); }
private TaskResult RunStep2(TaskContext context) { Role role = (Role)context.Role; DmPlugin dm = role.Window.Dm; if (dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp")) { role.OutSubMessage("在建筑中..."); } else { role.GoToMap("主城"); //dm.MoveToClick(317, 460);//点击兵营 dm.MoveToClick(419, 245);//点击银币 //dm.MoveToClick(200, 200);//点击木材 dm.Delay(2000); } string a, b; dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(5000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }); return(TaskResult.Finished); }
public bool GoToMap30(string map) { switch (map) { case "副本": if (_dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && !_dm.IsExistPic(811, 302, 956, 450, @"\bmp\副本2.bmp", 0.9)) { if (OpenMenu()) { _dm.Delay(1000); if (!_dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp", 0.9)) { OutSubMessage("已经在副本界面!"); break; } } } Delegater.WaitTrue(() => _dm.FindPicAndClick(811, 302, 956, 450, @"\bmp\副本2.bmp", 0, 0, 0.9), () => _dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && !_dm.IsExistPic(811, 302, 956, 450, @"\bmp\副本2.bmp", 0.9), () => _dm.Delay(1000)); break; case "主城": if (_dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && !_dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp")) { OutSubMessage("已经在主城界面!"); break; } Delegater.WaitTrue(() => _dm.FindPicAndClick(818, 281, 953, 447, @"\bmp\主城.bmp"), () => _dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本2.bmp") && !_dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => _dm.Delay(1000)); break; default: OutSubMessage("输入地图错误,无法打开"); break; } _dm.Delay(2000); return(true); }
private TaskResult RunStep1(TaskContext context) { IRole role = context.Role; DmPlugin dm = role.Window.Dm; int hwnd = role.Window.Hwnd; Delegater.WaitTrue(() => { return(false); }, () => { bool ret = role.FindControlTextAndClick(569, 685, "重新开启", true); if (ret == true) { Delegater.WaitTrue(() => { return(role.FindControlTextAndClick(566, 496, "确认", true) || role.FindControlTextAndClick(572, 649, "确认", true)); }, () => dm.Delay(500)); } dm.Delay(1000); }); return(TaskResult.Finished); }
private Tuple <bool, EquipmentAttrType> IsSameEequipmentType() { EquipmentAttrType type1 = EquipmentAttrType.未知类型, type2 = EquipmentAttrType.未知类型, type3 = EquipmentAttrType.未知类型; Delegater.WaitTrue(() => { type1 = GetEquipmentType(566, 318, 637, 393); type2 = GetEquipmentType(634, 315, 703, 400); type3 = GetEquipmentType(701, 315, 776, 408); if (type1 != EquipmentAttrType.未知类型 && type2 != EquipmentAttrType.未知类型 && type3 != EquipmentAttrType.未知类型) { Dm.DebugPrint("属性:" + type1.ToString() + " " + type2.ToString() + " " + type3.ToString()); return(true); } return(false); }); if (type1 == type2 && type2 == type3) { Dm.DebugPrint("所有类型相同!" + type1.ToString()); return(new Tuple <bool, EquipmentAttrType>(true, type1)); } return(new Tuple <bool, EquipmentAttrType>(false, type1)); }
static void Main() { Delegater del = new Delegater(SevenSeconds); del(DateTime.Now); }
private TaskResult RunStep7(TaskContext arg) { Role role = (Role)Role; Dm.UseDict(0); Delegater.WaitTrue(() => role.OpenMenu("资源"), () => role.IsExistWindowMenu("集市"), () => Dm.Delay(1000)); Delegater.WaitTrue(() => role.OpenWindowMenu("集市"), () => Dm.Delay(1000)); Dm.UseDict(1); Dm.Delay(1000); Delegater.WaitTrue(() => { bool result = Dm.IsChangeColorNumEx(170, 72, 237, 107, "49A031-152F0F", () => { Dm.StartWatch(); var rt1 = GetResourceType(160, 129, 346, 377); var rc1 = GetColor(176, 119, 328, 178); Dm.DebugPrint("第一个资源:" + rt1.ToString() + ",颜色:" + rc1.ToString()); var rt2 = GetResourceType(395, 132, 573, 373); var rc2 = GetColor(409, 129, 566, 175); Dm.DebugPrint("第二个资源:" + rt2.ToString() + ",颜色:" + rc2.ToString()); var rt3 = GetResourceType(630, 131, 810, 377); var rc3 = GetColor(633, 124, 804, 180); Dm.DebugPrint("第三个资源:" + rt3.ToString() + ",颜色:" + rc3.ToString()); Dm.StopWatch(); Dm.StartWatch(); List <Resource> list = new List <Resource>() { new Resource() { Pos = 1, Type = rt1, Color = rc1, Buypos = new Tuple <int, int>(253, 353) }, new Resource() { Pos = 2, Type = rt2, Color = rc2, Buypos = new Tuple <int, int>(495, 353) }, new Resource() { Pos = 3, Type = rt3, Color = rc3, Buypos = new Tuple <int, int>(727, 353) } }; var rlist = list.OrderByDescending(q => q.Type).ThenByDescending(x => x.Color).ToList(); Dm.DebugPrint(string.Format("购买位置:{0},资源类型:{1},资源颜色:{2}", rlist.First().Pos, rlist.First().Type.ToString(), rlist.First().Color.ToString())); Dm.MoveToClick(rlist.First().Buypos.Item1, rlist.First().Buypos.Item2); Dm.StopWatch(); Dm.Delay(1000); }); if (!result) { Dm.DebugPrint("操作完颜色结果不变,可能已经完成!~"); if (Dm.IsExistPic(171, 71, 247, 105, @"\bmp\集市0.bmp")) { return(true); } } if (Dm.FindPicAndClick(475, 315, 628, 415, @"\bmp\取消.bmp")) { Dm.Delay(1000); } return(false); }, () => Dm.Delay(50), 40); Dm.UseDict(0); role.CloseWindow(); return(TaskResult.Success); }
void InitializeBehaviors() { Delegater delegater = repo.Delegater; /* * FPS */ fps = new FrameRateCounter(); delegater.Bind(Groups.FrameRate, fps); /* * Camera */ DefaultCamera camera = new DefaultCamera(GraphicsDevice) { ClearColor = Color.CornflowerBlue }; delegater.Bind(Groups.Camera, camera); /* * Background */ // bug: spritebatch.Begin(AlphaBlend) makes sure that this quad gets drawn in the background // which means that some important renderstates are getting set, but not by me FullScreenQuad background = new FullScreenQuad() { Top = new Color(25, 31, 32), Bottom = new Color(71, 81, 90), DrawOrder = 0 }; delegater.Bind(Groups.Background, background); /* * Statue */ StatueInformation statueInformation = new StatueInformation() { StatueSettings = StatueSettings[0] }; delegater.Bind(Groups.Statue, statueInformation); Statue statue = new Statue() { DrawOrder = 2 // to fix some troubles with blobs getting viewed through the statue }; delegater.Bind(Groups.Statue, statue); StatueMouseController statueController = new StatueMouseController(); delegater.Bind(Groups.Statue, statueController); /* * Game Information */ GameInformation gameInfo = new GameInformation() { GameMode = GameMode.Regular }; delegater.Bind(Groups.GameInformation, gameInfo); GameInformationDisplay gameInfoDisplay = new GameInformationDisplay() { DrawOrder = 3 }; delegater.Bind(Groups.GameInformation, gameInfoDisplay); /* * Blob Production */ DirtProducer blobProducer = new DirtProducer(); delegater.Bind(Groups.DirtProduction, blobProducer); /* * Game State Control */ GameStateController stateController = new GameStateController(); delegater.Bind(Groups.GameStateControl, stateController); /* * Menu stuff */ StatueInformation menuStatueInformation = new StatueInformation() { StatueSettings = StatueSettings[0] }; delegater.Bind(Groups.MenuStatuePreview, menuStatueInformation); Statue menuStatue = new Statue() { DrawOrder = 2 }; delegater.Bind(Groups.MenuStatuePreview, menuStatue); StatuePreviewSpinner statueSpinner = new StatuePreviewSpinner(); delegater.Bind(Groups.MenuStatuePreview, statueSpinner); MenuItemsDisplay menuItems = new MenuItemsDisplay() { DrawOrder = 3 }; delegater.Bind(Groups.MenuItemsDisplay, menuItems); /* * Intro */ Intro intro = new Intro(); delegater.Bind(Groups.Intro, intro); // omg, lousy hack.. these two lines makes sure we get to see the damn preview model in menu screen :P // im too tired to find the reason.. the code is such a mess already stateController.GameState = GameState.Playing; stateController.GameState = GameState.Menu; stateController.GameState = GameState.Intro; }
private TaskResult RunStep1(TaskContext context) { Role role = (Role)context.Role; DmPlugin dm = role.Window.Dm; //int level = role.Level; while (true) { string taskName = dm.Ocr(0, 122, 114, 179, "60.19.85-5.5.40", 0.8); dm.DebugPrint("主线任务识别:" + taskName); for (int i = 0; i < 10; i++) { dm.MoveToClick(21, 182); dm.Delay(200); } switch (taskName) { case "欢迎": ClickXiaoQian(); break; case "民居1": dm.MoveToClick(481, 114); dm.FindPicAndClick(389, 58, 687, 224, @"\bmp\升级.bmp"); dm.Delay(1000); dm.FindPicAndClick(389, 58, 687, 224, @"\bmp\加速锤.bmp"); dm.Delay(1000); break; case "民居2": dm.MoveToClick(908, 119); break; case "大名": ClickXiaoQian(); if (dm.IsExistPic(379, 13, 567, 62, @"\bmp\创建.bmp")) { Debug.WriteLine("请输入角色名!"); } break; case "虎牢关": dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); role.CloseMenu(); if (dm.IsExistPic(130, 333, 279, 462, @"\bmp\EXP.bmp")) { dm.MoveToClick(192, 399); dm.Delay(1000); if (dm.IsExistPic(151, 480, 247, 535, @"\bmp\EXP2.bmp")) { while (dm.FindPicAndClick(204, 435, 759, 492, @"\bmp\5.bmp", 0, 0, 0.9)) { dm.Delay(1000); } while (dm.FindPicAndClick(204, 435, 759, 492, @"\bmp\5.bmp", 0, 0, 0.9)) { dm.Delay(1000); } } break; } GoToFighting("虎牢关", true); break; case "穿装备": role.OpenMenu("武将"); dm.MoveToClick(234, 468); dm.Delay(1000); dm.MoveToClick(719, 464); dm.Delay(200); dm.MoveToClick(234, 468); dm.Delay(1000); dm.MoveToClick(719, 464); dm.Delay(200); dm.MoveToClick(234, 468); dm.Delay(1000); dm.MoveToClick(719, 464); dm.Delay(200); break; case "买装备": role.OpenMenu("装备"); dm.MoveToClick(164, 370); dm.Delay(800); dm.MoveToClick(292, 368); dm.Delay(800); dm.MoveToClick(418, 367); dm.Delay(800); dm.MoveToClick(542, 370); dm.Delay(800); dm.MoveToClick(673, 368); dm.Delay(800); dm.MoveToClick(797, 372); dm.Delay(800); break; case "祭祀": role.OpenMenu("资源"); if (dm.IsExistPic(0, 61, 106, 160, @"\bmp\祭祀银币.bmp")) { dm.MoveToClick(156, 455); } if (dm.IsExistPic(0, 61, 106, 160, @"\bmp\祭祀木材.bmp")) { dm.MoveToClick(328, 455); } break; case "产量600": role.GoToMap30("主城"); dm.MoveToClick(419, 245); //点击银币 //dm.MoveToClick(200, 200);//点击木材 dm.Delay(2000); string a, b; dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(5000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 20); break; case "刷装备": dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); role.OpenMenu("装备"); dm.MoveToClick(784, 480); dm.Delay(800); break; case "卖装备": role.OpenMenu("装备"); dm.MoveToClick(272, 28); dm.Delay(800); dm.MoveToClick(770, 479); break; case "下邳": role.CloseMenu(); GoToFighting("下邳", true); break; case "木场": role.GoToMap30("主城"); Delegater.WaitTrue(() => dm.MoveToClick(200, 200), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); dm.Delay(2000); dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(5000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 10); break; case "解雇": role.OpenMenu("武将"); dm.MoveToClick(274, 32); //点击酒馆 dm.Delay(800); if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\周仓.bmp") && !dm.IsExistPic(116, 215, 658, 275, @"\bmp\张梁.bmp")) { dm.MoveToClick(204, 144); //点击第一个武将 dm.Delay(800); dm.MoveToClick(410, 361); //点击确定 dm.Delay(800); } role.CloseWindow(); break; case "招募": role.OpenMenu("武将"); dm.MoveToClick(274, 32); //点击酒馆 dm.Delay(800); if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\周仓.bmp", 0.7) && dm.IsExistPic(116, 215, 658, 275, @"\bmp\张梁.bmp", 0.7)) { dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\周仓.bmp", 31, 172, 0.7); } if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\张辽.bmp", 0.7) && dm.IsExistPic(116, 215, 658, 275, @"\bmp\张梁.bmp", 0.7)) { if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\华雄.bmp", 0.7) || dm.IsExistPic(116, 215, 658, 275, @"\bmp\周仓.bmp", 0.7)) { dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\张辽.bmp", 31, 172, 0.7); break; } role.CloseWindow(); role.OpenMenu("资源"); for (int i = 0; i < 20; i++) { dm.MoveToClick(156, 455); dm.Delay(200); } role.CloseWindow(); role.OpenMenu("武将"); dm.MoveToClick(274, 32); //点击酒馆 dm.Delay(800); if (dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\张辽.bmp", 31, 172, 0.7)) { dm.Delay(2000); if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\张辽.bmp", 0.7)) { dm.MoveToClick(204, 144); //点击第一个武将 dm.Delay(800); dm.MoveToClick(410, 361); //点击确定 dm.Delay(2000); } } dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\张辽.bmp", 31, 172, 0.7); } break; case "科技": role.OpenMenu("科技"); Delegater.WaitTrue(() => { dm.FindPicAndClick(656, 208, 790, 269, @"\bmp\注资.bmp"); dm.Delay(2000); if (dm.IsExistPic(774, 406, 956, 505, @"\bmp\木材不足.bmp")) { dm.MoveToClick(855, 478); dm.Delay(2000); for (int i = 0; i < 5; i++) { dm.MoveToClick(334, 458); dm.Delay(500); } role.CloseWindow(); role.OpenMenu("科技"); } if (dm.FindPicAndClick(656, 208, 790, 269, @"\bmp\研究.bmp", 0, 0, 0.7)) { dm.Delay(1000); return(true); } return(false); }, () => dm.Delay(1000), 10); break; case "农田": role.GoToMap30("主城"); Delegater.WaitTrue(() => dm.MoveToClick(165, 348), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); dm.Delay(2000); dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(2000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 10); break; case "皇城": role.GoToMap30("主城"); dm.Delay(2000); Delegater.WaitTrue(() => dm.MoveToClick(667, 180), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); Delegater.WaitTrue(() => dm.MoveToClick(337, 446), () => dm.IsExistPic(266, 356, 619, 486, @"\bmp\占领.bmp"), () => dm.Delay(1000)); dm.FindPicAndClick(266, 356, 619, 486, @"\bmp\占领.bmp"); dm.Delay(2000); dm.MoveToClick(612, 122); dm.Delay(1000); dm.MoveToClick(749, 128); dm.Delay(1000); dm.MoveToClick(807, 259); //点击战斗 Delegater.WaitTrue(() => { if (dm.IsExistPic(330, 45, 639, 184, @"\bmp\胜利.bmp")) { dm.MoveToClick(916, 45); //点击返回 dm.Delay(1000); return(true); } return(false); }, () => dm.Delay(1000)); break; case "俸禄": role.OpenMenu("排行"); dm.Delay(1000); dm.MoveToClick(630, 469); //点击俸禄 dm.Delay(1000); break; case "兵营": role.GoToMap30("主城"); Delegater.WaitTrue(() => dm.MoveToClick(334, 443), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); break; case "募兵700": Delegater.WaitTrue(() => { role.GoToMap30("主城"); return(dm.MoveToClick(334, 443)); }, () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); dm.Delay(2000); dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待2s"); dm.MoveToClick(152, 429); dm.Delay(2000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 15); break; case "世界": role.GoToMap("世界"); break; case "迷雾": //role.GoToMap("世界"); return(TaskResult.Finished); break; default: ClickXiaoQian(); break; } dm.Delay(2000); } return(TaskResult.Finished); }
private bool GoToFighting(string area, bool isSkip = false) { Role role = (Role)Role; DmPlugin dm = role.Window.Dm; role.GoToMap30("副本"); // role.GoToFubenArea(area); if (area == "下邳") { dm.Swipe(670, 427, 93, 425); dm.Delay(1000); } Delegater.WaitTrue(() => { dm.MoveToClick(21, 182); if (dm.IsExistPic(116, 72, 936, 351, @"\bmp\战斗.bmp")) { return(true); } dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); return(false); }, () => dm.Delay(500), 10); if (Delegater.WaitTrue(() => { dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); dm.FindPicAndClick(116, 72, 936, 351, @"\bmp\战斗.bmp"); if (dm.IsExistPic(394, 216, 567, 307, @"\bmp\VS.bmp")) { //补充兵力 dm.MoveToClick(612, 122); dm.Delay(1000); dm.MoveToClick(749, 128); dm.Delay(1000); dm.MoveToClick(807, 259); //点击战斗 } if (!dm.IsExistPic(394, 216, 567, 307, @"\bmp\VS.bmp") && dm.IsExistPic(762, 4, 953, 87, @"\bmp\返回.bmp") && isSkip) { dm.MoveToClick(840, 43); //点击跳过 dm.Delay(3000); } if (dm.IsExistPic(330, 45, 639, 184, @"\bmp\胜利.bmp")) { dm.MoveToClick(916, 45); //点击返回 dm.Delay(1000); return(true); } if (dm.IsExistPic(318, 36, 637, 195, @"\bmp\失败.bmp")) { dm.MoveToClick(916, 45); //点击返回 dm.Delay(1000); return(true); } return(false); }, () => dm.Delay(1000), 10)) { return(true); } else { return(GoToFighting(area, true)); } }
void InitializeBehaviors() { Delegater d = repo.Delegater; #region Camera 1 d.Bind( Groups.DefaultCamera, new Transform() { Position = new Vector3(0, 35, 28) }); d.Bind( Groups.DefaultCamera, new ActionContextCamera(GraphicsDevice) { ClearColor = Color.SteelBlue //Color.Beige }); #endregion d.Bind("Floor", new Transform() { Position = new Vector3(-25, -1, 0) }); d.Bind("Floor", new Box(250, 1, 250) { Color = Color.LightGray }); d.Bind("Floor", new BoxCollider(true)); d.Bind(Groups.MainBuilding, new Transform()); d.Bind(Groups.MainBuilding, new Box(20, 30, 15)); repo.Get <Transform>(Groups.MainBuilding).Position.Y = repo.Get <Box>(Groups.MainBuilding).Height / 2; d.Bind(Groups.MainBuilding, new BoxCollider(true)); Vector3 offset = new Vector3(-(repo.Get <Box>(Groups.MainBuilding).Width / 5), repo.Get <Box>(Groups.MainBuilding).Height / 2, 0); d.Bind(Groups.MainBuildingRoof, new Transform() { Position = repo.Get <Transform>(Groups.MainBuilding).Position + offset }); d.Bind(Groups.Wind, new WindStroker()); //d.Bind(Groups.Wind, new DebugWindStroke()); d.Bind(Groups.Wind, new WindStrokerVisual() { DrawOrder = 2 }); // crates d.Bind("box placer", new BoxPlacer()); Vector3 initialPosition = repo.Get <Transform>(Groups.MainBuildingRoof).Position; float size = 1.75f; d.Bind("Crate #1", new Transform() { Position = initialPosition + new Vector3(size / 2) + new Vector3(-3, 0, 4) }); d.Bind("Crate #1", new Box(size, size, size) { Color = Color.Beige }); d.Bind("Crate #1", new BoxCollider(false)); d.Bind("Crate #1", new ReceiveWindGust()); d.Bind("Crate #1", new ScaleToDistanceFromFloor()); ////////// d.Bind("Crate #2", new Transform() { Position = initialPosition + new Vector3(size / 2) + new Vector3(-1, 0, 4) }); d.Bind("Crate #2", new Box(size, size, size) { Color = Color.Beige }); d.Bind("Crate #2", new BoxCollider(false)); d.Bind("Crate #2", new ReceiveWindGust()); d.Bind("Crate #2", new ScaleToDistanceFromFloor()); ////////// d.Bind("Crate #3", new Transform() { Position = initialPosition + new Vector3(size / 2) + new Vector3(-2.25f, 1.8f, 4) }); d.Bind("Crate #3", new Box(size, size, size) { Color = Color.Beige }); d.Bind("Crate #3", new BoxCollider(false)); d.Bind("Crate #3", new ReceiveWindGust()); d.Bind("Crate #3", new ScaleToDistanceFromFloor()); d.Bind("Death Counter", new DeathTollCounter() { DrawOrder = 4 }); d.Bind("people", new Transform() { Position = new Vector3(-35, 0.25f, 0) }); d.Bind("people", new FolksRunningAround() { DrawOrder = 2 }); d.Bind("grassy field", new Transform() { Position = new Vector3(-35, -0.75f, 0) }); d.Bind("grassy field", new Box(37, 1, 37) { Color = Color.Green }); d.Bind("Another tower", new Transform() { Position = new Vector3(-100, 20, -10) }); d.Bind("Another tower", new Box(35, 50, 30) { Color = Color.Bisque }); d.Bind("Another tower", new BoxCollider(true)); d.Bind("Another tower 2", new Transform() { Position = new Vector3(-100, 10, -45) }); d.Bind("Another tower 2", new Box(35, 30, 30) { Color = Color.BlanchedAlmond }); d.Bind("Another tower 2", new BoxCollider(true)); d.Bind("road", new Transform() { Position = new Vector3(-65, -0.75f, 0) }); d.Bind("road", new Box(20, 1, 250) { Color = Color.DarkGray }); d.Bind("road separator", new Transform() { Position = new Vector3(-65, -0.5f, 0) }); d.Bind("road separator", new Box(1, 1, 250) { Color = Color.DarkGray }); d.Bind("another grassy field", new Transform() { Position = new Vector3(-98, -0.75f, 35) }); d.Bind("another grassy field", new Box(37, 1, 37) { Color = Color.Green }); d.Bind("people 2", new Transform() { Position = new Vector3(-98, 0.25f, 35) }); d.Bind("people 2", new FolksRunningAround(50, 6) { DrawOrder = 2 }); // hacky with hardcoding scale, but cba with making it based on cam distance or whatever d.Bind("small path", new Transform() { Position = new Vector3(-115, -0.75f, 10) }); d.Bind("small path", new Box(80, 1, 5) { Color = Color.DarkGray }); d.Bind("deactivator", new RemoveDeactivatedBoxes()); d.Bind("How to play", new HowToOverlay() { DrawOrder = 3 }); d.Bind("How to play", new HelpOverlay() { DrawOrder = 3 }); d.Bind("Owl Dispenser :D", new OwlDispenser()); repo.Get <ActionContextCamera>(Groups.DefaultCamera).Target = //repo.Get<Transform>("Owl LOL"); repo.Get <Transform>(Groups.MainBuildingRoof); ///// achievements woo! d.Bind("Achievement Progress", new DisplayAchievementGain() { DrawOrder = 3 }); d.Bind("Achievement Progress", new AchievementProgress() { DrawOrder = 3 }); // trackers! d.Bind("Achievement Progress", new TrackTotalKillInOneSession()); d.Bind("Achievement Progress", new TrackTotalKillInOneSessionSequel()); d.Bind("Achievement Progress", new TrackHitAnOwl()); d.Bind("Achievement Progress", new TrackAirTime()); }
public Timing(Delegater delegater) : base(delegater) { }
public Drawing(Delegater delegater, bool traverseNow) : base(delegater, traverseNow) { }