1. Привет Гость, в нашем магазине проходит акция! Смотри эту тему.
    Так же цена на VIP снижена!

гайд как создать автошот в crossfire

Тема в разделе "Гайды для CrossFire", создана пользователем Фунтик, 5 окт 2012.

  1. Оффлайн

    Фунтик

    485
    590
    97
    гайд как создать автошот в crossfire
    [​IMG]
    Что нам понадобиться для этого?

    1)Visual Studio 2010 Express – бесплатная IDE для программирования

    2)Знание си шарпа.

    3)Мозг. Где скачать не знаю.

    Итак преступим.


    Для начала нам нужно импортировать нужные WinApi функции:
    HTML:
        [DllImport("user32.dll")]
        static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData,
        int dwExtraInfo);
     
        [Flags]
          public enum MouseEventFlags : uint
          {
              LEFTDOWN = 0x00000002,
              LEFTUP = 0x00000004,
              MIDDLEDOWN = 0x00000020,
              MIDDLEUP = 0x00000040,
              MOVE = 0x00000001,
              ABSOLUTE = 0x00008000,
              RIGHTDOWN = 0x00000008,
              RIGHTUP = 0x00000010,
              WHEEL = 0x00000800,
              XDOWN = 0x00000080,
              XUP = 0x00000100
          }
    

    Функция mouse_event эмулирует движение и клики мышкой. Также мы определили перечисление – виды событий мышки, такие как движение, шелкчок ЛКМ и ПКМ, прокрутка колесика и т.д. Теперь пример, вот такой будет выглядеть щелчок ЛКМ:

    HTML:
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
    Вызываем функцию, в первом параметре передаем событие нажатие ЛКМ, остальные параметры оставляем в нуле, т.к. они нам не нужны и вызываем вторую функцию с параметром отпустить ЛКМ. Если между функциями поставить паузу – то можно будет добиться эффекта “зажимщика с бизоном”.

    Этой функцие можно спокойно сделать режим снайпера или так называем “фастзум” – нажимает правую кнопку мыши, пауза, нажимаем левую, нажимаем правую:

    HTML:
        mouse_event((int)(MouseEventFlags.RIGHTDOWN), 0, 0, 0, 0);
     
        Thread.Sleep(10);
        mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
        Thread.Sleep(10);
        mouse_event((int)(MouseEventFlags.RIGHTDOWN), 0, 0, 0, 0);
        mouse_event((int)(MouseEventFlags.RIGHTUP), 0, 0, 0, 0);
    Комбинируя разные вызовы – можете подобрать оптимальные значения для разных видов оружия. Идем дальше, чтобы задать смещение перед выстрелом или после, нужно использовать второй и третий параметр функции и флаг перемещения как Х и Y соответственно, смещение ведется от текущей позиции:


    С этим разобрались, теперь нужно получить окно КФ, чтобы с ним работать, для начала нужно это:

    HTML:
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
    
    Импортируем две функции, одна для поиска окна по его заголовку, другая для получения размеров окна. Как их использовать? Вот так:
    HTML:
    [StructLayout(LayoutKind.Sequential)]
            public struct RECT
            {
                public int Left;        // x position of upper-left corner
                public int Top;        // y position of upper-left corner
                public int Right;      // x position of lower-right corner
                public int Bottom;      // y position of lower-right corner
            }
    const string CF_WINDOW_NAME = "CrossFire";
    IntPtr hwnd = FindWindowByCaption(IntPtr.Zero, CF_WINDOW_NAME);
    RECT rect = new RECT();
    //получаем размеры окна
    GetWindowRect(hwnd, out rect));
    Окно с размерами мы получили, теперь давайте разберемся как нам сделать сам автовыстрел:

    1)Снимаем скриншот окна.

    2)В середине скриншота ищем определенный цвет пикселя.

    3)Если нашли – стреляем.

    Чтобы снять скриншот – нам нужно создать изображение в памяти ,куда мы его будем записывать, сделаем его 50 на 50 пикселей, чтобы нам не много перебирать было:

    HTML:
    Bitmap bmp = new Bitmap(50,50);
    Graphics graph = Graphics.FromImage(bmp);
    Далее снимаем скриншот, указав снятия с середины нашего окна:
    HTML:
    graph.CopyFromScreen((rect.Right - rect.Left) / 2-bmp.Width/2, (rect.Bottom - rect.Top) / 2, 0, 0, new System.Drawing.Size(bmp.Width, bmp.Height));
    Все, скриншот готов, осталось лишь перебрать пиксели и найти нужный цвет

    Привожу полный алгоритм автошотера:
    HTML:
    IntPtr hwnd = FindWindowByCaption(IntPtr.Zero, CF_WINDOW_NAME);
                    if (hwnd.ToInt32()!=0)
                    {
     
                        Bitmap bmp = new Bitmap(50,50);
                        Graphics graph = Graphics.FromImage(bmp);
     
                            try
                            {
                                  RECT rect = new RECT();
                                    //получаем размеры окна
     
                                    if (!GetWindowRect(hwnd, out rect))
                                    {
                                        return;
                                    }
                                  bool find = false;
     
                                    graph.CopyFromScreen((rect.Right - rect.Left) / 2-bmp.Width/2, (rect.Bottom - rect.Top) / 2, 0, 0, new System.Drawing.Size(bmp.Width, bmp.Height));
                                    for (int x = 0; x < bmp.Width; x++)
                                    {
     
                                        for (int y = bmp.Height-1; y>=0; y--)
                                        {
                                            Color c=bmp.GetPixel(x,y);
     
                                            if ((c.R == 242 && c.G == 74 && c.B == 23) )//нашли нужный цвет
                                            {
                                                if (checkBoxSniper.Checked)//режим снайпера - перед выстрелом нажимаем ПКМ, стреляем раз, убираем кнопку
                                                {
                                                    mouse_event((int)(MouseEventFlags.RIGHTDOWN), 0, 0, 0, 0);
     
                                                    Thread.Sleep(10);
                                                    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
                                                    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
                                                    Thread.Sleep(10);
                                                    mouse_event((int)(MouseEventFlags.RIGHTDOWN), 0, 0, 0, 0);
                                                    mouse_event((int)(MouseEventFlags.RIGHTUP), 0, 0, 0, 0);
     
                                                }
                                                else//режим обычной стрельбы
                                                {
                                                    mouse_event((int)(MouseEventFlags.MOVE), 0, (int)numericUpDownYoffset.Value, 0, 0);//смещение
                                                    for (int i = 0; i < shoot_count; i++)
                                                    {
     
                                                        mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
                                                        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
     
                                                        Thread.Sleep(pause_between_shoots);//пауза между выстрелами, поставьте свое значение
                                                    }
                                                    find = true;
                                                    mouse_event((int)(MouseEventFlags.MOVE), 0, (int)numericUpDownYoffset.Value * (-1), 0, 0);//смещение обратно
                                                }
                                                break;
     
                                            }
                                        }
                                        if (find)//если нашли выходим из цикла
                                        {
     
                                            break;
                                        }
                                    }
    }

    Это код можно крутить в цикле или в таймере. Не забудьте подключить необходимые пространства имен:
    HTML:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.IO;
    using System.Threading;
    using System.Runtime.InteropServices;
     
  2.  
  3. Оффлайн

    maxim2001

    8
    1
    2
  4. Оффлайн

    jakyzi

    3
    0
    1
    добавьте в автошопере без отдачи и валхак плизLove
     
  5. кто чо понел как делать лично я нет обьясните плиз
     

Поделиться этой страницей

Уважаемый пользователь!

Мы обнаружили, что вы блокируете показ рекламы на нашем сайте.

Просим внести его в список исключения или отключить AdBlock.

Наши материалы предоставляются БЕСПЛАТНО и единственным доходом является реклама.

Спасибо за понимание!