Пятница, 26.04.2024, 04:31
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Работа с памятью игры, exe
DK22PacДата: Суббота, 29.01.2011, 18:53 | Сообщение # 136
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Пожалуйста, помоги разобраться в коде...

Code

.text:004EB1D8                 movsx   eax, word ptr [edi+5Ch]
.text:004EB1DC                 mov     ecx, ebx
.text:004EB1DE                 push    eax
.text:004EB1DF                 call    RefModelInfo__7CObjectFi ; CObject::RefModelInfo((int))
.text:004EB1E4                 mov     ecx, ebx // Здесь записывается структура для метода? (CEntity)
.text:004EB1E6                 push    dword ptr [esp+0] // Здесь записывается указатель на параметр? (RwObject *)
.text:004EB1E9                 call    AttachToRwObject__7CEntityFP8RwObject ; CEntity::AttachToRwObject((RwObject *))
 
Den_spbДата: Суббота, 29.01.2011, 19:31 | Сообщение # 137
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
.text:004EB1E4                 mov     ecx, ebx // Здесь записывается структура для метода?
С этим согласен.
Quote (DK22Pac)
.text:004EB1E6                 push    dword ptr [esp+0]
Передаётся параметр, значение которого записано по адресу: значение, записанное в регистре esp + 0
 
DK22PacДата: Понедельник, 14.02.2011, 21:52 | Сообщение # 138
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, ты знаешь что-то о том, как рисуются цветные прямоугольные фигуры на карте (территории банд)?
 
Den_spbДата: Вторник, 15.02.2011, 00:10 | Сообщение # 139
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Не интересовался данной темой. Попробуй посмотреть устройство опкодов, имеющих отношение к этому вопросу ("gang") или можно осуществить поиск по базе (по словам "gang" или "radar", например).
 
DK22PacДата: Воскресенье, 20.02.2011, 17:01 | Сообщение # 140
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Можно ли через IDA узнать адресс CCamera? (gta3)
Нужно для вызова методов.

Вот метод

Code
; CCamera::SetWideScreenOn((void))
SetWideScreenOn__7CCameraFv proc near
mov     byte ptr [ecx+70h], 1
retn
SetWideScreenOn__7CCameraFv endp

Также есть адресс
Code
0x6FAD68 [byte] Widesscreen on/off

Попробовал отнять от него 0x70, при вызове метода игра не летит, но и никаких изменений не видно.
 
Den_spbДата: Воскресенье, 20.02.2011, 20:17 | Сообщение # 141
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Вот метод
Посмотри, что записывается в ecx в той процедуре, откуда данный метод вызывается.
 
DK22PacДата: Суббота, 05.03.2011, 17:04 | Сообщение # 142
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, можешь пожалуйста перевести это в hex
Code
mov     ecx, eax             
push    ebx                  
push    offset sub_4D7490    
call    sub_401835           
fld     dword ptr [ebx+2DCh]
fstp    dword ptr [ebx+2E0h]
pop     ebx  
 
Den_spbДата: Суббота, 05.03.2011, 19:08 | Сообщение # 143
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
call -9 -> E8 F7FFFFFF
Остальное в приложении.
Прикрепления: 8942978.jpg (95.0 Kb)
 
DK22PacДата: Воскресенье, 06.03.2011, 10:24 | Сообщение # 144
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, сипасибо.
Если в теле функции присутсвуют команды pop - это признак метода?
 
Den_spbДата: Воскресенье, 06.03.2011, 16:22 | Сообщение # 145
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Не думаю, что это является признаком метода. Команда pop просто снимает данные с вершины стека, записывая их в указанный регистр (команда push - наоборот, кладёт данные на стек).
Повторю, что особенностью методов является то, что один из передаваемых параметров (указатель на структуру) записывается в регистр ecx. Поэтому, если в коде функции используется значение из ecx, но перед этим в данный регистр ничего не было записано, то эта функция, как правило, является методом.
 
