//|_ _ _. _ ._ |_ _. _ | //| | (/_ (_| \/ (/_ | | | | (_| (_ |< #pragma once #include "../util.h" #include "sdk.h" #include "netvar.h" #define OFFSET( name, prop, table, type, off ) \ type name() { \ static U32 offset = netvar_find( csgop, table, prop ) + off; \ return get( offset ); } \ void name( type v ) { \ static U32 offset = netvar_find( csgop, table, #name ) + off; \ return set( offset, v ); } \ #define NETVAR( name, table, type ) \ type name() { \ static U32 offset = netvar_find( csgop, table, #name ); \ return get( offset ); } \ void name( type v ) { \ static U32 offset = netvar_find( csgop, table, #name ); \ return set( offset, v ); } \ class CSGOENTITY { public: static CSGO* csgop; public: CSGOENTITY( U32 ptr ) : base( ptr ) {}; CSGOENTITY( const CSGOENTITY& other ) : base( other.base ) {} inline operator U32&() { return base; } template t get( U32 offset ) { return csgop->read( base + offset ); } template void set( U32 offset, t v ) { return csgop->write( base + offset, v ); } public: CSGO_CLIENT_CLASS get_clientclass() { U32 networkable = get( 0x8 ); U32 create_fn = csgop->read( networkable + 0x8 ); U32 clientclass = csgop->read( create_fn + 0x1 ); return csgop->read( clientclass ); } NETVAR( m_fFlags, "DT_CSPlayer", I32 ); OFFSET( m_iCrosshairID, "m_bHasDefuser", "DT_CSPlayer", I32, 92 ); OFFSET( m_dwBoneMatrix, "m_nForceBone", "DT_BaseAnimating", U32, 28 ); static CSGOENTITY from_list( I32 idx ) { const U64 entlist = csgop->code_match( csgop->client, "BB ? ? ? ? 83 FF 01 0F 8C ? ? ? ? 3B F8" ); return csgop->read( csgop->client + entlist + idx * 0x10 ); } bool is_weapon() { CSGO_CLIENT_CLASS cl = get_clientclass(); return cl.index >= CWeaponAug && cl.index <= CWeaponXM1014; } public: U32 base; };