public async Task Execute()
        {
            wowProcessInput.SetForegroundWindow();

            wowProcessInput.SetCursorPosition(new Point(25, 25));
            await Task.Delay(500);

            wowProcessInput.SetCursorPosition(new Point(50, 50));
            await Task.Delay(500);

            await Task.Delay(500);

            var p = new Point(120, 120);
            await wowProcessInput.LeftClickMouse(p);

            await Task.Delay(500);

            await wowProcessInput.RightClickMouse(p);

            await Task.Delay(500);

            await wowProcessInput.RightClickMouse(p);

            wowScreen.GetRectangle(out var rect);
            p = new Point(rect.Width / 3, rect.Height / 5);

            await Task.Delay(500);

            await wowProcessInput.RightClickMouse(p);

            await Task.Delay(500);

            await wowProcessInput.RightClickMouse(p);

            logger.LogInformation("Finished");
        }
        private async Task <bool> CheckForLoot(Point mousePosition, bool searchForMobs, bool ignoreMobs)
        {
            var inCombat = this.playerReader.PlayerBitValues.PlayerInCombat;

            Classification = CursorClassification.None;
            await Task.Delay(30);

            CursorClassifier.Classify(out var cls).Dispose();

            if (searchForMobs)
            {
                if (cls == CursorClassification.Kill)
                {
                    await Task.Delay(100);

                    CursorClassifier.Classify(out cls).Dispose();
                }
            }
            else
            {
                // found something, lets give the cursor a chance to update.
                if (cls == CursorClassification.Loot || cls == CursorClassification.Kill || cls == CursorClassification.Skin)
                {
                    await Task.Delay(200);

                    CursorClassifier.Classify(out cls).Dispose();
                }
            }

            if (cls == CursorClassification.Loot && !searchForMobs)
            {
                Log("Found: " + cls.ToString());
                await input.RightClickMouse(mousePosition);

                Classification = cls;
                await Task.Delay(500);
                await Wait(2000, inCombat);
            }

            if (cls == CursorClassification.Skin && !searchForMobs)
            {
                Log("Found: " + cls.ToString());
                await input.RightClickMouse(mousePosition);

                Classification = cls;
                await Task.Delay(1000);
                await Wait(6000, inCombat);
            }

            if (cls == CursorClassification.Kill && !ignoreMobs)
            {
                Log("Found: " + cls.ToString());
                await input.RightClickMouse(mousePosition);

                Classification = cls;
            }

            if (cls == CursorClassification.Loot || cls == CursorClassification.Skin)
            {
                lastLootFoundAt = mousePosition;
                logger.LogInformation($"Loot found at {this.lastLootFoundAt.X},{this.lastLootFoundAt.Y}");
            }

            if (searchForMobs)
            {
                return(cls == CursorClassification.Kill);
            }

            return(cls == CursorClassification.Loot || cls == CursorClassification.Skin || cls == CursorClassification.Kill);
        }