summaryrefslogtreecommitdiff
path: root/cheat/gmod/IVModelInfoClient.hpp
diff options
context:
space:
mode:
authorboris <wzn@moneybot.cc>2018-11-28 16:00:02 +1300
committerboris <wzn@moneybot.cc>2018-11-28 16:00:02 +1300
commit3d412a4b30a9f7c7f51ea6562e694315948bd3da (patch)
tree26d67dfd1f3e5fd12903ad13e85d0cb8bcf8f21c /cheat/gmod/IVModelInfoClient.hpp
parente4729e4393d90271a3814c7a79950a660c48325a (diff)
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
Diffstat (limited to 'cheat/gmod/IVModelInfoClient.hpp')
-rw-r--r--cheat/gmod/IVModelInfoClient.hpp134
1 files changed, 134 insertions, 0 deletions
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