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

Вопрос Снова По Телепорту


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

Вопрос в видео

 

Не могу понять - что я упускаю?

[ENABLE]alloc(newMem, 2048)label(returnHere)label(coordX)label(coordY)label(coordZ)label(OK)label(load)label(flag1)registersymbol(flag1)newMem:cmp ebp,0018e5acjne OKcmp byte ptr [flag1],1jne loadpush ebxmov ebx,[ecx]mov dword ptr [coordX],ebxmov ebx,[ecx+04]mov dword ptr [coordY],ebxmov ebx,[ecx+08]mov dword ptr [coordZ],ebxpop ebxmov byte ptr [flag1],0OK:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnHereload:cmp dword ptr [coordX],0je OKcmp byte ptr [flag1],2jne OKpush ebxmov ebx, dword ptr [coordX]mov [ecx],ebxmov ebx, dword ptr [coordY]mov [ecx+04],ebxmov ebx, dword ptr [coordZ]mov [ecx+08],ebxpop ebx//mov byte ptr [flag1],0     // пришлось убрать - иначе нет телепорта.jmp OKcoordX:dd (float)0coordY:dd (float)0coordZ:dd (float)0flag1:db 0Might & Magic Heroes VI.exe+6609FE:jmp newMemnopnopreturnHere:[DISABLE]Might & Magic Heroes VI.exe+6609FE:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]unregistersymbol(flag1)dealloc(newMem) 
Изменено пользователем garik66
Ссылка на комментарий
Поделиться на другие сайты

Предположу, что сам герой, координаты которого меняет скрипт, и дорожка следов за ним - это два разных объекта, и дорожке тоже нужно менять координаты.
Ссылка на комментарий
Поделиться на другие сайты

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

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

Может где-то идёт проверка координат и дорожка строится не от Героя, а от сохранённых где-то координат? 

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

Попробуй так.

 

[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(save_coord)label(load_coord)label(z_coord)label(x_coord)label(y_coord)label(s_enable)label(l_enable)registersymbol(s_enable)registersymbol(l_enable)newmem:cmp ebp,0018e5acjne originalcodecmp [s_enable],1je save_coordcmp [l_enable],1je load_coordmov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnheresave_coord:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]fld [ecx] //save coordsfstp [x_coord]fld [ecx+04]fstp [y_coord]fld [ecx+08]fstp [z_coord]mov [s_enable],0jmp returnhereload_coord:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]fld [x_coord] //load coordsfstp [ecx]fld [y_coord]fstp [ecx+04]fld [z_coord]fstp [ecx+08]mov [l_enable],0jmp returnhereoriginalcode:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnheres_enable:dd 0l_enable:dd 0x_coord:dd 0z_coord:dd 0y_coord:dd 0Might & Magic Heroes VI.exe+6609FE:jmp newmemnopnopreturnhere:[DISABLE]Might & Magic Heroes VI.exe+6609FE:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]dealloc(newmem)unregistersymbol(s_enable)unregistersymbol(l_enable)
Ссылка на комментарий
Поделиться на другие сайты

ARM4ND0, спасибо, сейчас попробую.

Попробовал, не даже не телепортирует.

 

Подправил твой скрит:

Тоже не телепортирует. Хотя видно что попытки есть.

