Лидеры
Популярный контент
Показан контент с высокой репутацией 13.10.2014 во всех областях
-
Данная статья расскажет вам о создании чит-опции под названием «„Blink“ Teleport», которая позволяет телепортировать игрока в указанную точку, используя для её выбора какой-то объект (прицел, курсор, или что-то иное, что может указать место для телепортации). Этот чит является разновидностью всеми известной опции «Teleport» и его создание практически ничем от него не отличается, за исключением нескольких моментов. Примеры скриптов телепорта на форуме есть, а вот статьи на русском языке нету. Поэтому, сначала нужно рассказать о нём. Часть 1: «Teleport» Данный чит предназначен для быстрого перемещения игрового объекта (игрока) по заранее сохранённым или известным координатам. К примеру, вы взяли у НПС квест, который выполняется в другой части карты. Долго-долго шли, выполнили его и теперь нужно снова долго-долго возвращаться обратно для его сдачи. Чтобы сократить время бесполезного перемещения, умными геймхакерами была придумана опция «Teleport». Мы сохраняем координаты нахождения игрока около НПС и когда нужно, мы изменяем текущие координаты игрока на сохранённые, тем самым мгновенно перемещается к НПС. Стоит заметить, что данная опция предназначена для перемещения персонажа в игровом пространстве в играх с открытым миром или в пределах одного игрового уровня. Я не стану описывать трехмерную систему координат или строение игровых уровней. Для создания этих опций, как ни странно, знать это совершенно не обязательно (Но не ленитесь, поищите в гугле, там много информации на эту тему и это знание будет полезным). Нужно просто уметь находить хотя бы одну из координат. Все дальнейшие действия (в 99% случаев) сводятся к тому, что вы будете просто изменять инструкцию, её адрес, смещения и регистры в готовом шаблоне скрипта. Первой игрой для примера будет Tomb Rider 2013. Для начала нам нужно найти одну из координат игрока. Какую именно искать – решать вам. Лично я советую искать координату по оси Z (т.е. высоту), т.к. в большинстве игр, если мы спускаемся вниз, то значение координаты по оси Z уменьшается, если поднимаемся, то увеличивается. В случае же с X и Y, мы первоначально не знаем расположение игрока, относительно направления этих осей, поэтому мы можем идти вперёд и искать увеличивающееся значение, а на самом деле мы идём назад и значение координаты уменьшается. Итак, мы запустили игру и нашли подходящее место, где мы можем спускаться и подниматься. Ищем «Неизвестное значение» (Float), спускаемся и отсеиваем «Уменьшилось», поднимаемся и отсеиваем «Увеличилось» и так до тех пор, пока не найдем нужный нам адрес. Часто бывает так, что у нас остаётся много адресов, которые уменьшаются и увеличиваются вместе с нужным нам адресом или вообще имеют такое же значение. Что и произошло в данной игре. Добавляем их всех в таблицу, какую-то часть замораживаем и пытаемся прыгнуть в игре, если нам удалось это сделать, то это не те адреса. Размораживаем и удаляем их. И так, пока не найдем нужный адрес. Мы нашли адрес со значением координаты по оси Z. «02С7С7D8» (у вас он будет другим). Теперь ставим на него «Брейкпоинт на Доступ», всплывает много инструкций. Нам нужно выбрать подходящую инструкцию и убедиться, что она работает только с координатами игрока. Я выбрал «011E5D24 – 8B 50 08 – mov edx,[eax+08]». Нажимаем на неё правой кнопкой мыши и во всплывшем меню выбираем «Проверить адресам, к которым получают доступ выбранные инструкции (макс. 8)» Появляется окно. В нём отображается только 1 адрес, наш адрес. Отлично! (Желательно делать подобную проверку рядом с другими динамическими объектами – противниками, автомобилями и т.д. просто я первоначально знал, что данная инструкция верна) Теперь можно выделить этот адрес и нажать комбинацию клавиш «Ctrl+R» и там скопировать адрес напротив нужного регистра или вернуться в предыдущее окно, выделить нашу инструкцию и нажать на кнопку «Доп. Информация» Копируем адрес после «Предполагаемое значение указателя:». У меня это 02C7C7D0, и он является началом структуры, в которой расположены координаты игрока. Переходим в «Анализ данных/структур» и исследуем найденную структуру, содержащую координаты игрока Практически всегда все 3 координаты по осям X,Y,Z находятся рядом друг с другом. Отыскиваем уже найденную Z Добавляем в таблицу адреса находящиеся рядом с Z, замораживаем их по очереди и смотрим, можем ли мы перемещаться в какую-либо сторону, если нет, значит мы нашли ещё какую-то из координат. Отлично, адреса по смещению 0, 4, 8 и есть адреса с нашими координатами. Переходим к написанию скрипта. Мы написали скрипт, добавили его в таблицу. Теперь туда же нужно добавить флаги «_saveCoords» и «_loadCoords» И когда нам нужно сохранить или загрузить координаты, мы просто меняем значение одного из этих адресов на 1 (можно вручную, а можно установить Хоткей). Вот, в принципе, и всё. Это самый простой скрипт телепорта, его можно сделать и более навороченным, но наша главная цель – «„Blink“ Teleport», для которого этого будет достаточно. Часть 2: «„Blink“ Teleport» А что, если нам нужно переместиться в место, где мы ещё не были? В опции «Teleport» мы сначала сохраняли координаты нашего объекта, а уже потом заменяли его текущие координаты на сохранённые. А вот в «„Blink“ Teleport» всё тоже самое, только мы заменяем текущие координаты нашего объекта на текущие координаты другого объекта. А какой объект, помимо игрока, мы ещё можем перемещать? Прицелом! Во многих играх (не во всех, а значит и эту опцию реализовать именно так не всегда получится) прицел задаёт траекторию движения пуль. Грубо говоря, прицел показывает вон туда, после выстрела там должна быть дырка. Координаты этого «вон туда» мы и должны попытаться найти. Опять вам нужно начать поиск «Неизвестного значения», изменять расположение прицела и отсеивать «Увеличилось»/«Уменьшилось». Можно встать у ровной стены и, перемещая прицел вверх/вниз, искать координату по оси Z, как в случае с игроком, но я стал искать координату по оси Y, т.к. можно поставить прицел как можно ближе к ногам игрока, текущие координаты которого нам известны, и начать с поиска «Диапазона», что значительно уменьшит число ложных адресов. Далее можно продолжать отсеивать «Увеличилось»/«Уменьшилось». В общем, любым удобным методом находим одну из координат прицела. Далее, повторяя те же действия, что мы делали в первой части статьи, мы находим инструкцию, начало структуры и смещение адресов с координатами в ней. И изменяем наш скрипт телепорта В нём всё тоже самое, только скрипт уже работает с двумя разными инструкциями. В «_save:» теперь происходит сохранение не координат игрока, а прицела. Флаг «_saveCoords» уже нам не нужен (Но его можно поставить, если вы хотите данный телепорт не сразу). В «_load:» всё осталось без изменений. Активируем скрипт, прицеливаемся в выбранную точку, меняем значение флага «_loadCoords» на 1 и вуаля. Но не всегда бывает всё так гладко с нахождением координат. К примеру возьмём игру «Санитары Подземелий» (1 и 2 части). Получать координаты для телепортации мы будем из курсора, точнее из зелёного кружочка, который указывает конечную точку перемещения Хартмана. Если мы расположим его в том же месте, где стоит Хартман, то увидим, что координаты по оси X и Y равны, а вот по Z отличаются (координаты курсора) (координаты игрока) Высота расположения курсора ниже на 3, чем у Хартмана. Если в первой части игры это никак не отображалось на телепортации, то во второй Хартман проваливался под землю. Следовательно в скрипте пришлось делать небольшую поправку, а именно уменьшать значение координаты курсора по оси Z на 3 Это лишний раз говорит о том, что не всегда может быть точно так же, как и в статье. Стоит так же отметить, что сейчас существует много игр с якобы открытым миром, где при обычном прохождении ничего не замечаешь, а на самом деле там всё строго заскриптовано. И, если перепрыгнуть заскриптованную сцену при помощи данного чита, то могут появиться различные глюки, вплоть до невозможности пройти дальше. Удачи! © SER[G]ANT 20131 балл
-
1 балл
-
А я тока начал привыкать . Может это к лучшему. Вот кто не успел смотрите. Скин Парадокс рулит.1 балл
-
1 балл
-
Xipho это не мое конечно, что тебя заставляет к переходу на новый хостер?, я так понял это новый хостер подвел.1 балл
-
Ну что можно сказать!!! 1: Находишь адрес жизней своего юнита допустим, делаешь бряк на запись в этот адрес.2: Создаешь авто-скрипт на ту инструкция которая появиться. Типо такой mov [esi+24C],eaxВот пример, метку exit я убрал, она просто не нужна: [ENABLE]Alloc(newmem,128)Label(returnhere)Label(originalcode) newmem: originalcode:mov [esi+24C],eaxjmp returnhere GAME.EXE+12345678:jmp newmemnopreturnhere: [DISABLE]Dealloc(newmem)GAME.EXE+12345678:mov [esi+24C],eax 3: Находишь адреса 2-3 юнитов врага.Как найти адреса жизней врагов?В отладчике жмёшь правой кнопкой мыши на брякнутую инструкцию и выбираешь:"Найти адреса, получающие доступ к этой инструкции". Появится окошко для адресов.После этого ударь по одному разу 2 врагов. И в этом окошке появиться адреса врагов.Добавьте их в список, двойным нажатием левой кнопки мышки.4: В отладчике жмёшь на "Инструменты > Анализ данных/Структур" появится окно, в этом окнедалее жмёшь "Файл > Добавить новую группу" штуки 2 для врагов, поскольку одна будет уже для тебя. 5: В первую группу вбиваешь свой адрес жизней юнита, типо так 12345678-24C24С - Это смещение в брякнутой инструкции к динамическому адресу.Ну и врагов адреса также делаешь в 2 и 3 группу заносишь.Во второй группе где адрес врага, жмёшь правой кнопки мышки и выбираешь "Изменить группу"далее в новом окошке выбираешь группу номер 3 и подтвердить, то есть адреса 2 врагов будут в одной группе.Потом в окне "Анализ структуры" жмёшь на "Структуры > Определить новую структуру" и жмёшь: "Подтвердить > Да > Подтвердить" после этого появиться смещения, адреса и значения. Находишь одно уникальное смещение, то есть твоё значение например 1, а у врагов должно быть по 0-ям. Рекомендую перезапустить игру и проделать заново анализ данных/структур, чтобы точно найти правильное смещение и значение. Типо так: Анализ структур: Смещение-описание Адрес: Значение Адрес: Значение Адрес: Значениебезымянная структура0260 - 4 Bytes 12345678 : 1 12345678 : 0 12345678 : 0 6: Запоминаем смещение 0260 и значение 1 и дорабатываем наш скрипт. Примечание:Я добавил ещё одну инструкцию в скрипт и изменил на её смещение,которая находится чуть выше над этой mov [esi+24C],eax Типо так, этот образец основан на стратегии Red Alert 2: [ENABLE] // Включение скрипта.Alloc(newmem,128) // Выделенная память пустоты на 128 байт.Label(returnhere) // Обратный прыжок.Label(originalcode) // Метка для оригинального кода.Label(originalcode2) // Добавил новую метку. newmem: // Выделенная памятьcmp byte ptr [esi+260],01 // Сравниваю общий регистр с нашим смещением и значение.je originalcode2 // Если равно, то прыгаю на полу изменённый код.jmp originalcode // Делаю прыжок на оригинальный код. originalcode2: // Метка для нашего кода бессмертия.nop // Здесь затёрли ненужную инструкцию test eax,eaxnopmov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.jmp returnhere // Делаем прыжок обратно. originalcode: // Метка для нашего оригинального кода.test eax,eax // Оригинальная инструкция которая находится над брякнутой.mov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.jmp returnhere // Делаем прыжок обратно. GAME.EXE+87654321: // Это модуль файла игры + смещение.jmp newmem // Делаем прыжок на выделенную память.nop // Здесь затёрли остаток части оригинального кода.nop // Чтобы не нарушать логику кода, а то будет вылет из игры.nopreturnhere: [DISABLE] // Выключение скрипта.Dealloc(newmem) // Высвобождение выделенной памяти (Дабы не засорять память).GAME.EXE+87654321: // Это модуль файла игры + смещение.test eax,eax // Оригинальная инструкция которая находится над брякнутой.mov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк. В игре Red Alert 2 скрипт работал, все твои созданные войска и построенные здания были бессмертными. Хотя можно написать скрипт и по другому, вариантов много, кому как удобно.1 балл
-
Во многих играх у маркера на карте нет координаты высоты Z. В GTA 4-5 она равна единице, в Assassin's Creed нулю. Есть способы победить баг\вычислить эту высоту? т.е. телепортить игрока, а потом быстренько поставить его на землю тем или иным способом. В той же GTA игра сама ставит игрока на землю после небольшого полёта в вакууме, а в AC игрок умирает(( В общем, я исходил из предположения что игра где-то хранит координату уровня земли. Идея бредовая, но с асассин кридом прокатила вроде как. Искал координату высоты, равную координате высоты игрока если он стоит на земле. А если карабкается по стене, то этот адрес не меняется, пока он не долезет до крыши. Нашёлся всего один адрес Написал скрипт телепорта, заменив Z на найденный адрес, вроде работает! Надо на других играх проверить этот способ...1 балл
-
Ну, сам прицел вообще может ни на что не влиять, а быть лишь элементом HUD, игры сейчас всё сложнее и сложнее.1 балл