GTA Builder Форум

GTA Vice City => Программирование => Тема начата: DK от Июнь 24, 2016, 06:15:49 pm

Название: Vice City Plugin SDK
Отправлено: DK от Июнь 24, 2016, 06:15:49 pm
Это тема для новостей о plugin-sdk для Vice City.
https://github.com/DK22Pac/plugin-sdk

24.06.2016 Первая версия SDK. Пока что реализовано очень мало.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Ноябрь 05, 2016, 10:18:31 pm
05.11.2016 В Vice City Plugin-SDK наконец-то можно работать с пулами транспорта, педов, обьектов.
Спасибо kenking'у за работу над версией Vice City.
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Ноябрь 06, 2016, 09:33:29 am
Спасибо kenking'у за работу над версией Vice City.
Благодаря твоим объяснениям, мало-помалу начинаю разбираться.  :) Вот я разбором структур пока не получается.  :(
Название: Re: Vice City Plugin SDK
Отправлено: Sektor от Ноябрь 06, 2016, 06:30:55 pm
Цитировать
Вот я разбором структур пока не получается.
Разбор структур в каком плане, свои с нуля создавать или где-то в функциях, объявлять обращение к полям?
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Ноябрь 07, 2016, 08:16:09 am
Разбор структур в каком плане, свои с нуля создавать или где-то в функциях, объявлять обращение к полям?
В уже имеющихся структурах, некоторые поля "не названы правильно". А некоторых структур нет вообще в базе. Так, что получается оба варианта.

Название: Re: Vice City Plugin SDK
Отправлено: GeniusZ от Ноябрь 27, 2016, 08:58:33 am
Я не могу скомпилировать проект: компоновщик не находит  .lib файлы. В SDK их тоже нет.
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Ноябрь 27, 2016, 09:21:09 am
Надо сначала собрать сам плагин plugin_vc, потом найдёшь его в \plugin-sdk\output\lib\plugin_vc\Release\plugin_vc.lib
Название: Re: Vice City Plugin SDK
Отправлено: GeniusZ от Ноябрь 27, 2016, 10:08:56 am
Надо сначала собрать сам плагин plugin_vc, потом найдёшь его в \plugin-sdk\output\lib\plugin_vc\Release\plugin_vc.lib
Ясно, спасибо
Название: Re: Vice City Plugin SDK
Отправлено: DK от Ноябрь 29, 2016, 10:22:58 pm
Добавлен пример PedPainting.

(http://i.imgur.com/386dVaF.png)

Код: C++
  1. #include "plugin_vc.h"
  2. #include "list"
  3. #include "game_vc\common.h"
  4. #include "game_vc\CWorld.h"
  5.  
  6. using namespace plugin;
  7.  
  8. class PedPainting {
  9. public:
  10.     PedPainting() {
  11.         static std::list<std::pair<unsigned int *, unsigned int>> resetEntries;
  12.         static CPed *pVictim = nullptr;
  13.         static RwTexture *savedPlayerTex = nullptr;
  14.  
  15.         Events::pedRenderEvent.before += [](CPed *ped) {
  16.             if (ped == pVictim && ped->m_pRwClump && ped->m_pRwClump->object.type == rpCLUMP) {
  17.                 savedPlayerTex = nullptr;
  18.                 if (ped == FindPlayerPed()) {
  19.                     savedPlayerTex = CWorld::Players[0].m_pSkinTexture;
  20.                     CWorld::Players[0].m_pSkinTexture = nullptr;
  21.                 }
  22.                 RpClumpForAllAtomics(ped->m_pRwClump, [](RpAtomic *atomic, void *data) {
  23.                     if (atomic->geometry) {
  24.                         atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
  25.                         RpGeometryForAllMaterials(atomic->geometry, [](RpMaterial *material, void *data) {
  26.                             resetEntries.push_back(std::make_pair(reinterpret_cast<unsigned int *>(&material->color), *reinterpret_cast<unsigned int *>(&material->color)));
  27.                             material->color = { 255, 0, 0, 255 };
  28.                             resetEntries.push_back(std::make_pair(reinterpret_cast<unsigned int *>(&material->texture), *reinterpret_cast<unsigned int *>(&material->texture)));
  29.                             material->texture = 0;
  30.                             return material;
  31.                         }, 0);
  32.                     }
  33.                     return atomic;
  34.                 }, 0);
  35.                 DeActivateDirectional();
  36.                 SetFullAmbient();
  37.             }
  38.         };
  39.  
  40.         Events::pedRenderEvent.after += [](CPed *ped) {
  41.             for (auto &p : resetEntries)
  42.                 *p.first = p.second;
  43.             resetEntries.clear();
  44.             if (savedPlayerTex)
  45.                 CWorld::Players[0].m_pSkinTexture = savedPlayerTex;
  46.         };
  47.  
  48.         Events::gameProcessEvent += [] {
  49.             pVictim = FindPlayerPed();
  50.         };
  51.     }
  52. } pedPainting;

Различие с версией  SA в том из-за того, что в VC для игрока используется текстура скина. Она устанавливается всем материалам модели игрока перед непосредственным рендером атомика:

(http://i.imgur.com/5xuAZoE.png)

Нужно принудительно убрать эту текстуру, и вернуть после рендера.

Код: C++
  1. Рендер игрока (CPed::Render → CEntity::Render)
  2. ----------------------------------------------
  3.  
  4. Вызов функций pedRenderEvent.before
  5.              ↓
  6. Вызов RpClumpRender
  7.     ⤷ Вызов CVisibilityPlugins::RenderPlayerCB для всех атомиков в клампе
  8.         ⤷ Присваивание всем материалам в геометрии атомика текстуры скина игрока
  9.         ⤷ Выполнение цепочки скин-пайплайна, настройка освещения и рендеринг
  10.              ↓
  11. Вызов функций pedRenderEvent.after
Название: Re: Vice City Plugin SDK
Отправлено: DK от Март 12, 2017, 01:19:36 pm
Добавлена утилита plugin-sdk-project-wizard для генерации шаблонов проектов для Visual Studio.

https://github.com/DK22Pac/plugin-sdk/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-Visual-Studio

Генерируются шаблоны:
-.ASI/.CLEO плагины
-С/без совместимости с LimitAdjuster'ом (на будущее)
-С/без использования DirectX (для Vice City есть выбор D3D8/D3D8to9)
Название: Re: Vice City Plugin SDK
Отправлено: ilufir от Март 12, 2017, 06:56:34 pm
Столкнулся с проблемой при добавлении Plugin SDK. При попытке создания проекта получаю "Исключение из HRESULT 0x80041FE2". Как это починить?
Название: Re: Vice City Plugin SDK
Отправлено: DK от Март 22, 2017, 07:14:04 pm
Что значит "при добавлении"?
Создаешь проект из сгенерированных шаблонов?
Название: Re: Vice City Plugin SDK
Отправлено: ilufir от Март 22, 2017, 07:59:11 pm
Что значит "при добавлении"?
Создаешь проект из сгенерированных шаблонов?
Да
Название: Re: Vice City Plugin SDK
Отправлено: DK от Март 25, 2017, 05:33:00 pm
VS 2015? Установлена ли поддержка WinXP?
Название: Re: Vice City Plugin SDK
Отправлено: ilufir от Март 25, 2017, 06:24:11 pm
VS 2015? Установлена ли поддержка WinXP?

2015. Поддержка XP не установлена
Название: Re: Vice City Plugin SDK
Отправлено: DK от Март 28, 2017, 07:03:35 pm
Установи дополнительно поддержку XP.
Или переустанови студию, по этой инструкции:
https://github.com/DK22Pac/plugin-sdk/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-Visual-Studio-Community
Название: Re: Vice City Plugin SDK
Отправлено: DK от Апрель 14, 2017, 11:11:21 pm
Важное обновление для plugin-sdk:
Переезд на Visual Studio 2017
Обновленная программа для генерации шаблонов проектов (теперь с поддержкой GTA 3)
Обновления конфигураций сборки (теперь только 2 режима - Release/Debug)
Обновленные статьи на вики (https://github.com/DK22Pac/plugin-sdk/wiki)
Название: Re: Vice City Plugin SDK
Отправлено: DK от Май 29, 2017, 11:22:25 pm
Значимое обновление для plugin-sdk (GTA3, VC и SA)

Модуль ScriptCommands, пока что в тестовом режиме.

Позволяет выполнять опкоды в плагинах.

(http://i.imgur.com/10oWvKX.png)
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Май 30, 2017, 06:36:59 am
Значимое обновление для plugin-sdk (GTA3, VC и SA)
Модуль ScriptCommands, пока что в тестовом режиме.
Позволяет выполнять опкоды в плагинах.
Отлично! Спасибо! Можно полностью "спрыгнуть" с клео скриптов.  :D
Название: Re: Vice City Plugin SDK
Отправлено: Prographer от Май 30, 2017, 07:43:27 pm
Очень интересно. Надо будет попробовать что-нибудь написать
Название: Re: Vice City Plugin SDK
Отправлено: Shagg_E от Май 31, 2017, 12:19:46 am
Модуль ScriptCommands, пока что в тестовом режиме.
Шик!
Название: Re: Vice City Plugin SDK
Отправлено: DK от Август 31, 2017, 06:32:33 pm
Обновление в plugin-sdk - теперь используется premake для генерации проектов plugin-sdk.

Мы убрали все файлы проектов и решений (solution) из репозитория. Теперь пользователь может сгенерировать эти файлы самостоятельно, в зависимости от версии установленной Visual Studio.

Для этого надо запустить файл premake_<версия Visual Studio>.bat.

Таким образом, plugin-sdk и примеры к нему можно теперь собрать в разных версиях Visual Studio (2010, 2012, 2013, 2015, 2017).

Что касается создания новых проектов, то такая возможность пока что присутствует только для версий 2015 и 2017.

Глобальные переменные

Теперь мы используем переменные среды для определения расположения всех требуемых для сборки компонентов:
PLUGIN_SDK_DIR - папка plugin-sdk (например: D:\Projects\plugin-sdk)
DIRECTX9_SDK_DIR - папка DirectX 9 SDK (например: D:\Projects\DXSDK\9.0c - папка, в которой находятся папки Include и Lib, требуется для сборки проектов, которые используют возможности Direct X 9)
RWD3D9_DIR - папка rwd3d9 (например: D:\Projects\rwd3d9 - папка, в которой находятся папки libs и source, требуется для сборки проектов, которые используют возможности Direct X 9 в GTA 3 / GTA Vice City)
CLEO_SDK_SA_DIR - папка CLEO SDK для GTA SA (например: D:\Projects\CLEO\sa\cleo_sdk - папка, в которой находятся cleo.h и cleo.lib)
CLEO_SDK_VC_DIR - папка CLEO SDK для GTA VC (например: D:\Projects\CLEO\vc\cleo_sdk - папка, в которой находятся cleo.h и cleo.lib)
CLEO_SDK_III_DIR - папка CLEO SDK для GTA 3 (например: D:\Projects\CLEO\iii\cleo_sdk - папка, в которой находятся cleo.h и cleo.lib)

Сборка в Visual Studio 2010 - 2013

Эти версии Visual Studio не поддерживают новые стандарты C++. Поэтому для сборки используется "внешний" компилятор и специальный тип проекта Visual Studio. Для сборки на этих версиях необходимо установить mingw-64.
Подробная инструкция здесь.
https://github.com/DK22Pac/plugin-sdk/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-mingw-64
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Сентябрь 02, 2017, 10:25:44 am
После введения этих новшеств: обновил проект, запустил premake_vs2017, перестроил plugin_III.lib. При этом создалась папка D:\output\lib где есть plugin_iii.lib. При этом есть и предыдущая сборка плагина plugin_III.lib в D:\Projects\plugin-sdk\output\lib\plugin_III\Release. То же касается и plugin_vc.lib (для SA пока не собирал, но предыдущая сборка также присутствует в D:\Projects\plugin-sdk\output\lib\plugin_sa\Release).
Название: Re: Vice City Plugin SDK
Отправлено: DK от Сентябрь 02, 2017, 05:46:35 pm
Переменную PLUGIN_SDK_DIR добавлял?
Старые папки и файлы можно удалить. Можно также полностью удалить папку plugin-sdk и заново клонировать.
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Сентябрь 02, 2017, 06:22:09 pm
Переменную PLUGIN_SDK_DIR добавлял?
Куда надо добавить эту переменную?

Старые папки и файлы можно удалить. Можно также полностью удалить папку plugin-sdk и заново клонировать.
Удалил папку plugin-sdk и заново клонировал. Запустил premake_vs2017. Открыл проект plugin в VS 2017. Можно строить plugin_iii, plugin_sa и plugin_vc или нужно сначала что-то настроить в свойствах?

Название: Re: Vice City Plugin SDK
Отправлено: DK от Сентябрь 03, 2017, 07:40:56 pm
https://github.com/DK22Pac/plugin-sdk/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81%D1%80%D0%B5%D0%B4%D1%8B-plugin-sdk
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Сентябрь 04, 2017, 10:09:59 am
Цитировать
Для сборки plugin-sdk и проектов, использующих plugin-sdk, обязательным является наличие переменной PLUGIN_SDK_DIR. Для сборки проектов, использующих возможности DirectX, обязательным является наличие переменной DIRECTX9_SDK_DIR (а для GTA Vice City и GTA 3 - также переменной RWD3D9_DIR). Для сборки проектов, использующих возможности CLEO, обязательным является наличие переменных CLEO_SDK_SA_DIR (для GTA San Andreas), CLEO_SDK_VC_DIR (для GTA Vice City), CLEO_SDK_III_DIR (для GTA 3). Наличие других переменных не является обязательным.

Добавил две переменные:
PLUGIN_SDK_DIR   папка plugin-sdk   D:\Projects\plugin-sdk
DIRECTX9_SDK_DIR   папка DirectX 9 SDK (папка, в которой находятся папки Include и Lib, требуется для сборки проектов, которые используют возможности Direct X 9)   D:\Projects\DXSDK\9.0c

Хотел добавить и RWD3D9_DIR, но у меня нет папки rwd3d9 (папка, в которой находятся папки libs и source, требуется для сборки проектов, которые используют возможности Direct X 9 в GTA 3 / GTA Vice City).

Построил plugin_iii.lib, plugin_vc.lib, plugin.lib. Они в папке D:\Projects\plugin-sdk\output\lib. Там же файл paths.lib.

При этом создалась папка D:\output\obj\Release\plugin_sa, где находится текстовой файл с результатами построения проекта (для VC и GTA3 соответственно то же свои папки и результаты построения проектов).

Закрыл решение. Открыл другое решение, где я собираю примеры плагинов. Добавил новый проект. Начал построение. Не собирает.
(http://savepic.net/9861264m.jpg) (http://savepic.net/9861264.htm)

Удалил проект. Закрыл студию. Удалил старые шаблоны. Сгенерировал новые. Открыл решение, добавил новый проект, начал построение. Результат тот же.  >:( 
Название: Re: Vice City Plugin SDK
Отправлено: DK от Сентябрь 04, 2017, 06:26:12 pm
Проверь пути к библиотекам в настройках созданного проекта.
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Сентябрь 05, 2017, 09:25:11 am
Заменил путь. Теперь проект построился. Теперь надо будет менять путь для всех проектов. В шаблонах тоже.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Сентябрь 06, 2017, 12:21:21 am
Программа для генерации шаблонов была обновлена.
Если у тебя проекты, созданные по новым шаблонам, всё ещё содержат старые пути, попробуй удалить шаблоны, почистить кеш Visual Studio (https://msdn.microsoft.com/ru-ru/library/ms247116(v=vs.100).aspx) и заново сгенерировать.

В будущем мы будем использовать более продвинутый способ создания проекта, с диалоговым окном.
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Сентябрь 06, 2017, 08:19:30 am
Почистил. Теперь всё нормально. Спасибо.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Октябрь 03, 2017, 12:33:12 pm
Опять обновления.

1. Улучшена поддержка Visual Studio 2010-2013. Теперь для этих версий можно генерировать шаблоны проектов (так же, как это делается для VS2015 и 2017). Правда, есть небольшая неудобность - шаблоны будут находиться в категории "C#".

(https://i.imgur.com/KmiXkiEm.png) (https://i.imgur.com/KmiXkiE.png)

2. Добавлена полная поддержка среды разработки Code::Blocks (http://www.codeblocks.org/). Да-да, вам не показалось. Теперь создавать и компилировать проекты plugin-sdk, а также сам sdk с примерами можно без установленной Visual Studio. Ну а настройщик проекта plugin-sdk - это маленький и приятный бонус.

(https://i.imgur.com/XWWClqHm.png) (https://i.imgur.com/XWWClqH.png)

3. Улучшена логика скрипта для генерации проекта. Теперь перед генерацией удаляются все файлы предыдущих проектов. Добавлена возможность генерации проектов для CodeBlocks и CodeLite.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Октябрь 19, 2017, 01:22:45 am
Из новостей:

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

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

(https://cdn.discordapp.com/attachments/357082905169625090/369231504527720448/unknown.png)

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

(https://cdn.discordapp.com/attachments/357082905169625090/369232035190931456/unknown.png)

В Мастере можно использовать специальные, пользовательские переменные (https://github.com/DK22Pac/plugin-sdk/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B4%D0%BB%D1%8F-%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0).
Название: Re: Vice City Plugin SDK
Отправлено: egor230 от Октябрь 19, 2017, 04:45:38 pm
Ура!!!!! Здорово!!!!!!!!!! Вот бы этому научиться.....
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Октябрь 19, 2017, 06:37:14 pm
Ура!!!!! Здорово!!!!!!!!!! Вот бы этому научиться.....
Здесь http://forum.gtabuilder.ru/index.php?topic=337.0 (http://forum.gtabuilder.ru/index.php?topic=337.0) достаточно информации для этого.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Октябрь 19, 2017, 11:52:38 pm
Мастер проекта зарелизен, обновите репо и запустите 'PluginSdkVsTools.vsix' в папке 'tools\general '

Мастер работает только с VS 2015/2017.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Октябрь 28, 2017, 02:00:23 am
Обновлены гайды по установке и настройке plugin-sdk.

Установка среды разрабоки (https://github.com/DK22Pac/plugin-sdk/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D1%81%D1%80%D0%B5%D0%B4%D1%8B-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D0%BA%D0%B8)

Настройка plugin-sdk (https://github.com/DK22Pac/plugin-sdk/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-plugin-sdk)
Название: Re: Vice City Plugin SDK
Отправлено: DK от Ноябрь 14, 2017, 03:10:38 pm
Проделана работа по исправлению сборки plugin-sdk и проектов на Windows XP.

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

(https://i.imgur.com/wL8W3TIm.png) (https://i.imgur.com/wL8W3TI.png)
Название: Re: Vice City Plugin SDK
Отправлено: spartaque12 от Ноябрь 15, 2017, 08:14:27 pm
эх пофиксили бы shadows скрипт вместе с d3d8to9 :(
Название: Re: Vice City Plugin SDK
Отправлено: DK от Ноябрь 16, 2017, 11:48:26 am
И каким образом это относится к plugin-sdk?
Название: Re: Vice City Plugin SDK
Отправлено: spartaque12 от Ноябрь 26, 2017, 05:50:27 am
ну тень же идет с архивом сорурса сдк ))
Название: Re: Vice City Plugin SDK
Отправлено: DK от Ноябрь 26, 2017, 04:01:04 pm
Нет.
Название: Re: Vice City Plugin SDK
Отправлено: spartaque12 от Ноябрь 27, 2017, 05:52:11 am
хм , но здесь то идет, http://forum.gtabuilder.ru/index.php?action=dlattach;topic=200.0;attach=179 (http://forum.gtabuilder.ru/index.php?action=dlattach;topic=200.0;attach=179)
Название: Re: Vice City Plugin SDK
Отправлено: DK от Ноябрь 27, 2017, 07:19:07 pm
А в официальном репозитории не идёт.
Название: Re: Vice City Plugin SDK
Отправлено: DK от Декабрь 08, 2017, 01:10:40 am
Обновлен модуль ScriptCommands и добавлен пример с его использованием.
https://github.com/DK22Pac/plugin-sdk/tree/master/examples/ScriptCommands
Название: Re: Vice City Plugin SDK
Отправлено: DK от Январь 04, 2018, 01:15:33 am
Добавлена инструкция по установке Code::Blocks.
https://github.com/DK22Pac/plugin-sdk/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D1%81%D1%80%D0%B5%D0%B4%D1%8B-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D0%BA%D0%B8#codeblocks
Название: Re: Vice City Plugin SDK
Отправлено: kenking от Март 11, 2018, 11:47:31 am
Сегодня обновился. Удалил полностью старый sdk, клонировал заново, удалил старые шаблоны, "почистил" студию от старых шаблонов. Сгенерировал проект. Собрал плагины.
Теперь VALIDATE_SIZE не работает?
В новых коммитах зачем-то удалены выравнивания структур. Например, для GTA3 возьмём класс CBulletInfo. Было:
Код: C++
  1. #pragma pack(push, 4)
  2. class CBulletInfo {
  3. public:
  4.     eWeaponType  m_nWeaponType;
  5.     CEntity     *m_pCreator;
  6.     unsigned int m_nDestroyTime;
  7.     bool         m_bExists;
  8.     CVector      m_vecPosition;
  9.     CVector      m_vecVelocity;
  10.     short        m_nDamage;
  11. };
  12. #pragma pack(pop)
  13. VALIDATE_SIZE(CBulletInfo, 0x2C);

Стало:
Код: C++
  1. class CBulletInfo {
  2. public:
  3.     eWeaponType  m_nWeaponType;
  4.     CEntity     *m_pCreator;
  5.     unsigned int m_nDestroyTime;
  6.     bool         m_bExists;
  7.     CVector      m_vecPosition;
  8.     CVector      m_vecVelocity;
  9.     short        m_nDamage;
  10. };
  11. VALIDATE_SIZE(CBulletInfo, 0x2C);

И при этом нет ошибки в размере класса!  :o Это как понимать?
Название: Re: Vice City Plugin SDK
Отправлено: DK от Март 12, 2018, 10:28:22 pm
Потому что выравнивание структур по умолчанию - 4 байта.
Можно проверить вот так:
Код: C++
  1. template<typename T1, typename T2, typename T3, typename T4, int S>
  2. struct message;
  3. struct Size;
  4. struct of;
  5. struct is;
  6. #define PRINT_SIZE(x) message<Size, of, x, is, sizeof(x)> _##x
  7.  
  8. struct A {
  9.     unsigned char field_0;
  10. };
  11.  
  12. struct B {
  13.     unsigned short field_0;
  14. };
  15.  
  16. struct C {
  17.     unsigned int field_0;
  18.     unsigned char field_4;
  19. };
  20.  
  21. PRINT_SIZE(A);
  22. PRINT_SIZE(B);
  23. PRINT_SIZE(C);

Код: C++
  1. error C2079: '_A' uses undefined struct 'message<Size,of,A,is,1>'
  2. error C2079: '_B' uses undefined struct 'message<Size,of,B,is,2>'
  3. error C2079: '_C' uses undefined struct 'message<Size,of,C,is,8>'