Guest User

Untitled

a guest
Mar 6th, 2025
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.33 KB | None | 0 0
  1. #pragma once
  2. #include "../../sdk/math/Vector.h"
  3. #include "../../sdk/math/QAngle.h"
  4. #include "../../sdk/classes/CBaseEntity.h"
  5. #include "../../sdk/classes/CCSPlayerPawn.h"
  6.  
  7. enum BuiltInInteractionLayer_t
  8. {
  9. LAYER_INDEX_CONTENTS_SOLID = 0,
  10. LAYER_INDEX_CONTENTS_HITBOX,
  11. LAYER_INDEX_CONTENTS_TRIGGER,
  12. LAYER_INDEX_CONTENTS_SKY,
  13. LAYER_INDEX_FIRST_USER,
  14. LAYER_INDEX_NOT_FOUND = -1,
  15. LAYER_INDEX_MAX_ALLOWED = 64,
  16. };
  17.  
  18. enum StandardInteractionLayers_t
  19. {
  20. LAYER_INDEX_CONTENTS_PLAYER_CLIP = LAYER_INDEX_FIRST_USER,
  21. LAYER_INDEX_CONTENTS_NPC_CLIP,
  22. LAYER_INDEX_CONTENTS_BLOCK_LOS,
  23. LAYER_INDEX_CONTENTS_BLOCK_LIGHT,
  24. LAYER_INDEX_CONTENTS_LADDER,
  25. LAYER_INDEX_CONTENTS_PICKUP,
  26. LAYER_INDEX_CONTENTS_BLOCK_SOUND,
  27. LAYER_INDEX_CONTENTS_NODRAW,
  28. LAYER_INDEX_CONTENTS_WINDOW,
  29. LAYER_INDEX_CONTENTS_PASS_BULLETS,
  30. LAYER_INDEX_CONTENTS_WORLD_GEOMETRY,
  31. LAYER_INDEX_CONTENTS_WATER,
  32. LAYER_INDEX_CONTENTS_SLIME,
  33. LAYER_INDEX_CONTENTS_TOUCH_ALL,
  34. LAYER_INDEX_CONTENTS_PLAYER,
  35. LAYER_INDEX_CONTENTS_NPC,
  36. LAYER_INDEX_CONTENTS_DEBRIS,
  37. LAYER_INDEX_CONTENTS_PHYSICS_PROP,
  38. LAYER_INDEX_CONTENTS_NAV_IGNORE,
  39. LAYER_INDEX_CONTENTS_NAV_LOCAL_IGNORE,
  40. LAYER_INDEX_CONTENTS_POST_PROCESSING_VOLUME,
  41. LAYER_INDEX_CONTENTS_UNUSED_LAYER3,
  42. LAYER_INDEX_CONTENTS_CARRIED_OBJECT,
  43. LAYER_INDEX_CONTENTS_PUSHAWAY,
  44. LAYER_INDEX_CONTENTS_SERVER_ENTITY_ON_CLIENT,
  45. LAYER_INDEX_CONTENTS_CARRIED_WEAPON,
  46. LAYER_INDEX_CONTENTS_STATIC_LEVEL,
  47. LAYER_INDEX_FIRST_MOD_SPECIFIC,
  48. };
  49.  
  50. enum ModSpecificInteractionLayers_t
  51. {
  52. LAYER_INDEX_CONTENTS_CSGO_TEAM1 = LAYER_INDEX_FIRST_MOD_SPECIFIC,
  53. LAYER_INDEX_CONTENTS_CSGO_TEAM2,
  54. LAYER_INDEX_CONTENTS_CSGO_GRENADE_CLIP,
  55. LAYER_INDEX_CONTENTS_CSGO_DRONE_CLIP,
  56. LAYER_INDEX_CONTENTS_CSGO_MOVEABLE,
  57. LAYER_INDEX_CONTENTS_CSGO_OPAQUE,
  58. LAYER_INDEX_CONTENTS_CSGO_MONSTER,
  59. LAYER_INDEX_CONTENTS_CSGO_UNUSED_LAYER,
  60. LAYER_INDEX_CONTENTS_CSGO_THROWN_GRENADE,
  61. };
  62.  
  63. enum BuiltInCollisionGroup_t
  64. {
  65. // Default layer, always collides with everything.
  66. COLLISION_GROUP_ALWAYS = 0, // "always"
  67. // This is how you turn off all collisions for an object - move it to this group
  68. COLLISION_GROUP_NONPHYSICAL, // "never"
  69. // Trigger layer, never collides with anything, only triggers/interacts. Use when querying for interaction layers.
  70. COLLISION_GROUP_TRIGGER, // "trigger"
  71. // Conditionally solid means that the collision response will be zero or as defined in the table when there are matching interactions
  72. COLLISION_GROUP_CONDITIONALLY_SOLID, // needs interactions
  73. // First unreserved collision layer index.
  74. COLLISION_GROUP_FIRST_USER,
  75. // Hard limit of 254 due to memory layout, and these are never visible to scene queries.
  76. COLLISION_GROUPS_MAX_ALLOWED = 64,
  77. };
  78.  
  79. enum StandardCollisionGroups_t
  80. {
  81. COLLISION_GROUP_DEFAULT = COLLISION_GROUP_FIRST_USER,
  82. COLLISION_GROUP_DEBRIS, // Collides with nothing but world, static stuff and triggers
  83. COLLISION_GROUP_INTERACTIVE_DEBRIS, // Collides with everything except other interactive debris or debris
  84. COLLISION_GROUP_INTERACTIVE, // Collides with everything except interactive debris or debris
  85. COLLISION_GROUP_PLAYER,
  86. COLLISION_GROUP_BREAKABLE_GLASS,
  87. COLLISION_GROUP_VEHICLE,
  88. COLLISION_GROUP_PLAYER_MOVEMENT, // For HL2, same as Collision_Group_Player, for
  89. // TF2, this filters out other players and CBaseObjects
  90. COLLISION_GROUP_NPC, // Generic NPC group
  91. COLLISION_GROUP_IN_VEHICLE, // for any entity inside a vehicle
  92. COLLISION_GROUP_WEAPON, // for any weapons that need collision detection
  93. COLLISION_GROUP_VEHICLE_CLIP, // vehicle clip brush to restrict vehicle movement
  94. COLLISION_GROUP_PROJECTILE, // Projectiles!
  95. COLLISION_GROUP_DOOR_BLOCKER, // Blocks entities not permitted to get near moving doors
  96. COLLISION_GROUP_PASSABLE_DOOR, // Doors that the player shouldn't collide with
  97. COLLISION_GROUP_DISSOLVING, // Things that are dissolving are in this group
  98. COLLISION_GROUP_PUSHAWAY, // Nonsolid on client and server, pushaway in player code
  99.  
  100. COLLISION_GROUP_NPC_ACTOR, // Used so NPCs in scripts ignore the player.
  101. COLLISION_GROUP_NPC_SCRIPTED, // Used for NPCs in scripts that should not collide with each other
  102. COLLISION_GROUP_PZ_CLIP,
  103. COLLISION_GROUP_PROPS,
  104.  
  105. LAST_SHARED_COLLISION_GROUP,
  106. };
  107.  
  108. #define CONTENTS_EMPTY 0ull // No contents
  109.  
  110. #define CONTENTS_SOLID ( 1ull << LAYER_INDEX_CONTENTS_SOLID )
  111. #define CONTENTS_HITBOX ( 1ull << LAYER_INDEX_CONTENTS_HITBOX )
  112. #define CONTENTS_TRIGGER ( 1ull << LAYER_INDEX_CONTENTS_TRIGGER )
  113. #define CONTENTS_SKY ( 1ull << LAYER_INDEX_CONTENTS_SKY )
  114.  
  115. #define CONTENTS_PLAYER_CLIP ( 1ull << LAYER_INDEX_CONTENTS_PLAYER_CLIP )
  116. #define CONTENTS_NPC_CLIP ( 1ull << LAYER_INDEX_CONTENTS_NPC_CLIP )
  117. #define CONTENTS_BLOCK_LOS ( 1ull << LAYER_INDEX_CONTENTS_BLOCK_LOS )
  118. #define CONTENTS_BLOCK_LIGHT ( 1ull << LAYER_INDEX_CONTENTS_BLOCK_LIGHT )
  119. #define CONTENTS_LADDER ( 1ull << LAYER_INDEX_CONTENTS_LADDER )
  120. #define CONTENTS_PICKUP ( 1ull << LAYER_INDEX_CONTENTS_PICKUP )
  121. #define CONTENTS_BLOCK_SOUND ( 1ull << LAYER_INDEX_CONTENTS_BLOCK_SOUND )
  122. #define CONTENTS_NODRAW ( 1ull << LAYER_INDEX_CONTENTS_NODRAW )
  123. #define CONTENTS_WINDOW ( 1ull << LAYER_INDEX_CONTENTS_WINDOW )
  124. #define CONTENTS_PASS_BULLETS ( 1ull << LAYER_INDEX_CONTENTS_PASS_BULLETS )
  125. #define CONTENTS_WORLD_GEOMETRY ( 1ull << LAYER_INDEX_CONTENTS_WORLD_GEOMETRY )
  126. #define CONTENTS_WATER ( 1ull << LAYER_INDEX_CONTENTS_WATER )
  127. #define CONTENTS_SLIME ( 1ull << LAYER_INDEX_CONTENTS_SLIME )
  128. #define CONTENTS_TOUCH_ALL ( 1ull << LAYER_INDEX_CONTENTS_TOUCH_ALL )
  129. #define CONTENTS_PLAYER ( 1ull << LAYER_INDEX_CONTENTS_PLAYER )
  130. #define CONTENTS_NPC ( 1ull << LAYER_INDEX_CONTENTS_NPC )
  131. #define CONTENTS_DEBRIS ( 1ull << LAYER_INDEX_CONTENTS_DEBRIS )
  132. #define CONTENTS_PHYSICS_PROP ( 1ull << LAYER_INDEX_CONTENTS_PHYSICS_PROP )
  133. #define CONTENTS_NAV_IGNORE ( 1ull << LAYER_INDEX_CONTENTS_NAV_IGNORE )
  134. #define CONTENTS_NAV_LOCAL_IGNORE ( 1ull << LAYER_INDEX_CONTENTS_NAV_LOCAL_IGNORE )
  135. #define CONTENTS_POST_PROCESSING_VOLUME ( 1ull << LAYER_INDEX_CONTENTS_POST_PROCESSING_VOLUME )
  136. #define CONTENTS_UNUSED_LAYER3 ( 1ull << LAYER_INDEX_CONTENTS_UNUSED_LAYER3 )
  137. #define CONTENTS_CARRIED_OBJECT ( 1ull << LAYER_INDEX_CONTENTS_CARRIED_OBJECT )
  138. #define CONTENTS_PUSHAWAY ( 1ull << LAYER_INDEX_CONTENTS_PUSHAWAY )
  139. #define CONTENTS_SERVER_ENTITY_ON_CLIENT ( 1ull << LAYER_INDEX_CONTENTS_SERVER_ENTITY_ON_CLIENT )
  140. #define CONTENTS_CARRIED_WEAPON ( 1ull << LAYER_INDEX_CONTENTS_CARRIED_WEAPON )
  141. #define CONTENTS_STATIC_LEVEL ( 1ull << LAYER_INDEX_CONTENTS_STATIC_LEVEL )
  142.  
  143. #define CONTENTS_CSGO_TEAM1 ( 1ull << LAYER_INDEX_CONTENTS_CSGO_TEAM1 )
  144. #define CONTENTS_CSGO_TEAM2 ( 1ull << LAYER_INDEX_CONTENTS_CSGO_TEAM2 )
  145. #define CONTENTS_CSGO_GRENADE_CLIP ( 1ull << LAYER_INDEX_CONTENTS_CSGO_GRENADE_CLIP )
  146. #define CONTENTS_CSGO_DRONE_CLIP ( 1ull << LAYER_INDEX_CONTENTS_CSGO_DRONE_CLIP )
  147. #define CONTENTS_CSGO_MOVEABLE ( 1ull << LAYER_INDEX_CONTENTS_CSGO_MOVEABLE )
  148. #define CONTENTS_CSGO_OPAQUE ( 1ull << LAYER_INDEX_CONTENTS_CSGO_OPAQUE )
  149. #define CONTENTS_CSGO_MONSTER ( 1ull << LAYER_INDEX_CONTENTS_CSGO_MONSTER )
  150. #define CONTENTS_CSGO_UNUSED_LAYER ( 1ull << LAYER_INDEX_CONTENTS_CSGO_UNUSED_LAYER )
  151. #define CONTENTS_CSGO_THROWN_GRENADE ( 1ull << LAYER_INDEX_CONTENTS_CSGO_THROWN_GRENADE )
  152.  
  153.  
  154.  
  155. // -----------------------------------------------------
  156. // spatial content masks - used for spatial queries (traceline,etc.)
  157. // -----------------------------------------------------
  158. #define MASK_ALL (~0ull)
  159. // everything that is normally solid
  160. #define MASK_SOLID (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_PLAYER|CONTENTS_NPC|CONTENTS_PASS_BULLETS)
  161. // everything that blocks player movement
  162. #define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYER_CLIP|CONTENTS_WINDOW|CONTENTS_PLAYER|CONTENTS_NPC|CONTENTS_PASS_BULLETS)
  163. // blocks npc movement
  164. #define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_NPC_CLIP|CONTENTS_WINDOW|CONTENTS_PLAYER|CONTENTS_NPC|CONTENTS_PASS_BULLETS)
  165. // blocks fluid movement
  166. #define MASK_NPCFLUID (CONTENTS_SOLID|CONTENTS_NPC_CLIP|CONTENTS_WINDOW|CONTENTS_PLAYER|CONTENTS_NPC)
  167. // water physics in these contents
  168. #define MASK_WATER (CONTENTS_WATER|CONTENTS_SLIME)
  169. // bullets see these as solid
  170. #define MASK_SHOT (CONTENTS_SOLID|CONTENTS_PLAYER|CONTENTS_NPC|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX)
  171. // bullets see these as solid, except monsters (world+brush only)
  172. #define MASK_SHOT_BRUSHONLY (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_DEBRIS)
  173. // non-raycasted weapons see this as solid (includes grates)
  174. #define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_PLAYER|CONTENTS_NPC|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_PASS_BULLETS)
  175. // hits solids (not grates) and passes through everything else
  176. #define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_PLAYER|CONTENTS_NPC)
  177. // everything normally solid, except monsters (world+brush only)
  178. #define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_PASS_BULLETS)
  179. // everything normally solid for player movement, except monsters (world+brush only)
  180. #define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_PLAYER_CLIP|CONTENTS_PASS_BULLETS)
  181. // everything normally solid for npc movement, except monsters (world+brush only)
  182. #define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_NPC_CLIP|CONTENTS_PASS_BULLETS)
  183.  
  184. //Custom defined masks
  185. #define MASK_PLAYER_VISIBLE (CONTENTS_SOLID | CONTENTS_WINDOW | CONTENTS_PLAYER | CONTENTS_NPC | CONTENTS_DEBRIS | CONTENTS_HITBOX | CONTENTS_BLOCK_LOS)
  186.  
  187.  
  188. enum RayType_t : uint8_t
  189. {
  190. RAY_TYPE_LINE = 0,
  191. RAY_TYPE_SPHERE,
  192. RAY_TYPE_HULL,
  193. RAY_TYPE_CAPSULE,
  194. RAY_TYPE_MESH,
  195. };
  196.  
  197. struct Ray_t
  198. {
  199. Ray_t() { Init(Vector(0.0f, 0.0f, 0.0f)); }
  200. Ray_t(const Vector& vStartOffset) { Init(vStartOffset); }
  201. Ray_t(const Vector& vCenter, float flRadius) { Init(vCenter, flRadius); }
  202. Ray_t(const Vector& vMins, const Vector& vMaxs) { Init(vMins, vMaxs); }
  203. Ray_t(const Vector& vCenterA, const Vector& vCenterB, float flRadius) { Init(vCenterA, vCenterB, flRadius); }
  204. Ray_t(const Vector& vMins, const Vector& vMaxs, const Vector* pVertices, int nNumVertices) { Init(vMins, vMaxs, pVertices, nNumVertices); }
  205.  
  206. void Init(const Vector& vStartOffset)
  207. {
  208. m_Line.m_vStartOffset = vStartOffset;
  209. m_Line.m_flRadius = 0.0f;
  210. m_eType = RAY_TYPE_LINE;
  211. }
  212.  
  213. void Init(const Vector& vCenter, float flRadius)
  214. {
  215. if (flRadius > 0.0f)
  216. {
  217. m_Sphere.m_vCenter = vCenter;
  218. m_Sphere.m_flRadius = flRadius;
  219. m_eType = RAY_TYPE_SPHERE;
  220. }
  221. else
  222. {
  223. Init(vCenter);
  224. }
  225. }
  226.  
  227. void Init(const Vector& vMins, const Vector& vMaxs)
  228. {
  229. if (vMins != vMaxs)
  230. {
  231. m_Hull.m_vMins = vMins;
  232. m_Hull.m_vMaxs = vMaxs;
  233. m_eType = RAY_TYPE_HULL;
  234. }
  235. else
  236. {
  237. Init(vMins);
  238. }
  239. }
  240.  
  241. void Init(const Vector& vCenterA, const Vector& vCenterB, float flRadius)
  242. {
  243. if (vCenterA != vCenterB)
  244. {
  245. if (flRadius > 0.0f)
  246. {
  247. m_Capsule.m_vCenter[0] = vCenterA;
  248. m_Capsule.m_vCenter[1] = vCenterB;
  249. m_Capsule.m_flRadius = flRadius;
  250. m_eType = RAY_TYPE_CAPSULE;
  251. }
  252. else
  253. {
  254. Init(vCenterA, vCenterB);
  255. }
  256. }
  257. else
  258. {
  259. Init(vCenterA, flRadius);
  260. }
  261. }
  262.  
  263. void Init(const Vector& vMins, const Vector& vMaxs, const Vector* pVertices, int nNumVertices)
  264. {
  265. m_Mesh.m_vMins = vMins;
  266. m_Mesh.m_vMaxs = vMaxs;
  267. m_Mesh.m_pVertices = pVertices;
  268. m_Mesh.m_nNumVertices = nNumVertices;
  269. m_eType = RAY_TYPE_MESH;
  270. }
  271.  
  272. struct Line_t
  273. {
  274. Vector m_vStartOffset;
  275. float m_flRadius;
  276. };
  277.  
  278. struct Sphere_t
  279. {
  280. Vector m_vCenter;
  281. float m_flRadius;
  282. };
  283.  
  284. struct Hull_t
  285. {
  286. Vector m_vMins;
  287. Vector m_vMaxs;
  288. };
  289.  
  290. struct Capsule_t
  291. {
  292. Vector m_vCenter[2];
  293. float m_flRadius;
  294. };
  295.  
  296. struct Mesh_t
  297. {
  298. Vector m_vMins;
  299. Vector m_vMaxs;
  300. const Vector* m_pVertices;
  301. int m_nNumVertices;
  302. };
  303.  
  304. union
  305. {
  306. Line_t m_Line;
  307. Sphere_t m_Sphere;
  308. Hull_t m_Hull;
  309. Capsule_t m_Capsule;
  310. Mesh_t m_Mesh;
  311. };
  312.  
  313. RayType_t m_eType;
  314. };
  315.  
  316. struct TraceHitboxData_t
  317. {
  318. std::byte pad01[0x38];
  319. int m_nHitGroup;
  320. std::byte pad02[0x4];
  321. int m_nHitboxId;
  322. };
  323.  
  324. struct SurfaceData_t
  325. {
  326. std::byte pad01[0x8];
  327. float m_flPenetrationModifier;
  328. float m_flDamageModifier;
  329. std::byte pad02[0x4];
  330. int m_iMaterial;
  331. };
  332.  
  333. struct Trace_t
  334. {
  335. Trace_t() = default;
  336.  
  337. SurfaceData_t* GetSurfaceData();
  338.  
  339. int GetHitboxID()
  340. {
  341. if (m_pHitboxData)
  342. return m_pHitboxData->m_nHitboxId;
  343. return -1;
  344. }
  345.  
  346. int GetHitgroup()
  347. {
  348. if (m_pHitboxData)
  349. return m_pHitboxData->m_nHitGroup;
  350. return -1;
  351. }
  352.  
  353. //void* m_pSurface; // 0x0
  354. //CBaseEntity* m_pHitEntity; // 0x8
  355. //TraceHitboxData_t* m_pHitboxData; // 0x10
  356. //std::byte pad01[0x38]; // 0x18
  357. //uint32_t m_uContents; // 0x50
  358. //std::byte pad02[0x24]; // 0x54
  359. //Vector m_vecStartPos; // 0x78
  360. //Vector m_vecEndPos; // 0x84
  361. //Vector m_vecNormal; // 0x90
  362. //Vector m_vecPosition; // 0x9C
  363. //std::byte pad03[0x4]; // 0xA8
  364. //float m_flFraction; // 0xAC
  365. //std::byte pad04[0x6]; // 0xB0
  366. //bool m_bAllSolid; // 0xB6
  367. //bool m_bStartSolid; // 0xB7
  368. //bool m_bSomeBool; // 0xB8
  369.  
  370. void* m_pSurface;
  371. CBaseEntity* m_pHitEntity;
  372. TraceHitboxData_t* m_pHitboxData;
  373. std::byte pad01[0x38];
  374. std::uint32_t m_uContents;
  375. std::byte pad02[0x24];
  376. Vector m_vecStartPos;
  377. Vector m_vecEndPos;
  378. Vector m_vecNormal;
  379. Vector m_vecPosition;
  380. std::byte pad03[0x4];
  381. float m_flFraction;
  382. std::byte pad04[0x6];
  383. bool m_bAllSolid;
  384. std::byte pad05[0x4D];
  385. };
  386. static_assert(sizeof(Trace_t) == 264);
  387.  
  388. enum PhysicsTraceType_t
  389. {
  390. VPHYSICS_TRACE_EVERYTHING = 0,
  391. VPHYSICS_TRACE_STATIC_ONLY,
  392. VPHYSICS_TRACE_MOVING_ONLY,
  393. VPHYSICS_TRACE_TRIGGERS_ONLY,
  394. VPHYSICS_TRACE_STATIC_AND_MOVING,
  395. };
  396.  
  397. struct TraceFilter_t
  398. {
  399. std::byte pad01[0x8]; // 0x00
  400. std::int64_t m_uTraceMask; // 0x08
  401. std::array<std::int64_t, 2> m_v1; // 0x10
  402. std::array<std::int32_t, 4> m_arrSkipHandles; // 0x20
  403. std::array<std::int16_t, 2> m_arrCollisions; // 0x30
  404. std::int16_t m_v2; // 0x34
  405. std::uint8_t m_nLayer; // 0x36
  406. std::uint8_t m_v4; // 0x37 //flags
  407. std::uint8_t m_flags; // 0x38
  408.  
  409. TraceFilter_t() = default;
  410. TraceFilter_t(std::uint32_t uMask, CBaseEntity* localplayer, CBaseEntity* player, int nLayer);
  411.  
  412. static TraceFilter_t* InitEntitiesOnly(TraceFilter_t* thisptr, CBaseEntity* skip, uint32_t mask, int layer)
  413. {
  414. using fn = TraceFilter_t*(__thiscall*)(void*, CBaseEntity*, uint32_t, int, int16_t);
  415. static auto hash = XXH3_64bits("TraceFilter_t::InitEntitiesOnly", strlen("TraceFilter_t::InitEntitiesOnly"));
  416. static auto addr = modules::client.get_sig_addr(hash, __FUNCTION__).as();
  417. if (!addr)
  418. return nullptr;
  419.  
  420. auto init_entities_only = reinterpret_cast<fn>(addr);
  421. if (init_entities_only)
  422. return init_entities_only(thisptr, skip, mask, layer, 15);
  423. }
  424. };
  425.  
  426. class CGameTrace
  427. {
  428. public:
  429. bool TraceShape(Ray_t* ray, const Vector& start, const Vector& end, TraceFilter_t* filter, Trace_t* trace)
  430. {
  431. using fn = bool(__fastcall*)(void*, Ray_t*, const Vector&, const Vector&, TraceFilter_t*, Trace_t*);
  432. static auto hash = XXH3_64bits("CGameTrace::TraceShape", strlen("CGameTrace::TraceShape"));
  433. static auto addr = modules::client.get_sig_addr(hash, __FUNCTION__).as();
  434. if (!addr)
  435. return false;
  436.  
  437. auto trace_shape = reinterpret_cast<fn>(addr);
  438. if (trace_shape)
  439. return trace_shape(this, ray, start, end, filter, trace);
  440. }
  441.  
  442. bool ClipRayToEntity(Ray_t* ray, const Vector& start, const Vector& end, CCSPlayerPawn* skip, TraceFilter_t* filter, Trace_t* trace)
  443. {
  444. using fn = bool(__fastcall*)(void*, Ray_t*, const Vector&, const Vector&, CCSPlayerPawn*, TraceFilter_t*, Trace_t*);
  445. static auto hash = XXH3_64bits("CGameTrace::ClipRayToEntity", strlen("CGameTrace::ClipRayToEntity"));
  446. static auto addr = modules::client.get_sig_addr(hash, __FUNCTION__).as();
  447. if (!addr)
  448. return false;
  449.  
  450. auto clip_ray_to_entity = reinterpret_cast<fn>(addr);
  451. if (clip_ray_to_entity)
  452. return clip_ray_to_entity(this, ray, start, end, skip, filter, trace);
  453. }
  454.  
  455. //TraceRay - index 56
  456. /*void TraceRay(const Ray_t& ray, unsigned int fMask, TraceFilter_t* pTraceFilter, Trace_t* pTrace)
  457. {
  458. GetVirtual<void(__thiscall*)(void*, const Ray_t&, uint32_t mask, TraceFilter_t*, Trace_t*)>(this, 56)(this, ray, fMask, pTraceFilter, pTrace);
  459. VTable::GetThiscall<void>(this, 56, ray, fMask, pTraceFilter, pTrace);
  460. }*/
  461. };
Advertisement
Add Comment
Please, Sign In to add comment