[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(save_coord)label(load_coord)label(z_coord)label(x_coord)label(y_coord)label(s_enable)label(l_enable)registersymbol(s_enable)registersymbol(l_enable)newmem:cmp ebp,0018e5acjne originalcodecmp [s_enable],1je save_coordcmp [l_enable],1je load_coordjmp originalcodesave_coord:fld [ecx] //save coordsfstp [x_coord]fld [ecx+04]fstp [y_coord]fld [ecx+08]fstp [z_coord]mov [s_enable],0jmp originalcodeload_coord:fld [x_coord] //load coordsfstp [ecx]fld [y_coord]fstp [ecx+04]fld [z_coord]fstp [ecx+08]//mov [l_enable],0 // Пробовал, как у меня в скрипте не обнулять флаг.jmp originalcodeoriginalcode:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnheres_enable:dd 0l_enable:dd 0x_coord:dd 0z_coord:dd 0y_coord:dd 0Might & Magic Heroes VI.exe+6609FE:jmp newmemnopnopreturnhere:[DISABLE]Might & Magic Heroes VI.exe+6609FE:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]unregistersymbol(s_enable)unregistersymbol(l_enable)dealloc(newmem) 
Изменено пользователем garik66
Ссылка на комментарий
Поделиться на другие сайты

Тогда надо использовать другую инструкцию.

Да, потихоньку, как появиться время, переберу инструкцию.

 

Если повезёт, может удастся выйти на инструкцию, которая отвечает за координаты появления дорожки, и если её (дорожку) телепортнуть, то думаю героя телепортировать уже не придётся, он сам поскачет уже по новой дорожке.

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

Попробовал сегодня ночью - поперебирал инструкции и на запись и на доступ координат героя, попробовал выходить на инструкции адресов координат дорожки и по ним тоже писал скрипты, пробовал записывать все три пары координат (координаты дублируются по три раза) (в сумме наверное штук 30 или 40 скриптов написал), но всё пока бестолку - герой телепортируется, а дорожка так и начинается от старта телепорта.

Так что вопрос темы пока остаётся открытым.

Если у кого есть время и сможет помочь (может на свежий взгляд окажется удачнее), то проблема описана в первом посте.

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

Ищи любые координаты перса или дорожки

Ставь бряк на запись

Двигай чара

Попробуй использовать эту функцию(функции и окна) для сбора информации с адресов

post-3-0-23174500-1426707693_thumb.png post-3-0-90665900-1426704758_thumb.png post-3-0-54595200-1426704651_thumb.png

Сравнивай стеки через desectData structure

Если найдешь хоть какие-то отличия обращай на них внимание как на координаты и перезаписывай прямо в стеке на постоянные значения

Если отличий много делай сохранение игры и используй TinyDumper для поиска одинаковых значений в стеке перед тем как перс сдвинулся с одного и того же места.

 

 

Хотя может быть и более простой вариант, который можно узнать только при ковырянии игры.

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

Похоже есть динамический список указателей на эти точки. 

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

Предположительно все точки - динамические структуры.

 

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

 

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

Понять как получить адрес на первую или последнюю точку

Сравнить несколько точек, чтобы отличить их позиции и найти смещение.

Поменять позицию по смещению первой точки и попробовать мышкой сделать новый маршрут

 

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

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

Мои мысли: 

Дорожка всегда начинается с координат позиции Героя, соответственно, не смотря на то, что дорожка это другой объект (как писал keng), она всё равно связана с координатами героя, но не прямую.

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

Сегодня уже не буду этим заниматься, но завтра постараюсь всё-таки выйти на инструкцию.

 

MasterGH, из динамических адресов точек (их можно получить из многих инструкций связанных с координатами Героя и в частности из инструкции скрипта из 1 поста) мне пока ни чего сделать не удалось (2, 3 скрипта писал, но не сработали).

Всё таки думаю копать именно со стороны адресов координат Героя.

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

Дорожка всегда начинается с координат позиции Героя

 

Мне не удалось это подтвердить.Я нашел по моему предположению все возможные X координаты героя через правило увеличилось и уменьшилось. Несколько десятков адресов типа float было по одной оси X. Заморозив их герой ставился в замороженное положение X, а дорожка,так скажем, "жила своей жизнью" - никак не менялась.

 

От мышки ставится конец дорожки, а первый элемент дорожки, который "рядом с героем" как-то дрейфует сам по себе в памяти копируясь (ИМХО). Подозреваю что герой больше зависит от этого первого элемента дорожки и стремиться к нему. Т.е. грой зависит от дорожки больше чем она от него. Поэтому он за ней бегает.

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

Т.е. грой зависит от дорожки больше чем она от него. Поэтому он за ней бегает.

С этим утверждением согласен однозначно:

 

если её (дорожку) телепортнуть, то думаю героя телепортировать уже не придётся, он сам поскачет уже по новой дорожке.

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

ЗЫ: Может будет полезно?

Если включить скрипт из первого поста, телепортнуть героя, не выключать скрипт (оставить Flag на 2), построить дорожку, чтобы конец дорожки был рядом с Героем  и потом нажимать ЛКМ, то точки дорожки начнут исчезать начиная со стороны старта телепорта и постепенно доходят до Героя.

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

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

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

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