Автор Тема: Vice City Plugin SDK  (Прочитано 4665 раз)

Оффлайн DK

  • Новичек
  • **
  • Сообщений: 222
  • Репутация: +313/-0
    • dk22pac
    • Просмотр профиля
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн kenking

  • Новичек
  • **
  • Сообщений: 144
  • Репутация: +5/-0
    • Просмотр профиля
Re: Vice City Plugin SDK
« Ответ #46 : Март 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 Это как понимать?

Оффлайн DK

  • Новичек
  • **
  • Сообщений: 222
  • Репутация: +313/-0
    • dk22pac
    • Просмотр профиля
Re: Vice City Plugin SDK
« Ответ #47 : Март 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>'
« Последнее редактирование: Март 12, 2018, 10:57:55 pm от DK »
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv