You are not logged in.
Может есть смысл обсуждать такие вопросы в соседнем топике или на соответствующем форуме?
Offline
Hex-Rays C листинг базы за 2007.12.08 (~2мб)
[hide=10]http://public.sannybuilder.com/gtasa_ex … isting.rar[/hide]
Offline
Микрообновление списка объектов: http://public.sannybuilder.com/gtasa_ex … 080320.txt
Добавленf еще пара методов; назначение пары задач с gtaf (там народ добрался-таки до AI)
Alexander
Посмотрел я на это... Грустное зрелище. DFA в иде на совершенно зачаточном уровне.
Чтобы разбиралось веселеее, нужно явно прописывать методы объектов как __thiscall и указывать this в списке параметров (если указать __thiscall и не указать сам this, H-R падает вместе с идой).
Offline
Давненько я подпись не обновлял...
Новая база 20080407
Особо серьезных изменений в базе нет. Расписано несколько структур из CScriptEngine, и кучка относящихся к нему методов.
Немного неожиданное открытие: CScriptEngine - статический объект, начинающийся где-то между 0xA43000 и 0xA44000 размером более 300К (scmBlock, opcodeParams и т.д. - поля этого объекта). Предположительно, в следующей версии базы, CScriptEngine будет описан именно как объект.
Offline
А разве не существует пула CPickup? Если нет, то как тогда можно получить координаты пикапов?? Очень нужно.
Offline
Axel218
Вообще, эта часть у меня еще не расписана, поэтому могу немного ошибаться.
Пикапы сделаны массивом, а не пулом. Массив структур CPickup находится по адресу 0x9788C0, 620 структур по 32 байта (вообще-то, это часть объекта CPickups, но, в данном случае, это не важно).
Занят или не занят элемент массива - проверяется по одному из полей соответствующей структуры (смещение 0x1C; 0 - элемент не используется)
Координаты пикапа лежат по смещениям 0x10, 0x12, 0x14 (signed short, 2 байта со знаком).
Offline
@3Doomer
post #136 в этой ветке. (но сразу предупреждаю: халявы не будет, придется повозиться)
Я хоть и понимаю по-английски, но в адресах ваще запутуюсь((( Мож найдёт ктонить?
GIMS developer
Offline
Там нет фиксированного адреса.
Можно найти объект, описывающий модель - это просто, но его адрес назначается динамически.
В нем есть ссылка на дерево структур, каждая из которых соответствует компоненту модели. Нужно пройти по этому дереву и найти компонент с нужным именем. А дальше брать из него координаты.
Все соответствующие структуры я выкладывал.
Offline
Там нет фиксированного адреса.
Можно найти объект, описывающий модель - это просто, но его адрес назначается динамически.В нем есть ссылка на дерево структур, каждая из которых соответствует компоненту модели. Нужно пройти по этому дереву и найти компонент с нужным именем. А дальше брать из него координаты.
Все соответствующие структуры я выкладывал.
Я почти ничё не понял)))) Не программист я, а про100 нуп...Сам в жизни не найду(
Дай ссылку плиз на это дерево структур, ато тут столько ссылок в теме...
GIMS developer
Offline
2008/07/05: http://public.sannybuilder.com/gtasa_ex … 080705.rar
Изменений очень много. Основное - названа примерно половина классов эвентов и тасков.
Большие дополнения по CPedIntelligence/CPedTasks.
PS. Люди просившие доступ к компонетам моделей! Оно вам еще надо? Я на днях планирую слегка пройтись по структуре моделей, могу заодно сделать .asi для доступа к компонентам.
Offline
Господа, есть вопрос: у взорванного автомобиля часто нет одного или нескольких колес, каким то образом можно у нормального автомобиля убрать одно нужное мне колесо. Как убрать все я знаю. Адресок ни кто не подскажет?
То о чем я говорю смотрим на картинке, сейчас у авто отсутствуют все колеса, а хотелось бы отсутствие только одного колеса, нужного мне.
Что еще желательно, так это возможность определять координаты каждого элемента авто, фары, колеса итд.
2listener Спасибо! Но моя версия иды устарела=(, базу открывать отказалась, а новую ~70мб скачать пока не могу.
Last edited by yelmi (05-09-2008 19:37)
Offline
@yelmi - Попробуй машине в damageManager.wheelStatus для соответствующего колеса прописать 2.
Если не поможет - можно начать копать с .text:006B3780 CAutomobile::blowUp
PS. CDamageManager в последней выложенной базе был расписан. (он входит в CAutomobile)
Offline
А как использовать процедуры из gta-sa.exe в main.scm??? Как запустить?
Offline
@Vitaliy_TopSide - Через CLEO. Опкоды 0AA5, 0AA6, 0AA7
http://cleo.sannybuilder.com/?id=2
Offline
Большое спасибо. Наверно так можно и чит-коды отключать?
Offline
Seemann
У меня вопрос , возможно изменить в папке Data запись?
Я хотел при помощи скрипта CLEO изменить запись в файле peds.ide
Поменять имя подгружаемой модели в ID специальных актёров :
# special character slots [b]290, special01, generic, .....[/b] заменить допустим на: [b]290, newactor3, newactor3,[/b]
Ну конечно при условии что такие модели в архиве существуют.
Можно хотябы показать где читать об Этом.
Мне хотелосьбы Добавить новых персонажей не заменяя старых.
Сществует пкод который регулирует Волну?
Меня интересует, каким опкодом можно сделать водную гладь.
А вот, как Именно совершить действие по изменению Записей в DATE ...хм понятия не имею.
Яб не писал еслиб знал. А знать, жуть как хочется.[/color]
listener -Мне очень понравилось про компоненты, результаты уже есть?
______________________
ps только увидел, кто аФтор этого CLEO. Я ведь раньше думал, что прога западная.
Пойду за вторым Жирафиком........
(Такого не бывает, не верю.)
Last edited by Вовчик_гадкий (28-11-2008 08:47)
читаю форум. Ещё очень много читать.
Offline
Для добавления персонажа пропиши модель перса в файлах, где фигурируют педы (типа ped*.dat) Ну и ставь через скрипт.
А чтобы одежду добавить, вообще ничего менять не надо)))) Просто добавить в ИМГ и скриптом надевать.
Last edited by 3Doomer (10-01-2009 19:52)
GIMS developer
Offline
Можно ли как-то определить углы наклона авто как здесь например http://en.wikipedia.org/wiki/Flight_dynamics ? Может опкод какой есть или ф-ция...и как указать нужный автомобиль
Offline
Уф. Про это столько раз писали, что я даже и не знаю с чего начать...
Все игровые объекты во всех GTA (включая Bully) наследуются от CPlaceable. Я про него в этой теме уже писал.
Он содержит либо координаты объекта (x, y, z, и угол поворота), для ситуации, когда объект может вращаться только вокруг вертикальной оси, либо указатель на матрицу 4x3 (Для III/VC/SA - это RwMatrix, которая хранится в виде 4x4, где оставшиеся значения забиваются нулями), которая полностью описывает положение объекта в пространстве, включая сжатие/растяжение по каждой из осей.
Как определить углы поворотов одной матрицы относительно другой - задачка первого курса линейной алгебры.
Offline
Мм...спасибо за наводку, но я правда не знаю где искать( да, нашел где вы писали про СPlaceаble, но там нечего дельного) . И если это матрица, то что за значения хранятся в каждом поле 4x4 и где про это обсуждалось, может быть вспомните?
Блин еще база gta_sa_idb_20080705 не хочет открываться в IDA 4. Для какой он версии IDA?
Last edited by NC22RUS (29-03-2009 14:21)
Offline
IDA используется 5.2 (валяется в куче мест). Возможно, понадобится anti-ban patch.
Что касается CPlaceable, там и вспоминать ничего не надо.
По смещению 20 (0x14) от начала объекта, находится указатель на структуру RwMatrix (на самом деле, там немного более сложный объект, но, если не нужно создавать его самому, это не критично).
В принципе, чтобы разобраться с матрицах позиционирования и трансформации, стоило бы почитать документацию на RenderWare Graphics (ссылки были в этой же теме). Сейчас же попробую объяснить, что называется, "на пальцах", хотя без картинок это будет тяжеловато.
Возьмем классическую трехмерную систему координат. (Три оси, X, Y и Z, перпендикулярные друг другу). Это будет называться world space (глобальная система координат).
Теперь возьмем модель, и опишем вокруг нее параллелепипед (bounding box). Из одной вершины, проведем по трем ребрам этого параллелепипеда другие три оси. Это будет система координат модели (modelling space).
На этих трех осях, отложим по единичному вектору. Это будет базис.
Теперь, совместим оси координат модели с осями координат world space. Сейчас у нас world space совпадает с modelling space. Три наших базисных вектора имеют координаты {1, 0, 0}, {0, 1, 0}, {0, 0, 1}.
Т.е., получается единичная матрица 3x3. Это и называется матрицей трансформации.
Чтобы не путаться в иксах и игреках, дадим осям modelling space какие-то другие имена. В терминологии RenderWare, оси называются right, top и at (примерно соответствуют X, Y и Z). Примерно - потому что после вращения они могут занять совсем другое положение в пространстве.
Зачем нужна матрица трансформации. Она используется для перевода координат между разными координатными пространствами. Чтобы перевести координаты из одной системы координат в другую, нужно умножить вектор с координатами точки либо на матрицу трансформации, либо на дополнительную к ней матрицу. (В зависимости от того, откуда куда переводятся координаты).
Offline
Если все понятно, я продолжаю.
Для практической иллюстрации, повернем базис, например, вокруг оси X на угол a.
При этом, вектор right (лежащий на оси X) остается на месте, а два других - перемещаются в пространстве.
После поворота, координаты конца вектора top будут {0, cos(a), sin(a)}, а вектора at {0, -sin(a), cos(a)}
(Честно предупреждаю: я могу здесь слегка напутать в знаках, синусах и косинусах, т.к. справочника под рукой нет. Общий принцип именно такой, а частности - нужно проверять).
В итоге, матрица трансформации приобретает вид { { 1, 0, 0 }, { 0, cos(a), sin(a) }, { 0, -sin(a), cos(a) } }
Аналогично, отрабатываются повороты вокруг остальных осей. Вывод матрицы для поворота вокруг всех трех осей - есть в любом справочник или даже в педивикии.
Что не хватает во всей этой конструкции? Не хватает перемещения в пространстве.
Для этого, нужно указать координаты в world space, в которые перемещается начало координат модели. для этого вводится 4й вектор - pos. Это просто координаты.
В результате, мы получили матрицу 3x4. Это очень неудобный размер с точки зрения перемножения матриц. Чтобы привести ее к квадратной, добьем первые три вектора нулями, а pos - единицей. И вот она, структура RwMatrix.
В качестве приятного бонуса, получаем, что компоненты матрицы выровнены на 16 байт, что позволяет нормально использовать SSE.
struct RwV3D { float x; float y; float z; }; struct RwMatrix { RwV3D right; DWORD flags; // это поле содержит флаги для оптимизации вычислений. При реальых операциях над матрицей, в него заносится 0 RwV3D top; DWORD pad1; // зарезервировано. Должно быть равно 0 RwV3D at; DWORD pad2; // зарезервировано. Должно быть равно 0 RwV3D pos; DWORD pad3; // зарезервировано, должно быть равно 1.0f
Уф. Вроде все. Надеюсь я не очень сильно наврал, т.к. в справочник лазить ломает да и некогда.
За подробностями и картинками - в первую часть мануала по RenderWare Graphics.
PS. Если все понятно и интересно, могу попробовать рассказать про LTM (Local Transformation Matrix)
Offline