Пятница, 26.04.2024, 21:26
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Работа с памятью игры, exe
walkДата: Воскресенье, 02.01.2011, 09:42 | Сообщение # 46
Группа: Проверенные
Сообщений: 96
Статус: Offline
Вобщем интересует такой вопрос, как эмулировать в gta VC арест ГГ:

Вобщем нашёл нечто подобное:

Code
thread 'test'    

:TEST_10
wait 0    
if    
      Player.Defined($player_char)
else_jump @TEST_75    
if    
00E1:   key_pressed 0 14    
else_jump @TEST_75    
05E6: 0@ = actor $player_actor struct          
05E3: call_method 0x4BBE90 0@ num_params 0 pop 0    
wait 1000    

:TEST_75
jump @TEST_10

Но в игре получаю только текст арестован, при том этот текст никак не убирается, может я совсем не то нашёл, ведь в СА, ГГ можно арестовать путём записи числа в смещение в структуре игрока, но в вайс сити сколько не искал, наткнулся только на выше указанное, может есть способ найти этот адрес?

И ещё:

Хотелось узнать, как устроенно управление вертолётом с помощью мышки(можно не вертолёта, например водомёта на одной из машин)

Добавлено (02.01.2011, 07:09)
---------------------------------------------

Code
{$CLEO}

const
            setPositionAndRotation = 0x50BEC0
            setOnPoint = 0x50C8B0
            CCamera = 0xB6F028
end

var
            $Player_Actor: Actor
end

0000:
while true
            wait 250
            if
                $Player_Actor.Defined()
            then
                if
                    0AB0: key_pressed 9
                then
                    $Player_Actor.StorePos(0@, 1@, 2@)
                    Inc(2@, 3.0)
                    04C4: store_coords_to 6@ 7@ 8@ from_actor $Player_Actor with_offset 0.0 0.0 -1.0             
                    3@ = 0.0
                    4@ = 0.0
                    5@ = 0.0
                    0AC7: 10@ = var 0@ offset
                    0AC7: 11@ = var 3@ offset
                    0AC7: 12@ = var 6@ offset
                    0AC7: 14@ = var 3@ offset
                    0AA6: call setPositionAndRotation struct CCamera 2 0 ( rotation buffer dword: 11@ position buffer dword: 10@ )
                    0AA6: call setOnPoint struct CCamera 3 0 ( unknown dword: 1 mode word: 2 point buffer dword: 12@ )
                    0A93: end_custom_thread            
                end
          end
end

Данный код приводил на Вол-Гта DK22Pac, меня интересует следующее:

У всех работает этот код? wacko

Добавлено (02.01.2011, 09:42)
---------------------------------------------
Извините за такое кол-во вопросов biggrin , просто я очень любознателен happy

Есть ещё один вопрос

http://savepic.org/1121547.jpg - из Сан Андреса

Как правильно считывать от туда значение, каким опкодом, также если можно, с примером

Сообщение отредактировал walk - Воскресенье, 02.01.2011, 09:43
 
DK22PacДата: Воскресенье, 02.01.2011, 11:25 | Сообщение # 47
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote
Данный код приводил на Вол-Гта DK22Pac, меня интересует следующее:
У всех работает этот код?

Этот код проверял лично я сам. Я бы не постил его, если бы он не работал. Вот только нужды в нём особо большой нет.
Quote
Как правильно считывать от туда значение, каким опкодом, также если можно, с примером

Смею предположить, что так(пример кода)
Code
0@ = 0xB6F028
inc(0@, 0x860)
0a8d: 1@ = read 0@ 4 0
inc(0@, 0x4)
0a8d: 2@ = read 0@ 4 0
inc(0@, 0x4)
0a8d: 3@ = read 0@ 4 0
 
walkДата: Воскресенье, 02.01.2011, 11:48 | Сообщение # 48
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (DK22Pac)
Этот код проверял лично я сам. Я бы не постил его, если бы он не работал. Вот только нужды в нём особо большой нет.

У меня ошибка на нём вылетает sad

Quote (DK22Pac)
0@ = 0xB6F028
inc(0@, 0x860)
0a8d: 1@ = read 0@ 4 0
inc(0@, 0x4)
0a8d: 2@ = read 0@ 4 0
inc(0@, 0x4)
0a8d: 3@ = read 0@ 4 0

Не совсем понял, то есть ты чтобы узнать каждую координату, прибавляешь смещение 0x860, а потом прибавляешь по 4 байта на каждую координату??

 
DK22PacДата: Воскресенье, 02.01.2011, 12:04 | Сообщение # 49
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
По смещению 0x860 от начала блока камеры находятся координаты таргета. Собственно, по смещению 0x860 - X-координата, 0x864 - Y-координата, 0x868 - Z-координата.
А почему бы не воспользоваться стандартными опкодами?
Code
068D: get_camera_position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
015F: set_camera_position 664.9277 -479.6112 16.1668 rotation 0.0 0.0 0.0
0454: useless_store_debug_camera_position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
068E: get_camera_target_point_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 2
0463: useless_store_debug_camera_target_point_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
 
walkДата: Воскресенье, 02.01.2011, 12:28 | Сообщение # 50
Группа: Проверенные
Сообщений: 96
Статус: Offline
DK22Pac, а каким опкодом узнать координаты, в которые смотрит камера, чтоб потом направить туда допустим объект?
 
Den_spbДата: Воскресенье, 02.01.2011, 15:38 | Сообщение # 51
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
Не совсем понял, то есть ты чтобы узнать каждую координату, прибавляешь смещение 0x860
Данный адрес занимает 12 байт (следующий адрес - 0x86C, 0x86C-0x860=12). В нём хранятся три координаты (3 числа float, по 4 байта каждое). Следовательно, чтобы их прочитать, надо обращаться к адресам 0x860, 0x864, 0x868, как и написал DK22Pac
Quote (walk)
каким опкодом узнать координаты, в которые смотрит камера, чтоб потом направить туда допустим объект?
068E
 
Den_spbДата: Воскресенье, 02.01.2011, 16:04 | Сообщение # 52
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
Вобщем интересует такой вопрос, как эмулировать в gta VC арест ГГ:
Вобщем нашёл нечто подобное:
Попробуй посмотреть, откуда эта функция вызывается (View-Open subviews-Function calls, список Caller).
 
walkДата: Воскресенье, 02.01.2011, 16:34 | Сообщение # 53
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote
Определить __cdecl-функцию в коде очень просто: она заканчивается retn без параметров

А как понять, что retn без параметров?

Добавлено (02.01.2011, 16:34)
---------------------------------------------
И по поводу этого:

Quote (walk)
Хотелось узнать, как устроенно управление вертолётом с помощью мышки(можно не вертолёта, например водомёта на одной из машин)

Можешь что-нибудь интересное сказать? smile
 
Den_spbДата: Воскресенье, 02.01.2011, 16:35 | Сообщение # 54
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
А как понять, что retn без параметров?
Справа от команды retn в конце кода функции не написано никаких чисел (параметров).
Quote (walk)
Можешь что-нибудь интересное сказать?
Я делал скрипт Swatvan с пулемётом, устанавливающий на башню swatvan-а рабочий пулемёт, который поворачивался в ту же сторону, куда смотрела камера. Для определения направления камеры использовались вышеназванные опкоды 068E и 068D.
 
walkДата: Воскресенье, 02.01.2011, 16:48 | Сообщение # 55
Группа: Проверенные
Сообщений: 96
Статус: Offline
Вобщем нашёл следующее:

http://savepic.org/1133884.jpg

Кстати после этого идут функции управления камерой, как при аресте:

Затемнение камеры, очистка оружия у игрока и какой-то CPlayerPed_restore

Как я понял, это __thiscall, но попытавшись вызвать его

Code
05E6: 0@ = actor $player_actor struct  
05E3: call_method 0x42BBCE 0@ num_params 0 pop

Получил ошибку, в чём проблема? sad

 
Den_spbДата: Воскресенье, 02.01.2011, 16:53 | Сообщение # 56
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
В 05E3 после pop есть ноль? Если нет, то допиши, а если да, то покажи скрин начала кода вызываемой функции (блок переменных, если есть, и первые 10-15 команд). Предварительно переведи IDA в режим блок-схемы (кнопка в левом верхнем углу с изображением блок-схемы).
 
walkДата: Воскресенье, 02.01.2011, 17:00 | Сообщение # 57
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (Den_spb)
После pop есть ноль? Если да, то покажи скрин начала кода вызываемой функции (блок переменных, если есть, и первые 10-15 команд).

ой-ёй-ёй wacko слишком сложно для меня

А можно поподробней, как определить начало кода вызываемой функции?

 
Den_spbДата: Воскресенье, 02.01.2011, 17:03 | Сообщение # 58
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
05E3: call_method 0x42BBCE 0@ num_params 0 pop 0 - здесь ноль должен стоять, а у тебя его нет.
 
walkДата: Воскресенье, 02.01.2011, 17:04 | Сообщение # 59
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (Den_spb)
05E3: call_method 0x42BBCE 0@ num_params 0 pop 0 - здесь ноль должен стоять, а у тебя его нет.

Он стоит, это просто я так скопировал smile
 
Den_spbДата: Воскресенье, 02.01.2011, 17:11 | Сообщение # 60
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
А можно поподробней, как определить начало кода вызываемой функции?
Да просто код функции начинается с определённого адреса, который указывается в опкоде вызова функции.
Чтобы определить, правильно ли ты вызываешь функцию, мне нужна подобная картинка:

(базы для VC у меня нет)
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Поиск: