Как толкнуть машину в гта 5
Миссия Агитатор — Товар/ Grass Roots — The Pickup ГТА 5 прохождение
Автор: admin · Опубликовано 30.12.2019 · Обновлено 27.01.2021
После миссии «Агитатор — Франклин» на карте появится две зеленые зоны. Одна из них отмечена в районе Мурьета-Хайтс.
Нам нужно шоссе на окраине города. Ориентир — желтый забор с большими красными буквами и номером телефона. Здесь расположена складская зона.
Заезжаем на территорию за забором, проезжаем чуть вперед. По правую сторону будет закуток, где стоит грузовичок. Когда он будет в зоне видимости, на карте появится отметка в виде голубой точки.
Подходим к машине, садимся в нее. У машины Фракнлин позвонит Барри, а тот сообщит, что машину нужно доставить в Веспуччи за пару часов и предупредит о копах, снующих рядом.
После звонка внизу экрана начнется отсчет времени — нам дается 4 минуты на прохождение. За это время нужно оторваться от копов, если нам дадут звезды розыска, и доставить груз к дому Барри.
Выехать со складской зоны можно тремя путями:
При преследовании полицейских дают две звезды розыска. Машина нам досталась крайне медлительная, поэтому уходим по переулкам, двигаясь в сторону района Веспуччи. Если на снятие звезд розыска уйдет много времени, то можно не успеть доехать до Барри, и миссия будет провалена.
Ставим машину за домом Барри. Фрэнк позвонит Барри и сообщит, что груз доставлен.
Для завершения миссии покидаем сектор, отойдя подальше.
Как толкать машину в гта 5 рп
Как поднять автомобиль эвакуатором под определённым углом в GTA 5
Ещё в ГТА 5 есть возможность поднятия автомобиля вверх под разными или под нужным определённым углом, чтобы это сделать зажимаем на клавиатуре клавишу Shift. Во время нажатия и удержания клавиши Shift, эвакуаторный крюк будет подниматься вверх, а вместе с крюком будет подыматься, и машина, которую вы зацепили, после этой манипуляции вы сможете перевезти машину в таком виде в каком вам будет нужно.
Вот таким вот образом можно легко зацеплять машину крюком в ГТА 5.
Как я сократил время загрузки GTA Online на 70%
GTA Online. Многопользовательская игра, печально известная медленной загрузкой. Недавно я вернулся, чтобы завершить несколько ограблений — и был потрясён, что она загружается настолько же медленно, как и в день своего выпуска, 7 лет назад.
Пришло время докопаться до сути.
Человек залез в «исходный код» игры, нашел криво работающую функцию и исправил ее, благодаря этому скорость загрузки возросла на 70%. Ссылки на dll для увеличения скорости в конце статьи.
Сначала я хотел проверить, вдруг кто-то уже решил проблему. Но нашёл только рассказы о великой сложности игры, из-за чего она так долго загружается, истории о том, что сетевая p2p-архитектура — мусор (хотя это не так), некоторые сложные способы загрузки в сюжетный режим, а потом в одиночную сессию, и ещё пару модов, чтобы скипнуть видео с логотипом R* во время загрузки. Ещё немного почитав форумы, я узнал, что можно сэкономить колоссальные 10-30 секунд, если использовать все эти способы вместе!
Тем временем на моём компе…
Загрузка сюжетного режима:
Без загрузочного меню, от логотипа R* до игрового процесса (без логина в Cоциальный Клуб.
Старый, но приличный проц: AMD FX-8350
Дешёвый SSD: KINGSTON SA400S37120G
Надо бы прикупить RAM: 2x Kingston 8192 MB (DDR3-1337) 99U5471
Нормальный GPU: NVIDIA GeForce GTX 1070
Если доверять этому опросу, проблема достаточно широко распространена, чтобы слегка раздражать более 80% игроков. Прошло уже семь лет!
Я немного поискал информацию о тех
Почему у них сюжетный режим по-прежнему загружается около минуты? (кстати, при загрузке с M.2 NVMe не учитывались видео с логотипами). Кроме того, загрузка из сюжетного режима в онлайн занимает у них всего минуту, в то время как у меня около пяти. Я знаю, что их железо гораздо лучше, но не в пять же раз.
Вооружившись таким мощным инструментом, как Диспетчер задач, я приступил к поиску узкого места.
Почти минута уходит на загрузку общих ресурсов, которые нужны и для сюжетного режима, и для онлайна (почти наравне с топовыми ПК), затем GTA в течение четырёх минут полностью нагружает одно ядро CPU, больше ничего не делая.
Использование диска? Нет! Использование сети? Есть немного, но через несколько секунд падает в основном до нуля (кроме загрузки вращающихся информационных баннеров). Использование GPU? Ноль. Память? Вообще ничего…
Что это, майнинг биткоинов или что-то такое? Чую здесь код. Очень плохой код.
На моём старом процессоре AMD восемь ядер, и он ещё молодцом, но это старая модель. Его сделали ещё тогда, когда производительность одного потока у AMD была намного ниже, чем у Intel. Наверное, это главная причина таких различий во времени загрузки.
Что странно, так это способ использования CPU. Я ожидал огромное количество операций чтения с диска или массу сетевых запросов, чтобы организовать сеансы в сети p2p. Но такое? Вероятно, здесь какая-то ошибка.
Профилировщик — отличный способ найти узкие места в CPU. Есть только одна проблема — большинство из них полагаются на инструментирование исходного кода, чтобы получить идеальную картину происходящего в процессе. А у меня нет исходного кода. Мне также не требуются идеальные показания в микросекундах, у меня узкое место на 4 минуты.
Итак, добро пожаловать в образцы стека (stack sampling). Для приложений с закрытым исходным кодом есть только такой вариант. Сбросьте стек запущенного процесса и местоположение указателя текущей инструкции, чтобы построить дерево вызовов в заданные интервалы. Затем наложите их — и получите статистику о том, что происходит. Я знаю только один профилировщик, который может проделать это под Windows. И он не обновлялся уже более десяти лет. Это Люк Stackwalker! Кто-нибудь, пожалуйста, подарите Люку немножко любви 🙂
Обычно Люк группировал бы одинаковые функции, но у меня нет отладочных символов, поэтому пришлось смотреть на соседние адреса, чтобы искать общие места. И что же мы видим? Не одно, а целых два узких места!
Вниз по кроличьей норе
Позаимствовав у моего друга совершенно законную копию стандартного дизассемблера (нет, я действительно не могу его себе позволить… когда-нибудь освою гидру), я пошёл разбирать GTA.
Выглядит совсем неправильно. Да, у большинства топовых игр есть встроенная защита от реверс-инжиниринга, чтобы защититься от пиратов, мошенников и моддеров. Не то чтобы это их когда-то останавливало…
Похоже, здесь применили какую-то обфускацию/шифрование, заменив большинство инструкций тарабарщиной. Не волнуйтесь, нужно просто сбросить память игры, пока она выполняет ту часть, на которую мы хотим посмотреть. Инструкции должны быть деобфусцированы перед запуском тем или иным способом. У меня рядом лежал Process Dump, так что я взял его, но есть много других инструментов для подобных задач.
Проблема 1: это что… strlen?!
Дальнейший разбор дампа выявил один из адресов с некоей меткой strlen, которая откуда-то берётся! Спускаясь вниз по стеку вызовов, предыдущий адрес помечен как vscan_fn, и после этого метки заканчиваются, хотя я вполне уверен, что это sscanf.
Он что-то парсит. Но что? Логический разбор займёт целую вечность, поэтому я решил сбросить некоторые образцы из запущенного процесса с помощью x64dbg. Через несколько шагов отладки выясняется, что это… JSON! Он парсит JSON. Колоссальные десять мегабайт JSON’а с записями 63 тыс. предметов.
.
«key»: «WP_WCT_TINT_21_t2_v9_n2»,
«price»: 45000,
«statName»: «CHAR_KIT_FM_PURCHASE20»,
«storageType»: «BITFIELD»,
«bitShift»: 7,
«bitSize»: 1,
«category»: [«CATEGORY_WEAPON_MOD»]
>,
.
Проясним некоторую путаницу: я полагаю, что это предметы, приобретаемые за игровые деньги, не связанные напрямую с микротранзакциями.
10 мегабайт? В принципе, не так уж и много. Хотя sscanf используется не самым оптимальным образом, но, конечно, это не так уж плохо? Что ж…
Да, такая процедура займёт некоторое время… Честно говоря, я понятия не имел, что большинство реализаций sscanf вызывают strlen, поэтому не могу винить разработчика, который написал это. Я бы предположил, что он просто сканировал байт за байтом и мог остановиться на NULL.
Проблема 2: давайте использовать хэш-…массив?
Оказывается, второго преступника вызывают сразу за первым. Даже в одной и той же конструкции if, как видно из этой уродливой декомпиляции:
Все метки мои, и я понятия не имею, как на самом деле называются функции/параметры.
Вторая проблема? Сразу после разбора элемента он хранится в массиве (или встроенном списке C++? не уверен). Каждая запись выглядит примерно так:
А перед сохранением? Он проверяет весь массив, сравнивая хэш каждого элемента, есть он в списке или нет. С 63 тыс. записей это примерно (n^2+n)/2 = (63000^2+63000)/2 = 1984531500, если я не ошибаюсь в расчётах. И это в основном бесполезные проверки. У вас есть уникальные хэши, почему не использовать хэш-таблицу.
Во время реверс-инжиниринга я назвал его hashmap, но это явно не_hashmap. И дальше ещё интереснее. Этот хэш-массив-список пуст перед загрузкой JSON. И все элементы в JSON уникальны! Им даже не нужно проверять, есть они в списке или нет! У них даже есть функция прямой вставки элементов! Просто используйте её! Серьёзно, ну ребята, что за фигня!?
Всё это конечно классно, но никто не воспримет меня всерьёз, пока я не напишу реальный код для ускорения загрузки, чтобы сделать кликбейтный заголовок для поста.
Проблема с JSON нетривиальная, я не могу реально заменить их парсер. Более реалистичным кажется заменить sscanf на тот, который не зависит от strlen. Но есть ещё более простой способ.
* подождать длинной строки
* если поступит ещё вызов в пределах диапазона строки, вернуть закэшированное значение
Что-то вроде такого:
А что касается проблемы хэш-массива, то здесь просто полностью пропускаем все проверки и вставляем элементы напрямую, поскольку мы знаем, что значения уникальны.
Полный исходный код PoC здесь.
Ну и как оно работает?
Прежнее время загрузки онлайн-режима: около 6м
Время с патчем проверки дубликатов: 4м 30с
Время с парсером JSON: 2м 50с
Время с двумя патчами вместе: 1м 50с
Да, чёрт возьми, получилось! :))
Скорее всего, это не решит всех проблем с загрузкой — в разных системах могут быть и другие узкие места, но это такая зияющая дыра, что я понятия не имею, как R* пропустила её за все эти годы.
При запуске GTA Online есть узкое место, связанное с однопоточным вычислением
Оказалось, GTA изо всех сил пытается распарсить 10-мегабайтный файл JSON
Сам парсер JSON плохо сделан/наивен и
После парсинга происходит медленная процедура удаления дублей
R*, пожалуйста, исправьте
Если информация каким-то образом дойдёт до инженеров Rockstar, то проблему можно решить в течение нескольких часов силами одного разработчика. Пожалуйста, ребята, сделайте что-нибудь с этим :
Grand Theft Auto 5: Engine Control [управление двигателем]
Можно включать и отключать двигатель в машине.
Установка:
Вам потребуется ScripHookV. Скачать можете на PG в разделе читы. Скачать и распаковать архив, переместить EngineControl.asi в каталог игры где находиться СкриптХук.
Использование:
В игре нажмите кнопку «O» находясь в машине для включения и отключения двигателя..
Thank’s BmanDesigns
Добавили бы, что бы выходить из машины и НЕ отключать двигатель, чтобы музон играл пока ты там рядом гуляешь.
Сделали бы лучше ограничитель скорости чтобы по правилам гонять, это же прикольно)))
zloy04rus поставь Scripthook5 вместе с native трейнером и будет тебе ограничитель. Круиз контроль называется. По кнопке Т английской
RactivE5 на скорости выпрогни из машины
а ну да точно я же забыл это с другова сайта сюда кинул автору респект ))))))))))
нехватает еще управления каждым поршнем и клапаном по отдельности)))када нормальные моды мутить будите скока можно гадиь на плейграунде это же не туалет))))
Как толкнуть машину в гта 5
Чит-коды для PC версии следует вводить словами через консоль, нажав на кнопку «
» или «/» на клавиатуре, либо цифрами через внутриигровой телефон.
Получить всё оружие
Взрывные пули
При попадании пули начинают взрываться.
Зажигательные пули
При попадании поджигают противника. Устройте свой маленький Вьетнам.
Коды влияющие на персонажа
Бессмертие
Вы получите кратковременную неуязвимость на пять минут. Лучше не забывать обновлять действие кода, иначе есть риск в разгар весёлой перестрелки внезапно оказаться на точке возрождения.
Супер-прыжок
Ваш герой может совершать очень высокие прыжки. На всякий случай обзаведитесь парашютом. Код на него есть в разделе «экипировка».
Опьянение
Если лень идти до ближайшего бара, то после ввода данного кода ваш персонаж немного захмелеет.
Взрывной рукопашный бой
От ваших ударов кулаками происходят взрывы.
Быстрый бег
Персонаж игрока начнёт быстро бегать. Почувствуйте себя Усейном Болтом.
Быстрое плавание
После ввода чит-кода герой ГТА 5 станет плавать быстрее. Олимпийские игры продолжаются.
Восстановление спецспособности
Активировав код, шкала спецспособности героя заполнится до предела.
Skyfall
Осторожно, после активации этого чит-кода ваш персонаж улетит в стратосферу, а возвращаться уже будет под воздействием силы гравитации. Беда в том, что парашют использовать невозможно, поэтому рекомендуем ввести код на бессмертие.
Повышение уровня розыска
Уровень розыска увеличится на одну звезду. С каждым повторным вводом на ещё одну единицу и так до шести. Седьмую звезду пока не придумали.
Снижение уровня розыска
Как толкать машину в гта 5 рп
Как поднять автомобиль эвакуатором под определённым углом в GTA 5
Ещё в ГТА 5 есть возможность поднятия автомобиля вверх под разными или под нужным определённым углом, чтобы это сделать зажимаем на клавиатуре клавишу Shift. Во время нажатия и удержания клавиши Shift, эвакуаторный крюк будет подниматься вверх, а вместе с крюком будет подыматься, и машина, которую вы зацепили, после этой манипуляции вы сможете перевезти машину в таком виде в каком вам будет нужно.
Вот таким вот образом можно легко зацеплять машину крюком в ГТА 5.
Как я сократил время загрузки GTA Online на 70%
GTA Online. Многопользовательская игра, печально известная медленной загрузкой. Недавно я вернулся, чтобы завершить несколько ограблений — и был потрясён, что она загружается настолько же медленно, как и в день своего выпуска, 7 лет назад.
Пришло время докопаться до сути.
Человек залез в «исходный код» игры, нашел криво работающую функцию и исправил ее, благодаря этому скорость загрузки возросла на 70%. Ссылки на dll для увеличения скорости в конце статьи.
Сначала я хотел проверить, вдруг кто-то уже решил проблему. Но нашёл только рассказы о великой сложности игры, из-за чего она так долго загружается, истории о том, что сетевая p2p-архитектура — мусор (хотя это не так), некоторые сложные способы загрузки в сюжетный режим, а потом в одиночную сессию, и ещё пару модов, чтобы скипнуть видео с логотипом R* во время загрузки. Ещё немного почитав форумы, я узнал, что можно сэкономить колоссальные 10-30 секунд, если использовать все эти способы вместе!
Тем временем на моём компе…
Загрузка сюжетного режима:
Без загрузочного меню, от логотипа R* до игрового процесса (без логина в Cоциальный Клуб.
Старый, но приличный проц: AMD FX-8350
Дешёвый SSD: KINGSTON SA400S37120G
Надо бы прикупить RAM: 2x Kingston 8192 MB (DDR3-1337) 99U5471
Нормальный GPU: NVIDIA GeForce GTX 1070
Если доверять этому опросу, проблема достаточно широко распространена, чтобы слегка раздражать более 80% игроков. Прошло уже семь лет!
Я немного поискал информацию о тех
Почему у них сюжетный режим по-прежнему загружается около минуты? (кстати, при загрузке с M.2 NVMe не учитывались видео с логотипами). Кроме того, загрузка из сюжетного режима в онлайн занимает у них всего минуту, в то время как у меня около пяти. Я знаю, что их железо гораздо лучше, но не в пять же раз.
Вооружившись таким мощным инструментом, как Диспетчер задач, я приступил к поиску узкого места.
Почти минута уходит на загрузку общих ресурсов, которые нужны и для сюжетного режима, и для онлайна (почти наравне с топовыми ПК), затем GTA в течение четырёх минут полностью нагружает одно ядро CPU, больше ничего не делая.
Использование диска? Нет! Использование сети? Есть немного, но через несколько секунд падает в основном до нуля (кроме загрузки вращающихся информационных баннеров). Использование GPU? Ноль. Память? Вообще ничего…
Что это, майнинг биткоинов или что-то такое? Чую здесь код. Очень плохой код.
На моём старом процессоре AMD восемь ядер, и он ещё молодцом, но это старая модель. Его сделали ещё тогда, когда производительность одного потока у AMD была намного ниже, чем у Intel. Наверное, это главная причина таких различий во времени загрузки.
Что странно, так это способ использования CPU. Я ожидал огромное количество операций чтения с диска или массу сетевых запросов, чтобы организовать сеансы в сети p2p. Но такое? Вероятно, здесь какая-то ошибка.
Профилировщик — отличный способ найти узкие места в CPU. Есть только одна проблема — большинство из них полагаются на инструментирование исходного кода, чтобы получить идеальную картину происходящего в процессе. А у меня нет исходного кода. Мне также не требуются идеальные показания в микросекундах, у меня узкое место на 4 минуты.
Итак, добро пожаловать в образцы стека (stack sampling). Для приложений с закрытым исходным кодом есть только такой вариант. Сбросьте стек запущенного процесса и местоположение указателя текущей инструкции, чтобы построить дерево вызовов в заданные интервалы. Затем наложите их — и получите статистику о том, что происходит. Я знаю только один профилировщик, который может проделать это под Windows. И он не обновлялся уже более десяти лет. Это Люк Stackwalker! Кто-нибудь, пожалуйста, подарите Люку немножко любви 🙂
Обычно Люк группировал бы одинаковые функции, но у меня нет отладочных символов, поэтому пришлось смотреть на соседние адреса, чтобы искать общие места. И что же мы видим? Не одно, а целых два узких места!
Вниз по кроличьей норе
Позаимствовав у моего друга совершенно законную копию стандартного дизассемблера (нет, я действительно не могу его себе позволить… когда-нибудь освою гидру), я пошёл разбирать GTA.
Выглядит совсем неправильно. Да, у большинства топовых игр есть встроенная защита от реверс-инжиниринга, чтобы защититься от пиратов, мошенников и моддеров. Не то чтобы это их когда-то останавливало…
Похоже, здесь применили какую-то обфускацию/шифрование, заменив большинство инструкций тарабарщиной. Не волнуйтесь, нужно просто сбросить память игры, пока она выполняет ту часть, на которую мы хотим посмотреть. Инструкции должны быть деобфусцированы перед запуском тем или иным способом. У меня рядом лежал Process Dump, так что я взял его, но есть много других инструментов для подобных задач.
Проблема 1: это что… strlen?!
Дальнейший разбор дампа выявил один из адресов с некоей меткой strlen, которая откуда-то берётся! Спускаясь вниз по стеку вызовов, предыдущий адрес помечен как vscan_fn, и после этого метки заканчиваются, хотя я вполне уверен, что это sscanf.
Он что-то парсит. Но что? Логический разбор займёт целую вечность, поэтому я решил сбросить некоторые образцы из запущенного процесса с помощью x64dbg. Через несколько шагов отладки выясняется, что это… JSON! Он парсит JSON. Колоссальные десять мегабайт JSON’а с записями 63 тыс. предметов.
.
«key»: «WP_WCT_TINT_21_t2_v9_n2»,
«price»: 45000,
«statName»: «CHAR_KIT_FM_PURCHASE20»,
«storageType»: «BITFIELD»,
«bitShift»: 7,
«bitSize»: 1,
«category»: [«CATEGORY_WEAPON_MOD»]
>,
.
Проясним некоторую путаницу: я полагаю, что это предметы, приобретаемые за игровые деньги, не связанные напрямую с микротранзакциями.
10 мегабайт? В принципе, не так уж и много. Хотя sscanf используется не самым оптимальным образом, но, конечно, это не так уж плохо? Что ж…
Да, такая процедура займёт некоторое время… Честно говоря, я понятия не имел, что большинство реализаций sscanf вызывают strlen, поэтому не могу винить разработчика, который написал это. Я бы предположил, что он просто сканировал байт за байтом и мог остановиться на NULL.
Проблема 2: давайте использовать хэш-…массив?
Оказывается, второго преступника вызывают сразу за первым. Даже в одной и той же конструкции if, как видно из этой уродливой декомпиляции:
Все метки мои, и я понятия не имею, как на самом деле называются функции/параметры.
Вторая проблема? Сразу после разбора элемента он хранится в массиве (или встроенном списке C++? не уверен). Каждая запись выглядит примерно так:
А перед сохранением? Он проверяет весь массив, сравнивая хэш каждого элемента, есть он в списке или нет. С 63 тыс. записей это примерно (n^2+n)/2 = (63000^2+63000)/2 = 1984531500, если я не ошибаюсь в расчётах. И это в основном бесполезные проверки. У вас есть уникальные хэши, почему не использовать хэш-таблицу.
Во время реверс-инжиниринга я назвал его hashmap, но это явно не_hashmap. И дальше ещё интереснее. Этот хэш-массив-список пуст перед загрузкой JSON. И все элементы в JSON уникальны! Им даже не нужно проверять, есть они в списке или нет! У них даже есть функция прямой вставки элементов! Просто используйте её! Серьёзно, ну ребята, что за фигня!?
Всё это конечно классно, но никто не воспримет меня всерьёз, пока я не напишу реальный код для ускорения загрузки, чтобы сделать кликбейтный заголовок для поста.
Проблема с JSON нетривиальная, я не могу реально заменить их парсер. Более реалистичным кажется заменить sscanf на тот, который не зависит от strlen. Но есть ещё более простой способ.
* подождать длинной строки
* если поступит ещё вызов в пределах диапазона строки, вернуть закэшированное значение
Что-то вроде такого:
А что касается проблемы хэш-массива, то здесь просто полностью пропускаем все проверки и вставляем элементы напрямую, поскольку мы знаем, что значения уникальны.
Полный исходный код PoC здесь.
Ну и как оно работает?
Прежнее время загрузки онлайн-режима: около 6м
Время с патчем проверки дубликатов: 4м 30с
Время с парсером JSON: 2м 50с
Время с двумя патчами вместе: 1м 50с
Да, чёрт возьми, получилось! :))
Скорее всего, это не решит всех проблем с загрузкой — в разных системах могут быть и другие узкие места, но это такая зияющая дыра, что я понятия не имею, как R* пропустила её за все эти годы.
При запуске GTA Online есть узкое место, связанное с однопоточным вычислением
Оказалось, GTA изо всех сил пытается распарсить 10-мегабайтный файл JSON
Сам парсер JSON плохо сделан/наивен и
После парсинга происходит медленная процедура удаления дублей
R*, пожалуйста, исправьте
Если информация каким-то образом дойдёт до инженеров Rockstar, то проблему можно решить в течение нескольких часов силами одного разработчика. Пожалуйста, ребята, сделайте что-нибудь с этим :