Перейти к содержанию

исходник автошота c#


Рекомендуемые сообщения

1 час назад, Xipho сказал:

Чтобы определить координаты пикселов нужного цвета, тебе нужно в цикле считывать каждый пиксель области, и если пиксель равен нужному цвету, заносить его в массив или же сразу в него "стрелять". Вообще, идея поиска нужного пространства по цвету пиксела - весьма слабопроизводительна, если нужно найти объект на экране, лучше искать его в памяти игры. Точнее, искать его координаты, которые затем конвертировать в экранные, чтобы дать "мышке" знать, куда надо кликнуть.

после нахождения процесса и всей взятой информации с окна игры, на выбор пользователю будет даваться 3 варианта режима работы программы активируемые клавишами, при активации любой из них будет запускаться цикл в котором непрерывно будет происходить скан пикселей в заданной области и при нахождении нужного цвета будет происходить системное нажатие ЛКМ(имитация). Данный код выше это набросок, он без цикла и пока просто используется разово для проверки на работоспособность, естественно он еще будет доработан и доведён до ума! Вопрос в другом, как мне определить нужную область? Я могу сделать так - зайти в игру,  навести прицел на врага и сделать скриншот. Далее уже на компе иметь скриншот с нужным мне цветом и визуально видеть область где должен происходить скан пикселей, но как мне конкретно узнать координаты этой области?

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, ANDREY94 сказал:

как мне конкретно узнать координаты этой области?

Области , где сканировать ? Могу предположить , что цель(прицел) находится прям в середине экрана игры (как в стрелялках) , определить можно так : поделив ширину и высоту экрана по полом и считать там пиксель(пиксели). Так же можно поставить кружок прямо в прицел и так ты будешь видеть визуально , откуда будет считываться область пикселей

Изменено пользователем IzerodayI
Ссылка на комментарий
Поделиться на другие сайты

48 минут назад, IzerodayI сказал:

Области , где сканировать ? Могу предположить , что цель(прицел) находится прям в середине экрана игры (как в стрелялках) , определить можно так : поделив ширину и высоту экрана по полом и считать там пиксель(пиксели). Так же можно поставить кружок прямо в прицел и так ты будешь видеть визуально , откуда будет считываться область пикселей

Не совсем всё так просто, прицел при наведении на врага цвет не меняет, исходя из этого понимает что центр нам не нужен. Но при наведении на того же самого врага, появляется его имя красным цветом, оно находится ниже центра - вон скрин:

39313461be35.png

видно плохо на скрине, но видно, что при наведении на любую область врага чуть пониже центра высвечивается его ник, вот он то и нужен!

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, IzerodayI сказал:

а на разном расстоянии отображается ник на разном уровне от прицела ? 

вроде бы всегда одинаково, и даже размер тот же. я это завтра проверю и точно скажу.

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, ANDREY94 сказал:

всегда одинаково

Если это так , то прибавь несколько пикселей от прицела (как определить : методом тыка =) ) и исследуй малую часть прямоугольника

Спойлер

80ff52f9fd10.jpg

но я сомневаюсь , что расстояние L статично

Ссылка на комментарий
Поделиться на другие сайты

В 19.02.2018 в 15:25, Xipho сказал:

Их сравнивают как обычные числа. К примеру, приведенный выше цвет в hex (16-ричном) равен AB3B2E (в памяти будет "перевернут" 2E3BAB). Значит, если тебе нужно выполнить какие-то действия, если считанный пиксель будет такого цвета, тебе нужно сделать следующее:


if (pixels[i, j] == 0xAB3B2E) {
  // TODO: Тут выполнить действия, которые нужно
}

 

У меня получается какая-то муть.... 

значит, я смог примитивно узнать как примерно определить пиксел. Взял верхний правый угол(около)  примерно вот так:

GetPixelsColor(455, 549, out pixels);

потом в паинте залил лист тем самым цветом который должен искать наш код и сохранил картинку.

далее открыл её на весь экран и запустил типо - автошот*.... он по нажатию на клавишу должен быстренько 

определить цвет того пикселя и дать звуковой сигнал, если всё успешно.... раз попробовал, два, три.... ничего....

не определяет цвет....

Потом попробовал сделать написать через else - если цвет найден то звуковой сигнал, если нет то сообщение "ошибка".

Спойлер

 


private void button1_Click_1(object sender, EventArgs e)
        {
            uint[,] pixels = null;
            GetPixelsColor(455, 549, out pixels);
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 2; j++)
                {byte R, G, B;GetColorFromUint(pixels[i, j], out R, out G, out B);//if (R != 171 || G != 59 || B != 46)
                    if (R == 171 && G == 59 && B == 46)
                        //if (pixels[i, j] == 0xAB3B2E)
                        {
                            MessageBox.Show("error");
                        }
                        else 
                        {
                            Console.Beep(500, 500);
                        }
                }
        }

определения цвета в 16-бит не работает, вообще не как не распределяет цвета.

 

А вот так заработал:

Спойлер

 


 private void button1_Click_1(object sender, EventArgs e)
        {
            //CheckStrGame();
            uint[,] pixels = null;
            GetPixelsColor(455, 549, out pixels);
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 2; j++)
                {byte R, G, B;GetColorFromUint(pixels[i, j], out R, out G, out B);//if (R != 171 || G != 59 || B != 46)
                    if (R == 171 && G == 59 && B == 46)
                        //if (pixels[i, j] == 0xAB3B2E)
                        {
                            Console.Beep(500, 500);
                        }
                        else 
                        { 
                            MessageBox.Show("error");
                        }
                }
        }

Теперь когда цвет видит вверхнем правом углу то срабатывает звуковой сигнал, а когда картинка свернута и цвет другой - то выдает сообщение... но правда как то криво, либо пять сигналов, либо 5 сообщений вместо должного одного!!!! 

Ссылка на комментарий
Поделиться на другие сайты

19 часов назад, IzerodayI сказал:

Если это так , то прибавь несколько пикселей от прицела (как определить : методом тыка =) ) и исследуй малую часть прямоугольника

  Показать контент

80ff52f9fd10.jpg

но я сомневаюсь , что расстояние L статично

Вот видео - наглядный пример. Не меняется вообще 

Спойлер

 

 

Ссылка на комментарий
Поделиться на другие сайты

Ты приводишь постоянно один и тот же кусок кода, но такое ощущение, что ты не понимаешь, что именно делает этот кусок кода. Пройдись построчно, распиши, что делает каждая строка, так легче будет вникнуть.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Xipho сказал:

Ты приводишь постоянно один и тот же кусок кода, но такое ощущение, что ты не понимаешь, что именно делает этот кусок кода. Пройдись построчно, распиши, что делает каждая строка, так легче будет вникнуть.

Я уже так делал, могу расписать что делает каждая строчка... 

Ссылка на комментарий
Поделиться на другие сайты

как то очень тупо работает, скан происходит очень долго

Спойлер

 private void timer2_Tick(object sender, EventArgs e)
        {
            //CheckStrGame();
            uint[,] pixels = null;
            GetPixelsColor(937, 585, out pixels); GetPixelsColor(938, 585, out pixels); GetPixelsColor(939, 585, out pixels); GetPixelsColor(940, 585, out pixels); GetPixelsColor(941, 585, out pixels); GetPixelsColor(942, 585, out pixels); GetPixelsColor(943, 585, out pixels); GetPixelsColor(944, 585, out pixels); GetPixelsColor(945, 585, out pixels); GetPixelsColor(946, 585, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels);
            GetPixelsColor(937, 586, out pixels); GetPixelsColor(938, 586, out pixels); GetPixelsColor(939, 586, out pixels); GetPixelsColor(940, 586, out pixels); GetPixelsColor(941, 586, out pixels); GetPixelsColor(942, 586, out pixels); GetPixelsColor(943, 586, out pixels); GetPixelsColor(944, 586, out pixels); GetPixelsColor(945, 586, out pixels); GetPixelsColor(946, 586, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels);
            GetPixelsColor(937, 587, out pixels); GetPixelsColor(938, 587, out pixels); GetPixelsColor(939, 587, out pixels); GetPixelsColor(940, 587, out pixels); GetPixelsColor(941, 587, out pixels); GetPixelsColor(942, 587, out pixels); GetPixelsColor(943, 587, out pixels); GetPixelsColor(944, 587, out pixels); GetPixelsColor(945, 587, out pixels); GetPixelsColor(946, 587, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels);
            GetPixelsColor(937, 588, out pixels); GetPixelsColor(938, 588, out pixels); GetPixelsColor(939, 588, out pixels); GetPixelsColor(940, 588, out pixels); GetPixelsColor(941, 588, out pixels); GetPixelsColor(942, 588, out pixels); GetPixelsColor(943, 588, out pixels); GetPixelsColor(944, 588, out pixels); GetPixelsColor(945, 588, out pixels); GetPixelsColor(946, 588, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels);
            GetPixelsColor(937, 589, out pixels); GetPixelsColor(938, 589, out pixels); GetPixelsColor(939, 589, out pixels); GetPixelsColor(940, 589, out pixels); GetPixelsColor(941, 589, out pixels); GetPixelsColor(942, 589, out pixels); GetPixelsColor(943, 589, out pixels); GetPixelsColor(944, 589, out pixels); GetPixelsColor(945, 589, out pixels); GetPixelsColor(946, 589, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels);
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 2; j++)
                {
                    byte R, G, B; GetColorFromUint(pixels[i, j], out R, out G, out B);
                    if (R == 171 && G == 59 && B == 46)
                    {
                        Console.Beep(500, 500);
                    }
                    else
                    {
                        //MessageBox.Show("error");
                    }
                }

        }

 

 

Ссылка на комментарий
Поделиться на другие сайты

У тебя в коде второй параметр у функции "GetPixelsColor" повторяется везде?! 

Идеи по оптимизации такие :

1) доделать грамотно код

2) запилить многопоточность 

Ресурсы системы будут больше тратится , но скорость повысится.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, ANDREY94 сказал:

скан происходит очень долго

Попробуй избавиться от функции GetColorFromUint, возможно, поможет слегка ускорить процесс.

Ссылка на комментарий
Поделиться на другие сайты

когда цикл начинается, идет пробежка по каждому указанному пикселю, уходит на это до 20-30 секунд... программа на это время "подвисает" потом выдает результат в виде 3-5 звуковых сигналов и опять зависает на 30 секунд... Очень долго сканируется область даже при том, что она всего-то 5 строчек в длину по 30 пикселей(должна быть) у меня и того меньше - 5 строчек по 10п(!)....

Ссылка на комментарий
Поделиться на другие сайты

сдается ме что это дохлый номер, в игре получится так что, при неведении на врага выстрел произойдет в течении минуты тогда когда он уже будет не нужен...

Ссылка на комментарий
Поделиться на другие сайты

58 минут назад, ANDREY94 сказал:

сдается ме что это дохлый номер

Воот. Если бы я тебе это сказал с самого начала, ты бы не поверил. А так - сам убедился. Это раз. А во-вторых, я пропустил, а ты игнорируешь предупреждения по поводу правил нашего форума. Код нужно оборачивать в спойлер.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Xipho сказал:

Воот. Если бы я тебе это сказал с самого начала, ты бы не поверил. А так - сам убедился. Это раз. А во-вторых, я пропустил, а ты игнорируешь предупреждения по поводу правил нашего форума. Код нужно оборачивать в спойлер.

Так в спойлер большой код вроде, а это маленький кусочек

Ссылка на комментарий
Поделиться на другие сайты

25 минут назад, ANDREY94 сказал:

Так в спойлер большой код вроде, а это маленький кусочек

Читай внимательно правила:

Кроме того, если фрагмент кода достаточно большой (более 10 строк кода), то его необходимо также обернуть тэгом спойлера (скрытый текст).

 

Я сейчас отредактировал твои посты, в следующий раз - предупреждение.

 

Ссылка на комментарий
Поделиться на другие сайты

В ‎20‎.‎02‎.‎2018 в 14:59, Xipho сказал:

Попробуй избавиться от функции GetColorFromUint, возможно, поможет слегка ускорить процесс.

Так она же определяет цвет пикселя

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, ANDREY94 сказал:

Так она же определяет цвет пикселя

А говоришь, что точно знаешь, что делает каждая строчка кода. Так вот, эта функция не определяет цвет пикселя. Эта функция разбивает уже определенный цвет на составляющие. Для сравнения полученного цвета пикселя с эталонным данная операция не нужна. Достаточно заранее перевести эталонный цвет в целое число. Это умеет любой графический редактор (кроме пейнта виндового). Впрочем, хоть я и не вижу код этой функции, могу предположить, что как раз она выполняется быстро, ведь скорее всего там задействованы побитовые сдвиги. В любом случае, тройное сравнение будет медленнее, чем единственное.

Ссылка на комментарий
Поделиться на другие сайты

38 минут назад, Xipho сказал:

А говоришь, что точно знаешь, что делает каждая строчка кода. Так вот, эта функция не определяет цвет пикселя. Эта функция разбивает уже определенный цвет на составляющие. Для сравнения полученного цвета пикселя с эталонным данная операция не нужна. Достаточно заранее перевести эталонный цвет в целое число. Это умеет любой графический редактор (кроме пейнта виндового). Впрочем, хоть я и не вижу код этой функции, могу предположить, что как раз она выполняется быстро, ведь скорее всего там задействованы побитовые сдвиги. В любом случае, тройное сравнение будет медленнее, чем единственное.

Давай попробуем... 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.