Garik66 Опубликовано 15 декабря, 2014 Поделиться Опубликовано 15 декабря, 2014 Перепробовал всё, думал сам справлюсь. Нет всё-таки не обойтись, без совета опытных. Пишу скрипт на изменение Кармы (по желанию игрока) для Fallout 3.Адрес Кармы [[0107a104]+380].Пишет в адрес одна инструкция (пока проверял только на воровстве, но думаю, что будет отвечать эта же инструкция за любые кармические действия в игре)1.Fallout3.exe+36E616fstp dword ptr [edi+esi*4+00000324] Использовал её при написании скрипта, чтобы не падала Карма.Доступ к адресу имеют две инструкции:2.Fallout3.exe+36E28Bfld dword ptr [ecx+eax*4+00000288] (очень частое обращение к этой инструкции)3.Fallout3.exe+36E304 fld dword ptr [ecx+eax*4+00000288](очень редкое обращение к этой инструкции 2/3 -> 700/1, где то так различается частота обращения.)Причём 3. инструкцию плагин (Сканер сигнатур на Lua), скачанный отсюда, не находит. Написал скрипт, опирающийся на 2. инструкцию:[ENABLE]aobscan(AdresInGame4_1, D9xxxxxxxxxxxxD9xxxx74xxD9xxxxxxxxxxxxEBxxD9xxxxxxxxxx8BxxD9xxxxxxxxxx8BxxFFxxD9xxxxxx8BxxE8xxxxxxxxD9xxxxxx)alloc(newMem4_1, 64)label(returnHere4_1)Label(MenjaemKarmu4_1)label(Karma4_1)registersymbol(Karma4_1)registersymbol(AdresInGame4_1)newMem4_1:cmp eax,17 // Вводим фильтр чтобы работать конкретно с Кармой.je MenjaemKarmu4_1fld dword ptr [ecx+eax*4+00000288]jmp returnHere4_1 // Изменяем Карму (до -750 - очень злой;MenjaemKarmu4_1: // от -750 до -250 - элой; от -250 до 250 -fld dword ptr [Karma4_1] // нейтральный; от 250 до 750 - добрый иjmp returnHere4_1 // от 750 - очень добрый.Karma4_1: // Добавляем адрес в таблицу с адресомdd 0 // "Karma4_1" (без кавычек) и названием, // допустим "Карма" и вписываем нужноеAdresInGame4_1: // нам значение.jmp newMem4_1nopnopreturnHere4_1:[DISABLE]AdresInGame4_1: //Fallout3.exe+36E28Bfld dword ptr [ecx+eax*4+00000288]unregistersymbol(Karma4_1)unregistersymbol(AdresInGame4_1)dealloc(newMem4_1)Почему то он не хочет ни чего делать. Подскажите, где я не догоняю? Может нужно 3. инструкцию приатачить в скрипт? Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 15 декабря, 2014 Поделиться Опубликовано 15 декабря, 2014 Попробуй использовать инструкцию которая работает на запись, а не на чтение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 декабря, 2014 Автор Поделиться Опубликовано 15 декабря, 2014 Попробуй использовать инструкцию которая работает на запись, а не на чтение. Т.е. игроку нужно будет, чтобы записать новое значение, идти и воровать что-нибудь (либо другое кармическое действие) - это неинтересно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 15 декабря, 2014 Поделиться Опубликовано 15 декабря, 2014 Т.е. игроку нужно будет, чтобы записать новое значение, идти и воровать что-нибудь (либо другое кармическое действие) - это неинтересно.Необязательно. Во всех (ну или почти во всех) играх присутствуют таймеры, которые подхватывают значения, и что-то с ними делают (вне зависимости, сделал что-то персонаж, или нет). Чтобы получить к такому таймеру доступ - ставим бряк на доступ, на адрес в таблице, и смотрим, какие инструкции обращаются при выполнении. Как правило, инструкции, где количество хитов зашкаливает - с ними и работает таймер. Собственно, вот и весь "секрет". P.S. И да - не забываем проверять, к чему получает доступ выбранная инструкция, иначе велика вероятность, что получим ошибку в ходе работы скрипта, из-за которой игра может упасть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 декабря, 2014 Автор Поделиться Опубликовано 15 декабря, 2014 Необязательно. Во всех (ну или почти во всех) играх присутствуют таймеры, которые подхватывают значения, и что-то с ними делают (вне зависимости, сделал что-то персонаж, или нет). Чтобы получить к такому таймеру доступ - ставим бряк на доступ, на адрес в таблице, и смотрим, какие инструкции обращаются при выполнении. Как правило, инструкции, где количество хитов зашкаливает - с ними и работает таймер. Собственно, вот и весь "секрет".P.S.И да - не забываем проверять, к чему получает доступ выбранная инструкция, иначе велика вероятность, что получим ошибку в ходе работы скрипта, из-за которой игра может упасть.Если я правильно понял, то именно такую инструкцию я выбрал и сделал фильтр в ней, но почему скрипт не работает?Посмотрите скрипт и если в нём есть ошибка (так как я в первый раз пишу скрипт, где Игрок может вводить сам своё значение, то возможно она есть), объясните где она. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 15 декабря, 2014 Поделиться Опубликовано 15 декабря, 2014 Попробуй так:[ENABLE]aobscan(AdresInGame4_1, D9xxxxxxxxxxxxD9xxxx74xxD9xxxxxxxxxxxxEBxxD9xxxxxxxxxx8BxxD9xxxxxxxxxx8BxxFFxxD9xxxxxx8BxxE8xxxxxxxxD9xxxxxx)alloc(newMem4_1, 64)label(originalcode)label(returnHere4_1)Label(MenjaemKarmu4_1)label(Karma4_1)registersymbol(Karma4_1)registersymbol(AdresInGame4_1)newMem4_1:cmp eax,17 // Вводим фильтр чтобы работать конкретно с Кармой.jne MenjaemKarmu4_1jmp originalcodeoriginalcode:fld dword ptr [ecx+eax*4+00000288]jmp returnHere4_1MenjaemKarmu4_1:mov dword ptr [ecx+eax*4+00000288],Karma4_1fld dword ptr [ecx+eax*4+00000288]jmp returnHere4_1Karma4_1: // Добавляем адрес в таблицу с адресомdd 0 // "Karma4_1" (без кавычек) и названием, // допустим "Карма" и вписываем нужноеAdresInGame4_1: // нам значение.jmp newMem4_1nopnopreturnHere4_1:[DISABLE]AdresInGame4_1: //Fallout3.exe+36E28Bfld dword ptr [ecx+eax*4+00000288]unregistersymbol(Karma4_1)unregistersymbol(AdresInGame4_1)dealloc(newMem4_1) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 декабря, 2014 Автор Поделиться Опубликовано 16 декабря, 2014 (изменено) Попробуй так:mov dword ptr [ecx+eax*4+00000288],Karma4_1Конечно это я попробовал в первую очередь, т.к. MOV - пожалуй первая инструкция, с которой я познакомился.Но она записывает не правильное значение (почему - не разобрался). Со своей проблемой я уже разобрался (как оказалось я написал абсолютно верный скрипт и он работал, только я тогда не понял как). Разъяснение и готовый скрипт читайте в теме.:этом посте. Изменено 19 февраля, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения