Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - xanser

Страницы: [1] 2 3
1
Программирование / Расширение классов
« : Январь 06, 2018, 05:10:43 pm »
В этом посте DK показывал пример, как расширить класс, "прикрепив" к нему дополнительные атрибуты. Насколько я понял, существующие пулы при этом не расширяются.
Код: C++
  1.     #include <plugin.h>
  2.      
  3.     using namespace plugin;
  4.      
  5.     class VehicleExtendedExample {
  6.     public:
  7.         class VehicleComponents { // Класс, который представляет наши данные (можно сказать, что эти данные "прикрепляются" к структуре транспорта)
  8.         public:
  9.             RwFrame *m_pDoorLF;
  10.             RwFrame *m_pDoorRF;
  11.             RwFrame *m_pDoorLR;
  12.             RwFrame *m_pDoorRR;
  13.      
  14.             VehicleComponents(CVehicle *) { // Конструктор этого класса будет вызван при вызове конструктора транспорта (CVehicle::CVehicle)
  15.                 m_pDoorLF = m_pDoorRF = m_pDoorLR = m_pDoorRR = nullptr; // устанавливаем все указатели в 0
  16.             }
  17.         };
  18.      
  19.         VehicleExtendedExample() {
  20.             static VehicleExtendedData<VehicleComponents> vehComps; // Создаем экземпляр нашего расширения. vehComps - это переменная, через которую мы будем
  21.                                                                     // обращаться к нашим данным (используя метод Get(CVehicle *транспорт) )
  22.      
  23.             Events::vehicleSetModelEvent += [](CVehicle *vehicle, int modelIndex) { // Выполняем нашу функцию, когда игра устанавливает модель транспорту
  24.                 if (vehicle->m_pRwClump) { // Если создан графический обьект модели (RpClump)
  25.                     vehComps.Get(vehicle).m_pDoorLF = CClumpModelInfo::GetFrameFromName(vehicle->m_pRwClump, "door_lf_dummy"); // Находим компоненты в иерархии
  26.                     vehComps.Get(vehicle).m_pDoorRF = CClumpModelInfo::GetFrameFromName(vehicle->m_pRwClump, "door_rf_dummy"); // и записываем их в наш класс
  27.                     vehComps.Get(vehicle).m_pDoorLR = CClumpModelInfo::GetFrameFromName(vehicle->m_pRwClump, "door_lr_dummy");
  28.                     vehComps.Get(vehicle).m_pDoorRR = CClumpModelInfo::GetFrameFromName(vehicle->m_pRwClump, "door_rr_dummy");
  29.                 }
  30.                 else // иначе устанавливаём всё в 0
  31.                     vehComps.Get(vehicle).m_pDoorLF = vehComps.Get(vehicle).m_pDoorRF = vehComps.Get(vehicle).m_pDoorLR = vehComps.Get(vehicle).m_pDoorRR = nullptr;
  32.             };
  33.      
  34.             Events::vehicleRenderEvent += [](CVehicle *vehicle) { // Выполняем нашу функцию, когда игра рендерит транспорт
  35.                 if (vehComps.Get(vehicle).m_pDoorLF)
  36.                     vehComps.Get(vehicle).m_pDoorLF->modelling.pos.z = 1.0f; // Сдвигаем компонент вверх
  37.                 if (vehComps.Get(vehicle).m_pDoorRF)
  38.                     vehComps.Get(vehicle).m_pDoorRF->modelling.pos.z = 1.0f;
  39.                 if (vehComps.Get(vehicle).m_pDoorLR)
  40.                     vehComps.Get(vehicle).m_pDoorLR->modelling.pos.z = 1.0f;
  41.                 if (vehComps.Get(vehicle).m_pDoorRR)
  42.                     vehComps.Get(vehicle).m_pDoorRR->modelling.pos.z = 1.0f;
  43.             };
  44.         }
  45.     } vehicleExtendedExample;

DK, можешь на простом примере показать общий принцип расширения классов через прикрепление новых атрибутов. К примеру, есть условный класс
Код: C++
  1. class CVector {
  2. public:
  3.     float x;
  4.     float y;
  5.     CVector();
  6. } vector2d[100];

И есть, например, пул таких координат по определенному адресу памяти, где идет по порядку vector2d[0].x, veсtor2d[0].y, vector2d[1].x, veсtor2d[1].y, vector2d[2].x, veсtor2d[2].y...
Как к этому классу "прикрепить" еще свою координату float z, чтобы обращаться уже к vector2d.x, vector2d.y, vector3d.Get(vector2d).z и не повредить существующий пул. Пример не связан с игрой.

2
Общие вопросы / Зеркальное отражение модели
« : Октябрь 27, 2017, 06:37:16 pm »
Есть ли способ поставить на карту модель в зеркальном отражении, например по-хитрому задав углы поворота. Актуально для симметричных моделей, например ворот, чтобы не моделить отраженный аналог.

3
Идеи / Смена текстур транспорта
« : Октябрь 18, 2017, 03:13:50 pm »
Предлагаю запилить мод для смены скинов машин или поделиться соображениями, возможно это или нет. Вот, что мне удалось. Во вложении вторая текстура для танка rhino2.txd для gta3.img и тестовая asi-шка, которая меняет скин танка до его первого появления нажатием на Tab, для проверки после этого можно ввести например чит-код panzer. Проблема в том, что текстуру танка пока удалось сменить только до появления первой модели, потом все модели создаются такие же. Если первым создать стандартный танк, то мой код уже не оказывает эффекта. Нужна помощь в поиске причины. Хотелось бы сделать смену на лету.



Почему это кажется возможным. Я позаимствовал функции из этого блока: 0x40AA60 CStreaming::RequestSpecialModel, здесь меняются модели и текстуры для специальных актеров для миссий:
109, special01, generic, CIVMALE, STAT_STD_MISSION, man, 0, null, 9,9
110, special02, generic, CIVMALE, STAT_STD_MISSION, man, 0, null, 9,9
......................................
129, special21, generic, CIVMALE, STAT_STD_MISSION, man, 0, null, 9,9

Получается, что можно на один id вешать любые модели и текстуры, в перспективе кажется возможным таким способом расширить количество транспортных средств, используя одни и те же номера.
Что касается скинов, то мне видится возможным внедрение кода с чередующимися текстурами до отрисовки отдельной машины в функцию 0x589AE0 CAutomobile::PreRender

Вот примеры практического применения с использованием этого кода, но пока неодновременные полуфейки:


4
Может кто-нибудь разбирался, почему игрок не падает с эскалатора. От чего интересно зависит "примагничивание" к ступенькам. Попробовал сделать свой эскалатор из тех же ступенек, работает только вертикальное движение, при горизонтальном ступеньки уезжают из под ног. Также игрок не съезжает с яхты кортеза в миссии, интересно от чего это зависит.

Проверил еще одну вещь. Если дополнительно двигать стандартный эскалатор например вбок, то сцепление со ступеньками теряется. Также теряется сцепление при увеличении FPS. Похоже, что игрок удерживается программно.

5
Программирование / Модульность dll
« : Август 31, 2017, 11:31:00 am »
Хочется рассмотреть такой вариант мода, когда написана общая dll, которая патчит какие-то адреса и подсовывает туда вызов своих функций, но внутри уже список вызываемых подфункций вынести в отдельные dll. Например каждый уникальный транспорт может идти со своей asi-шкой, которая добавляет ему новые возможности. Получается общая dll должна вызывать экспортные внешние функции этих мелких dll. Может есть пример такого построения.

6
Скриптинг / Группы педов и скрипт пляжа
« : Август 29, 2017, 05:19:34 pm »
Тут обнаружилось, что на очищенном main.scm перестает работать разделение на группы пешеходов, по всем зонам гуляют одинаковые педы. Я раньше думал, что группы зависят от info.zon, где разделение карты на зоны, и pedgrp.dat, где настройки педов для этих зон. Отсюда вопрос, что в мэйне влияет на активацию групп педов.

Второй вопрос, мне хотелось бы вытащить отдельно зону пляж и события для нее, такие как загорающие люди, заметил, что они начинают это делать с 10 утра. Если это тоже в скрипте, то подскажите, где искать это место. Уточнил - загорающие люди проявляются и без скрипта, если поставить пляжников по дефолту для всех зон, значит надо копать в exe, второй вопрос снимается.

7
При создании карты из кусков может получиться, что нормаль на краю одного куска имеет другой градус, чем нормаль соседнего куска, это дает эффект однобокого затенения вершины при использовании динамического освещения. Склеивать куски каждый раз для склеивания нормалей, а потом их разделять опять не вариант. Какой программой можно задать точный градус нормали, например 90 градусов по краям куска карты? ZModeler не умеет, в 3dmax-е я не нашел как.


8
Удалось ли увеличить в вайсе лимит на максимальный номер модели? Максимальный насколько я знаю 6500, я пропатчил все вхождения, также рядом постоянно попадаются какие-то 7885 и 7916, но все равно работает только с 6500, ни больше, ни меньше, похоже что-то упустил. Limit adjuster 2 beta 6 тоже не увеличивает, хотя там вроде заявлено. Во вложении мои попытки, может кто-то добавит или направит в нужную сторону.

9
Смотрю, на форуме до сих пор нет нормальной темы про FPS.
Вот что получается - если играть на 300-400 fps, появляются всем известные корявости, не привязанные разработчиками к fps, такие как плохая физика авто, не успевающие вылетать и развеиваться партиклы и т.д. При этом картинка очень плавная. Казалось бы нужно просто ограничить fps в опциях, но не тут-то было. Возникает обратный эффект, картинка даже на топовых компах временами начинает идти рывками на модах с тяжелыми моделями. Не знаю в чем причина, в полигонах или текстурах 2048x2048, хотя без ограничителя все летало, значит ресурсов хватает. Есть моды, которые увеличивают ограничитель кадров до 60, типа framelimiter (ставит новый fps в адреса 0x602D68 и 0x9B48EC) или framelimitadjuster_vc и подобные, 30/60/120 fps - никакой разницы, ограничитель увеличивается, но рывки остаются.

Я так подозреваю, что проблема в том, что игре на тяжелых моментах нужно просесть ниже 30/60 fps, а ограничитель не дает ни выше, ни ниже. Без ограничителя я наблюдал проседание с 300 до 20 fps, возможно за счет этого сохранялась плавность. Мне кажется нужен другой подход - ограничить fps только сверху, но не снизу. Вот с этим хотелось бы разобраться, может я не прав.

10
Заметил, что при выходе из игры иногда надолго происходит подвисание окна, в частности в оконном режиме. Предполагаю, что не все правильно выгружается. В этой связи возникает вопрос - как правильно загружать и выгружать dll-ки, всякие плагины и хуки, нужно ли их вообще выгружать или это должно происходить автоматически при выходе.

Вопрос к Sektor-y - можно ли выложить исходный код Fast Loader ASI-а отсюда http://gtabuilder.ru/gta_vc/mods/asi_plugins/78-fast-loader-asi.html

11
Идеи / Модель на экране выбора скинов
« : Март 13, 2017, 01:58:16 pm »
Обращал ли кто-нибудь внимание, но в этом адресе 0x6DB9B8 не имя модели игрока player.dff, а имя модели для экрана выбора скинов. Если воткнуть адрес своей строки например туда, где это вызывается 0x627DA2, можно вращать и скинить любую модель (с соответствующей доработкой до нормального текстурирования).



Отсюда возникло две мысли. Можно вешать скины на что-то другое, например на машины, или хотя бы на их части, кузов например. И можно что-то создавать и вращать таким способом, например как на этом видео:

https://www.youtube.com/watch?v=zde9uXioiso

12
Много раз была пободная тема, но везде речь идет об изменении FOV. На мой взгляд нужно его исправлять в корне, так как изменение не дает правильного результата. Вот пример одного и того же кадра, вверху обычная камера, внизу зум. Мне кажется в идеале было бы получить что-то среднее без обрезания краев камеры. Обратите внимание еще на фон, внизу елки и скамейки находятся в 10 метрах от машины и все выглядит примерно как в жизни, в обычном же варианте елки микроскопические, а скамейки вообще пропадают.

Если ничего не выйдет, хотелось бы узнать хотя бы о том, почему именно так все устроено, может быть эта проблема директ Х, насколько я подозреваю, есть игры, в которых пободного искажения не наблюдается.


13
Программирование / Сложные модели объектов
« : Сентябрь 07, 2016, 02:49:17 pm »
Может у кого есть мысли, как управлять объектом, который имеет непростую иерархию, к примеру как замоделить рабочие часики со стрелками одной dff-моделью, тот же флаг с меняющимися фрэймами. Как потом обратиться к компоненту в иерархии. Для зацепки приходит на ум покопать например модель светофора или всякие ломающиеся лавочки. Делитесь мыслями, может у меня получиться что-то раскопать.


14
Общие вопросы / Глюк текстур
« : Январь 14, 2016, 05:49:57 pm »
Кто-нибудь сталкивался? Проявляется при опускании камеры вниз под ноги. Тестировалось на трех разных компах, в двух случаях проявилась такая беда.


15
Кто-нибудь знает, как они сделаны? Что-то вообще ничего не могу найти по этому вопросу.

Страницы: [1] 2 3