Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.50 KB | None | 0 0
  1.  
  2. #include "csgostructs.hpp"
  3. #include "../Helpers/Math.hpp"
  4. #include "../Helpers/Utils.hpp"
  5.  
  6. bool C_BaseEntity::IsPlayer()
  7. {
  8. //index: 152
  9. //ref: "effects/nightvision"
  10. //sig: 8B 92 ? ? ? ? FF D2 84 C0 0F 45 F7 85 F6
  11. return this->GetClientClass()->m_ClassID == ClassId::CCSPlayer;
  12. return CallVFunction<bool ( __thiscall* ) ( C_BaseEntity* )> ( this, 155 ) ( this );
  13. }
  14.  
  15. bool C_BaseEntity::IsWeapon()
  16. {
  17. //index: 160
  18. //ref: "CNewParticleEffect::DrawModel"
  19. //sig: 8B 80 ? ? ? ? FF D0 84 C0 74 6F 8B 4D A4
  20. return CallVFunction<bool ( __thiscall* ) ( C_BaseEntity* )> ( this, 161 ) ( this );
  21. }
  22.  
  23.  
  24. bool C_BaseEntity::IsPlantedC4()
  25. {
  26. return GetClientClass()->m_ClassID == ClassId::CPlantedC4;
  27. }
  28.  
  29. bool C_BaseEntity::IsDefuseKit()
  30. {
  31. return GetClientClass()->m_ClassID == ClassId::CBaseAnimating;
  32. }
  33.  
  34. CCSWeaponInfo* C_BaseCombatWeapon::GetCSWeaponData()
  35. {
  36. return CallVFunction<CCSWeaponInfo* ( __thiscall* ) ( void* )> ( this, 454 ) ( this ); //444
  37. /*
  38. static auto fnGetWpnData
  39. = reinterpret_cast<CCSWeaponInfo*(__thiscall*)(void*)>(
  40. Utils::PatternScan(GetModuleHandleW(L"client_panorama.dll"), "55 8B EC 81 EC ? ? ? ? 53 8B D9 56 57 8D 8B")
  41. );
  42. return fnGetWpnData(this);*/
  43. }
  44.  
  45. bool C_BaseCombatWeapon::HasBullets()
  46. {
  47. return !IsReloading() && m_iClip1() > 0;
  48. }
  49.  
  50. bool C_BaseCombatWeapon::CanFire()
  51. {
  52. static decltype ( this ) stored_weapon = nullptr;
  53. static auto stored_tick = 0;
  54.  
  55. if ( stored_weapon != this || stored_tick >= g_LocalPlayer->m_nTickBase() )
  56. {
  57. stored_weapon = this;
  58. stored_tick = g_LocalPlayer->m_nTickBase();
  59. return false; //cannot shoot first tick after switch
  60. }
  61.  
  62. if ( IsReloading() || m_iClip1() <= 0 || !g_LocalPlayer )
  63. return false;
  64.  
  65. auto flServerTime = g_LocalPlayer->m_nTickBase() * g_GlobalVars->interval_per_tick;
  66.  
  67. return m_flNextPrimaryAttack() <= flServerTime;
  68. }
  69.  
  70. bool C_BaseCombatWeapon::IsGrenade()
  71. {
  72. return GetCSWeaponData()->WeaponType == WEAPONTYPE_GRENADE;
  73. }
  74.  
  75. bool C_BaseCombatWeapon::IsGun()
  76. {
  77. switch ( GetCSWeaponData()->WeaponType )
  78. {
  79. case WEAPONTYPE_C4:
  80. return false;
  81.  
  82. case WEAPONTYPE_GRENADE:
  83. return false;
  84.  
  85. case WEAPONTYPE_KNIFE:
  86. return false;
  87.  
  88. case WEAPONTYPE_UNKNOWN:
  89. return false;
  90.  
  91. default:
  92. return true;
  93. }
  94. }
  95.  
  96. bool C_BaseCombatWeapon::IsKnife()
  97. {
  98. if ( this->m_Item().m_iItemDefinitionIndex() == WEAPON_TASER )
  99. return false;
  100.  
  101. return GetCSWeaponData()->WeaponType == WEAPONTYPE_KNIFE;
  102. }
  103.  
  104. bool C_BaseCombatWeapon::IsRifle()
  105. {
  106. switch ( GetCSWeaponData()->WeaponType )
  107. {
  108. case WEAPONTYPE_RIFLE:
  109. return true;
  110.  
  111. case WEAPONTYPE_SUBMACHINEGUN:
  112. return true;
  113.  
  114. case WEAPONTYPE_SHOTGUN:
  115. return true;
  116.  
  117. case WEAPONTYPE_MACHINEGUN:
  118. return true;
  119.  
  120. default:
  121. return false;
  122. }
  123. }
  124.  
  125. bool C_BaseCombatWeapon::IsPistol()
  126. {
  127. switch ( GetCSWeaponData()->WeaponType )
  128. {
  129. case WEAPONTYPE_PISTOL:
  130. return true;
  131.  
  132. default:
  133. return false;
  134. }
  135. }
  136.  
  137. bool C_BaseCombatWeapon::IsSubmachinegun()
  138. {
  139. switch ( GetCSWeaponData()->WeaponType )
  140. {
  141. case WEAPONTYPE_SUBMACHINEGUN:
  142. return true;
  143.  
  144. default:
  145. return false;
  146. }
  147. }
  148.  
  149. bool C_BaseCombatWeapon::IsSniper()
  150. {
  151. switch ( GetCSWeaponData()->WeaponType )
  152. {
  153. case WEAPONTYPE_SNIPER_RIFLE:
  154. return true;
  155.  
  156. default:
  157. return false;
  158. }
  159. }
  160.  
  161. bool C_BaseCombatWeapon::IsShotgun()
  162. {
  163. switch ( GetCSWeaponData()->WeaponType )
  164. {
  165. case WEAPONTYPE_SHOTGUN:
  166. return true;
  167.  
  168. default:
  169. return false;
  170. }
  171. }
  172.  
  173. bool C_BaseCombatWeapon::IsMachinegun()
  174. {
  175. switch ( GetCSWeaponData()->WeaponType )
  176. {
  177. case WEAPONTYPE_MACHINEGUN:
  178. return true;
  179.  
  180. default:
  181. return false;
  182. }
  183. }
  184.  
  185. bool C_BaseCombatWeapon::IsZeus()
  186. {
  187. if ( this->m_Item().m_iItemDefinitionIndex() == WEAPON_TASER )
  188. return true;
  189.  
  190. return false;
  191. }
  192.  
  193. bool C_BaseCombatWeapon::IsReloading()
  194. {
  195. static auto inReload = * ( uint32_t* ) ( Utils::PatternScan ( GetModuleHandleW ( L"client_panorama.dll" ), "C6 87 ? ? ? ? ? 8B 06 8B CE FF 90" ) + 2 );
  196. return * ( bool* ) ( ( uintptr_t )this + inReload );
  197. }
  198.  
  199. float C_BaseCombatWeapon::GetInaccuracy()
  200. {
  201. return CallVFunction<float ( __thiscall* ) ( void* )> ( this, 476 ) ( this ); //467
  202. }
  203.  
  204. float C_BaseCombatWeapon::GetSpread()
  205. {
  206. return CallVFunction<float ( __thiscall* ) ( void* )> ( this, 446 ) ( this ); //436 440
  207. }
  208.  
  209. void C_BaseCombatWeapon::UpdateAccuracyPenalty()
  210. {
  211. CallVFunction<void ( __thiscall* ) ( void* )> ( this, 477 ) ( this ); //467
  212. }
  213.  
  214. CUtlVector<IRefCounted*>& C_BaseCombatWeapon::m_CustomMaterials()
  215. {
  216. static auto inReload = * ( uint32_t* ) ( Utils::PatternScan ( GetModuleHandleW ( L"client_panorama.dll" ), "83 BE ? ? ? ? ? 7F 67" ) + 2 ) - 12;
  217. return * ( CUtlVector<IRefCounted*>* ) ( ( uintptr_t )this + inReload );
  218. }
  219.  
  220. bool* C_BaseCombatWeapon::m_bCustomMaterialInitialized()
  221. {
  222. static auto currentCommand = * ( uint32_t* ) ( Utils::PatternScan ( GetModuleHandleW ( L"client_panorama.dll" ), "C6 86 ? ? ? ? ? FF 50 04" ) + 2 );
  223. return ( bool* ) ( ( uintptr_t )this + currentCommand );
  224. }
  225.  
  226. CUserCmd*& C_BasePlayer::m_pCurrentCommand()
  227. {
  228. static auto currentCommand = * ( uint32_t* ) ( Utils::PatternScan ( GetModuleHandleW ( L"client_panorama.dll" ), "89 BE ? ? ? ? E8 ? ? ? ? 85 FF" ) + 2 );
  229. return * ( CUserCmd** ) ( ( uintptr_t )this + currentCommand );
  230. }
  231.  
  232. int C_BasePlayer::GetNumAnimOverlays()
  233. {
  234. return * ( int* ) ( ( DWORD )this + 0x297C );
  235. }
  236.  
  237. AnimationLayer* C_BasePlayer::GetAnimOverlays()
  238. {
  239. // to find offset: use 9/12/17 dll
  240. // sig: 55 8B EC 51 53 8B 5D 08 33 C0
  241. return * ( AnimationLayer** ) ( ( DWORD )this + 10608 );
  242. }
  243.  
  244. AnimationLayer* C_BasePlayer::GetAnimOverlay ( int i )
  245. {
  246. if ( i < 15 )
  247. return &GetAnimOverlays()[i];
  248.  
  249. return nullptr;
  250. }
  251.  
  252. int C_BasePlayer::GetSequenceActivity ( int sequence )
  253. {
  254. auto hdr = g_MdlInfo->GetStudiomodel ( this->GetModel() );
  255.  
  256. if ( !hdr )
  257. return -1;
  258.  
  259. // sig for stuidohdr_t version: 53 56 8B F1 8B DA 85 F6 74 55
  260. // sig for C_BaseAnimating version: 55 8B EC 83 7D 08 FF 56 8B F1 74 3D
  261. // c_csplayer vfunc 242, follow calls to find the function.
  262.  
  263. static auto get_sequence_activity = reinterpret_cast<int ( __fastcall* ) ( void*, studiohdr_t*, int )> ( Utils::PatternScan ( GetModuleHandle ( L"client_panorama.dll" ), "55 8B EC 83 7D 08 FF 56 8B F1 74 3D" ) );
  264.  
  265. return get_sequence_activity ( this, hdr, sequence );
  266. }
  267.  
  268. CBasePlayerAnimState* C_BasePlayer::GetBasePlayerAnimState()
  269. {
  270. return * ( CBasePlayerAnimState** ) ( ( DWORD )this + 0x38A0 );
  271. }
  272.  
  273.  
  274. CCSPlayerAnimState* C_BasePlayer::GetPlayerAnimState()
  275. {
  276. return * ( CCSPlayerAnimState** ) ( ( DWORD )this + 0x3870 );
  277. }
  278.  
  279. void C_BasePlayer::UpdateAnimationState ( CCSGOPlayerAnimState* state, QAngle angle )
  280. {
  281. static auto UpdateAnimState = Utils::PatternScan (
  282. GetModuleHandle ( L"client_panorama.dll" ), "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 F3 0F 11 54 24" );
  283.  
  284. /*static auto UpdateAnimState = Utils::PatternScan(
  285. GetModuleHandle(L"client_panorama.dll"), "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 F3 0F 11 54 24");
  286. */
  287. if ( !UpdateAnimState )
  288. return;
  289.  
  290. __asm
  291. {
  292. push 0
  293. }
  294.  
  295. __asm
  296. {
  297. mov ecx, state
  298.  
  299. movss xmm1, dword ptr[angle + 4]
  300. movss xmm2, dword ptr[angle]
  301.  
  302. call UpdateAnimState
  303. }
  304. }
  305.  
  306. void C_BasePlayer::ResetAnimationState ( CCSGOPlayerAnimState* state )
  307. {
  308. using ResetAnimState_t = void ( __thiscall* ) ( CCSGOPlayerAnimState* );
  309. static auto ResetAnimState = ( ResetAnimState_t )Utils::PatternScan ( GetModuleHandle ( L"client_panorama.dll" ), "56 6A 01 68 ? ? ? ? 8B F1" );
  310.  
  311. if ( !ResetAnimState )
  312. return;
  313.  
  314. ResetAnimState ( state );
  315. }
  316.  
  317. void C_BasePlayer::CreateAnimationState ( CCSGOPlayerAnimState* state )
  318. {
  319. using CreateAnimState_t = void ( __thiscall* ) ( CCSGOPlayerAnimState*, C_BasePlayer* );
  320. static auto CreateAnimState = ( CreateAnimState_t )Utils::PatternScan ( GetModuleHandle ( L"client_panorama.dll" ), "55 8B EC 56 8B F1 B9 ? ? ? ? C7 46" );
  321.  
  322. if ( !CreateAnimState )
  323. return;
  324.  
  325. CreateAnimState ( state, this );
  326. }
  327.  
  328. Vector C_BasePlayer::GetEyePos()
  329. {
  330. return m_vecOrigin() + m_vecViewOffset();
  331. }
  332.  
  333. player_info_t C_BasePlayer::GetPlayerInfo()
  334. {
  335. player_info_t info;
  336. g_EngineClient->GetPlayerInfo ( EntIndex(), &info );
  337. return info;
  338. }
  339.  
  340. bool C_BasePlayer::IsAlive()
  341. {
  342. return m_lifeState() == LIFE_ALIVE || this->m_iHealth() > 0;
  343. }
  344.  
  345. bool C_BasePlayer::IsFlashed()
  346. {
  347. if ( m_flFlashDuration() > 0.f )
  348. return true;
  349.  
  350. return false;
  351. }
  352.  
  353. bool C_BasePlayer::HasC4()
  354. {
  355. static auto fnHasC4
  356. = reinterpret_cast<bool ( __thiscall* ) ( void* )> (
  357. Utils::PatternScan ( GetModuleHandleW ( L"client_panorama.dll" ), "56 8B F1 85 F6 74 31" )
  358. );
  359.  
  360. return fnHasC4 ( this );
  361. }
  362.  
  363. Vector C_BasePlayer::GetHitboxPos ( int hitbox_id )
  364. {
  365. matrix3x4_t boneMatrix[MAXSTUDIOBONES];
  366.  
  367. if ( SetupBones ( boneMatrix, MAXSTUDIOBONES, BONE_USED_BY_HITBOX, 0.0f ) )
  368. {
  369. auto studio_model = g_MdlInfo->GetStudiomodel ( GetModel() );
  370.  
  371. if ( studio_model )
  372. {
  373. auto hitbox = studio_model->GetHitboxSet ( 0 )->GetHitbox ( hitbox_id );
  374.  
  375. if ( hitbox )
  376. {
  377. auto
  378. min = Vector{},
  379. max = Vector{};
  380.  
  381. Math::VectorTransform ( hitbox->bbmin, boneMatrix[hitbox->bone], min );
  382. Math::VectorTransform ( hitbox->bbmax, boneMatrix[hitbox->bone], max );
  383.  
  384. return ( min + max ) / 2.0f;
  385. }
  386. }
  387. }
  388.  
  389. return Vector{};
  390. }
  391.  
  392. mstudiobbox_t* C_BasePlayer::GetHitbox ( int hitbox_id )
  393. {
  394. matrix3x4_t boneMatrix[MAXSTUDIOBONES];
  395.  
  396. if ( SetupBones ( boneMatrix, MAXSTUDIOBONES, BONE_USED_BY_HITBOX, 0.0f ) )
  397. {
  398. auto studio_model = g_MdlInfo->GetStudiomodel ( GetModel() );
  399.  
  400. if ( studio_model )
  401. {
  402. auto hitbox = studio_model->GetHitboxSet ( 0 )->GetHitbox ( hitbox_id );
  403.  
  404. if ( hitbox )
  405. {
  406. return hitbox;
  407. //auto
  408. // min = Vector{},
  409. // max = Vector{};
  410.  
  411. //Math::VectorTransform(hitbox->bbmin, boneMatrix[hitbox->bone], min);
  412. //Math::VectorTransform(hitbox->bbmax, boneMatrix[hitbox->bone], max);
  413.  
  414. //return (min + max) / 2.0f;
  415. }
  416. }
  417. }
  418.  
  419. return nullptr;
  420. }
  421.  
  422. bool C_BasePlayer::GetHitboxPos ( int hitbox, Vector& output )
  423. {
  424. if ( hitbox >= HITBOX_MAX )
  425. return false;
  426.  
  427. const model_t* model = this->GetModel();
  428.  
  429. if ( !model )
  430. return false;
  431.  
  432. studiohdr_t* studioHdr = g_MdlInfo->GetStudiomodel ( model );
  433.  
  434. if ( !studioHdr )
  435. return false;
  436.  
  437. matrix3x4_t matrix[MAXSTUDIOBONES];
  438.  
  439. if ( !this->SetupBones ( matrix, MAXSTUDIOBONES, 0x100, 0 ) )
  440. return false;
  441.  
  442. mstudiobbox_t* studioBox = studioHdr->GetHitboxSet ( 0 )->GetHitbox ( hitbox );
  443.  
  444. if ( !studioBox )
  445. return false;
  446.  
  447. Vector min, max;
  448.  
  449. Math::VectorTransform ( studioBox->bbmin, matrix[studioBox->bone], min );
  450. Math::VectorTransform ( studioBox->bbmax, matrix[studioBox->bone], max );
  451.  
  452. output = ( min + max ) * 0.5f;
  453.  
  454. return true;
  455. }
  456.  
  457. bool CanUsePrecached = false;
  458. matrix3x4_t PrecachedMatrix[MAXSTUDIOBONES];
  459. mstudiohitboxset_t* PrecachedStudioBoxSet;
  460. void C_BasePlayer::PrecaceOptimizedHitboxes()
  461. {
  462. CanUsePrecached = false;
  463. const model_t* model = this->GetModel();
  464.  
  465. if ( !model )
  466. return;
  467.  
  468. studiohdr_t* studioHdr = g_MdlInfo->GetStudiomodel ( model );
  469.  
  470. if ( !studioHdr )
  471. return;
  472.  
  473. if ( !this->SetupBones ( PrecachedMatrix, MAXSTUDIOBONES, 0x100, 0 ) )
  474. return;
  475.  
  476. PrecachedStudioBoxSet = studioHdr->GetHitboxSet ( 0 );
  477.  
  478. if ( !PrecachedStudioBoxSet )
  479. return;
  480.  
  481. CanUsePrecached = true;
  482. }
  483.  
  484. bool C_BasePlayer::GetOptimizedHitboxPos ( int hitbox, Vector& output )
  485. {
  486. if ( !CanUsePrecached )
  487. return false;
  488.  
  489. if ( hitbox >= HITBOX_MAX )
  490. return false;
  491.  
  492. Vector min, max;
  493.  
  494. mstudiobbox_t* studioBox = PrecachedStudioBoxSet->GetHitbox ( hitbox );
  495.  
  496. if ( !studioBox )
  497. return false;
  498.  
  499. Math::VectorTransform ( studioBox->bbmin, PrecachedMatrix[studioBox->bone], min );
  500. Math::VectorTransform ( studioBox->bbmax, PrecachedMatrix[studioBox->bone], max );
  501.  
  502. output = ( min + max ) * 0.5f;
  503.  
  504. return true;
  505. }
  506.  
  507. Vector C_BasePlayer::GetBonePos ( int bone )
  508. {
  509. matrix3x4_t boneMatrix[MAXSTUDIOBONES];
  510.  
  511. if ( SetupBones ( boneMatrix, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, 0.0f ) )
  512. return boneMatrix[bone].at ( 3 );
  513.  
  514. return Vector{};
  515. }
  516.  
  517. bool C_BasePlayer::CanSeePlayer ( C_BasePlayer* player, int hitbox )
  518. {
  519. CGameTrace tr;
  520. Ray_t ray;
  521. CTraceFilter filter;
  522. filter.pSkip = this;
  523.  
  524. auto endpos = player->GetHitboxPos ( hitbox );
  525.  
  526. ray.Init ( GetEyePos(), endpos );
  527. g_EngineTrace->TraceRay ( ray, MASK_SHOT | CONTENTS_GRATE, &filter, &tr );
  528.  
  529. return tr.hit_entity == player || tr.fraction > 0.97f;
  530. }
  531.  
  532. bool C_BasePlayer::CanSeePlayer ( C_BasePlayer* player, const Vector& pos )
  533. {
  534. CGameTrace tr;
  535. Ray_t ray;
  536. CTraceFilter filter;
  537. filter.pSkip = this;
  538.  
  539. //auto start = GetEyePos();
  540. //auto dir = (pos - start).Normalized();
  541.  
  542. ray.Init ( GetEyePos(), pos );
  543. g_EngineTrace->TraceRay ( ray, MASK_SHOT | CONTENTS_GRATE, &filter, &tr );
  544.  
  545. return tr.hit_entity == player || tr.fraction > 0.97f;
  546. }
  547.  
  548. void C_BasePlayer::UpdateClientSideAnimation()
  549. {
  550. return CallVFunction<void ( __thiscall* ) ( void* )> ( this, 221 ) ( this );
  551. }
  552.  
  553. void C_BasePlayer::SetAngle2 ( QAngle wantedang )
  554. {
  555. typedef void ( __thiscall * SetAngleFn ) ( void*, const QAngle& );
  556. static SetAngleFn SetAngle2 = reinterpret_cast<SetAngleFn> ( Utils::PatternScan ( GetModuleHandleA ( "client_panorama.dll" ), "55 8B EC 83 E4 F8 83 EC 64 53 56 57 8B F1" ) );
  557. SetAngle2 ( this, wantedang );
  558. }
  559.  
  560. void C_BasePlayer::InvalidateBoneCache()
  561. {
  562. static auto InvalidateBoneCacheFn = Utils::PatternScan ( GetModuleHandleA ( "client_panorama.dll" ), "80 3D ?? ?? ?? ?? ?? 74 16 A1 ?? ?? ?? ?? 48 C7 81" );
  563. reinterpret_cast<void ( __fastcall* ) ( void* )> ( InvalidateBoneCacheFn ) ( this );
  564. }
  565.  
  566. int C_BasePlayer::m_nMoveType()
  567. {
  568. return * ( int* ) ( ( uintptr_t )this + 0x25C );
  569. }
  570.  
  571. void C_BasePlayer::SetVAngles ( QAngle angles )
  572. {
  573. static auto deadflag = NetvarSys::Get().GetOffset ( "DT_BasePlayer", "deadflag" );
  574. * ( QAngle* ) ( ( DWORD )this + deadflag + 0x4 ) = angles;
  575. }
  576.  
  577. QAngle* C_BasePlayer::GetVAngles()
  578. {
  579. static auto deadflag = NetvarSys::Get().GetOffset ( "DT_BasePlayer", "deadflag" );
  580. return ( QAngle* ) ( ( uintptr_t )this + deadflag + 0x4 );
  581. }
  582.  
  583. void C_BaseAttributableItem::SetGloveModelIndex ( int modelIndex )
  584. {
  585. return CallVFunction<void ( __thiscall* ) ( void*, int )> ( this, 75 ) ( this, modelIndex );
  586. }
  587.  
  588. float C_BasePlayer::GetFlashBangTime()
  589. {
  590.  
  591. static uint32_t m_flFlashBangTime = * ( uint32_t* ) ( ( uint32_t )Utils::PatternScan ( GetModuleHandleA ( "client_panorama.dll" ),
  592. "F3 0F 10 86 ?? ?? ?? ?? 0F 2F 40 10 76 30" ) + 4 );
  593. return * ( float* ) ( this + m_flFlashBangTime );
  594. //return *(float*)((uintptr_t)this + 0xa308);
  595. }
  596.  
  597. void C_BaseViewModel::SendViewModelMatchingSequence ( int sequence )
  598. {
  599. return CallVFunction<void ( __thiscall* ) ( void*, int )> ( this, 241 ) ( this, sequence );
  600. }
  601.  
  602. CUtlVector<IRefCounted*>& C_EconItemView::m_CustomMaterials()
  603. {
  604. return * ( CUtlVector<IRefCounted*>* ) ( ( uintptr_t )this + 0x14 );
  605. }
  606.  
  607. CUtlVector<IRefCounted*>& C_EconItemView::m_VisualsDataProcessors()
  608. {
  609. static auto inReload = * ( uint32_t* ) ( Utils::PatternScan ( GetModuleHandleW ( L"client_panorama.dll" ), "81 C7 ? ? ? ? 8B 4F 0C 8B 57 04 89 4C 24 0C" ) + 2 );
  610. return * ( CUtlVector<IRefCounted*>* ) ( ( uintptr_t )this + inReload );
  611. }
  612.  
  613. float_t C_BasePlayer::m_flSpawnTime()
  614. {
  615. return * ( float_t* ) ( ( uintptr_t )this + 0xA290 );
  616. }
  617.  
  618. VarMapping_t* C_BasePlayer::VarMapping()
  619. {
  620. return reinterpret_cast<VarMapping_t*> ( ( DWORD )this + 0x24 );
  621. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement