Автор Тема: Выкладываем наработки по анализу кода, дизассемблированные базы, адреса  (Прочитано 3186 раз)

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 445
  • Репутация: +11/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Если бы посмотрел в sdk, то увидел бы сразу функция возвращает что-то и что именно или не возвращает.
Не думаю, что я что-то увидел бы в sdk, если я не увидел это в idb базе, хотя там всё было под носом и очевидно. Просто на момент, когда я нашел эту функцию, мне не нужно было знать struct колеса, поэтому я не обратил на это внимания, а потом(когда потребовалось) - обратил. Ставить Visual Studio 2017, чтобы поставить sdk, чтобы проделывать те же операции уже в нем - пока смысла не вижу  :-\

Оффлайн kenking

  • Прохожий
  • *
  • Сообщений: 104
  • Репутация: +3/-0
    • Просмотр профиля
Ставить Visual Studio 2017, чтобы поставить sdk, чтобы проделывать те же операции уже в нем - пока смысла не вижу  :-\
Если просто посмотреть какой-либо класс в sdk, то ставить VS не обязательно. Можно посмотреть на github. Например, класс CAutomobile про функцию которого шла речь https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CAutomobile.h

А так, конечно, хозяин - барин. Смотри где тебе удобно.  :)

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 445
  • Репутация: +11/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Например, класс CAutomobile про функцию которого шла речь https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CAutomobile.h
И как мне поможет это, если там описаний функций нет?  :D
Названия есть и в idb базе.
Только в базе можно посмотреть, как функция работает, и понять, например, как сделать это:
Коллизия колеса восстанавливается
...
Только само колесо при этом не появляется.

Единственный плюс использования sdk для меня - это разобранные параметры, типа eCarNodes, а всё остальное всё равно придется
копошить
;D
« Последнее редактирование: Июнь 08, 2017, 05:46:54 pm от Shagg_E »

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 445
  • Репутация: +11/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Не буду говорить, зачем я это ворошил, но вот отключение всех драк в игре(кроме удара кулаком на бегу):
Код: Text
  1. 0A8C: write_memory 0x52AD7D size 742 value 0x90 virtual_protect 1

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 445
  • Репутация: +11/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Короче, искал способ проиграть любой звук sfx, разобрал этот опкод:
Код: Text
  1. 018C: play_sound 1 at 0.0 0.0 0.0

Не вдаваясь в подробности, скажу, что для звуков, у которых нет 3d позиционирования, можно применить эту функцию:
Код: C++
  1. 005F9960                         ; int __stdcall cDMAudio::PlayFrontEndSound(__int16, float)
Она проигрывает некоторые sfx звуки, которые не проигрывает опкод 018C(выше).
Использование:
Код: Text
  1. 0AA5: call 0x5F9960 num_params 2 pop 0 0.0 0@

, где 0.0 - неизвестный float параметр(изменения ни к чему не приводят, в опкоде стоит 0.0)
0@ - номер звука(нумерация странная):
59 - Щелчок "Нет боеприпасов" (щелчок снайперской винтовки)
60 - Щелчок "Нет боеприпасов" (щелчок гранатомета)
63-69, 71-73, 77-89, 100, 101, 159-162, 168, 169, 179 - "Action" звуки (например, пикапы)
167 - Звук "Таймер"
176, 177 - Тихие щелчки (выключение радио?)
178 - Порыв ветра
184 - Пуля пролетает справа
185 - Пуля пролетает слева
193 - Звук активации детонатора
194 - Звук смены радиостанции
195-198 - Звуки меню
199 - Шум
Другие значения ни к чему не приводят. В коде игры есть лимит 204, так что дальше проверять нет смысла. Пробовал расширить лимит до 65535 - всё равно после 199 ни одного звука не услышал(проверял до 1000).
« Последнее редактирование: Июль 07, 2017, 06:13:35 pm от Shagg_E »

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 445
  • Репутация: +11/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Заставить актера говорить(не забывайте, что в игре есть дурацкий баг, из-за которого педы редко говорят, так что, чтобы нормально протестить нишенаписанное - поставьте патч, делающий педов и игрока более "разговорчивыми"):

Код: Text
  1. 0A96: 2@ = actor 0@ struct
  2. 2@ += 0x5DA
  3. 0A8C: write_memory 2@ size 2 value 1@ virtual_protect 1
, где 0@ - 2@ struct педа, 1@ - вид фразы:

(проверял только на полицейском!)
103 - крик смерти
107 - крик утопления
108 - продолжительный крик ужаса
110 - фраза угрозы кому-либо(иногда нужно толкнуть педа для фразы)
113 - фразы драки(иногда нужно толкнуть педа для фразы)
120 - панический крик
125 - фразы после боя/драки
129 - фразы напарникам("Попал!", "Он мой!", "Я взял его!", "Я вижу его!" и в таком духе)
130 - фразы противнику("Ты окружен!")
131 - фразы напарникам("Я тебя прикрою!")
132 - фразы противнику("Стоять!")
133 - фразы напарникам("Прикройте")
134 - фразы прохожим
135 - фразы напарникам
138 - фразы начала боя/драки
139 - стихие крики потери сознания/смерти
142 - раздраженные фразы("Не беси меня!", "Отвали!" и т.п.)

Именно благодаря этому оффсету в сцене "360" из папки примеров мода CarRec орет полицейский(сам CarRec со всеми примерами тут)
« Последнее редактирование: Июль 08, 2017, 01:10:10 am от Shagg_E »

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 445
  • Репутация: +11/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Код ниже проверялся только на педах и катсценовых актерах. На авто отображает неправильные значения.
Нужно доработать...

VVVVVVVVVVVVVVVVVVV

Дополняю сообщения xanser-а и DK:
Есть тип 8: катсценовые актеры.

Итого - имеем следующий CLEO-код по выявлению типа Entity:

Код: Text
  1. записываем в 0@ указатель на структуру Entity(объекта, транспорта или педа), затем:
  2. 000A: 0@ += 0x5C // model index offset
  3. 0A8D: 0@ = read_memory 0@ size 2 virtual_protect 1
  4. 0A8D: 1@ = read_memory 0x92D4C8 size 4 virtual_protect 1 // CBaseModelInfo array
  5. 0012: 0@ *= 0x2C // model offset
  6. 005A: 1@ += 0@ // go to model offset
  7. 000A: 1@ += 0x19 // m_ModelType offset
  8. 0A8D: 1@ = read_memory 1@ size 1 virtual_protect 1
, где 1@:
1 - objs
3 - tobj
4 - weap (weapons, 258-294)
5 - hier (cutscene objects, id 295-299)
6 - cars (id 130-236)
7 - peds (peds and IG actors, id 0-129)
8 - peds (CS actors, id 109-129)
« Последнее редактирование: Июль 23, 2017, 12:03:55 am от Shagg_E »