SER[G]ANT Опубликовано 6 ноября, 2013 Поделиться Опубликовано 6 ноября, 2013 Данная статья расскажет вам о создании чит-опции под названием «„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 и есть адреса с нашими координатами. Переходим к написанию скрипта. Скрытый текст [ENABLE] aobscanmodule(_loadAOB,TombRaider.exe,8b50088b400ce9xxxxxxxx8bxx8bxxxx8bxxxxxxxxb9xxxxxxxxe8xxxxxxxx85) alloc(MyCheat,2048) label(_loadRet) label(_loadOrg) label(coordX) label(coordY) label(coordZ) label(_save) label(_load) label(_saveCoords) label(_loadCoords) registersymbol(_saveCoords) registersymbol(_loadCoords) registersymbol(_loadAOB) MyCheat: _save: cmp [_saveCoords],1 //Если _saveCoords = 1, то будет выполняться код сохранения координат jne short _load //Если _saveCoords не равно 1, то будет выполнен переход на _load, где находится код загрузки координат push ecx //помещаем ecx в стек mov ecx,[eax] //помещаем в ecx значение регистра eax (т.е. текущее значение адреса с координатой X. Записываем его как [eax], т.к. //в структуре, которую мы исследовали, смещение этого адреса равнялась 0, т.е. [eax+0], что тоже самое). mov [coordX],ecx //помещаем значение регистра ecx, в coordX (Тут и будет сохраняться значение координаты X) //Далее всё тоже самое, только для Y и Z. mov ecx,[eax+4] mov [coordY],ecx mov ecx,[eax+8] mov [coordZ],ecx pop ecx //убираем ecx из стека. mov [_saveCoords],0 //изменяем значение флага на 0, чтобы сохранение координат больше не происходило. jmp _loadOrg //Переход на выполнение оригинального кода _load: //данный код будет выполняться, только если значение флага _saveCoords не равно 1 //Т.е. будет выполняться // cmp [_saveCoords],1 // jne short _load //а затем код ниже cmp [coordX],0 //защита от дурака. Делаем её по любой из координат. Т.к. адреса coordX, coordY и coordZ первоначально имеют значение 0. //Без этой проверки, если кто-то вначале не сохранит координаты, но произведет их загрузку, то он телепортнётся по координатам x=0, y=0,z=0 je short _loadOrg //если coordX=0, то выполняем оригинальный код cmp [_loadCoords],1 //Если _loadCoords = 1, то будет выполняться код сохранения координат jne short _loadOrg //Если _loadCoords не равно 1, то будет выполнен переход на оригинальный код push ecx //снова помещаем ecx в стек mov ecx,[coordX] //Помещаем сохранённое в coordX значение координаты по оси X в регистр ecx mov [eax],ecx //и уже из регистра ecx помещаем значение в eax, т.е. заменяем текущие координаты игрока на сохраненные //далее всё тоже самое mov ecx,[coordY] mov [eax+4],ecx mov ecx,[coordZ] mov [eax+8],ecx pop ecx mov [_loadCoords],0 //изменяем значение флага на 0, чтобы загрузка координат больше не происходила. _loadOrg: //оригинальный код mov edx,[eax+08] mov eax,[eax+0C] jmp _loadRet //Тут будут располагаться наши метки и флаги coordX: dd 0 coordY: dd 0 coordZ: dd 0 _saveCoords: dd 0 _loadCoords: dd 0 _loadAOB: //"TombRaider.exe"+2E5D24: jmp _save db 90 _loadRet: [DISABLE] _loadAOB: mov edx,[eax+08] mov eax,[eax+0C] unregistersymbol(_saveCoords) unregistersymbol(_loadCoords) unregistersymbol(_loadAOB) dealloc(MyCheat) Мы написали скрипт, добавили его в таблицу. Теперь туда же нужно добавить флаги «_saveCoords» и «_loadCoords» И когда нам нужно сохранить или загрузить координаты, мы просто меняем значение одного из этих адресов на 1 (можно вручную, а можно установить Хоткей). Вот, в принципе, и всё. Это самый простой скрипт телепорта, его можно сделать и более навороченным, но наша главная цель – «„Blink“ Teleport», для которого этого будет достаточно. Часть 2: «„Blink“ Teleport» А что, если нам нужно переместиться в место, где мы ещё не были? В опции «Teleport» мы сначала сохраняли координаты нашего объекта, а уже потом заменяли его текущие координаты на сохранённые. А вот в «„Blink“ Teleport» всё тоже самое, только мы заменяем текущие координаты нашего объекта на текущие координаты другого объекта. А какой объект, помимо игрока, мы ещё можем перемещать? Прицелом! Во многих играх (не во всех, а значит и эту опцию реализовать именно так не всегда получится) прицел задаёт траекторию движения пуль. Грубо говоря, прицел показывает вон туда, после выстрела там должна быть дырка. Координаты этого «вон туда» мы и должны попытаться найти. Опять вам нужно начать поиск «Неизвестного значения», изменять расположение прицела и отсеивать «Увеличилось»/«Уменьшилось». Можно встать у ровной стены и, перемещая прицел вверх/вниз, искать координату по оси Z, как в случае с игроком, но я стал искать координату по оси Y, т.к. можно поставить прицел как можно ближе к ногам игрока, текущие координаты которого нам известны, и начать с поиска «Диапазона», что значительно уменьшит число ложных адресов. Далее можно продолжать отсеивать «Увеличилось»/«Уменьшилось». В общем, любым удобным методом находим одну из координат прицела. Далее, повторяя те же действия, что мы делали в первой части статьи, мы находим инструкцию, начало структуры и смещение адресов с координатами в ней. И изменяем наш скрипт телепорта Скрытый текст [ENABLE] aobscanmodule(_loadAOB,TombRaider.exe,8b50088b400ce9xxxxxxxx8bxx8bxxxx8bxxxxxxxxb9xxxxxxxxe8xxxxxxxx85) aobscanmodule(_saveAOB,TombRaider.exe,8983f40a000089xxxxxxxxxx89xxxxxxxxxx8bxxxxxxxxxxxxxxxxxx33xxe8) alloc(MyCheat,2048) label(_loadRet) label(_loadOrg) label(coordX) label(coordY) label(coordZ) label(_save) label(_load) label(_loadCoords) registersymbol(_loadCoords) registersymbol(_loadAOB) label(_saveRet) registersymbol(_saveAOB) MyCheat: _save: //сохранение координат прицела push ecx mov ecx,[ebx+AF0] mov [coordX],ecx mov ecx,[ebx+AF4] mov [coordY],ecx mov ecx,[ebx+AF8] mov [coordZ],ecx pop ecx mov [ebx+00000AF4],eax jmp _saveRet _load: //загрузка координат прицела cmp [_loadCoords],1 jne short _loadOrg cmp [coordX],0 je short _loadOrg push ecx mov ecx,[coordX] mov [eax],ecx mov ecx,[coordY] mov [eax+4],ecx mov ecx,[coordZ] mov [eax+8],ecx pop ecx mov [_loadCoords],0 _loadOrg: mov edx,[eax+08] mov eax,[eax+0C] jmp _loadRet coordX: dd 0 coordY: dd 0 coordZ: dd 0 _saveCoords: dd 0 _loadCoords: dd 0 _loadAOB: //"TombRaider.exe"+2E5D24: //координаты игрока jmp _load db 90 _loadRet: _saveAOB: //"TombRaider.exe"+5225E3: //координаты прицела jmp _save db 90 _saveRet: [DISABLE] _loadAOB: mov edx,[eax+08] mov eax,[eax+0C] _saveAOB: mov [ebx+00000AF4],eax unregistersymbol(_loadAOB) unregistersymbol(_loadCoords) unregistersymbol(_saveAOB) dealloc(MyCheat) В нём всё тоже самое, только скрипт уже работает с двумя разными инструкциями. В «_save:» теперь происходит сохранение не координат игрока, а прицела. Флаг «_saveCoords» уже нам не нужен (Но его можно поставить, если вы хотите данный телепорт не сразу). В «_load:» всё осталось без изменений. Активируем скрипт, прицеливаемся в выбранную точку, меняем значение флага «_loadCoords» на 1 и вуаля. Но не всегда бывает всё так гладко с нахождением координат. К примеру возьмём игру «Санитары Подземелий» (1 и 2 части). Получать координаты для телепортации мы будем из курсора, точнее из зелёного кружочка, который указывает конечную точку перемещения Хартмана. Если мы расположим его в том же месте, где стоит Хартман, то увидим, что координаты по оси X и Y равны, а вот по Z отличаются (координаты курсора) (координаты игрока) Высота расположения курсора ниже на 3, чем у Хартмана. Если в первой части игры это никак не отображалось на телепортации, то во второй Хартман проваливался под землю. Следовательно в скрипте пришлось делать небольшую поправку, а именно уменьшать значение координаты курсора по оси Z на 3 Скрытый текст …. _save: //сохранение координат курсора push ecx mov ecx,[ebx+94] mov [coordX],ecx mov ecx,[ebx+98] mov [coordY],ecx mov ecx,[ebx+a9] mov [coordZ],ecx pop ecx mov eax,[ebx+94] jmp _saveRet _load: //загрузка координат курсора cmp [_loadCoords],1 jne short _loadOrg push ecx mov ecx,[coordX] mov [esi+254],ecx mov ecx,[coordY] mov [esi+258],ecx mov ecx,[coordZ] //Помещаем координат курсора по оси Z в регистр ecx sub ecx,(float)3 //Вычитаем из него 3 (float) mov [esi+260],ecx //Остаток помещаем в адрес с текущими координатами игрока по оси Z pop ecx mov [_loadCoords],0 _loadOrg: movss xmm1,[esi+254] jmp _loadRet … Это лишний раз говорит о том, что не всегда может быть точно так же, как и в статье. Стоит так же отметить, что сейчас существует много игр с якобы открытым миром, где при обычном прохождении ничего не замечаешь, а на самом деле там всё строго заскриптовано. И, если перепрыгнуть заскриптованную сцену при помощи данного чита, то могут появиться различные глюки, вплоть до невозможности пройти дальше. Удачи! © SER[G]ANT 2013 9 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 ноября, 2013 Поделиться Опубликовано 6 ноября, 2013 (изменено) К статье, тоже самое Lua + AA (пустое окно формы, связка с хоткеями) :Надеюсь работает, т.к. не проверялTomb Rider 2013- VK_K - сохранить позицию- VK_M - сохранить позицию пересечения луча из камеры с поверхностью коллизии- VK_L - загрузить позициюgameProcessName = "TombRaider.exe"cheatTeleport_storyPosX = 0.0cheatTeleport_storyPosY = 0.0cheatTeleport_storyPosz = 0.0function CheatTeleport_OnStartTrainer()autoassemble([[aobscanmodule(_SignTeleport,TombRaider.exe, 8b50088b400ce9xxxxxxxx8bxx8bxxxx8bxxxxxxxxb9xxxxxxxxe8xxxxxxxx85)aobscanmodule(_SignHitRayCamera,TombRaider.exe,8983f40a000089xxxxxxxxxx89xxxxxxxxxx8bxxxxxxxxxxxxxxxxxx33xxe8)alloc(_MemorySavePointerHeroPosition,2048)label(_BackSignTeleport)label(_pVector3HeroPosition)registersymbol(_pVector3HeroPosition)label(_BackSignHitRayCamera)label(_pVector3HitPointRayPosition)registersymbol(_pVector3HitPointRayPosition)_MemorySavePointerHeroPosition:mov [_pVector3HeroPosition], eaxmov edx,[eax+08]mov eax,[eax+0C]jmp _BackSignTeleport_MemoryHitRayCamera:push eaxlea eax, [ebx+00000AF4]mov [_pVector3HitPointRayPosition],eaxpop eaxmov [ebx+00000AF4],eaxjmp _BackSignHitRayCamera_pVector3HeroPosition:dd ffffffff_pVector3HitPointRayPosition:dd ffffffff_SignTeleport: //"TombRaider.exe"+2E5D24:jmp _MemorySavePointerHeroPositiondb 90_BackSignTeleport:_SignHitRayCamera: //"TombRaider.exe"+5225E3:jmp _MemoryHitRayCameradb 90_BackSignHitRayCamera:]])endfunction CheatTeleport_SavePosition()writeFloat(getAddress('_pVector3HeroPosition'), cheatTeleport_storyPosX)writeFloat(getAddress('_pVector3HeroPosition+4'), cheatTeleport_storyPosY)writeFloat(getAddress('_pVector3HeroPosition+8'), cheatTeleport_storyPosZ)endfunction CheatTeleport_LoadPosition()cheatTeleport_storyPosX = readFloat(getAddress('_pVector3HeroPosition'))cheatTeleport_storyPosY = readFloat(getAddress('_pVector3HeroPosition+4'))cheatTeleport_storyPosZ = readFloat(getAddress('_pVector3HeroPosition+8'))endfunction CheatTeleport_SaveHitRayPosition()cheatTeleport_storyPosX = readFloat(getAddress('_pVector3HitPointRayPosition'))cheatTeleport_storyPosY = readFloat(getAddress('_pVector3HitPointRayPosition+4'))cheatTeleport_storyPosZ = readFloat(getAddress('_pVector3HitPointRayPosition+8'))endfunction OnCheckHotkeys()if isKeyPressed(VK_K) thenCheatTeleport_SavePosition()returnendif isKeyPressed(VK_L) thenCheatTeleport_LoadPosition()returnendif isKeyPressed(VK_M) thenCheatTeleport_SaveHitRayPosition()returnendendfunction onOpenProcess(processid)CheatTeleport_OnStartTrainer()hotKeyTimer = createTimer(trainerForm)timer_setInterval(hotKeyTimer, 100)timer_onTimer(hotKeyTimer, OnCheckHotkeys)endfunction onCloseClick(sender)closeCE()return caFreeendtrainerForm = createForm()form_onClose(trainerForm, onCloseClick)autoAttachList = getAutoAttachList()stringlist_add(autoAttachList, gameProcessName)Точка в которую попадает прицел может рассчитываться не каждый кадр рендеринга и разными участками кода. Т.е. адресов этой точки может быть от одного до нескольких и обновляться они могут не постоянно. Адрес под прицелом может находиться в стеке(локальная переменная функции) и сканером памяти адрес точки под прицелом уже вряд ли найти. Под прицелом могут попадать не только предметы, но и стены, любые поверхности имеющие коллизии - упрощенные невидимые поверхности-сетки для физических взаимодействий , для ограничений перемещения или для следов от пуль на поверхности... Изменено 8 ноября, 2013 пользователем MasterGH Исправлены ошибки в скрипте Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 6 ноября, 2013 Автор Поделиться Опубликовано 6 ноября, 2013 Ну, сам прицел вообще может ни на что не влиять, а быть лишь элементом HUD, игры сейчас всё сложнее и сложнее. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 6 ноября, 2013 Поделиться Опубликовано 6 ноября, 2013 хорошая статья SER[G]ANT, благодарю. Ссылка на комментарий Поделиться на другие сайты Поделиться
boss Опубликовано 6 ноября, 2013 Поделиться Опубликовано 6 ноября, 2013 кому то нрав видео записывать а кто то пишет письменно ))) тяжко понять ((( ну а так спасибо давно ждал )вопрос а если такая карта то как сделать телепорт по такой карте ?? Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 8 ноября, 2013 Автор Поделиться Опубликовано 8 ноября, 2013 Отвечу, только если вы предоставите свои наработки.Приворотом и наведением порчи по фотографии я не занимаюсь. Ссылка на комментарий Поделиться на другие сайты Поделиться
boss Опубликовано 8 ноября, 2013 Поделиться Опубликовано 8 ноября, 2013 какие наработки ??? если я хз как это сделать, и спросил можно ли так это сделать как у вас написано выше, просто это уже совсем другое Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 9 ноября, 2013 Автор Поделиться Опубликовано 9 ноября, 2013 А в чём разница? То, что в статье совсем другие картинки? В различных играх уровень здоровья отображается по разному, разве от этого что-то кардинально меняется?Статья даёт лишь базовые знания и не может ответить на все ваши вопросы и ситуации, которые вы встретите. Вы рассматриваете её как 100% шаблон, и если что-то отличается - всё, безвыходная ситуация! Но, судя по вашему последнему ответу, вы даже и не пытались попробовать.Если не учитывать, что на скриншотте сетевая игра (это же просто, как пример), то я не вижу ничего сложного в создании телепорта для человека, умеющего просто посидеть и подумать. (в игре, где это вообще возможно реализовать)Задайте себе вопросы:Координаты на глобальной карте и в игровом мире отличаются, если да, то как?Как или чем можно узнать координаты нужного вам места для телепорта?Если это не открытый мир, то как в игре происходит смена игровых уровней?Ваш эльф (или кто это там) управляет курсором на глобальной карте или наоборот?И т.д. и т.п. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 19 ноября, 2013 Поделиться Опубликовано 19 ноября, 2013 (изменено) Во многих играх у маркера на карте нет координаты высоты Z. В GTA 4-5 она равна единице, в Assassin's Creed нулю. Есть способы победить баг\вычислить эту высоту? т.е. телепортить игрока, а потом быстренько поставить его на землю тем или иным способом. В той же GTA игра сама ставит игрока на землю после небольшого полёта в вакууме, а в AC игрок умирает((В общем, я исходил из предположения что игра где-то хранит координату уровня земли. Идея бредовая, но с асассин кридом прокатила вроде как. Искал координату высоты, равную координате высоты игрока если он стоит на земле. А если карабкается по стене, то этот адрес не меняется, пока он не долезет до крыши. Нашёлся всего один адрес Написал скрипт телепорта, заменив Z на найденный адрес, вроде работает!Надо на других играх проверить этот способ... Изменено 19 ноября, 2013 пользователем aliast 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ArxLex Опубликовано 23 ноября, 2013 Поделиться Опубликовано 23 ноября, 2013 Отличная статья, давно хотел сделать такой телепорт для игры TESV: Skyrim. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 18 сентября, 2014 Поделиться Опубликовано 18 сентября, 2014 (изменено) . Изменено 3 августа, 2015 пользователем AntonVit Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 18 сентября, 2014 Автор Поделиться Опубликовано 18 сентября, 2014 Я сейчас уже и не вспомню.Возможно я перезапускал игру, возможно Cheat Engine так решил (модульные адреса я копирую из CE, а не высчитываю их), может в Sеeam вышло обновление. Правда, я сейчас точно не вспомню. В любом случае, я использовал AOBScan. Не придирайтесь особо к этому, но всё равно спасибо за замечание. Вы хотите сделать телепорт по уже известным координатам. Вам просто нужно переделать или просто удалить первую часть скрипта и вписывать в coordX,coordY,coordZ уже известные. Можно луа скриптом, можно обычным скриптом, как вам будет удобней. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 19 сентября, 2014 Поделиться Опубликовано 19 сентября, 2014 (изменено) . Изменено 3 августа, 2015 пользователем AntonVit Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 19 сентября, 2014 Автор Поделиться Опубликовано 19 сентября, 2014 Нет, возможно это я не совсем корректно выразился. Лучше было написать "не обращайте особого внимания".Словом "придираться" у меня и в мыслях не было как-то нагрубить Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Durantx Опубликовано 13 октября, 2014 Поделиться Опубликовано 13 октября, 2014 что не так с этим скриптом аоб правильный ну и т д а игра просто вылетает что делать[ENABLE]alloc(cheatByteCodeZ,2048)label(returnhereZ)aobscan(aob_scanZ,DD 40 18 DD 5F 18 8B)label(aob_scanZ)registersymbol(aob_scanZ)label(QWordValueZ)registersymbol(QWordValueZ)label(QWordValue)registersymbol(QWordValue)//########################################cheatByteCodeZ:fld qword ptr [eax+18]fstp qword ptr [edi+18]push eaxfld [QWordValueZ] // подгрузил, возможно вытолкнул что нужное стека...fcomp qword ptr [edi+08]fnstsw axtest ah,0x41jne returnhereZ// fld [QWordValueZ] // уже загружалfcomp qword ptr [edi+10]fnstsw axtest ah,0x41jne returnhereZfld qword ptr [QWordValue]fstp qword ptr [edi+08]fld qword ptr [QWordValue]fstp qword ptr [edi+10]returnhereZ:fstp [QWordValueZ] // подгрузил, но оставил невыгруженным.pop eaxret //*****************возврат к месту вызова//****************объявить переменные можно в конце страницы cheatByteCodeZQWordValueZ:dq (double)10000QWordValue:dq (double)10//########################################//*****************инжект вызова процедуры cheatByteCodeZaob_scanZ:call cheatByteCodeZnop//########################################[DISABLE]//****************возвращаем как былоaob_scanZ:fld qword ptr [eax+18]fstp qword ptr [edi+18]//****************стираем все что создавалиunregistersymbol(aob_scanZ)unregistersymbol(QWordValueZ)unregistersymbol(QWordValue)dealloc(cheatByteCodeZ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 13 октября, 2014 Поделиться Опубликовано 13 октября, 2014 Ты телепорт что-ли делаешь?Где тут сравнение структур это раз?Очень интересная у тебя логика это два.Где сохраняешь и выгружаешь данные координат это три?Где дополнительные переменные на сохранение и загрузку, это четыре?Пятое ты что-то намутил со смещениями у тебя [edi+08] и [edi+10], а в оригинале [edi+18].Ну и 6 скажи что за игра, может кто-то уже ломал и давно решение проблемы есть. Я тебе вкратце логику телепорта подскажу(на двумерной игре как у тебя). И так по пунктам. 0) программа СЕ или любой другой сканер памяти, свежая голова, время и терпение :-)1) для начала ищешь координаты (высота, ширина)2) ставишь брейкпоинт(брейк) на доступ(ИМЕННО НА ДОСТУП)3) смотришь какие инструкции все время обращаються к адресу4) вибираешь инструкцию которая работала бы только с твоим героем(ну это везение), а если такой нет делаешь фильтр (примеры 1, 2, 3), ну или используешь поинтеры (работать будет скорее всего на конкретной версии игры и ее сборке) как искать поинтер, как использовать поинтер, ну и мой пример в таблице к игре darksiders5) далее логика скрипта должна быть следующей: а) все метки оставляй как есть б) дальше добавляй метки для координат(их 2, так-как игра 2мерная), метки для включения сохранения и загрузки координат, метки сохранения и загрузки координат, регистрация (дерегистрация в конце скрипта) символов, а именно для координат и для включения сохранения и загрузки координат. в) ОБЯЗАТЕЛЬНО должна быть ОРИГИНАЛЬНАЯ инструкция!!! г) далее должна быть проверка включили ли мы сохранить или нет, если да, то сохраняем и прыжок на ОРИГИНАЛЬНУЮ ИНСТРУКЦИЮ д) далее должна быть проверка включили ли мы загрузить или нет, если да, то загружаем и прыжок на ОРИГИНАЛЬНУЮ ИНСТРУКЦИЮ е) далее, если мы ничего не хотим сохранять/загружать прыжок на ОРИГИНАЛЬНУЮ ИНСТРУКЦИЮ 7) если все сделали правильно, то проверяем и радуемся жизни P.S.: если работаешь с типом дабл(double), а qword ptr не помогает, то надо разделить этот тип на 2 типа по 4 байта(как это сделать думай сам, я забыл как делать)Ну на этом все. Удачи тебе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Durantx Опубликовано 13 октября, 2014 Поделиться Опубликовано 13 октября, 2014 это скрипт тигры не мой.Я думал он всё сделал правильно но нет.Игра ил 2 штурмовик версия 4.12.2m вот сомневаюсь что кто то там телепорт делал, первый трейнер и то я написал а в инете нигде нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 января, 2015 Поделиться Опубликовано 6 января, 2015 Удачи!© SER[G]ANT 2013Ну во-первых за статью - Спасибо! С первой частью успешно справился - стандартный "Телепорт" для Fallout 3 (над которой я сейчас измываюсь) работает на ура. Решил попробовать написать телепорт по прицелу, но координаты прицела находятся, как мне показалось, всего в полутора метрах от координат ГГ и смысла в написании такого скрипта нет. Но скорее всего или я не правильно ищу координаты прицела, или для данной игры нужно вместо прицела использовать что-то другое. Подскажите как для данной игры написать второй вариант "Телепорта". Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 7 января, 2015 Поделиться Опубликовано 7 января, 2015 garik66 я же тебе давал линк на свою таблицу к игре Darksiders. Там есть реализация(рабочая) на блинк телепорт. Что тебе стоит скачать игру и посмотреть на реализацию? Множество ответов есть в моей таблице и создавал я ее именно для того чтоб по ней все было понятно. Вряд ли кто здесь скажет что тебе конкретно надо делать в игре Fallout 3.Тебе дают алгоритм и по нему смотри как себя ведет игра. В каждой игре есть свои ньюансы и эти ньюансы ты должен найти и использовать. И приступим к твоему вопросу: Решил попробовать написать телепорт по прицелу, но координаты прицела находятся, как мне показалось, всего в полутора метрах от координат ГГ и смысла в написании такого скрипта нет. Но скорее всего или я не правильно ищу координаты прицела, или для данной игры нужно вместо прицела использовать что-то другое. В полутора метрах так и должно быть! Прицел не всегда должен показывать конкретное значение координаты игрока. И смысл в написании скрипта тоже есть. Напиши скрипт и затести его. Можешь смело использовать способ, который есть реализован у меня(я буду только рад, если у тебя все получиться). Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 января, 2015 Поделиться Опубликовано 7 января, 2015 garik66 я же тебе давал линк на свою таблицу к игре Darksiders. Для меня в твоём посте оказалось ноль информативности.Скачал я твою таблицу, посмотрел скрипт «„Blink“ Teleport» примерно такой-же как и у SER(G)ANTа (думаю как и у остальных). У меня в данном случае проблема не в том чтобы написать скрипт (с этим я справлюсь), а в нахождении адресов координат прицела.То что я находил, это были какие-то координаты, которые меняются незначительно, если смещать прицел, поэтому и написал, а есть ли смысл писать данный скрипт, если координаты так близки. Но думаю я ошибаюсь в поиске и то что я находил - это не координаты прицела. А вот как искать именно координаты прицела я пока не понял.Делал так:Начинал поиск также, как писал SER(G)ANT, т.е. ставил прицел прямо к ногам ГГ и искал диапазон (по координате X или Y в данном случае не важно), чтобы сразу снизить количество адресов. Потом удалял (приближал) прицел и отсеивал увеличилось (уменьшилось). Но оставалось всё равно довольно много адресов (от 30 до 100) и какой из них отвечает за прицел не понятно. Заморозка адресов никчему не приводила (т.е. прицел свободно двигался - я не в курсе должен ли он перестать двигаться, если я найду например координату X прицела и заморожу её).Так что, если есть более точный способ нахождения координат прицела - опиши его. А готовый скрипт мне ничего нового не даст. И смысл в написании скрипта тоже есть. Напиши скрипт и затести его. Скрипт не писал, потому что нет уверенности, что это координаты прицела. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 7 января, 2015 Поделиться Опубликовано 7 января, 2015 Что-то вы тут интересное делаете) Тоже наверно поковыряю) Блинк, да? Опыт перемещения Лары Крофт в задницу к оленям есть, так что должно и тут получиться) Fallout 3 или потом ещё и New Vegas модить собираетесь? Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 7 января, 2015 Поделиться Опубликовано 7 января, 2015 Скрипт не писал, потому что нет уверенности, что это координаты прицела. Для начала координаты игрока находятся по адресам[Fallout3.exe+C7A104]+2C - X-координата[Fallout3.exe+C7A104]+30 - Y-координата[Fallout3.exe+C7A104]+34 - Z-координата А чуть ранее, то что видимо и было найдено("маленькие числа") - это углы поворота игрока в радианах[Fallout3.exe+C7A104]+20 - поворот по оси X (от -1.553343058 до 1.553343058) смотрим вверх/вниз[Fallout3.exe+C7A104]+28 - поворот по оси Z (от 0 до 6.282012463) влево/вправо, 0 на севере далее по часовой стрелке Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 января, 2015 Поделиться Опубликовано 7 января, 2015 Для начала координаты игрока находятся по адресамА чуть ранее, то что видимо и было найдено("маленькие числа") - это углы поворота игрока в радианахВсё таки просьба, если читаете сообщения и участвуете в обсуждении, то читайте пжлста внимательнее:Во-первых: координаты ГГ я давно нашёл и написал даже скрипт "Телепорт" (если интересно см. обсуждение здесь и скрипт здесь) .Во-вторых: то что ты нашёл - это не координаты ГГ. А что-то другое. И повторюсь, мне нужно найти координаты прицела, как их найти не понимаю до конца. Вот если подскажешь способ нахождения координат прицела - буду премного благодарен.PS: почему это не координаты ГГ, попробуй "заморозь" их и увидишь. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 7 января, 2015 Поделиться Опубликовано 7 января, 2015 И повторюсь, мне нужно найти координаты прицела, как их найти не понимаю до конца. Вот если подскажешь способ нахождения координат прицела - буду премного благодарен.PS: почему это не координаты ГГ, попробуй "заморозь" их и увидишь. Да, ты прав. Три координаты оказались временным хранилищем, они показывают правильные координаты, но не определяют положение ГГ, так как при заморозке он всё равно бегает. Но остальные два значения - углы поворота при заморозке не дают повернуться. В Tomb Raider координаты прицела находились просто: нашёл float, прицелился, отсеял по больше/меньше/не_изменилось/изменилось, и т.д. Находилось за несколько отсевов. Но здесь просто засада. Если хорошо с математикой можно вычислять место куда переместиться исходя из углов поворота и координат игрока. Правда остаётся одно но - на какое расстояние прыгать, сделаешь много - можешь провалиться под землю или застрять в камне. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Решил ещё раз попробовать «„Blink“ Teleport» поискать координаты прицела. Делал на этот раз так:Вышел на улицу из дома, взял пистолет на всякий случай, выбрал два дома. Подошёл героем к стене 1 дома и записал координату X ГГ (-253.22), подошёл вплотную к стене второго дома и опять записал координату X ГГ (-150,59). Встал посередине и поворачиваясь на 180 градусов указывал то на одну стену, то на вторую - искал тип Float диапазон, навсякий случай брал с запасом (от - 270, до - 230) и отсеивал (от -170 до -130). Делал это предполагая, что пуля должна попасть в стену. Но всё равно так ничего и не нашёл. Подскажите пжлста правильный способ нахождения координаты прицела. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения