Как сделать макросы на раст

Обновлено: 02.07.2024

Мы использовали макросы, такие как println! на протяжении всей этой книги, но мы не изучили полностью, что такое макрос и как он работает. Термин макрос относится к семейству возможностей в Rust. Это декларативные (declarative) макросы с помощью macro_rules! и три вида процедурных (procedural) макросов:

Мы поговорим о каждом из них по очереди, но сначала давайте рассмотрим, зачем вообще нужны макросы, если есть функции.

Разница между макросами и функциями

По сути, макросы являются способом написания кода, который записывает другой код, что известно как мета программирование. В приложении C мы обсуждаем атрибут derive , который генерирует за вас реализацию различных типажей. Вы также использовали макросы println! и vec! в книге. Все эти макросы раскрываются для генерации большего количества кода, чем исходный код написанный вами вручную.

Мета программирование полезно для уменьшения объёма кода, который вы должны написать и поддерживать, что также является одним из предназначений функций. Однако макросы имеют некоторые дополнительные возможности, которых функции не имеют.

Сигнатура функции должна объявлять некоторое количество и тип этих параметров имеющихся у функции. Макросы, с другой стороны, могут принимать переменное число параметров: мы можем вызвать println!("hello") с одним аргументом или println!("hello <>", name) с двумя аргументами. Также макросы раскрываются до того как компилятор интерпретирует смысл кода, поэтому макрос может, например, реализовать типаж заданного типа. Функция этого не может, потому что она вызывается во время выполнения и типаж должен быть реализован во время компиляции.

Обратной стороной реализации макроса вместо функции является то, что определения макросов являются более сложными, чем определения функций, потому что вы создаёте Rust код, который записывает другой Rust код. Из-за этой косвенности, объявления макросов, как правило, труднее читать, понимать и поддерживать, чем объявления функций.

Другое важное различие между макросами и функциями заключается в том, что вы должны объявить макросы или добавить их в область видимости прежде чем можете вызывать их в файле, в отличии от функций, которые вы можете объявить где угодно и вызывать из любого места.

Декларативные макросы с macro_rules! для общего мета программирования

Наиболее широко используемой формой макросов в Rust являются декларативные макросы. Они также иногда упоминаются как "макросы на примере", " macro_rules! макрос" или просто "макросы". По своей сути декларативные макросы позволяют писать нечто похожее на выражение match в Rust. Как обсуждалось в главе 6, match выражения являются управляющими структурами, которые принимают некоторое выражение, результат значения выражения сопоставляют с шаблонами, а затем запускают код для сопоставляемой ветки. Макросы также сравнивают значение с шаблонами, которые связаны с конкретным кодом: в этой ситуации значение является литералом исходного кода Rust, переданным в макрос. Шаблоны сравниваются со структурами этого исходного кода и при совпадении код, связанный с каждым шаблоном, заменяет код переданный макросу. Все это происходит во время компиляции.

Для определения макроса используется конструкция macro_rules! . Давайте рассмотрим, как использовать macro_rules! глядя на то, как объявлен макрос vec! . В главе 8 рассказано, как можно использовать макрос vec! для создания нового вектора с определёнными значениями. Например, следующий макрос создаёт новый вектор, содержащий три целых числа:

Мы также могли использовать макрос vec! для создания вектора из двух целых чисел или вектора из пяти строковых срезов. Мы не смогли бы использовать функцию, чтобы сделать то же самое, потому что мы не знали бы заранее количество или тип значений.

В листинге 19-28 приведено несколько упрощённое определение макроса vec! .

Листинг 19-28: Упрощённая версия определения макроса vec!

Примечание: фактическое определение макроса vec! в стандартной библиотеке включает сначала код для предварительного выделения правильного объёма памяти. Этот код является оптимизацией, которую мы здесь не включаем, чтобы сделать пример проще.

Затем мы начинаем объявление макроса с помощью macro_rules! и имени макроса, который объявляется без восклицательного знака. Название, в данном случае vec , после которого следуют фигурные скобки, указывающие тело определения макроса.

Структура в теле макроса vec! похожа на структуру match выражения. Здесь у нас есть одна ветвь с шаблоном ( $( $x:expr ),* ) , затем следует ветвь => и блок кода, связанный с этим шаблоном. Если шаблон сопоставлен успешно, то соответствующий блок кода будет сгенерирован. Учитывая, что данный код является единственным шаблоном в этом макросе, существует только один действительный способ сопоставления, любой другой шаблон приведёт к ошибке. Более сложные макросы будут иметь более чем одна ветвь.

Допустимый синтаксис шаблона в определениях макросов отличается от синтаксиса шаблона рассмотренного в главе 18, потому что шаблоны макроса сопоставляются со структурами кода Rust, а не со значениями. Давайте пройдёмся по тому, какие части шаблона в листинге 19-28 что означают; полный синтаксис макроса см. в ссылке.

Во-первых, набор скобок охватывает весь шаблон. Далее идёт знак доллара ( $ ), затем следует набор скобок, который захватывает значения, соответствующие шаблону в скобках для использования в коде замены. Внутри $() находится $x:expr , который соответствует любому выражению Rust и даёт выражению имя $x .

Запятая, следующая за $() указывает на то, что буквенный символ-разделитель запятой может дополнительно появиться после кода, который соответствует коду в $() . Звёздочка * указывает, что шаблон соответствует ноль или больше раз тому, что предшествует * .

Когда вызывается этот макрос с помощью vec![1, 2, 3]; шаблон $x соответствует три раза всем трём выражениям 1 , 2 и 3 .

Теперь давайте посмотрим на шаблон в теле кода, связанного с этой ветвью: temp_vec.push() внутри $()* генерируется для каждой части, которая соответствует символу $() в шаблоне ноль или более раз в зависимости от того, сколько раз шаблон сопоставлен. Символ $x заменяется на каждое совпадающее выражение. Когда мы вызываем этот макрос с vec![1, 2, 3]; , сгенерированный код, заменяющий этот вызов макроса будет следующим:

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

Есть несколько странных краевых случаев у макроса macro_rules! . В будущем у Rust будет второй вид декларативного макроса, который будет работать аналогичным образом, но поправит некоторые из этих краевых случаев. После этого обновления macro_rules! будет фактически устаревшим. Имея это в виду, а также тот факт, что большинство Rust программистов будут использовать макросы больше, чем сами писать макросы, мы далее не будем обсуждать macro_rules! . Чтобы узнать больше о том, как писать макросы, обратитесь к электронной документации или другим ресурсам, таким как “The Little Book of Rust Macros”.

Процедурные макросы для генерации кода из атрибутов

Вторая форма макросов - это процедурные макросы (procedural macros), которые действуют как функции (и являются типом процедуры). Процедурные макросы принимают некоторый код в качестве входных данных, работают над этим кодом и создают некоторый код в качестве вывода, а не выполняют сопоставления с шаблонами и замену кода другим кодом, как это делают декларативные макросы.

Все три вида процедурных макросов (пользовательские выводимые, похожие на атрибуты и похожие на функции) все работают аналогично.

При создании процедурных макросов объявления должны находиться в собственном крейте специального типа. Это из-за сложных технических причин, которые мы надеемся будут устранены в будущем. Использование процедурных макросов выглядит как код в листинге 19-29, где some_attribute является заполнителем для использования специального макроса.

Листинг 19-29: Пример использования процедурного макроса

Функция, которая определяет процедурный макрос, принимает TokenStream в качестве входных данных и создаёт TokenStream в качестве вывода. Тип TokenStream объявлен крейтом proc_macro , включённым в Rust и представляет собой последовательность токенов. Это ядро макроса: исходный код над которым работает макрос, является входным TokenStream , а код создаваемый макросом является выходным TokenStream . К функции имеет также прикреплённый атрибут, определяющий какой тип процедурного макроса мы создаём. Можно иметь несколько видов процедурных макросов в одном и том же крейте.

Давайте посмотрим на различные виды процедурных макросов. Начнём с пользовательского, выводимого (derive) макроса и затем объясним небольшие различия, делающие другие формы отличающимися.

Как написать пользовательский derive макрос

Листинг 19-30: Код, который сможет писать пользователь нашего крейта при использовании нашего процедурного макроса

Этот код напечатает Hello, Macro! My name is Pancakes! , когда мы закончим. Первый шаг - создать новый, библиотечный крейт так:

Далее, мы определим типаж HelloMacro и ассоциированную с ним функцию:

У нас есть типаж и его функция. На этом этапе пользователь крейта может реализовать типаж для достижения желаемой функциональности, так:

Тем не менее, ему придётся написать блок реализации для каждого типа, который он хотел использовать вместе с hello_macro ; а мы хотим избавить их от необходимости делать эту работу.

