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

Почему не работает скрипт. Ввод Геймером значения.


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

Перепробовал всё, думал сам справлюсь. Нет всё-таки не обойтись, без совета опытных. 

Пишу скрипт на изменение Кармы (по желанию игрока) для Fallout 3.

Адрес Кармы [[0107a104]+380].

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

1.

Fallout3.exe+36E616

fstp dword ptr [edi+esi*4+00000324]
 
Использовал её при написании скрипта, чтобы не падала Карма.
Доступ к адресу имеют две инструкции:
2.
Fallout3.exe+36E28B
fld 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. инструкцию приатачить в скрипт?

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

Попробуй использовать инструкцию которая работает на запись, а не на чтение. :closeyes:

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

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

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

Необязательно. Во всех (ну или почти во всех) играх присутствуют таймеры, которые подхватывают значения, и что-то с ними делают (вне зависимости, сделал что-то персонаж, или нет). Чтобы получить к такому таймеру доступ - ставим бряк на доступ, на адрес в таблице, и смотрим, какие инструкции обращаются при выполнении. Как правило, инструкции, где количество хитов зашкаливает - с ними и работает таймер. Собственно, вот и весь "секрет".

P.S.

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

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

Необязательно. Во всех (ну или почти во всех) играх присутствуют таймеры, которые подхватывают значения, и что-то с ними делают (вне зависимости, сделал что-то персонаж, или нет). Чтобы получить к такому таймеру доступ - ставим бряк на доступ, на адрес в таблице, и смотрим, какие инструкции обращаются при выполнении. Как правило, инструкции, где количество хитов зашкаливает - с ними и работает таймер. Собственно, вот и весь "секрет".

P.S.

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

Если я правильно понял, то именно такую инструкцию я выбрал и сделал фильтр в ней, но почему скрипт не работает?

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

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

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

[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)
Ссылка на комментарий
Поделиться на другие сайты

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

mov dword ptr [ecx+eax*4+00000288],Karma4_1

Конечно это я попробовал в первую очередь, т.к. MOV - пожалуй первая инструкция, с которой я познакомился.

Но она записывает не правильное значение (почему - не разобрался).

 

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

 

Разъяснение  и готовый скрипт читайте в теме.:

этом посте.

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

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

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

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