Перейти к содержанию

Рекомендуемые сообщения

Телепорт с сохранением и возвратом позиций я тоже никогда не использовал ни в одной игре. Режим полёта гораздо интереснее

PS у меня тут вопрос возник по сканеру указателей. Вот в том же Метро 2033 указатель на здоровье со смещением 1E4 находится один единственный, 1 уровня. Вот только этот указатель не совпадает с указателем на патроны и при добавлении в таблицу периодически уходит в неопределённость (начинает указывать на адрес 00000000). Я же без сканера нашёл такую цепочку на здоровье: [[[[metro2033.exe+00611210]+18]+4]+1E4] такая цепочка похожа на цепочку к патронам и в неопределённость не уходит. Т.е. получается сканер указателей не идеален? Он такую цепочку у меня не находит...

Ссылка на комментарий
Поделиться на другие сайты

Посмотри вот эту инструкцию для координаты Х aobscan(_faddress,f3xxxxxxxxxxxxxxf3xxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxxd9xxxxxxd9xxxx) или metro2033.exe+71CF2 (movq xmm0,[ecx+00000118])

А для чего её смотреть? А то я её найду, а дальше какая цель?

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

Есть некоторый смысл, когда играешь в других играх даже с бессмертием - проваливаешься в "яму" и начинай карту заного. Но самое важное, так называемое перемещение по карте чек-поинтов или каких либо ресурсов для выполнения миссии: в ассасине это флажки, в Сталкере - интересные места зон. В GTA 4 (и др. версиях) может быстро пригодиться быть у дома или на некоторых островах телепортируясь по координатам из базы данных координат... Но в общем иногда телепорт может быть полезным.

У меня тут вопрос возник по сканеру указателей. Вот в том же Метро 2033 указатель на здоровье со смещением 1E4 находится один единственный, 1 уровня. Вот только этот указатель не совпадает с указателем на патроны и при добавлении в таблицу периодически уходит в неопределённость (начинает указывать на адрес 00000000). Я же без сканера нашёл такую цепочку на здоровье: [[[[metro2033.exe+00611210]+18]+4]+1E4] такая цепочка похожа на цепочку к патронам и в неопределённость не уходит. Т.е. получается сканер указателей не идеален? Он такую цепочку у меня не находит...
Я тоже вручную делал какую-то цепочку на здоровье и обнаружил много "обратных" указателей из структур в структуре героя. Т.е. в структуре1 героя есть структура2, в которой есть указатель на структуру1 героя. На структуру2 есть статический указатель. CE скорее всего не учитывает структуры, которые циклически друг на друга указывают. Если ты хочешь посмотреть сколько взаимных указателей в струтуре героя, то в CE 5.5 RUS кликни на "P", найди окно поиска взаимных указателей и введи структуру игрока и смещение его здоровья. Так я нашёл около 10-20 (точно не помню) взаимно ссылающихся структур. Данная "ссылочность друг на друга" очень распространена в объектно-ориентированном программировании.

Короче я остановился на указателях [[metro2033.exe+62A7C0]+1E4] = здоровье. [metro2033.exe+62A7C0]= структура героя. А с патронами я ещё не возился. Сейчас буду возиться с float-режимом по горячим клавишам, суперждампом и внедрением dll - чтобы можно было игрока двигать из внешнего окна, которое создаёт dll (возможно мне это пригодится потом + опыт во внедрении будет, может быть статью потом накатаю с исходниками и комментариями)

Ссылка на комментарий
Поделиться на другие сайты

В общем я так и не понял как тут координаты работают. Одну координату я так и не нашёл.

Вот прототип скриптов, может кто захочет доработать. А я пока это дело оставляю. Флоат режим работает только в двух плоскостях - вертикальной и какой-то боковой.

[ENABLE]
alloc(_newmem,2048)

label(_coord)
registersymbol(_coord)

label(_fx)
label(_fy)
label(_fz)
registersymbol(_fx)
registersymbol(_fy)
registersymbol(_fz)

label(_procMov)
registersymbol(_procMov)
label(_loop1)
label(_next)
label(_nextflag)

_newmem:

_procMov: // передвижение
pushf
push eax
push ebx
push ecx

lea eax,[_fx]
lea ebx,[_coord]
xor ecx,ecx

_loop1:
cmp byte [eax+ecx],00 // проверяем флаги разрешения
je short _next
lea ebx,[ebx+ecx*4]

cmp byte [eax*ecx],01 // проверяем флаги разрешения
jne short _nextflag
fld1
fld [ebx]
faddp ST(2),ST // прибавляем 1 к координатам
fstp [ebx]

_nextflag:
cmp byte [eax*ecx],02 // проверяем флаги разрешения
jne short _next
fld [ebx]
fld1
fsubp ST(2),ST // отнимаем 1 от координат
fstp [ebx]

_next:
inc ecx // ув. и проверяем счётчик
cmp ecx,3
jne _loop1

mov byte [_fx],0
mov byte [_fy],0
mov byte [_fz],0

pop ecx
pop ebx
pop eax
popf
ret

_newmem+70: // из-за выравнивания по 16 байтам инструкций SSE
_coord: // структура координат
dd (float)0
dd (float)0
dd (float)0
dd (float)1
// флаги разрешения премещения
_fx:
db 0
_fy:
db 0
_fz:
db 0


[DISABLE]
dealloc(_newmem)
unregistersymbol(coord)
unregistersymbol(_procMov)
unregistersymbol(_fx)
unregistersymbol(_fy)
unregistersymbol(_fz)
//Alt: db 0F 28 44 24 10

[ENABLE]
aobscan(_faddress,66xxxxxxxx8bxxxxxxxxxx89xxxx80xxxxxxxxxxxx74xxd9xxxxxxxxxxxxd9xx)
alloc(_newmem,2048)
label(_returnhere)
label(_originalcode)

label(Init)
label(_Init)

_newmem:
pushf
push ecx
mov ecx,[metro2033.exe+62A7C0]
lea ecx,[ecx+70]
cmp ecx,esi
jne short _originalcode // др. персонажи?

cmp byte [Init],1 // инициализация была?
jne short _Init
call _procMov
movaps xmm0,[_coord]

_originalcode:
pop ecx
popf
db 66 0F D6 46 30 //movq [esi+30],xmm0
jmp _returnhere

_Init:
push eax
mov eax,[esi+30] // пришлось писать так, т.к. не компилируется movaps [_coord],xmm0,
mov [_coord],eax
mov eax,[esi+34]
mov [_coord+4],eax
mov eax,[esi+38]
mov [_coord+8],eax
mov eax,[esi+3C]
mov [_coord+0C],eax
pop eax
mov byte [Init],1
jmp short _originalcode
Init:
db 0

_faddress: // 00753ECF = metro2033.exe+353ECF
jmp _newmem
_returnhere:

[DISABLE]
aobscan(_faddress,8bxxxxxxxxxx89xxxx80xxxxxxxxxxxx74xxd9xxxxxxxxxxxxd9xx)

_faddress-5:
db 66 0F D6 46 30 //movq [esi+30],xmm0

dealloc(_newmem)
//Alt: db 66 0F D6 46 30

В CE я ввёл три адреса _coord, _coord+4, _coord+8. Ставил на них заморозку с увелечением/уменьшением на 0,1. В итоге двигался в двух плоскостях и мог проходить сквозь стены. В идеале надо управлять этими флагами _fx:

  db 0
_fy:
db 0
_fz:
db 0

Но я что-то намудрил в цикле

_loop1:
cmp byte [eax+ecx],00 // проверяем флаги разрешения
je short _next
lea ebx,[ebx+ecx*4]

cmp byte [eax*ecx],01 // проверяем флаги разрешения
jne short _nextflag
fld1
fld [ebx]
faddp ST(2),ST // прибавляем 1 к координатам
fstp [ebx]

_nextflag:
cmp byte [eax*ecx],02 // проверяем флаги разрешения
jne short _next
fld [ebx]
fld1
fsubp ST(2),ST // отнимаем 1 от координат
fstp [ebx]

_next:
inc ecx // ув. и проверяем счётчик
cmp ecx,3
jne _loop1

До супер прыжка пока не дошёл.

Ссылка на комментарий
Поделиться на другие сайты

Посмотри вот эту инструкцию для координаты Х aobscan(_faddress,f3xxxxxxxxxxxxxxf3xxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxxd9xxxxxxd9xxxx) или metro2033.exe+71CF2 (movq xmm0,[ecx+00000118])

А для чего её смотреть? А то я её найду, а дальше какая цель?

Из этой инструкции я нашёл все 3 координаты X (ecx+00000118), Y (ecx+00000120), Z (ecx+00000128).

Ссылка на комментарий
Поделиться на другие сайты

Самого главного ты не написал... ecx чем является? Это я потому спрашиваю, что на этой инструкции проскакивают множество адресов. Отсюда не понятно, чему должен быть равен ecx :)

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Кто-нибудь знает хакнули фильтры от противогаза или нет и что там с гранатами(динамитом)... они как оформлены как объекты? И по какому принципу супер прыжок работает...

aliast, ты на плейграунде писал, что не смог сделать дружественных игроков бессметрными, а можно узнать узнать поконкретней в чём проблема была?

На плейграунде нужно подождать с чуть меньше недели, чтобы твой трейнер добавили ))) Те кто добавляют материал "там еле чешутся"

----

Короче, я так понял там гранаты, фильтры и метальные патроны нужно спавнить(создавать) через конструктор. Я месяца два назад научился спавнить патроны в СТАЛКЕРЕ, но всё руки "не доходят" написать как это сделал.

В Метро можно попробовать найти адрес счётчика метальных патронов и найти инструкции работающие с ним при перезарядке. При перезарядке должно происходить создание объектов в стволе оружия. Самый простой вариант сделать так, чтобы при перезарядке создавались в стволе не существующие патроны, но в этом случае пользователю постоянно придётся перезаряжаться. А нужно сделать так, что при выстреле инициализировалась перезарядка с отсутсвием или с очень быстрой анимацией перезарядки, тогда будет сделан так называемый чит-спавн патронов. Почти аналогично касается предметов которые игрок подбирает с трупов, в этот момент нужно узнать прерывающиеся инструкции, затем узнать в какую функцию они входят и какие параметры этой функции должны быть. Затем задать эти параметры с вызовом функции (либо внутренним потоком игры из некоторого места либо созданным потоком CE через скрпты) и будет спавн динамита или некоторого предмета ^_^ Но это в теории...

Я сейчас читаю посты темы...

Ты писал

movss xmm0,[eax+000001e4]

comiss xmm0,[_dead] //с этой строкой игра виснет. И без неё тоже (при попытке объявить переменную _dead)

// comiss xmm0,[agpmeventloggingenabled+3fcff4] //сравнение с нулём - с этой строкой игра не виснет

Данные (если я не ошибаюсь) должны быть выровнены от начала блока памяти кратно 16 байт, ещё говорят выровнены по 16-му параграфу. Назначь метку _dead, от метки _newmem на расстоянии кратном 16-ти байтам.

Ссылка на комментарий
Поделиться на другие сайты

Да я толком и не разбирался с дружественными NPC...

Дробовик уже завесили. Фильтры тоже взломали + "здоровье" стекла противогаза. Только опять же при нуле фильтров чит новые фильтры не респавнит. А нужен ли этот респавн?.. А с гранатами сложность в том, что нельзя купить новые после броска - торговцы находятся на уровнях, где нельзя кидать гранаты (я правда не всю игру прошёл, может такие уровни и есть где). Покупаем 5 гранат + 5 другого типа. И что дальше? Искать 5,4,3.. бесполезно. Видимо каждая граната либо есть (1), либо нет (0) - так хранятся аптечки. Без покупки новых гранат хрен чего найдешь...

Ссылка на комментарий
Поделиться на другие сайты

Интересная информация ))

По поводу бессмертных дружественных NPS у меня есть одна идея. Зацепка от которой можно оттолкнуться, просто мелочь...

Всем кто играл известно что в дружественных NPS нельзя стрелять - наводишь прицел на "друга" пытаешься выстрелить и не получается. А это значит, что перед выстрелом происходит сравнение свой/чужой. Осталось только найти данные которые задействованы в сравнении, а дальше в инструкцию работающую со здоровьем игроков внедрить условие, которое дружественным NPS пишет постоянное здоровье..

Пока такие мысли..

Ссылка на комментарий
Поделиться на другие сайты

Я тоже об этом думал, но пока не проверял. Тренируюсь в респауне ножей - их то можно выкинуть и подобрать! и опять кидать... если повезёт, может и гранаты по тому же принципу потом завешаются. Но пока глухо. Поиск количества ножей и по условию естьнет (10) ничего не дал. Адрес вроде находится, но ножи всё-равно кончаются. Удалось найти инструкции, которые сбрасывают в eax указатель на объект ножа, воткнутого в стену (адрес одной из инструкций 0AE2395A = NxCreateCoreSDK+C218A, остальные тут же - обратите внимание на название функции CreateCore). Подбираем нож, eax обнуляется. Опять кидаем - в eax появляется НОВЫЙ указатель, каждый раз разный

Ссылка на комментарий
Поделиться на другие сайты

Хм... интересное дело с ножами.

Можно представить массив указателей объектов которые могут быть на карте. У этих объектов должны быть три координаты и идентификатор типа объекта: это данные должны быть у всех подобных объектов.

Например:

Нож:ID1

Стрелы:ID2

Массив: ID1,ID1,ID2,ID1,ID2,ID1...

Есть несколько вариантов как сделать респавн:

1. Вариант:

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

Вопрос здесь стоит только в том, чтобы выйти на место кода игры где происходит создание объекта... а дальше уже будет видно.

2. Вариант.

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

В этом случае можно зациклить сбор нажей с одного "поднимаемого" объекта ножа из массива. Т.е. когда игрок берёт один нож, то мы зацикливаем например на 200 копий, после чего один объект разрушиться из массива, копию которого мы делали. Такой вариант был СТАЛКЕРЕ с патронами.

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

3. Вариант.

Он похож на второй. Берём объект из массива "мира" создаём его копию, которую помещаем в создаваемый объект управления ножом. Таким образом Указатель на управление ножом кладём в объект героя...

Вот такие мысли...

Ссылка на комментарий
Поделиться на другие сайты

Фильтр на союзника кажется можно сделать по количеству его здоровья (надо убедиться). Проверил на трёх уровнях и на всех здоровье напарника >1 (в заброшенных туннелях=8, в мертвом городе=100, в аномалии=1000), а у врагов <=1. Надо попробовать и потестить. Вот только есть одно НО - я сколько не играю, напарники ни разу не дохли... и уровень сложности самый сложный (в конфиге g_game_difficulty 2)... так что проверить бессмертие будет пробламатично)

Ссылка на комментарий
Поделиться на другие сайты

Ближе к концу на максимальной сложности ... там где зеленые "шары" вылазят из нор. У меня было около 5 патронов дробовика и с сотню от винтовки похожей на СВД с лазерным прицелом и играл без читов по часа два в день начиная где-то с даты создания этой темы.... Короче получалось либо я далеко убегал от напарника бегая от шаров и напарник умирал от них... либо мой герой умирал потому, что я всё защищал напарника. Так что раз 15 - и я забил на игру :D Сегодня нашёл адрес напарника и заморозил его .... и далее ещё около трёх уровней пройти и я лицезрел список авторов игры оповещающих о её конце (не ожидал что она такая короткая). А дальше какая-то непонятная пауза - хоть игру отрубай.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Live 4 ever, ты для какой версии игры тренер делал, для английской чтоли? У меня он так и не заработал(( ставил update1 с кряком skidrow (после него все надписи в игре англофицируются, русский пропадает из меню выбора языка, остаётся одна озвучка русская), всё равно не пашет

Ссылка на комментарий
Поделиться на другие сайты

Live 4 ever, ты для какой версии игры тренер делал, для английской чтоли? У меня он так и не заработал(( ставил update1 с кряком skidrow (после него все надписи в игре англофицируются, русский пропадает из меню выбора языка, остаётся одна озвучка русская), всё равно не пашет

Сейчас спрошу у live_4_ever'а...

Ну как сказать - меню на английском, в игре субтитры на азерб. Скачано с иранских торрентов.

ЗЫ Увидел трейнер от h4x0r'а для версии 1.1.1. Я думал будет ли работать мой. Некоторые сказали что нормально работает.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.