DK22PacДата: Суббота, 19.03.2011, 01:38 | Сообщение # 146
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Привет, Денис. Почитал твои посты на СБФ. В общем. Молодец.
Правда есть ещё один способ узнать коорды компонентов (метод getComponentWorldPosition - рабочий, я с его помощью узнавал позиции колёс).
Хотел спросить
Вот можно из структуры авто получить указатель на массив данных из handling.cfg
Так вот это указатель на слот с хандлингом для опр. модели, или для опр.транспорта(сабж - имеет ли каждый уник. автомобиль свой handling? (Изменив который, мы не затронем другие автомобили с такой же моделью))


Сообщение отредактировал DK22Pac - Суббота, 19.03.2011, 01:39
 
Den_spbДата: Суббота, 19.03.2011, 03:24 | Сообщение # 147
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Привет, Денис. Почитал твои посты на СБФ. В общем. Молодец.
Привет, Дмитрий. Моих заслуг в исследовании данной темы немного, но всё равно спасибо biggrin
Quote (DK22Pac)
метод getComponentWorldPosition - рабочий, я с его помощью узнавал позиции колёс
Посмотрел этот метод: в его коде используется обсуждённый ранее алгоритм.
Quote (DK22Pac)
Так вот это указатель на слот с хандлингом для опр. модели, или для опр.транспорта
Это указатель на handling-слот определённого номера (избегаю слово "модели", т.к. не всегда одна модель соответствует одному хандлингу), который является общим для всех соответствующих транспортных средств.
 
DK22PacДата: Вторник, 22.03.2011, 00:19 | Сообщение # 148
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Спасибо за разьяснения, Денис. А у тебя есть база listener'а для gta3.exe?
 
Den_spbДата: Вторник, 22.03.2011, 01:16 | Сообщение # 149
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
А у тебя есть база listener'а для gta3.exe?
Нет. Я работаю только с GTA SA, поэтому базы для других версий GTA не скачивал.
 
DK22PacДата: Пятница, 25.03.2011, 23:29 | Сообщение # 150
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
В общем, проблема такая: я уже очень долго ищу способ проигрывания анимации в gta3.
Я уже находил в базе Листенера метод CPed_SetFall, там проигрыватется анима с заданным ИД, но в то же время, после проигрывания этой анимы пед падает на землю...
Потом я нашёл метод CPed_SetJump. Он проигрывал анимацию и делал перемещение педа. Я немножко ознакомился с кодом этого метода. Вот его код:
http://pastebin.com/5Pmebqi1
Я подумал, что можно будет как-то "вырезать" ту часть, где выполняется перемещение педа. Ну а также, поменять ИД анимации. Вот где передается этот параметр (ИД):
Code
.text:004D7458                 push    94h

В общем, я решил заранее сделать переход туда, где стоит return, выполнить аниму, и вернуть всё назад.
Code
{$CLEO .cs}
wait 0
while true
        wait 0
        if
            player.Defined(0)
        then
            if
                05ee: 9
            then
                05E6: 0@ = actor $player_actor struct
                05DF: write_memory 0x4D7468 size 1 value 0xEB virtual_protect 1 //jmp
                05DF: write_memory 0x4D7469 size 1 value 0x10 virtual_protect 1 //+0x10
                05DF: write_memory 0x4D7459 size 4 value 75 virtual_protect 1 //NewID
                call_method 0x4D73D0 0@ 0 0 //SetJump
            end
        end
end

Анима работает, но после возвращения стандартных комманд, не работает сам прыжок (по нажатию кл. Shift). "Возвращение" я, думаю, делал правильно, как-то так:
05DF: write_memory 0x4D7459 size 4 value 0x94 virtual_protect 1 //StandartID
05DF: write_memory 0x4D7468 size 2 value 0xXX virtual_protect 1 //mov ecx, eax ; где-то не могу найти как это будет в hex, но тогда я эту команду нашёл через OllyDBG
Да и ещё, если после такого "возвращения" вызвать метод SetJump - то пед прыгнет, и опять можно будет прыгать по нажатию Shift.
Идеалом, конечно, было бы разобраться, что за функция BlendAnimation (думаю, это она проигрывает аниму...)


Сообщение отредактировал DK22Pac - Пятница, 25.03.2011, 23:36
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Поиск: