Deprecated: Assigning the return value of new by reference is deprecated in /home/virtwww/w_arthodynka-ru_c9984387/http/l2diary/classes/lib/external/DbSimple/Generic.php on line 113 Deprecated: Assigning the return value of new by reference is deprecated in /home/virtwww/w_arthodynka-ru_c9984387/http/l2diary/classes/lib/external/DbSimple/Generic.php on line 133 Deprecated: Assigning the return value of new by reference is deprecated in /home/virtwww/w_arthodynka-ru_c9984387/http/l2diary/classes/lib/external/DbSimple/Mysql.php on line 70 Warning: mb_substr() expects parameter 2 to be long, string given in /home/virtwww/w_arthodynka-ru_c9984387/http/l2diary/classes/hooks/HookAdminlogs.class.php on line 41 Lineage 2 бот своими руками (Часть 1) / Софт / l2diary.ru - lineage2-комьюнити

Lineage 2 бот своими руками (Часть 1)

Всем привет, хочу поддержать проект для «умных игроков» L2Diary и открыть блог «Софт», в котором будут публиковаться материалы для реально прошаренных геймеров.

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

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

Постановка задачи

В боте, в нашем случае правильней сказать пилоте, выбирается окно, клавиша и интервал, через который она будет нажиматься. Затем тыкаем на «Старт» и запускаем нажатие клавиши. По нажатию кнопки «Стоп» — пилот останавливается.

Пример: вам надо поставить автоассист по MA («master assist») в пати. В линейке вы создаете макрос из трех строк



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



Реализация

Нам понадобится:

— Visual Studio (ставьте самую последнюю версию, что найдете)
— начальные знания программирования
— умение думать, т. е. моск ;-)

Не зная изначально как решать задачу, сократим ее до минимума и будет разбираться по шагам. Поставим задачу: запуск нажатия клавиши F1 раз в 5 секунд в нужном нам окне.

Поищем в MSDN (справочник по Windows-кодингу) как же нам эмулировать нажатие клавиш: http://social.msdn.microsoft.com/Search/en-us?query=Simulate+Keyboard+Events. Первая ссылка — то что надо! Особенно радует подробный пример как посылать клавишы в окно калькулятора.

Проба пера

Попробуем для начала пример из статьи. Создаем проект C#, на форму ставим кнопку, по нажатию на которую будет посылаться нажатие клавиш в окно калькулятора.

Два раза тыкаем на кнопку, вставляем код из примера:


    // Если у вас виста - CalcFrame замените на SciCalc
    IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator");

    if (calculatorHandle == IntPtr.Zero)
    {
        MessageBox.Show("Calculator is not running.");
        return;
    }

    SetForegroundWindow(calculatorHandle);
    
    SendKeys.SendWait("111");
    SendKeys.SendWait("*");
    SendKeys.SendWait("11");
    SendKeys.SendWait("=");

Функции, которые мы испоьзуем тут:

FindWindow — возвращает дескриптор окна по названию класса или заголовку окна.
SetForegroundWindow — устанавливаем активное окно.
SendKeys.SendWait — посылает в активное окно нажатие клавиш, заданное строкой в первом параметре.

Выше строчки private void button1_Click(object sender, EventArgs e) вставляем:


    [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
    public static extern IntPtr FindWindow(string lpClassName,
		string lpWindowName);

    [DllImport("USER32.DLL")]
    public static extern bool SetForegroundWindow(IntPtr hWnd);


Запускаем проект по Ctrl + F5, запускаем калькулятор и нажимаем на кнопку. Если в калькуляторе прошла операция умножения — значит все работает.

Теперь нам надо просто поменять окно калькулятора на окно линейки, посылать нажатие F1 вместо единичек, знака умножения и что там еще посылается в примере и будет нам радость ;-)

Но все далеко не так просто, и об этом — в следующей статье.
  • +1
  • 11 сентября 2010, 00:22
  • proger

Комментарии (4)

RSS свернуть / развернуть
+
0
Спасибо.
avatar

sl44mrq

  • 11 сентября 2010, 22:58
комментарий был удален

+
0
чтобы использовать DllImport необходимо добавить в начало кода пространство имен:
using System.Runtime.InteropServices;
avatar

1ff1eeff

  • 12 августа 2011, 03:19

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.