Работа с памятью игры, exe
|
|
Vital | Дата: Вторник, 23.07.2013, 19:18 | Сообщение # 331 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| Кому-нибудь известно, что отвечает за лимит оружия в игре? Я знаю лишь то, что это статичный адрес, который изначально равен 47. Я некоторые свои находки об оружии писал в теме "Ваши открытия", но так и не нашёл пока адреса лимита оружия. CheatEngine находит свыше 50 тысяч результатов, и то в лучшем случае. Мне нужно лишь несущественно расширить лимит, что позволит вернуть (именно вернуть) в игру скейтборд как отдельное оружие. Все его ресурсы уже есть в игре (модель, текстура, значок, сведения в weapon.dat и default.ide), так что остаётся лишь увеличить лимит оружия, чтобы игра смогла правильно использовать скейт. У меня получилось вернуть его в работоспособном виде путём удаления значка комментария в упомянутых мной файлах, но работает это "неадекватно", так как идёт замена кулаков на скейт, его самого не видно (только в тех случаях видно, когда игрок зайдёт и выйдет из машины, также у водителей, вышедших из транспорта), иконка оружия проскакивает лишь на миг во время создания пикапа скейта. К тому же при отсутствии кастета игра не использует оружие 0 (кулаки), его даже нельзя выбрать, если ввести чит на набор оружия или подобрать несколько его единиц самому. Результаты такие: Будет очень здорово сделать это и восстановить хотя бы скейт, я бы мог ещё попробовать вытащить UZI и M60 из VC, так как они, по некоторым данным, были в бета-версии SA.
SCRIPTER
|
|
| |
wmysterio | Дата: Четверг, 01.08.2013, 21:45 | Сообщение # 332 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| У меня есть модель #Admiral. Подскажите, как мне вытянуть данные о характеристиках машины по этой модели?Код 0@ = 0xC2B9DC // Начало блока Handling'а 0A8E: 1@ = 0@ + 0x4 // Mass 0A8E: 2@ = 0@ + 0xC // tMass 0A8E: 3@ = 0@ + 0x7C // EngineAcceleration 0A8E: 4@ = 0@ + 0x84 // TransmissionData.fMaxVelocity 0A8E: 4@ = 0@ + 0xA0 // fSteeringLock
Сообщение отредактировал wmysterio - Четверг, 01.08.2013, 21:47 |
|
| |
Den_spb | Дата: Пятница, 02.08.2013, 02:35 | Сообщение # 333 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Адрес handling-блока, соответствующего определённой модели, вычисляется так:Код 0@ = 445 // 445 - ID модели ADMIRAL 0@ *= 4 0@ += 0xA9B0C8 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 // получили адрес структуры CModel 0@ += 0x4A 0A8D: 0@ = read_memory 0@ size 2 virtual_protect 0 // получили номер handling-блока (handlingIndex) 0@ *= 224 // умножаем на размер блока 0@ += 0xC2B9DC // прибавляем адрес начала массива handling-блоков Далее прибавляем к адресу нужные смещения и читаем значения с помощью опкода 0A8D. При этом размер чтения будет составлять: float - 4 байта, dword - 4 байта, word - 2 байта, byte - 1 байт.Код 0A8E: 1@ = 0@ + 0x4 // Mass 0A8E: 2@ = 0@ + 0xC // tMass 0A8E: 3@ = 0@ + 0x7C // EngineAcceleration 0A8E: 4@ = 0@ + 0x84 // TransmissionData.fMaxVelocity 0A8E: 5@ = 0@ + 0xA0 // fSteeringLock
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0 0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0
|
|
| |
wmysterio | Дата: Суббота, 03.08.2013, 12:33 | Сообщение # 334 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Den_spb, Спасибо большое! А как получить максимальную скорость автомобиля с ID? TransmissionData.fMaxVelocity почему-то показывает ~1.3, хотя в Handling указано 200.0 ?
|
|
| |
Den_spb | Дата: Суббота, 03.08.2013, 14:59 | Сообщение # 335 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Читаем комментарий к адресу на gtamodding.ru: Код +0x84 = TransmissionData.fMaxVelocity (Multiplied by 5.5555599e-3) Multiplied by 5.5555599e-3 - значит "умножено на 5.5555599e-3" 200 * = 0,0055555599 = 1,11111198
|
|
| |
андрей1981 | Дата: Воскресенье, 10.11.2013, 08:04 | Сообщение # 336 |
Группа: Пользователи
Сообщений: 12
Статус: Offline
| объясните, пожалуйста, вот есть такая функция _isModelFPlane, что она делает и как ее в скриптах можно использовать
|
|
| |
DK22Pac | Дата: Воскресенье, 10.11.2013, 18:26 | Сообщение # 337 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Проверяет, что модель имеет тип FPlane (этот тип не используется в конечном варианте игры).
Сообщение отредактировал DK22Pac - Воскресенье, 10.11.2013, 18:28 |
|
| |
андрей1981 | Дата: Вторник, 10.12.2013, 20:13 | Сообщение # 338 |
Группа: Пользователи
Сообщений: 12
Статус: Offline
| Добавлено (10.12.2013, 20:13) --------------------------------------------- почему этот код ничего не дает, можно так заменить id?
Код if Actor.DrivingVehicleType($PLAYER_ACTOR, #beagle) else_jump @NONAME_4 wait 0 1@ = 511 // ID 1@ *= 4 1@ += 0xA9B0C8 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 //CModel 1@ += 0x4A 0A8D: 1@ = read_memory 1@ size 2 virtual_protect 0 //handlingIndex 1@ *= 224 1@ += 0xC2B9DC
1@ += 0x0
03F0: enable_text_draw 1 045A: draw_text_1number 5.0 335.0 GXT 'NUMBER' number 1@ // ~1~
0A8C: write_memory 1@ size 4 value 520 virtual_protect 0
вот этот работает
Код if Actor.DrivingVehicleType($PLAYER_ACTOR, #INFERNUS) else_jump @NONAME_4 wait 0 1@ = 411 1@ *= 4 1@ += 11120840 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 1@ += 74 0A8D: 1@ = read_memory 1@ size 2 virtual_protect 0 1@ *= 224 1@ += 12761564 1@ += 40 wait 0 03C0: 0@ = actor $PLAYER_ACTOR car 02E3: 2@ = car 0@ speed 0092: 2@ = float 2@ to_integer 03F0: enable_text_draw 1 045A: draw_text_1number 5.0 335.0 GXT 'NUMBER' number 2@ // ~1~ 0A8C: write_memory 1@ size 4 value 0.5 virtual_protect 0 wait 0 if 2@ > 25.0 else_jump @NONAME_280 0A8C: write_memory 1@ size 4 value 1.6 virtual_protect 0
Сообщение отредактировал андрей1981 - Вторник, 12.11.2013, 08:51 |
|
| |
Den_spb | Дата: Среда, 11.12.2013, 20:46 | Сообщение # 339 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Цитата андрей1981 ( ) почему этот код ничего не дает, можно так заменить id? вот этот работает Не понял вопроса
|
|
| |
андрей1981 | Дата: Четверг, 12.12.2013, 21:47 | Сообщение # 340 |
Группа: Пользователи
Сообщений: 12
Статус: Offline
| второй код меняет коэф.сцепления на разной скорости и нормально работает, а когда я получаю id транспорта (1@ += 0xC2B9DC 1@ += 0x0), и прописываю новый (0A8C: write_memory 1@ size 4 value 520), ничего не происходит.
вообще мне нужно, чтобы на обычном самолете добавить все функции hydrы, рабочее шасси, верт. взлет и т.д., уже понятно, что так просто не получится. есть .asi который добавляет верт. взлет на один из самолетов, но исходник автор не дает, хотя бы посмотреть какие там он функции использует. в IDA по запросу plane есть такие: _isModelPlane, CPlane__constructor, ну и т.д., с чего начать?
|
|
| |
DK22Pac | Дата: Пятница, 13.12.2013, 05:13 | Сообщение # 341 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| андрей1981, CPlane__constructor - функция, которая вызывается, когда создаётся новый самолёт. Она инициализирует поля, которые принадлежат CPlane. Я бы с неё и начал - там бы и структура начала бы вырисовываться. Потом разбираешь виртуальные методы CPlane: Код 0x871948 ; _CPlane::`vtbl' Есть за что зацепиться. Цитата вообще мне нужно, чтобы на обычном самолете добавить все функции hydrы, рабочее шасси, верт. взлет и т.д., уже понятно, что так просто не получится. Тут наверное идёт привязка к ИД модели, возможно к ещё каким-то параметрам - поэтому надо исследовать функции, связанные с CPlane. Вот что у меня есть по самолётам: Код CPlane__constructor .text 006C8E20 CPlane__mAC .text 006C9140 CPlane__deflateTire .text 006C9150 CPlane__destructor .text 006C9160 CPlane__processControl .text 006C9260 CPlane__preRender .text 006C94A0 CPlane__render .text 006CAB70 dummy_6CAB90 .text 006CAB90 CPlane__Fix .text 006CABB0 CPlane__mCC .text 006CAC10 CPlane__SetGearUp .text 006CAC20 CPlane__SetGearDown .text 006CAC70 CPlane__m6C .text 006CACB0 sub_6CAD90 .text 006CAD90 CPlane__scalar_destructor .text 006CADB0 CPlane__processControlInput .text 006CADD0 CPlane__m110 .text 006CB7C0 CPlane__mE0 .text 006CC4B0 sub_6CCA50 .text 006CCA50 sub_6CCAA0 .text 006CCAA0 sub_6CCBB0 .text 006CCBB0 sub_6CCC50 .text 006CCC50 CPlane__blowUp .text 006CCCF0
|
|
| |
Ivan_Black | Дата: Вторник, 17.12.2013, 04:35 | Сообщение # 342 |
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Цитата Кому-нибудь известно, что отвечает за лимит оружия в игре? Я знаю лишь то, что это статичный адрес, который изначально равен 47. Я некоторые свои находки об оружии писал в теме "Ваши открытия", но так и не нашёл пока адреса лимита оружия. CheatEngine находит свыше 50 тысяч результатов, и то в лучшем случае. Мне нужно лишь несущественно расширить лимит, что позволит вернуть (именно вернуть) в игру скейтборд как отдельное оружие. Все его ресурсы уже есть в игре (модель, текстура, значок, сведения в weapon.dat и default.ide), так что остаётся лишь увеличить лимит оружия, чтобы игра смогла правильно использовать скейт. У меня получилось вернуть его в работоспособном виде путём удаления значка комментария в упомянутых мной файлах, но работает это "неадекватно", так как идёт замена кулаков на скейт, его самого не видно (только в тех случаях видно, когда игрок зайдёт и выйдет из машины, также у водителей, вышедших из транспорта), иконка оружия проскакивает лишь на миг во время создания пикапа скейта. К тому же при отсутствии кастета игра не использует оружие 0 (кулаки), его даже нельзя выбрать, если ввести чит на набор оружия или подобрать несколько его единиц самому. Результаты такие:
0xC8AAB8 Код #define ARRAY_WeaponInfo 0xC8AAB8 // ##SA## нашел в mta, надеюсь правильныйДобавлено (17.12.2013, 04:35) --------------------------------------------- Отбой тревога, это начала блока
Сообщение отредактировал Ivan_Black - Вторник, 17.12.2013, 04:30 |
|
| |
GolD | Дата: Среда, 15.01.2014, 13:27 | Сообщение # 343 |
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Как починить авто через память? Разобрался
Сообщение отредактировал GolD - Среда, 15.01.2014, 15:03 |
|
| |