Кроме того, мы пока не можем предоставить функцию hello_macro с реализацией по умолчанию, которая будет печатать имя типа, для которого реализован типаж: Rust не имеет возможностей рефлексии (reflection), поэтому он не может выполнить поиск имени типа во время выполнения кода. Нам нужен макрос для генерации кода во время компиляции.

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

Наши два крейта тесно связаны, поэтому мы создаём процедурный макрос-крейт в каталоге крейта hello_macro . Если мы изменим определение типажа в hello_macro , то нам придётся также изменить реализацию процедурного макроса в hello_macro_derive . Два крейта нужно будет опубликованы отдельно и программисты, использующие эти крейты, должны будут добавить их как зависимости, а затем добавить их в область видимости. Мы могли вместо этого сделать так, что крейт hello_macro использует hello_macro_derive как зависимость и реэкспортирует код процедурного макроса. Однако то, как мы структурировали проект, делает возможным программистам использовать hello_macro даже если они не хотят derive функциональность.

Нам нужно объявить крейт hello_macro_derive как процедурный макрос-крейт. Также понадобятся функционал из крейтов syn и quote , как вы увидите через мгновение, поэтому нам нужно добавить их как зависимости. Добавьте следующее в файл Cargo.toml для hello_macro_derive :

Чтобы начать определение процедурного макроса, поместите код листинга 19-31 в ваш файл src/lib.rs крейта hello_macro_derive . Обратите внимание, что этот код не скомпилируется пока мы не добавим определение для функции impl_hello_macro .

Листинг 19-31: Код, который потребуется в большинстве процедурных макро крейтов для обработки Rust кода

Обратите внимание, что мы разделили код на функцию hello_macro_derive , которая отвечает за синтаксический анализ TokenStream и функцию impl_hello_macro , которая отвечает за преобразование синтаксического дерева: это делает написание процедурного макроса удобнее. Код во внешней функции ( hello_macro_derive в данном случае) будет одинаковым для почти любого процедурного макрос крейта, который вы видите или создаёте. Код, который вы указываете в теле внутренней функции (в данном случае impl_hello_macro ) будет отличаться в зависимости от цели вашего процедурного макроса.

Мы представили три новых крейта: proc_macro syn и quote . Макрос proc_macro поставляется с Rust, поэтому нам не нужно было добавлять его в зависимости внутри Cargo.toml. Макрос proc_macro - это API компилятора, который позволяет нам читать и манипулировать Rust кодом из нашего кода.

Крейт syn разбирает Rust код из строки в структуру данных над которой мы может выполнять операции. Крейт quote превращает структуры данных syn обратно в код Rust. Эти крейты упрощают разбор любого вида Rust кода, который мы хотели бы обрабатывать: написание полного синтаксического анализатора для кода Rust не является простой задачей.

Функция hello_macro_derive сначала преобразует input из TokenStream в структуру данных, которую мы можем затем интерпретировать и над которой выполнять операции. Здесь крейт syn вступает в игру. Функция parse в syn принимает TokenStream и возвращает структуру DeriveInput , представляющую разобранный код Rust. Листинг 19-32 показывает соответствующие части структуры DeriveInput , которые мы получаем при разборе строки struct Pancakes; :

Листинг 19-32: Экземпляр DeriveInput получаемый, когда разбирается код имеющий атрибут макроса из Листинга 19-30

Поля этой структуры показывают, что код Rust, который мы разобрали, является блок структуры с ident (идентификатором, означающим имя) для Pancakes . Есть больше полей в этой структуре для описания всех видов кода Rust; проверьте документацию syn о структуре DeriveInput для получения дополнительной информации.

Вскоре мы определим функцию impl_hello_macro , в которой построим новый, дополнительный код Rust. Но прежде чем мы это сделаем, обратите внимание, что выводом для нашего выводимого (derive) макроса также является TokenStream . Возвращаемый TokenStream добавляется в код, написанный пользователями макроса, поэтому, когда они соберут свой крейт, они получат дополнительную функциональность, которую мы предоставляем в изменённом TokenStream .

Теперь, когда у нас есть код для преобразования аннотированного Rust кода из TokenStream в экземпляр DeriveInput , давайте сгенерируем код реализующий типаж HelloMacro у аннотированного типа, как показано в листинге 19-33.

Листинг 19-33. Реализация типажа HelloMacro с использованием проанализированного кода Rust.

Мы получаем экземпляр структуры Ident содержащий имя (идентификатор) аннотированного типа с использованием ast.ident . Структура в листинге 19-32 показывает, что когда мы запускаем функцию impl_hello_macro для кода из листинга 19-30, то получаемый ident будет иметь поле ident со значением "Pancakes" . Таким образом, переменная name в листинге 19-33 будет содержать экземпляр структуры Ident , что при печати выдаст строку "Pancakes" , что является именем структуры в листинге 19-30.

Макрос quote! позволяет определить код Rust, который мы хотим вернуть. Компилятор ожидает что-то отличное от прямого результата выполнения макроса quote! , поэтому нужно преобразовать его в TokenStream . Мы делаем это путём вызова метода into , который использует промежуточное представление и возвращает значение требуемого типа TokenStream .

На этом этапе команда cargo build должна завершиться успешно для обоих hello_macro и hello_macro_derive . Давайте подключим эти крейты к коду в листинге 19-30, чтобы увидеть процедурный макрос в действии! Создайте новый бинарный проект в каталоге ваших проектов с использованием команды cargo new pancakes . Нам нужно добавить hello_macro и hello_macro_derive в качестве зависимостей для крейта pancakes в файл Cargo.toml. Если вы публикуете свои версии hello_macro и hello_macro_derive на сайт crates.io, они будут обычными зависимостями; если нет, вы можете указать их как path зависимости следующим образом:

Далее давайте рассмотрим, как другие виды процедурных макросов отличаются от пользовательских выводимых макросов.

подобные атрибутам макросы

Подобные атрибутам макросы похожи на пользовательские выводимые макросы, но вместо генерации кода для derive атрибута, они позволяют создавать новые атрибуты. Они являются также более гибкими: derive работает только для структур и перечислений; атрибут-подобные могут применяться и к другим элементам, таким как функции. Вот пример использования атрибутного макроса: допустим, у вас есть атрибут именованный route который аннотирует функции при использовании фреймворка для веб-приложений:

Здесь есть два параметра типа TokenStream . Первый для содержимого атрибута: часть GET, "/" . Второй это тело элемента, к которому прикреплён атрибут: в данном случае fn index() <> и остальная часть тела функции.

Кроме того, атрибутные макросы работают так же как и пользовательские выводимые макросы: вы создаёте крейт с типом proc-macro и реализуете функцию, которая генерирует код, который хотите!

Функционально подобные макросы

Функционально подобные макросы выглядят подобно вызову функций. Они аналогично макросам macro_rules! и являются более гибкими, чем функции; например, они могут принимать неизвестное количество аргументов. Тем не менее, макросы macro_rules! можно объявлять только с использованием синтаксиса подобного сопоставлению, который мы обсуждали ранее в разделе "Декларативные макросы macro_rules! для общего мета программирования". Функционально подобные макросы принимают параметр TokenStream и их определение манипулирует этим TokenStream , используя код Rust, как это делают два других типа процедурных макроса. Примером подобного функционально подобного макроса является макрос sql!/code6>, который можно вызвать так:

Этот макрос будет разбирать SQL оператор внутри него и проверять, что он синтаксически правильный, что является гораздо более сложной обработкой, чем то что может сделать макрос macro_rules! . Макрос sql! мог бы быть определён так:

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

Итоги

Далее мы применим все, что мы обсуждали в книге и сделаем ещё один проект!

DXM | Макросы на РАСТ (LOGITECH, RAZER, BLOODY).

Инструкция для Logitech:

У бренда Logitech, макросы поддерживаются абсолютно на всех моделях G-серии мышек, кроме Lightspeed версий, но исключая G903 и G703.

DXM | Макросы на РАСТ (LOGITECH, RAZER, BLOODY).

Инструкция для Razer:

У бренда Razer, макросы работают только на мышках которые поддерживают программное обеспечение Razer Synapse 3. Вот небольшой список мышек, которые были проверенны нами на возможность установки макросов: DeathAdder V2, DeathAdder Elite, Viper, Viper Mini, Viper Ultimate, Basilisk, Basilisk V2, Basilisk Ultimate, Basilisk X HyperSpeed, Mamba Wireless, Mamba Elite, Mamba Tournament Edition, Naga Chroma, Naga Hex V2, Naga Trinity, Abyssus Essential, Abyssus LITE, Atheris — Black, Lancehead Tournament Edition Black и Lancehead. Если в списке нет Вашей мышки, попробуйте установить программное обеспечение Razer Synapse 3 и если мышка определится, то макросы будут работать.

Макросы и читы – раковая опухоль во многих играх. Безусловно, всегда есть те игроки, которые рады получить преимущество над другими, даже не самым честным способом. Давайте вспомним игру Grand Theft Auto 5, а именно её Online составляющую. Уж не знаю, как в ней дела обстоят на данный момент, но год-два назад читерство в данной игре было чем-то обыденным.

Буду честен – я и сам грешен. Два раза я заказывал прокачку игрового персонажа, один раз накручивал игровую валюту и уровень при помощи софта. И знаете что? GTA 5 мне уже надоела, а виной этому послужило то, что у меня и так уже в ней всё есть, мне ничего не надо там делать. Зашёл раз в год, посмотрел обновления, вышел. Вот так сейчас играю я в ГТА.

Но вернёмся к игре Rust. Чаще всего в нашей любимой игре можно встретить именно макросников. Читеры тоже встречаются, но не так уж и часто, как показывает практика. А так как макросники встречаются чаще, давайте же узнаем про нашего врага побольше информации.

Макросы в игре Rust

Макросы для оружия в игре Rust — что же это такое? Расскажу об этом очень коротко.

Макрос – софт, который выполняет за вас определённую задачу. В нашем случае он гасит отдачу на определённом оружии.

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

Преимущества макросов в Расте

В чём же преимущество людей с макросами в Rust перед обычными игроками? Да всё элементарно – простой игрок не сможет зажимать с пулемёта на 300 метров, попадая при этом в одну точку. Конечно, есть и такие люди, которые мастера по стрельбе в одну точку, но не каждый же игрок так стреляет. Макросники же сразу после установки софта могут хоть всю карту поливать градом пуль.

Стрельба без макросов в Rust

Стрельба без макросов

Как бороться с макросниками

Борьба с макросниками – сложное дело, если вы простой игрок. Первым делом при встрече макросника отправьте на него жалобу. У нас по этому поводу есть отдельная статья, где мы описали, как работает система жалоб в Rust.

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

Но как же с ними перестреливаться? Лично я делаю это следующим образом – не могу взять стрельбой, сыграю от тактики. Например, можно быстро менять позицию, пытаться обойти противника, закидать его дымами и гранатами, благо есть гранатомёт.

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

Макросы в игре Rust запрещены разработчиками

Не так давно разработчики Rust ввели существенные ограничения по использованию мышек Bloody, X7 и прочих моделей, где используются макросы через встроенное ПО. Такие девайсы были заблокированы и зайти на официальные серверы, а также большинство модифицированных проектов нельзя! Это сделано с целью защиты игроков от макросников. Из-за этого появился вопрос — как играть с мышкой блади в раст? Есть обходные легальные пути, которые выигрышны для всех пользователей: и тех, кто обладает такой мышкой, но макросы не использует, и для владельцев серверов (заходить могут все на сервер). У нас есть отдельная статья, где мы описали, как играть в rust с мышкой bloody. Там мы рассказали про обход блокировки мышки bloody rust, а также указали о блокировке блади в раст.

Nastrojka-RUST-dlya-makrosa-na-AK47-nzzvfzm588bbz91jop6oif96xpq35rdk21ls1siwzm.jpg

Если данная чувствительность мышки для вас недостаточна или слишком велика, вы можете изменить CPI(DPI) мышки в большую или меньшую сторону. Например, если вы играли на чувствительности 1 и 400 cpi на мышке, вам нужно будет изменить значение cpi на 800. Аналогично и для любой другой чувствительности.

  • Aim Professional макрос – особая профессиональная версия макроса заменившая собой все ранее разрабатываемые версии, такие как tapping и base. Каждый выстрел идеально отцентрирован и вам останется только точно навестить на цель.
  • ЛКМ версию макроса для мышек a4tech X7, а так же MGN версию для установки макроса через Ultra Core 3 – Headshot если у вас версия архива для мышек a4tech Bloody.

Демонстрация разброса.

Модификации (обвесы) для АК47.
В самой игре вам нужен лишь АК47

Makros-dlya-AK47-Rust-Samodelnyj-pritsel.jpg

.
Если вы играя на официальных серверах смогли получить АК47, то и проблем с наличием прицела у вас возникнуть не должно. При необходимости можно использовать еще и глушитель.

— многопользовательская онлайн игра в жанре симулятора выживания, разрабатываемая независимой британской студией Facepunch, являющейся создателем игры Garry's Mod. Изначально Rust разрабатывался, как копия DayZ, но также разработчики вдохновлялись игрой Minecraft.

АКТУАЛЬНО

НАВСЕГДА

КАЧЕСТВО

ВЫБОР

ОБНОВЛЕНИЕ

Хочешь улучшить свои навыки в любимой игре RUST?
Тогда выбирай макросы на нашем сайте GGMacro™.

Макросы и скрипты для игры RUST Experimental созданы для Logitech, Razer, A4Tech Bloody X7, FireGlider!

Демо Assault Rifle AK47 для Logitech Razer Bloody

Original Image

БЕЗ МАКРОСА

Modified Image

МАКРОС

Original Image

БЕЗ МАКРОСА

Modified Image

МАКРОС

Original Image

БЕЗ МАКРОСА

Modified Image

МАКРОС

Макросы для игры RUST Experimental практически полностью компенсируют отдачу при стрельбе, поэтому в перестрелке вы получаете невероятное преимущество перед другими игроками! Любой новичок с макросами сможет стрелять на уровне опытного игрока задрота.

Игра RUST Experimental имеет низкий уровень рандома, что позволяет получить максимальную точность с помощью макроса. Игровая система RUST не определяет использование макросов. Как только вы привыкнете играть в игры с макросами, вы быстро повысите свое мастерство и уровень, необходимые для достижения высокого успеха и опередите конкурентов. RUST содержит макросы и скрипты анти отдачи для вашего устройства Logitech G, Razer или A4Tech Bloody, которые отличаются друг от друга из-за индивидуальной компенсации отдачи и специально закодированы для разных видов оружия. Выбирайте расширенные паки с наличием макросов для каждого оружия, а так же вы можете использовать универсальные макросы с усредненной компенсацией отдачи.

RUST Experimental Bloody Мега Пак макросы No Recoil

Обновлено и актуально для последнего Девблога!

МАКРОСЫ для RUST без отдачи, только для стандартного размера обоймы оружия в игре (например 30 патронов, а не 60) - повышение точности и компенсация разброса! Макросы работают только через облачный гейминг или Bloody ByPass обход который прилагается бонусом бесплатно (гарантий на Bloody ByPass не даем, продаются только макросы). Наши макросы RUST для AK47 написаны с точностью более 60-70% на дистанции 100 (в положении сидя и модули повышающие точность).

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

Макросы навсегда, обновление бесплатно на все время популярности игры!
Макросы только для Bloody с внутренней памятью, требуется активированное 3 ядро!
После покупки вы получаете основные макросы Bloody MGN и дополнительные на кнопку F или боковые кнопки, для автоматического оружия LBM макросы на перемещение команд на Левую Кнопку (значительное расширение количества оружия в мышке)!
Все макросы закодированы от редактирования! На клавиатурах Bloody не тестировались! Для Х7 и сторонних программ эмуляторов - не работают!

Чувствительность мыши в игре для оружия - от 0.5 до 1.0 и поле зрение 75, но FOV можно менять с понижением чувствительности (если вам не удобно пользоваться этой чувствительностью, будет достаточно изменить CPI/DPI мышки под себя. Изменение CPI/DPI на макрос не влияет).

ВНИМАНИЕ! Убедитесь, что ваша мышь Bloody имеет память для макросов и активировано 3 ядро.
Все макросы проверены неоднократно, если какие либо макросы работают не корректно, то в 99% случаев проблема именно на вашей стороне.

Варианты обхода блокировки для A4Tech Bloody мышек:

1 вариант - Bloody ByPass (прилагается бесплатно бонусом во всех наших макросах для Bloody) - перезагрузка USB. Если вы используете мышку bloody и вас не удаляет с серверов, значит у вас свежее обновленное ПО Bloody и макросы на прямую работать не будут так как игра отключает CORE 3, не макросы, а именно игра отключает программу. Бесплатный Bloody ByPass перезагружает USB и макрос работает некоторое время до следующей перезагрузки.

2 вариант - Облачный гейминг. Вы можете спокойно играть с мышками Bloody через облачный гейминг GeForce Now, PlayKey или Steam трансляцию экрана. Через облачный стриминг не возможно проверить какую мышь вы используете.

3 вариант - Garage Mouse without Borders (Основное требование это дополнительный ПК или Ноутбук!). Скачиваем и устанавливаем программу на оба компьютера, коннектим их по локальной или WiFi сети, подключаем мышь Bloody к не основному ПК и транслируем движение мыши на основной ПК с установленной игрой, так игра не видит мышь установленную на другой ПК.

Так же напоминаем, что с макросами Bloody можно играть на серверах где администрация отключила блокировку мышек Bloody, а так же на пиратской версии игры RUST.

Читайте также: