public override void Execute() { if (!IsReady()) { return; } Commands.ResetVillageNumber(village); Commands.ZoomOutMap(1); Commands.ActDectFilter(FilterEnabled.Scout); foreach (var item in targets) { List <Pair> target = reader.FindImageOnScreen(MainScreen.READER_AREA, item, true); if (target.Count != 0) { Commands.WriteToScoutLog($"{village}| Founded \"{item.Path.Substring(8, item.Path.Length - 15)}\" {target.Count}"); int scouts_onstack = target.Count > Available_scouts ? 1 : Available_scouts / target.Count; foreach (var stc in target) { if (stc.X > 1000 && stc.Y > 550) { continue; } if (!AlreadySended(stc)) { Controller.AutoClick(stc); Controller.AutoClick(MainScreen.MIDDLE_OFSCREEN); Commands.Scouting.SendScout(scouts_onstack); sended_scouts.Add(new ScoutTarget(scouts_onstack, CountNextExecute(new Coords(stc.X, stc.Y)), DateTime.Now, stc)); Available_scouts -= scouts_onstack; last_execute = DateTime.Now; Commands.WriteToScoutLog(village.ToString() + "| Scouts sended: " + scouts_onstack.ToString() + " Resource: " + item.Path.Substring(8, item.Path.Length - 15)); if (Available_scouts > 0) { Commands.ResetVillageNumber(village); Commands.ZoomOutMap(1); } else { Completed(); return; } } } if (Available_scouts == 0) { Completed(); return; } } } Commands.WriteToLog("No resources on the map"); execute_rate_sec = 120; Completed(); }
public override void Execute() { if (!IsReady()) { return; } Commands.ResetVillageNumber(village); Commands.ActDectFilter(FilterEnabled.AI); foreach (var castle in castles) // Check default types { List <Pair> exist_castles = reader.FindImageOnScreen(MainScreen.READER_AREA, castle); if (exist_castles.Count != 0) { Thread.Sleep(1000); foreach (var targ in exist_castles) // Check finded castles { Controller.AutoClick(targ); Thread.Sleep(1000); List <Pair> shields = new List <Pair>(); foreach (var shield in targets) { shields = reader.FindImageOnScreen(MainScreen.SELECTED_CASTLE_AREA, shields_dict[shield.Name]); if (shields.Count != 0) { break; } } Controller.AutoClick(MainScreen.TAB_VILLAGE); Controller.AutoClick(MainScreen.TAB_MAP); Thread.Sleep(2000); foreach (var check in targets) // Check selected castle { List <Pair> type = reader.FindImageOnScreen(MainScreen.SELECTED_CASTLE_AREA, castles[check.Level]); if (shields.Count != 0 && type.Count != 0) { Controller.AutoClick(village_pos); Controller.AutoClick(AttackScreen.MAP_ATTACK_BUTTON); Thread.Sleep(2000); Commands.Attacking.LoadFormation(AttackScreen.LocalSettings.formations[check.Formation]); Controller.AutoClick(AttackScreen.SENDATTACK_BUTTON); Thread.Sleep(500); Controller.AutoClick(AttackScreen.SendingScreen.ATTACK_BUTTON); Controller.AutoClick(AttackScreen.SendingScreen.SEND_BUTTON); CountNextExecute(new Coords(targ.X, targ.Y)); Commands.WriteToLog("Army sended, level: " + check.Level.ToString()); Thread.Sleep(2000); Completed(); return; } } } Commands.WriteToLog("No castles to attack"); Commands.ResetVillageNumber(village); } } //execute_rate_sec = Cvrt.ToSeconds(30, 0); Commands.ActDectFilter(MainScreen.Filters.ERASE_FILTER); }