русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Макросы с «нуля» для «совсем чайников»


Дата добавления: 2015-07-23; просмотров: 49109; Нарушение авторских прав


Вот и пришло время, когда нубство и лень других уже совсем достали. Очередная инструкция призвана помочь в познании самого «дзена» макросов. Давайте же всё разберём с самого начала.

 

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

Многие тычут пальцами на читерство из-за использования макросов. Ну это смотря где. Разберёмся. Мошенничество в сетевых играх (на игровом сленге чи́терство, от англ. to cheat — плутовать, мухлевать, жульничать) — применение специально созданных или модифицированных программ или оборудования в сетевых играх для получения неоспоримого преимущества над другими игроками (наша Википедия). Исходя из этого определения – мы читеры относительно оборудования. Но это тоже спорный вопрос. К программному определению мы не относимся: макрос не является программой; макрос не вносит изменения в файлы игры. В той же Вики есть предпосылка на no recoil, к которой мы и относимся в большей степени. НО! Убрать отдачу полностью с помощью макросов невозможно, а, значит, к читерству, как таковому, это не относится. Играть с макросами не всегда выгодно. В основном, в шутерах макрос пишут на определённый режим использования определённого оружия, что даёт нам преимущество стрелять более точно, скажем, только в прицел и только сидя, в других режимах простой и не продуманный макрос, коих в интернете сейчас пруд-пруди, будет только мешать. Продумать макрос полностью будет нелегко, существует много ситуаций, которые предугадать просто нереально. Помимо этого должно быть время на включение, переключение и выключение макроса, которых может быть много и на каждый режим свой макрос, а ситуация складывается не в нашу пользу и мы просто не успеваем переключиться. Так что здесь ещё предстоит много разбираться, чит это, или не чит вовсе. Тем более свет не сошелся клином на использовании макросов для подавления отдачи, существует масса полезностей и интересностей в макросах.



Для тех, кто совсем-совсем с «нуля», советую прочитать прошлые инструкции по адресу http://vk.com/topic-54726107_30303191 в такой последовательности:

- Гайд по вкладкам программы Bloody 5;

- Гайд по возможностям ядер мыши;

- Bloody-HeadShot-рус;

- Burst, Strafe, Machine;

- Определение баллистики для правильной настройки Хедшота;

- Bloody-Oscar Macro Manual-РУС;

- FAQ и основные ошибки при написании макросов.

 

Я повторно описывать все органы управления не буду, всё есть в перечисленных инструкциях. Здесь мы рассматриваем только общие начальные положения и понятия.

Для общего понимания как писать макросы, с чего начинать, и тд, нужно воображение. Самая распространенная ошибка молодых «писателей» в том, что они не понимают, как работает мышь. Внутри мыши есть микроконтроллер и интерпретатор команд. Если мы возьмём простую мышь, то там кнопки «железные», то есть кнопку нажали, и кодированный сигнал прямо от кнопки поступил в компьютер для обработки дальнейших взаимодействий. В продвинутых мышках кнопки «софтовые», то есть встроенный в мышь контроллер видит, что мы нажали кнопку 1, считывает свои записи интерпретации с собственной памяти, и интерпретирует в нужную команду на выходе, а комп, получив сигнал, понимает, что была нажата «железная» ЛКМ (левая кнопка мыши, для тех, кто не понял). У контроллера нет понятия ЛКМ или ПКМ, у него есть понятия «датчик 1», «датчик 2», и тд. Это основа этих мышек, это надо запомнить и вбить себе глубоко в голову. А молодняк это упускает, думает, что раз нажал на мышке ЛКМ, то он и в комп попадёт как ЛКМ. А вот нет. Если в макросе указать только смещение мыши вправо и назначить на эту кнопку, то в итоге мы получим только смещение вправо, а не ЛКМ и смещение вправо, хоть, по сути, и была нажата ЛКМ.

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

 

Любое действие с нажатием или отпусканием всегда связано с задержками. Задержка – это время простоя до выполнения следующей операции. Всё не происходит мгновенно. Замедлите свои движения и увидите действия для написания простого макроса нажатия кнопки (пусть будет ЛКМ): медлеено опускаем палец на кнопку (это первая задержка) пока не произойдёт щелчёк (срабатывание на нажатие), медленно отпускаем кнопку (вторая задержка) пока на некой высоте отрыва не произойдёт второй щелчёк (срабатывание на отпускание). Вот и первый макрос готов. Единственное – если макрос будет повторяться, то количество задержек (у нас их 2) должно быть равно на протяжении повторов. Если должно повторяться 4 раза, то задержек должно быть 2*4=8. При одиночном исполнении можно пропустить первую задержку. В нашем случае первую задержку можно поставить в конце макроса, тогда при повторении количество задержек будет правильным, и срабатывание будет происходить сразу, а не через время на задержку. На практике это выглядит так:

 

 

