From 3d412a4b30a9f7c7f51ea6562e694315948bd3da Mon Sep 17 00:00:00 2001 From: boris Date: Wed, 28 Nov 2018 16:00:02 +1300 Subject: cleaned up in short, the cheat and loader are now separate solutions. unused stuff was moved into the legacy solution in case anyone wants to compile it or whatever. i can change this back if you want to. also, i configured the loader to compile in x64, and have separate build types for linux and win64 --- cheat/gmod/IVModelInfoClient.hpp | 134 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 cheat/gmod/IVModelInfoClient.hpp (limited to 'cheat/gmod/IVModelInfoClient.hpp') diff --git a/cheat/gmod/IVModelInfoClient.hpp b/cheat/gmod/IVModelInfoClient.hpp new file mode 100644 index 0000000..957c6d9 --- /dev/null +++ b/cheat/gmod/IVModelInfoClient.hpp @@ -0,0 +1,134 @@ +#pragma once +#include "IVEngineClient.hpp" +#include "IClientEntityList.hpp" + +struct DrawModelState_t; + +struct mstudiobbox_t +{ + int bone; + int group; + vec3_t min; + vec3_t max; + int szhitboxnameindex; + + const char* get_name( ) { + if( szhitboxnameindex == 0 ) + return ""; + + return ( ( const char* )this ) + szhitboxnameindex; + } + + int unused[ 8 ]; +}; + +struct mstudiobone_t +{ + int sznameindex; + inline char * const get_name( void ) const { return ( ( char * )this ) + sznameindex; } + int parent; + char pad01[ 152 ]; + int flags; + char pad02[ 52 ]; +}; + +struct mstudiohitboxset_t +{ + int sznameindex; + inline char * const get_name( void ) const { return ( ( char * )this ) + sznameindex; } + int numhitboxes; + int hitboxindex; + inline mstudiobbox_t *get_hitbox( int i ) const { return ( mstudiobbox_t * )( ( ( unsigned char * )this ) + hitboxindex ) + i; }; +}; + +struct studiohdr_t +{ + char pad00[ 12 ]; + char name[ 64 ]; + char pad01[ 80 ]; + int numbones; + int boneIndex; + inline mstudiobone_t *get_bone( int i ) { return ( mstudiobone_t * )( ( ( unsigned char* )this ) + boneIndex ) + i; } + char pad02[ 8 ]; + int numhitboxsets; + int hitboxsetindex; + + mstudiohitboxset_t* get_hitbox_set( int i ) { + return ( mstudiohitboxset_t * )( ( ( char * )this ) + hitboxsetindex ) + i; + } + + char pad03[ 24 ]; + int numtextures; + inline mstudiobbox_t* get_hit_box( int index ) { return ( ( mstudiohitboxset_t* )( ( unsigned char* )this + hitboxsetindex ) )->get_hitbox( index ); } +}; + +struct ModelRenderInfo_t { + vec3_t m_origin; + vec3_t m_angles; + char pad[ 0x4 ]; + void* m_renderable; + const model_t* m_model; + const matrix3x4* m_model2world; + const matrix3x4* m_light_offset; + const vec3_t* m_light_origin; + int m_flags; + int m_entity_index; + int m_skin; + int m_body; + int m_hitboxset; + uint16_t* m_instance; + + ModelRenderInfo_t( ) { + m_model2world = nullptr; + m_light_offset = nullptr; + m_light_origin = nullptr; + } +}; + +class IVModelInfoClient { +public: + model_t* GetModel( int index ) { + using fn = model_t*( __thiscall* )( void*, int ); + return util::get_vfunc< fn >( this, 1 )( this, index ); + } + + int GetModelIndex( const char* name ) { + using fn = int( __thiscall* )( void*, const char* ); + return util::get_vfunc< fn >( this, 2 )( this, name ); + } + + const char* GetModelName( const model_t* model ) { + using fn = const char* ( __thiscall* )( void*, const model_t* ); + return util::get_vfunc< fn >( this, 3 )( this, model ); + } + + studiohdr_t* GetStudiomodel( const model_t* mod ) { + using fn = studiohdr_t* ( __thiscall* )( void*, const model_t* ); + return util::get_vfunc< fn >( this, 28 )( this, mod ); + } + + void GetModelMaterials( const model_t *model, int count, class IMaterial** ppMaterial ) { + using fn = const void( __thiscall* )( void*, const model_t*, int, IMaterial** ); + util::get_vfunc< fn >( this, 16 )( this, model, count, ppMaterial ); + } +}; + +enum OverrideType_t { + OVERRIDE_NORMAL = 0, + OVERRIDE_BUILD_SHADOWS, + OVERRIDE_DEPTH_WRITE, + OVERRIDE_SSAO_DEPTH_WRITE, +}; + +class IVModelRender { +public: + void ForcedMaterialOverride( IMaterial* newMaterial, OverrideType_t nOverrideType = OVERRIDE_NORMAL, int unk = 0 ) { + using fn = void( __thiscall* )( void*, IMaterial*, OverrideType_t, int ); + return util::get_vfunc< fn >( this, 1 )( this, newMaterial, nOverrideType, unk ); + } + + void DrawModelExecute( void* matctx, const DrawModelState_t& state, const ModelRenderInfo_t& pInfo, matrix3x4* pCustomBoneToWorld ) { + using fn = void( __thiscall* )( void*, void*, const DrawModelState_t&, const ModelRenderInfo_t&, matrix3x4* ); + util::get_vfunc< fn >( this, 21 )( this, matctx, state, pInfo, pCustomBoneToWorld ); + } +}; \ No newline at end of file -- cgit v1.2.3