コード例 #1
0
ファイル: MainForm.cs プロジェクト: Rassilion/Denemeler
        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);
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: Rassilion/Denemeler
        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);
        }