Нажатие на одну лишь кнопку создаст такой макрос. Кнопка выделена, величина задержки тоже. То есть, изменив задержку в строке 2 на большее значение, мы изменим время, которое мы отводим на удержание кнопки в нажатом положении, а в строке 4 – время между отпусканием и следующей операцией (пусть, повторное нажатие). Если мы хотим, чтобы кнопка нажималась кратковременно раз в секунду, то следует изменить задержку в строке 4, изменив в надстройке Time Unit c ms (миллисекунды) на Sec (секунды) и значение с 64 на 1, задержку в строке 2 предполагается оставить 64 миллисекунды. Нажатие на стрелочку в чекбоксе таймюнита добавит задерку с указанными параметрами, красный крестик в тулбоксе удалит выделенную строку. Все органы управления есть в инструкции Bloody-Oscar Macro Manual-РУС с примерами использования и начальными кодами. Следует помнить, что лишние задержки вреда не принесут, а вот отсутствие задержки может привести к «не срабатыванию» команды или кнопки на деле. Некоторые онлайн-игры не воспринимают действия с задержками менее 50мс, минимальное значение подбирается опытным путём. Если чувствуется, что действия, прописанные в макросе, проскакивают – стоит перепроверить наличие и величину задержек.

Следует отметить, что этот макрос не зависит от того, нажали вы кнопку или зажали, он отработает только то, что в нём написано. Можно изменить режим повтора с помощью бокса . Если выбрать вторую иконку, то макрос будет кликать на ЛКМ, пока зажата кнопка, на которую мы назначили этот макрос. Если выбрать третюю иконку, то при первом клике макрос начнёт кликать на ЛКМ и закончит при повторном нажатии на назначенную кнопку. Для того, чтобы сэмулировать действия стандартной работы ЛКМ, нужно между 2 и 3 строкой добавить условие: если кнопка 1 нажата, то перейти к строке 2. Если мы отпустим кнопку – условие проигнорируется и перейдёт к следующей строке. То есть строки макроса отрабатываются в таком порядке: при удержании кнопки 123(232323…); при отпускании 123456. Если мы нажали, немного подержали и отпустили, то 123(23232)3456. В скобках описано действие макроса во время удержания кнопки 1 в зажатом положении. По простому, мы удерживаем задержку в цикле.

 

Для добавления в макрос нажатий клавиатуры ткните на Use Keyboard To Input, выпадет экранная клавиатура для ввода с помощью мышки, или просто нажимайте на кнопки своей клавиатуры. Учтите, там тоже должны быть и нажатия, и отпускания, и задержки. Отсутствие в коде одного из компонентов может привести к нежелательным результатам в игре, лучше несколько раз проверить код на наличие ошибок.

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

 

Едем дальше.

Большинство не понимают, как прописать отдачу. Пишут, что не понимают, что такое оси Х и У, не понимают, что значит абсолютное и относительное смещение.

Оси. Есть простая и наглядная картинка-пособие:

 

 

Каждая пуля попадает с каждым выстрелом всё выше и немного смещается, пусть, вправо. Для подавления отдачи нужно каждую пулю сместить в обратном направлении относительно предыдущей. По правилам мы это дело подавляем сдвигом мыши вниз и совсем немного влево, обычно с постоянной скоростью. Всё логично: тянет вправо – противодействие будет влево; тянет вверх – противодействие будет вниз. Как правильно отобразить это чудо-юдо в макросах? Да всё просто. Во-первых – есть замечательная инструкция по баллистике, которую, несомненно, нужно прочитать и вникнуть. Просто прочитать не прокатит, это нужно понимать, хотя понимать там особо нечего. Во-вторых – уже писал, смотрим на наши действия с кнопками мыши. Если на пистолете мы постоянно кликаем при каждом выстреле, то с автоматом – зажали, и понеслась душа в пятки. От этого зависит макрос, а именно, каким образом он будет написан. Вернёмся сюда немного позже.

Смещение. Как помним с написанного выше, есть абсолютное и относительное (релативное) смещение. Координаты тоже есть абсолютные и относительные. Адрес вашего проживания – есть абсолютные и неизменные ваши координаты. А вот «от меня до дома моего друга 2 литра пива пешком» это относительные координаты. То есть, куда именно поместить стрелку или курсор – абсолютные координаты, а на сколько я передвинул мышь для достижения цели – относительные. Ещё проще – любой ярлык на рабочем столе имеет свои абсолютные координаты, как и пункты меню в игре, а «вон тот чувак в кепке у меня на прицеле» бегает по относительным координатам, потому что бегает он относительно меня, так же как и патроны убегают друг от друга по стенке. Недаром в настройках Хедшота повесили только относительные координаты.

Поехали дальше.

У оружия между выстрелами есть промежуток времени. Этот параметр нам важен, по нему мы должны указывать в макросе через какие промежутки времени опускать прицельную точку. Если параметр будет высчитан неверно и будет превышать допустимое значение, то будет сильный разброс. К примеру, у меня пушка стреляет 1 раз в секунду, а по параметру я насчитал задержку в 2 секунды. Получим: начальная точка прицела 0х, первый выстрел, дуло улетело вверх на отметку 1х, второй выстрел, дуло улетело на отметку 2х, закончилось время задержки для подавления и дуло вернуло на одну отметку вниз – 1х, и тд. То есть, неверно выставленная задержка в нашем варианте уменьшит отдачу вдвое, но всёравно будет тянуть вверх через 1 выстрел. Можно, конечно, нивелировать, выставив смещение побольше, но бросать на отметку 1х будет раз каждые 2 выстрела. Второй случай – если насчитали задержку в 2 раза чаще положенного, тобишь 0,5 секунды. В этом случае будет дуло утягивать вниз 2 раза за 1 выстрел, и с каждым разом дуло будет опускаться всё ниже и ниже, что тоже можно нивелировать смещением, уменьшив в его в 2 раза. Это всё хорошо с кратными значениями, которые на практике не случаются, вот тогда начинается неразбериха. Чтобы этого не происходило – считаем параметр задержки по формуле х=60000/скорострельность. Параметр скорострельности ищем для каждой игры и каждого оружия либо на сайте игры, либо в самой игре в характеристиках оружия, значение может обзываться RPM. Замечу, что полученное по формуле число стоит округлять до целого значения таким образом: 100,4=100; 100,6=101; 100,5=100 и 101.В последнем варианте проще указать для выстрелов №1,3,5,7,9…=100мс, для №2,4,6,8,10…=101мс. То же самое можно просчитать и со значением 100,4 – плюсуем 0,4 до получения целого числа 2=0,4*5, что даёт нам на каждом пятом патроне надбавку 2мс, то есть 102мс. Получим 100/100/100/100/102/100… Или разбиваем дальше и получаем 100/100/101/100/101/100/100/101/100/101/100 для каждого выстрела, но это всё для точности. На деле намного проще и быстрее значение округлить до целого и использовать его на протяжении всей шкалы неизменным. К примеру, скорострельность оружия в характеристике RPM=760, задержка будет 60000/760=78,9мс, округляем до 79мс. Это и есть время между выстрелами.

Впринципе, со скорострельностью всё понятно. А вот со смещением – это только опытным путём. Что же делать с полученными значениями и чего куда вбивать? Начнём с Хедшота. И тут нас ждёт первый камень преткновения, основных режимов целых 3. Какой из них выбрать и какая между ними разница рассказано в инструкции Burst, Strafe, Machine, а органы управления и основные настройки в инструкции Bloody-HeadShot-рус. Так как расчёт проводился под автомат, то его и дальше будем использовать. И так, имеем скорострельность 760RPM, высчитанное по этому значению значение задержки 79мс, дополнительно нужно разрешение монитора, пусть 1024*768. Для автомата найлучший режим – C-Machine. Открываем ПО и на 3й прошивке тыкаем в Хедшот (обведено).

 

Попадаем менюшку, указываем имя, разрешение монитора.

 

 

Вот и наши поля с осями Х, У, и место для высчитанной задержки. И снова вопрос, чего вбивать? А хз. Советую начать с 10 по вертикали, горизонталь не трогаем, количество настроек 1. Вот так:

 

 

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

 

 

Для демонстрации назначения я выбрал произвольный макрос из набора уже готовых. Находим свой макрос, тыкаем на стрелочку напротив в графе CtrlKey, выбираем к какой кнопке присвоить макрос (в нашем случае на N), и жмём Apply для загрузки в мышь. Заходим в игру, становимся напротив стенки, тыкаем на N и макрос присваивается на ЛКМ. Если этот макрос вы назначили на 3 (допустим, промахнулись или на N уже стоит нужный макрос), то тыкаем 3. Пробуем ЛКМ и смотрим куда ползут пули. Если вверх, то параметр У=-10 увеличиваем до -12, если вниз – уменьшаем до -8. И здесь я набрёл на подводный камень, так заботливо подкинутый разрабами игрушки. Я опирался только на характеристику оружия непосредственно с игры, но, полазив на форумах игры, нашел полное описание. Оказалось, у оружия первый выстрел идёт с отдачей в 1,5 раза большей, чем все остальные выстрелы. Вот ОНО ЧТО!!! ОК. Не проблема, жаль потраченное время на изучение форумов, и почему же я не увидел разницу на стенке… Наверное текстуры… Хрен с ним, пересчитаем. Как вы должны были понять, у моего оружия появился ещё один параметр отдачи. Добавляем. Получаем.

Все изменения обведены. Как видите, добавлена ещё одна пуля, добавили пересчитанное значение 1,5х(-10)=(-15) в начало. Появился новый параметр – Цикл, он установлен на повторение пуль от 2 до 2 из-за того, что первый параметр подавления встречается только раз, это первый выстрел, мне его в повторении учитывать не нужно. Стрелять будет по номерам №1,2,2,2,2…. Пуля №2 в цикле. Снова сохраняем, назначаем (проверяем назначение), снова Apply, и на полигон опробовать макрос. Вот, теперь другое дело. Но что-то с 4й пули сползает вниз, да и в сторону слегка ползёт… Но патроны 1, 2 и 3 идут ровно в точку и никакого смещения в сторону… Разберёмся. Снова анализируем полученные данные. Патроны 1, 2 и 3 идут ровно в точку, всё начинается с 4й. Значит добавляем параметры. 1й и 2 оставляем как есть, 3й как второй, а 4уменьшаем значение У и добавляем смещение небольшое, не забываем про цикл, который теперь будет от 4 до 4. Стрелять будет 1,2,3,4,4,4,4…

Снова загоняем, сохраняем, на полигон. Вообще лафа. Крен по горизонтали в конце, он то есть, то нет, а начало супер… Ладно. Добавим ещё один параметр, уже без горизонтального смещения, хотя и так стреляет дай бог, это уже чисто личные придирки. Вот так:

В цикле теперь повторы 4 и 5 пуль, получаем: 1,2,3,4,5,4,5,4,5,4,5… Сохраняем, загоняем, проверяем. У меня всё чётко, хоть и есть небольшой разброс, но меня полностью удовлетворяет. Пожалуй, так и оставлю.

Вот приблизительно так оно и пишется. Это читать долго, а на деле - делов на копейки времени.

 

Теперь рассмотрим несколько примеров написания похожего макроса в Оскаре, с него ведь начинали. Там немного сложнее, но зато есть возможность добавлять разные плюшки, которые описаны в остальных инструкциях. Рассмотрим только формирование этих простых макросов. Инструкция и так получилась не маленькая.

В основном, на Оскар Макро переходят для добавления чего-либо в макрос, где Хедшот бессилен. Оскар хорош тем, что позволяет объединить несколько макросов в один, но нужно будет продумать все условия переходов для автоматического переключения между ними. К примеру, мы писали макрос, который будет работать только в одном режиме, то есть значения у меня выставлены при стрельбе в прицел 4х. Но есть ситуации, когда стрелять приходится на бегу и без прицела, а это уже другой макрос и с другими значениями, уже молчу про замену прицела на 2х. Разница между их использованием только одна – зажатая ПКМ, что можно использовать как условие-переключатель. Это описано в инструкции Построение сложного макроса. Там всё подробно описано и здесь повторять не будем.

И так, давайте же выполним то, зачем мы сюда пришли. Повторим макрос, который изображен на картинке выше в Оскаре. Как уже разобрались, автоматы стреляют с зажатой ЛКМ и кликать ею не надо. Но у нас в настройке показаны выстрелы. В этом случае выстрелы можно выразить через задержку. То есть, в макросе мы не будем указывать постоянное попатронное кликанье ЛКМ, будем с каждым выстрелом добавлять задержку. переключаем во второй режим, макрос остановится, как только мы отпустим кнопку. После каждой задержки указываем смещение. Последние 2 выстрела заключаем в цикл.

Макрос, досчитав до строки 12, вернётся на строку 8 и так по кругу 8/9/10/11/12/8/9/10/11/12/8…

и тд. Всё, что нажималось обведено. Заметьте, что в Оскаре ось У инвертирована, и то, что в Хедшоте по У было с (-) стало с (+). Точнее наоборот, в Оскаре всё правильно, а в Хедшоте У инвертирован для лучшего понимания. Ось Х остаётся на своём месте со своими знаками. Дело в том, что в системе отсчёт координат ведётся с верхнего левого края в нижний правый.

Ну и заодно рассмотрим вариант для пистолетов, то есть с кликаньем. Параметры возьму с автомата. В принципе, будет то же самое, только считать будем не задержки, а клики. Нам кликать не придётся, только зажать, всё остальное сделает макрос. Вид будет такой:

Единственное, что мы пересчитали задержку, чтобы сумма времени совпадала 79мс=40+39.

Как видите, нет ничего сложного, нужно только немного подумать. На этом и закончим.

Всего доброго и до новых инструкций.

 

Автор: Виталий Кондратенко

tjet.com@mail.ru

Все мои инструкции http://vk.com/topic-54726107_30303191



<== предыдущая лекция | следующая лекция ==>
 | 


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.