private void DoSupplyClicks(IEnumerable<Coordinate> crdList) { var l_Item = new ItemCollection.Item(); UpdateStatus(LogType.ClickProductionStart, null); int num = 0; var lastGoodY = 0; var lastGoodX = 0; foreach (var coordinate in crdList) { var l_CoordinateString = ItemCollection.MakePoint(coordinate.X,coordinate.Y); if (ItemCollection.Instance.Items.TryGetValue(l_CoordinateString, out l_Item)) { l_Item.CalculateNewTrialCoordinates(); // we try to impose better trial coordinates for the item only if it has to tryout for the first time if(lastGoodY!=0 && l_Item.ReadyForTheFirstAdjustment) { l_Item.m_OffsetX = lastGoodX; l_Item.m_OffsetY = lastGoodY; } InjectClickAtInvokeForced(coordinate.X + l_Item.m_OffsetX, coordinate.Y + l_Item.m_OffsetY); num++; UpdateStatus(LogType.ClickProductionSelect, num.ToString()); BlockUntilPopupIs(true, Settings.WaitOnPopupInMillis); var image = GetNewBrowserImageInvokeForced(); try { l_Item.ClickSuccessful(false); if (IsPopupPresent(image)) { Coordinate cordClose; if (IsSupplyWinPresent(image, out cordClose)) { l_Item.ClickSuccessful(true); InjectClickAtInvokeForced(Settings.SupplyItemCoords.X, Settings.SupplyItemCoords.Y); UpdateStatus(LogType.ClickProductionDone, num.ToString()); BlockUntilPopupIs(false, Settings.WaitOnPopupInMillis); image.Dispose(); image = GetNewBrowserImageInvokeForced(); if (!IsPopupPresent(image)) { continue; } UpdateStatus(LogType.JustMessage, Resource.MainForm_DoSupplyClicks_Error_PopupRemained_SelectingSupplies); image.Image.Save("suppliesWindow.png", ImageFormat.Png); // try to close popup if (TryClosePopup()) continue; break; } if (IsGoodsWinPresent(image, out cordClose)) { l_Item.ClickSuccessful(true); //saveScanResultToFile(image, crdList, 0, collectDistanceY, "goodswin-ok.png"); bool isMilitary = false; //military units usually goes under this if (IsMilitaryWinPresent(image, out cordClose)) { isMilitary = true; if (Settings.DoMilitaryUnitsClicks) { ClickMilitaryItems(image); } else { UpdateStatus(LogType.JustMessage, Resource.MainForm_DoSupplyClicks_MilitaryClick_Disabled); TryClosePopup(); } } else { if (Settings.DoGoodsClicks) { InjectClickAtInvokeForced(Settings.GoodsItemCoords.X, Settings.GoodsItemCoords.Y); UpdateStatus(LogType.ClickProductionDone, num.ToString()); } else { UpdateStatus(LogType.JustMessage, Resource.MainForm_DoSupplyClicks_GoodsClick_Disabled); TryClosePopup(); } } BlockUntilPopupIs(false, Settings.WaitOnPopupInMillis); image.Dispose(); image = GetNewBrowserImageInvokeForced(); if (!IsPopupPresent(image)) { continue; } if (!isMilitary) UpdateStatus(LogType.JustMessage, Resource.MainForm_DoSupplyClicks_Error_PopupRemained_SelectingGoods); else UpdateStatus(LogType.JustMessage, Resource.MainForm_DoSupplyClicks_Error_PopupRemained_SelectingMilitary); image.Image.Save("goodsWindow.png", ImageFormat.Png); // try to close popup if (TryClosePopup()) continue; break; } UpdateStatus(LogType.JustMessage, string.Format(Resource.MainForm_DoSupplyClicks_NonProductionBuilding, num)); if (!TryClosePopup()) { return; } } } finally { // Save last good click for next one if (l_Item.LastClickWasSuccessful) { lastGoodX=l_Item.m_OffsetX; lastGoodY=l_Item.m_OffsetY; } ItemCollection.Instance.Items[l_CoordinateString] = l_Item; image.Dispose(); } } } UpdateStatus(LogType.ClickStop, null); }
private void DoCollectClicks(List<Coordinate> crdList) { ItemCollection.Item l_Item = new ItemCollection.Item(); UpdateStatus(LogType.ClickStart, null); // maximum number of items to click var maxToClick = crdList.Count > Settings.MaxItemsClickedInARow ? Settings.MaxItemsClickedInARow : crdList.Count; int maxClickedItems = Randomizer(maxToClick, Settings.RndPercentDontCollectInARow, false); if (maxClickedItems <= 0) maxClickedItems = 1; AddMessage(string.Format(Resource.MainForm_DoCollectClicks_Stealth_ClickingFirstXItems, maxClickedItems)); // hvatamo boje za proveru da li su kliknute kutije var image = GetNewBrowserImageInvokeForced(); var colors=new List<int>(); int num = 0; foreach (Coordinate coordinate in crdList) { colors.Add(image.GetPixelRgb(coordinate.X, coordinate.Y)); string l_CoordinateString = ItemCollection.MakePoint(coordinate.X,coordinate.Y); if (ItemCollection.Instance.Items.TryGetValue(l_CoordinateString, out l_Item)) { l_Item.CalculateNewTrialCoordinates(); InjectClickAtInvokeForced(coordinate.X + l_Item.m_OffsetX, coordinate.Y + l_Item.m_OffsetY); num++; UpdateStatus(LogType.ClickDone, num.ToString()); if (num >= maxClickedItems) break; Sleeping(200); } } image.Dispose(); Sleeping(500); // nova slika za proveru image = GetNewBrowserImageInvokeForced(); num = 0; foreach (Coordinate coordinate in crdList) { string l_CoordinateString = ItemCollection.MakePoint(coordinate.X, coordinate.Y); if (ItemCollection.Instance.Items.TryGetValue(l_CoordinateString, out l_Item)) { var colorNew = image.GetPixelRgb(coordinate.X, coordinate.Y); var colorOld = colors[num++]; // ako su boje iste onda click nije uspeo l_Item.ClickSuccessful(colorOld != colorNew); ItemCollection.Instance.Items[l_CoordinateString] = l_Item; } } image.Dispose(); UpdateStatus(LogType.ClickStop, null); }