Базовая часть шаблона AsiPlugin. Содержимое файлов в ней не меняется при создании проекта из шаблона.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

base.hpp 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #ifndef BASE_H
  2. #define BASE_H
  3. #include "d3d9/proxydirectx.h"
  4. #include "llmo/callfunc.hpp"
  5. #include "llmo/ccallhook.h"
  6. #include <d3d9.h>
  7. #include <d3dx9.h>
  8. #include <d3dx9core.h>
  9. #include <wingdi.h>
  10. #include "CGame/CBone.h"
  11. #include "CGame/CBulletTrace.h"
  12. #include "CGame/CCamera.h"
  13. #include "CGame/CEntity.h"
  14. #include "CGame/CHAnimIFrame.h"
  15. #include "CGame/CObject.h"
  16. #include "CGame/CParticleData.h"
  17. #include "CGame/CPed.h"
  18. #include "CGame/CPedIK.h"
  19. #include "CGame/CPhysical.h"
  20. #include "CGame/CPlaceable.h"
  21. #include "CGame/CVehicle.h"
  22. #include "CGame/CWeaponSlot.h"
  23. #include "CGame/Pools.h"
  24. #include "CGame/SCM.h"
  25. #include "CGame/Transport/CAutomobile.h"
  26. #include "CGame/Transport/CBike.h"
  27. #include "CGame/Transport/CBmx.h"
  28. #include "CGame/Transport/CBoat.h"
  29. #include "CGame/Transport/CHeli.h"
  30. #include "CGame/Transport/CMonsterTruck.h"
  31. #include "CGame/Transport/CPlane.h"
  32. #include "CGame/Transport/CQuad.h"
  33. #include "CGame/Transport/CTrailer.h"
  34. #include "CGame/Types.h"
  35. #include "CGame/samp.h"
  36. #include "sys/SRCursor.h"
  37. #include "sys/SREvents.h"
  38. #include "sys/SRKeys.h"
  39. /// Возможные типы курсора
  40. enum eCursorType { System, SAMP, ByImGui };
  41. struct stGlobalHandles {
  42. union {
  43. /// хендл библиотеки samp.dll
  44. HANDLE samp;
  45. /// адрес библиотеки samp.dll
  46. DWORD dwSAMP;
  47. };
  48. union {
  49. /// хендл библиотеки d3d9.dll
  50. HANDLE d3d9;
  51. /// адрес библиотеки d3d9.dll
  52. DWORD dwD3D9;
  53. };
  54. union {
  55. /// хендл плагина
  56. HANDLE plugin;
  57. /// адрес плагина
  58. DWORD dwPlugin;
  59. };
  60. bool isSAMP() {
  61. if ( !dwSAMP ) return false;
  62. if ( dwSAMP == 0xFFFFFFFF ) return false;
  63. return true;
  64. }
  65. };
  66. struct stGlobalClasses {
  67. /// Указатель на объект IDirect3D9
  68. IDirect3D9 &d3d = *reinterpret_cast<IDirect3D9 *>( 0xC97C20 );
  69. /// Указатель на D3DPRESENT_PARAMETERS. Там всякие нештяки типа разрешения экрана
  70. D3DPRESENT_PARAMETERS *params = reinterpret_cast<D3DPRESENT_PARAMETERS *>( 0xC9C040 );
  71. /// Указатель на базовую структуру сампа.
  72. class SAMP *samp = static_cast<class SAMP *>( nullptr );
  73. /**
  74. * \brief Указатель на proxyIDirect3DDevice9
  75. * \detail Данный класс является хуком над оригинальным IDirect3DDevice9.
  76. * Он используется для решистрации различных примитивов и получения оригинального указателя
  77. * IDirect3DDevice9. Данный класс так же позволяет перенаправлять методы IDirect3DDevice9 в другие классы,
  78. * используя систему сигналов и слотов. Если вы не хотите, что бы после вызова вашего хука, вызывался
  79. * оригинальный метод (например, если вы вызываете его сами), то дергайте метод d3d9_hook
  80. */
  81. proxyIDirect3DDevice9 *DirectX = static_cast<proxyIDirect3DDevice9 *>( nullptr );
  82. /// Объект для управления вызовом курсора на экран. Не зависит от версии сампа
  83. SRCursor *cursor;
  84. /**
  85. * \brief Указатель на класс обработки различных событий
  86. * \details Данный класс позволяет перехватывать события окна игры, выполнять свой код во время работы
  87. * mainloop и scriptloop, обрабатывать нажатия клавиш и хукать события RakNet
  88. */
  89. SREvents *events = static_cast<SREvents *>( nullptr );
  90. };
  91. struct stGlobalPVars {
  92. /// Номер состояния игры. 9 - загружена
  93. uint &gameSatate = *reinterpret_cast<uint *>( 0xC8D4C0 );
  94. /// Ссылка на главную структуру RenderWare
  95. RsGlobalType &rsGlobal = *reinterpret_cast<RsGlobalType *>( 0xC17040 );
  96. /// Ссылка на состояние игрового меню (открыто/закрыто)
  97. bool &isMenuOpened = *reinterpret_cast<bool *>( 0xBA67A4 );
  98. /// Ссылка на номер активного пункта в меню игры
  99. byte &activeMenuID = *reinterpret_cast<byte *>( 0xBA68A5 );
  100. /// Ссылка на hwnd окна игры
  101. HWND &hwnd = *reinterpret_cast<HWND *>( 0xC97C1C );
  102. /**
  103. * \brief Указатель на массив глобальных переменных движка SCM (CLEO).
  104. * \detail Обращаться так: \code uint versionSF = g_vars.scm_gVars[707]; // Версия SF \endcode
  105. */
  106. uint *scm_gVars = reinterpret_cast<uint *>( 0x00A49960 );
  107. /// Имя плагина
  108. SRString pluginName;
  109. /// Путь до плагина
  110. SRString pluginPath;
  111. };
  112. /// Название проекта, которое было указано при разворачивание проекта из шаблона
  113. extern SRString PROJECT_NAME;
  114. /// Тип проекта: dll/asi
  115. extern SRString PROJECT_TYPE;
  116. /// Тип курсора используемого плагином
  117. extern eCursorType cursorType;
  118. /// Содержит указатели на базовые хендлы
  119. extern stGlobalHandles g_handle;
  120. /// Содержит указатели на базовые классы
  121. extern stGlobalClasses g_class;
  122. /// Содержит указатели на базовые переменные игры
  123. extern stGlobalPVars g_vars;
  124. #endif // BASE_H