Garik66 Опубликовано 5 января, 2015 Поделиться Опубликовано 5 января, 2015 Пока не получается с решением задачи из этой темы, решил отвлечься и написать что-то более знакомое - телепорт.Но видать опять парюсь.Нашёл координаты ГГ (X, Y, Z). При ручном изменении значений координат - происходит нормальный телепорт. Написал скрипт: Показать контент Проблема: в переменные coordX17, coordY17, coordZ17 записывается только первый байт из четырёх значения координаты.Причём в edx находятся правильные значение координат (проверял ставя бряк).Подскажите - где я парюсь? (где ошибка?). [ENABLE]alloc(newMem17, 1024)label(returnHere17)label(coordX17)label(coordY17)label(coordZ17)label(OK17)label(Load17)label(SaveLoadCoords17)registersymbol(SaveLoadCoords17)newMem17:cmp eax,18F4A0 // инструкция работает с несколькими адресами, поэтому фильтр. //cmp byte ptr [esi+014f],14 // можно поставить и этот (вроде бы при нескольких перезагрузках jne OK17 // игры, оба варианта фильтра - постоянны). cmp byte ptr [SaveLoadCoords17],1jne Load17push edxmov edx, dword ptr [esi+000000D0]mov dword ptr [coordX17],edxmov edx,dword ptr [esi+000000D4]mov dword ptr [coordY17],edxmov edx, dword ptr [esi+000000D8]mov dword ptr [coordZ17],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp OK17Load17:cmp [coordX17],0je OK17cmp byte ptr [SaveLoadCoords17],2jne OK17push edxmov edx, dword ptr [coordX17]mov dword ptr [esi+000000D0],edxmov edx, dword ptr [coordY17]mov dword ptr [esi+000000D4],edxmov edx,dword ptr [coordZ17]mov dword ptr [esi+000000D8],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp returnHere17OK17:fstp dword ptr [esi+000000D8]jmp returnHere17coordX17:dd 0coordY17:dd 0coordZ17:dd 0SaveLoadCoords17: // Добавим в таблицу адрес с адресом "SaveLoadCoords17" иdb 0 // названием "0 - ничего, 1 - сохранить координаты, // 2 - телепортироваться"Fallout3.exe+50DDC4:jmp newMem17nopreturnHere17:[DISABLE]Fallout3.exe+50DDC4:fstp dword ptr [esi+000000D8]unregistersymbol(SaveLoadCoords17)dealloc(newMem17) Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 5 января, 2015 Поделиться Опубликовано 5 января, 2015 Даа. Что тут сказать? Замутил ты логику выполнения очень странно. Но так как ты сделал выглядит короче чем у меня. Вроде у тебя логика правильная и скрипт должен работать. Но мне кажется что ошибка твоя здесь: Показать контент mov byte ptr [saveLoadCoords17],0jmp returnHere17 <-- вот она ошибкаа надо так сделатьjmp OK17 Как делать телепорт здесь есть несколько постов(в том числе и мой), где все объяснено очень детально. Я делал телепорт к игре Darksiders 1 так там 3 телепорта в 1 скрипте. Вот линк на мою таблицу с телепортом. Еще читай мой пост № 16 здесь. P.S.: никак не могу сделать урок о том как находить ID предмета в игре. Моя Camtasia Studio говорит что места у меня на харде нет, а у меня его аж 80 ГБ свободного места(что очень много как на 30 минутное видео!!!). Хочу тебе помочь с поиском ID. P.P.S.: как у тебя идет поиск ID предмета? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 5 января, 2015 Автор Поделиться Опубликовано 5 января, 2015 В 05.01.2015 в 17:06, Bromvol сказал: Даа. Что тут сказать? Замутил ты логику выполнения очень странно. Но так как ты сделал выглядит короче чем у меня. Вроде у тебя логика правильная и скрипт должен работать. Но мне кажется что ошибка твоя здесь: Показать контент mov byte ptr [saveLoadCoords17],0jmp returnHere17 <-- вот она ошибкаа надо так сделатьjmp OK17 Как делать телепорт здесь есть несколько постов(в том числе и мой), где все объяснено очень детально. Я делал телепорт к игре Darksiders 1 так там 3 телепорта в 1 скрипте. Вот линк на мою таблицу с телепортом. Еще читай мой пост № 16 здесь. P.S.: никак не могу сделать урок о том как находить ID предмета в игре. Моя Camtasia Studio говорит что места у меня на харде нет, а у меня его аж 80 ГБ свободного места(что очень много как на 30 минутное видео!!!). Хочу тебе помочь с поиском ID. P.P.S.: как у тебя идет поиск ID предмета? С поиском ID пока встрял и устал уже от этих поисков, поэтому решил отвлечься (собственно это повтор первого поста). В этом месте: Показать контент ошибки нет. Да и логика выполнения скрипта тоже нормальная, после проверки хотел (хочу) добавить ещё несколько функций в скрипт, ну например при значении SaveLoadCoords17 = 3 - телепортировать ГГ назад на место первого телепорта. Там много можно что придумать. Объясню - у меня не работает первая часть скрипта, а именно сохранение координат.В начале после написание скрипта (тогда я фильтры не ставил, так как сидел в доме ГГ, а в доме с этой инструкцией работает только адрес координаты и ещё один адрес (очень редко)), так вот без фильтров в доме ГГ скрипт работал правильно, т.е. в переменные прописывались правильно координаты и ГГ телепортировался при запуске второй части скрипта. После этого решил проверить как будет работать телепорт на мировой карте и обнаружил, что с инструкцией работает куча адресов (близких по смыслу, т.е. те же кооординаты с небольшим смещением чуть-чуть дальше, чуть-чуть ближе , что за адреса не изучал. Но их много. Поэтому поискал фильтр и после установки фильтра в переменные записывается только первый байт (float) значения координаты. В чём дело никак не могу понять. А статьёй при написании телепорта пользуюсь - статьёй SER(G)ANTа (Вот этой) - прекрасная статья. Твои статьи тоже почитаю - большое спасибо. Жаль, что не получается записать видео по нахождению ID предмета с помощью отсеивания по формуле. Посмотри пожалуйста почему у меня прекращается отсев по формуле (чаще всего)(Проблемы описал в этом сообщении). . Как можно настроить Артмани, чтобы более стабильно работало. Заранее Большой Спасыб.mov byte ptr [SaveLoadCoords17],0jmp returnHere17 <-- вот она ошибка Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 5 января, 2015 Поделиться Опубликовано 5 января, 2015 В 05.01.2015 в 13:20, garik66 сказал: Пока не получается с решением задачи из этой темы, решил отвлечься и написать что-то более знакомое - телепорт.Но видать опять парюсь.Нашёл координаты ГГ (X, Y, Z). При ручном изменении значений координат - происходит нормальный телепорт. Написал скрипт: Показать контент Проблема: в переменные coordX17, coordY17, coordZ17 записывается только первый байт из четырёх значения координаты.Причём в edx находятся правильные значение координат (проверял ставя бряк).Подскажите - где я парюсь? (где ошибка?). У тебя по лейблу db - это байт. Попробуй dd. Скрипт целиком не смотрел. Внимательнее проанализирую - укажу ошибку, но это будет завтра.[ENABLE]alloc(newMem17, 1024)label(returnHere17)label(coordX17)label(coordY17)label(coordZ17)label(OK17)label(Load17)label(SaveLoadCoords17)registersymbol(SaveLoadCoords17)newMem17:cmp eax,18F4A0 // инструкция работает с несколькими адресами, поэтому фильтр. //cmp byte ptr [esi+014f],14 // можно поставить и этот (вроде бы при нескольких перезагрузках jne OK17 // игры, оба варианта фильтра - постоянны). cmp byte ptr [SaveLoadCoords17],1jne Load17push edxmov edx, dword ptr [esi+000000D0]mov dword ptr [coordX17],edxmov edx,dword ptr [esi+000000D4]mov dword ptr [coordY17],edxmov edx, dword ptr [esi+000000D8]mov dword ptr [coordZ17],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp OK17Load17:cmp [coordX17],0je OK17cmp byte ptr [SaveLoadCoords17],2jne OK17push edxmov edx, dword ptr [coordX17]mov dword ptr [esi+000000D0],edxmov edx, dword ptr [coordY17]mov dword ptr [esi+000000D4],edxmov edx,dword ptr [coordZ17]mov dword ptr [esi+000000D8],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp returnHere17OK17:fstp dword ptr [esi+000000D8]jmp returnHere17coordX17:dd 0coordY17:dd 0coordZ17:dd 0SaveLoadCoords17: // Добавим в таблицу адрес с адресом "SaveLoadCoords17" иdb 0 // названием "0 - ничего, 1 - сохранить координаты, // 2 - телепортироваться"Fallout3.exe+50DDC4:jmp newMem17nopreturnHere17:[DISABLE]Fallout3.exe+50DDC4:fstp dword ptr [esi+000000D8]unregistersymbol(SaveLoadCoords17)dealloc(newMem17) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 5 января, 2015 Автор Поделиться Опубликовано 5 января, 2015 Сенк пробую лейб по dd, но тоже завтра. PS: Блин я и не подумал, а ведь может влиять действительно Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 5 января, 2015 Поделиться Опубликовано 5 января, 2015 Ребята проблема точно не в db(Define Byte) dd(Define Double word). Скорее всего фильтр неправильный. У меня когда-то тоже такое было. Если garik66 у тебя тип переменной SaveLoadCoords17 НЕ БАЙТ, то смени тип и посмотри что будет. Но мое мнение это неправильный фильтр. Ты сам говорил, что если игрок один в комнате, то все нормально и есть SAVE/LOAD ОК, а когда идешь на карту, то уже проблемы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 января, 2015 Автор Поделиться Опубликовано 6 января, 2015 В 05.01.2015 в 22:54, Bromvol сказал: Ребята проблема точно не в db(Define Byte) dd(Define Double word). Скорее всего фильтр неправильный. У меня когда-то тоже такое было. Если garik66 у тебя тип переменной SaveLoadCoords17 НЕ БАЙТ, то смени тип и посмотри что будет. Но мое мнение это неправильный фильтр. Ты сам говорил, что если игрок один в комнате, то все нормально и есть SAVE/LOAD ОК, а когда идешь на карту, то уже проблемы.Если было бы так всё просто (было бы здорово, нашёл бы другой фильтр и усё). Фильтр (а вернее оба фильтра, посмотри код) к сожалению оба правильные - об этом писал в первом посте. Посмотри эту строчку - "Причём в edx находятся правильные значение координат (проверял ставя бряк)." и посмотри первую часть кода: Показать контент Из этого видно, что до edx мы бы не добрались, если бы фильтр был неправилен.Как происходит в игре при включённом скрипте, присваиваем SaveLoadCoords17 - значение 1, затем подпрыгиваем героем на месте (т.к. выбранная инструкция именно по координате Z, собственно как практически во всех вариантах написанных телепортов на форуме). После этого делая шаги (после бряка) по коду видно, как в EDX - загружается координата (и она верная сверял значение в EDX с текущей координатой героя), но вот в переменную зараза пишется только первый байт из четырёх. Например значение Z координаты в доме ГГ на 2 этаже равно (float) 1101,73 (или по байтно - 51 B7 89 44), так вот в этом случае в переменную coordZ17 записывается 51 (и значение становиться 81).Так что тут мне нужно напрячь мозг и понять почему это происходит.newMem17:cmp eax,18F4A0 // инструкция работает с несколькими адресами, поэтому фильтр. //cmp byte ptr [esi+014f],14 // можно поставить и этот (вроде бы при нескольких перезагрузках jne OK17 // игры, оба варианта фильтра - постоянны). cmp byte ptr [SaveLoadCoords17],1jne Load17push edxmov edx, dword ptr [esi+000000D0]mov dword ptr [coordX17],edxmov edx,dword ptr [esi+000000D4]mov dword ptr [coordY17],edxmov edx, dword ptr [esi+000000D8]mov dword ptr [coordZ17],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp OK17 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 января, 2015 Поделиться Опубликовано 6 января, 2015 Перемести fstp dword ptr [esi+000000D8] в самый вверх под метку, чтобы было так ...newMem17: fstp dword ptr [esi+000000D8] Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 января, 2015 Автор Поделиться Опубликовано 6 января, 2015 В 06.01.2015 в 01:04, MasterGH сказал: Перемести fstp dword ptr [esi+000000D8] в самый вверх под метку, чтобы было так ...newMem17: fstp dword ptr [esi+000000D8]Пробовал и такой вариант, код полностью, без косметической обработки выглядит так: Показать контент Как видно пробовал и этот вариант и другие инструкции использовать, но сегодня добью. Если работает вручную, то должен и работать программно. В 06.01.2015 в 01:04, MasterGH сказал: Перемести fstp dword ptr [esi+000000D8] в самый вверх под метку, чтобы было так ...newMem17: fstp dword ptr [esi+000000D8]Проблема оказалось именно в этом, видимо когда использовал этот вариант раньше, ошибка в скрипте была в другом и телепорт не работал. Сейчас чуть-чуть подправил скрипт, удалил лишнюю OK17 метку, проставил правильные условные и безусловные прыжки и всё заработало. Попрыгал в доме ГГ и в Мегатонне (к дому от атомной бомбы и наоборот) - работает. Чуть-чуть доработаю скрипт, добавлю опцию (может пару) и выложу в своей теме. MasterGH - благодарю!!! PS: Для меня оказалось новостью, что Дом и мировая карта - это разные локации (координаты сильно отличаются) и с улицы по координатам дома внутрь дома попасть нельзя.Готовый скрипт выложил в этом сообщении.[ENABLE]alloc(newMem17, 2048)label(returnHere17)label(coordX17)label(coordY17)label(coordZ17)label(OK17)label(Load17)label(SaveLoadCoords17)registersymbol(SaveLoadCoords17)newMem17://fstp dword ptr [esi+000000D8] // вот этот вариант//cmp eax,18F4A0//cmp ebx,18F4E0 // меняется//cmp edi,18F4A0 // меняется//cmp ebp,18F468 // меняется//cmp esp,18F38C // меняется//cmp byte ptr [esi+014f],14//jne OK17cmp byte ptr [SaveLoadCoords17],1jne Load17push edxmov edx, dword ptr [esi+000000D0]mov dword ptr [coordX17],edxmov edx,dword ptr [esi+000000D4]mov dword ptr [coordY17],edxmov edx, dword ptr [esi+000000D8]mov dword ptr [coordZ17],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp OK17Load17:cmp [coordX17],0je OK17cmp byte ptr [SaveLoadCoords17],2jne OK17push edxmov edx, dword ptr [coordX17]mov dword ptr [esi+000000D0],edxmov edx, dword ptr [coordY17]mov dword ptr [esi+000000D4],edxmov edx,dword ptr [coordZ17]mov dword ptr [esi+000000D8],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp returnHere17//jmp OK17OK17:fstp dword ptr [esi+000000D8]jmp returnHere17coordX17:dd 0coordY17:dd 0coordZ17:dd 0SaveLoadCoords17: // Добавим в таблицу адрес с адресом "SaveLoadCoords17" иdb 0 // названием "0 - ничего, 1 - сохранить координаты, // 2 - телепортироваться"//Fallout3.exe+5D9B09://Fallout3.exe+5D9B20://Fallout3.exe+50DDB1:Fallout3.exe+50DDC4:jmp newMem17nopreturnHere17:[DISABLE]//Fallout3.exe+5D9B09://Fallout3.exe+5D9B20://Fallout3.exe+50DDB1:Fallout3.exe+50DDC4:fstp dword ptr [esi+000000D8]unregistersymbol(SaveLoadCoords17)dealloc(newMem17) Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 6 января, 2015 Поделиться Опубликовано 6 января, 2015 Да еще одно вспомнил. У меня была проблемма с телепортом по прицелу. Стандартно я видел такую запись Показать контент coordinateX:dd 0coordinateY:dd 0coordinateZ:dd 0 а потом проверка: je originalcodecmp [coordinateY],0je originalcodecmp [coordinateZ],0je originalcodeну и здесь загрузка координат(код загрузки) Показать контент cmp [coordinateX],0 Но это не совсем верный вариант, потому как координата (0,0,0) это вполне реальная координата и у меня лично был такой опыт когда она была в игре и телепорт срабатывал неверно. Так-вот решение этой проблеммы было очень простое, как для меня. Надо было сделать следующее: Показать контент coordinateX:dd FFFFFF00coordinateY:dd FFFFFF00coordinateZ:dd FFFFFF00 а потом проверка: je originalcodecmp [coordinateY],FFFFFF00je originalcodecmp [coordinateZ],FFFFFF00je originalcodeну и здесь загрузка координат(код загрузки) Показать контент cmp [coordinateX],FFFFFF00 И все заработало на ура. В чем суть такой подмены? Суть в том что игры настроены на определенный диапазон значений в адресе. Все думают приблизительно так что игра воспринимает ВЕСЬ диапазон значений типа float от 00000000 до FFFFFFFF, но это не так. И шанс того что вы попадете на значение FFFFFF00 в адресе координаты = 0. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 января, 2015 Автор Поделиться Опубликовано 6 января, 2015 Со второй частью "Телепорта" - телепорт по прицелу мне не всё понятно. Вопрос задал здесь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 (изменено) Привет Всем, помагите пожалуйста с телепортом на игру Silent Hunter 4, хочу сделать телепорт по карте, кординаты подводной лодки я нашол x,y,z, не могу найти кординатына карте, искал не мог найти правильные кординаты на карте, может поможит кто ни буть с поиском, скрипт я написать смогу. Изменено 10 января, 2015 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Попробуй поиск по формуле программой Артмани Про. В одной из соседних тем рассматривается такой поиск ID предмета, и где-то на форуме есть тема, в которой видео по поиску координат в эмуляторе с помощью поиска по формуле. Думаю, разберешься. Если нет - скажешь, поможем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 (изменено) Если ты про этот урок, я дажи пытаться не буду искать по формуле, на мучался я сдругими играми спасибо но нет. Было время, когда я потратил на это много времени, без толку все. Изменено 10 января, 2015 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 Тоже пробовал искать по формуле, но у меня к сожалению по формуле отсев зависает, так что бросил идею юзать Артемона. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 Ну че ребята, кто ни буть поможит найти кординаты на карте, в Silent Hunter 4 или кто ни буть, искал скажите как искать, что искать что бы нйти правильные кординаты. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 Привет!Я попробую сегодня вечером посмотреть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 Да привет KENG, буду очень блогодарен тебе. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 Ничего себе... Показать контент И где же учат писать скрипты такой... неведомой длинны?[ENABLE]alloc(newMem17, 1024)label(returnHere17)label(coordX17)label(coordY17)label(coordZ17)label(OK17)label(Load17)label(SaveLoadCoords17)registersymbol(SaveLoadCoords17)newMem17:cmp eax,18F4A0 // инструкция работает с несколькими адресами, поэтому фильтр. //cmp byte ptr [esi+014f],14 // можно поставить и этот (вроде бы при нескольких перезагрузках jne OK17 // игры, оба варианта фильтра - постоянны). cmp byte ptr [SaveLoadCoords17],1jne Load17push edxmov edx, dword ptr [esi+000000D0]mov dword ptr [coordX17],edxmov edx,dword ptr [esi+000000D4]mov dword ptr [coordY17],edxmov edx, dword ptr [esi+000000D8]mov dword ptr [coordZ17],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp OK17Load17:cmp [coordX17],0je OK17cmp byte ptr [SaveLoadCoords17],2jne OK17push edxmov edx, dword ptr [coordX17]mov dword ptr [esi+000000D0],edxmov edx, dword ptr [coordY17]mov dword ptr [esi+000000D4],edxmov edx,dword ptr [coordZ17]mov dword ptr [esi+000000D8],edxpop edxmov byte ptr [SaveLoadCoords17],0jmp returnHere17OK17:fstp dword ptr [esi+000000D8]jmp returnHere17coordX17:dd 0coordY17:dd 0coordZ17:dd 0SaveLoadCoords17: // Добавим в таблицу адрес с адресом "SaveLoadCoords17" иdb 0 // названием "0 - ничего, 1 - сохранить координаты, // 2 - телепортироваться"Fallout3.exe+50DDC4:jmp newMem17nopreturnHere17:[DISABLE]Fallout3.exe+50DDC4:fstp dword ptr [esi+000000D8]unregistersymbol(SaveLoadCoords17)dealloc(newMem17) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 января, 2015 Автор Поделиться Опубликовано 14 января, 2015 В 14.01.2015 в 06:32, RockHamer сказал: Ничего себе...[ И где же учат писать скрипты такой... неведомой длинны?RockHamer заканчивай пжлста с флудом (тем более не в своих темах). А ещё копируешь не рабочий код.Я же дал ссылку на законченный написанный (полностью рабочий скрипт) ещё в #9 посте, ну ладно повторю скрипт в этом посте..Просто я хочу, чтобы в каждой, созданной мною теме, было приведено решение и чтобы новичок - незря читал тему. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 января, 2015 Автор Поделиться Опубликовано 15 января, 2015 С блинком-телепортом решил не париться - пусть живёт. Хотя нашёл очень похожие координаты - X и Y впритык к герою Z - на 6 единиц выше координат ГГ. Если ГГ подпрыгнуть, то и изменяется эта Z координата, если ГГ стоять, а прицелом вверх/вниз, то эта координата Z - меняется, а Z ГГ остаётся не изменной, но вот с X и Y нету такой закономерности в 90 % случаях - это координаты ГГ. Решил заменить Блинк-телепорт скриптом Псевдо-полёта. Скрипт здесь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 января, 2015 Автор Поделиться Опубликовано 17 января, 2015 Как оказалось координаты прицела я находил и не раз, объяснение в этом посте. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения