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

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


Сообщения - DK

Страницы: 1 2 [3] 4 5 ... 16
31
Программирование / Re: Vice City Plugin SDK
« : Ноябрь 26, 2017, 04:01:04 pm »
Нет.

32
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\ScriptCommands.h"
  3. #include "common.h"
  4. #include "CMessages.h"
  5.  
  6. using namespace plugin;
  7. using namespace plugin::test;
  8.  
  9. class Gta3CarAngle {
  10. public:
  11.     Gta3CarAngle() {
  12.         Events::gameProcessEvent += [] {
  13.             CVehicle *vehicle = FindPlayerVehicle();
  14.  
  15.             if (!vehicle)
  16.                 return;
  17.  
  18.             float angle = atan2(-vehicle->m_matrix.up.x, vehicle->m_matrix.up.y) * 57.295776f;
  19.             if (angle < 0.0f)
  20.                 angle += 360.0f;
  21.             if (angle > 360.0f)
  22.                 angle -= 360.0f;
  23.  
  24.             float angleCommand = 0.0f;
  25.             ScriptCommand<GET_CAR_HEADING>(CPools::GetVehicleRef(vehicle), &angleCommand);
  26.  
  27.             static char message[256];
  28.             snprintf(message, 256, "Angle: %g Angle (command): %g", angle, angleCommand);
  29.  
  30.             CMessages::AddMessageJumpQ(message, 200, false);
  31.         };
  32.     }
  33. } gta3CarAngle;

33
В GTA3 неправильно обьявлен метод
Код: C++
  1. CVehicle* CPools::GetVehicleRef(CVehicle* vehicle)
Он должен возвращать int (хендл).

Функция ScriptCommand всегда возвращает bool (для опкодов-проверок).
Надо вызывать так
Код: C++
  1. float angleZ = 0.0f;
  2. ScriptCommand<GET_CAR_HEADING>(CPools::GetVehicleRef(vehicle), &angleZ);

34
Программирование / Re: Vice City Plugin SDK
« : Ноябрь 16, 2017, 11:48:26 am »
И каким образом это относится к plugin-sdk?

35
Программирование / Re: Vice City Plugin SDK
« : Ноябрь 14, 2017, 03:10:38 pm »
Проделана работа по исправлению сборки plugin-sdk и проектов на Windows XP.

Будущие планы:


36
Компилятор не может определить, какую функцию вызывать.
Надо вручную указать, что 0, который ты передаешь - это unsigned char.
Код: C++
  1. static_cast<unsigned char>(0)

37
Вроде это самое простое, у меня так, на plugin-sdk по аналогии.
Нет. Это виртуальная функция. Вызывать надо из vtable.

kenking, в SDK ведь есть метод SetModelIndex, что тогда не так?

38
Нет. Надо в базе искать.

39
Программирование / Re: Vice City Plugin SDK
« : Октябрь 28, 2017, 02:00:23 am »
Обновлены гайды по установке и настройке plugin-sdk.

Установка среды разрабоки

Настройка plugin-sdk

40
Идеи / Re: Смена текстур транспорта
« : Октябрь 24, 2017, 04:56:56 pm »
Лучше всего - отделить каждый 'remap' в свой txd-файл, как это сделано в SA.
Иначе получится, что в загруженном txd у тебя будет куча неиспользуемых текстур.

41
Идеи / Re: Смена текстур транспорта
« : Октябрь 23, 2017, 08:49:10 pm »
Зачем делать наугад? Надеяться, что сработает?

Вот небольшой пример - показывает, как динамически менять текстуры трансорта.


Код: C++
  1. #include "plugin.h"
  2. #include "common.h"
  3. #include <map>
  4.  
  5. using namespace plugin;
  6.  
  7. class VehicleTextures {
  8. public:
  9.     VehicleTextures() {
  10.         static CdeclEvent<AddressList<0x4C9ED1, H_CALL, 0x4C9F23, H_CALL, 0x4CA10D, H_CALL, 0x5813D1, H_CALL>,
  11.             PRIORITY_BEFORE, ArgPickN<CEntity*, 0>, void(CEntity*)> myOnRenderOneNonRoad;
  12.  
  13.         static std::map<RpMaterial*, RwTexture *> originalTextures;
  14.  
  15.         myOnRenderOneNonRoad.before += [](CEntity *entity) {
  16.             if (KeyPressed('Z') && entity == FindPlayerVehicle()) {
  17.                 CVehicle *vehicle = reinterpret_cast<CVehicle *>(entity);
  18.                 RpClumpForAllAtomics(vehicle->m_pRwClump, [](RpAtomic *atomic, void *data) {
  19.                     RpGeometryForAllMaterials(atomic->geometry, [](RpMaterial *material, void *data) {
  20.                         if (originalTextures.find(material) == originalTextures.end())
  21.                             originalTextures[material] = material->texture;
  22.                         material->texture = *reinterpret_cast<RwTexture **>(0x77FA58);
  23.                         return material;
  24.                     }, nullptr);
  25.                     return atomic;
  26.                 }, nullptr);
  27.             }
  28.         };
  29.  
  30.         myOnRenderOneNonRoad.after += [](CEntity *) {
  31.             if (originalTextures.size() > 0) {
  32.                 for (auto &i : originalTextures)
  33.                     i.first->texture = i.second;
  34.                 originalTextures.clear();
  35.             }
  36.         };
  37.     }
  38. } vehicleTextures;

По нажатию на Z транспорт игрока будет использовать текстуру waterclear256 (0x77FA58).


42
Программирование / Re: Vice City Plugin SDK
« : Октябрь 19, 2017, 11:52:38 pm »
Мастер проекта зарелизен, обновите репо и запустите 'PluginSdkVsTools.vsix' в папке 'tools\general '

Мастер работает только с VS 2015/2017.

43
Программирование / Re: Vice City Plugin SDK
« : Октябрь 19, 2017, 01:22:45 am »
Из новостей:

1. Добавлена возможность создавать модули для MoonLoader (загрузчик lua-скриптов для GTA SA).

2. Мастер проекта для студии потихоньку приближается к релизу.



Функционал идентичен тому, что в Code::Blocks, плюс 3 особенности:
а) "Превью" при наведении на текст-бокс (т.е. можно посмотреть, как будет выглядеть имя/путь в конечном итоге - обрабатываются пользовательские переменные и переменные среды)
б) Подсветка ошибки - если переменная среды, которая используется в текст-боксе, не найдена.
в) Локализация (русский язык)



В Мастере можно использовать специальные, пользовательские переменные.

44
Идеи / Re: Смена текстур транспорта
« : Октябрь 19, 2017, 12:18:25 am »
Вариант с эвентом CVehicle::Render не прокатит - прозрачные части транспорта рендерятся дополнительно, позже (думаю, понятно, почему). Такой себе отложенный рендер.
Но можно внедриться чуть "глобальнее", и отловить момент когда все части транспорта уже отрендерены.
Либо внедриться в рендер атомика (но тогда надо будет как-то сохранять указатель на авто в атомике, а для этого надо будет создавать своё расширение для атомика).
Другая проблема - для того, чтобы текстура нормально выглядела на транспорте, надо заранее подготовить хорошую развертку (UV координаты). Вроде оригинальные авто используют текстуру white, и я не уверен, что там вменяемая развертка.

Кстати, динамические текстуры есть в San Andreas - вспомните покраски или то же переключение текстуры vehiclelights_on/off (этот метод был успешно использован и в ImVehFt).

45
Устройство опкодов можно посмотреть в базе.

Страницы: 1 2 [3] 4 5 ... 16