1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
#pragma once
#include "IVEngineClient.h"
#include "IClientEntityList.h"
class IMaterial;
struct mstudiobbox_t {
int bone;
int group;
vec3_t bbmin;
vec3_t bbmax;
int szhitboxnameindex;
int unused[8];
};
enum OverrideType_t {
OVERRIDE_NORMAL = 0,
OVERRIDE_BUILD_SHADOWS,
OVERRIDE_DEPTH_WRITE,
OVERRIDE_SSAO_DEPTH_WRITE,
};
struct DrawModelState_t;
struct mstudiobone_t {
int sznameindex;
char* GetName( ) const { return reinterpret_cast< char* >( reinterpret_cast< uintptr_t >( this ) ) + sznameindex; }
int parent;
int bonecontroller[ 6 ];
vec3_t pos;
float quat[ 4 ];
vec3_t rot;
vec3_t posscale;
vec3_t rotscale;
matrix3x4 poseToBone;
float qAlignment[ 4 ];
int flags;
int proctype;
int procindex;
mutable int physicsbone;
void* GetProcedure( ) const { return procindex == 0 ? nullptr : reinterpret_cast<void*>( reinterpret_cast<uintptr_t>( this ) + procindex ); };
int surfacepropidx;
char* GetSurfaceProps( ) const { return reinterpret_cast<char*>( reinterpret_cast<uintptr_t>( this ) ) + surfacepropidx; }
int contents;
unsigned char pad[ 32 ];
};
struct mstudiohitboxset_t {
int sznameindex;
inline char *const pszName(void) const { return ((char *)this) + sznameindex; }
int numhitboxes;
int hitboxindex;
mstudiobbox_t *pHitbox(int i) const { return (mstudiobbox_t *)(((BYTE *)this) + hitboxindex) + i; };
};
struct studiohdr_t {
unsigned char pad00[12];
char name[64];
unsigned char pad01[80];
int numbones;
int boneindex;
unsigned char pad02[12];
int hitboxsetindex;
unsigned char pad03[228];
mstudiobone_t *GetBone( int i ) const {
return reinterpret_cast<mstudiobone_t*>( uintptr_t( this ) + boneindex ) + i;
};
mstudiohitboxset_t *pHitboxSet(int i) const {
return (mstudiohitboxset_t *)(((unsigned char *)this) + hitboxsetindex) + i;
};
mstudiobbox_t *pHitbox(int i, int set) const {
const mstudiohitboxset_t *s = pHitboxSet(set);
if(!s)
return 0;
return s->pHitbox(i);
};
int iHitboxCount(int set) const {
const mstudiohitboxset_t *s = pHitboxSet(set);
if(!s)
return 0;
return s->numhitboxes;
};
};
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 IVModelInfo {
public:
int GetModelIndex( const char* name ) {
return call_vfunc< int( __thiscall* )( void*, const char* ) >( this, 2 )( this, name );
}
const char* GetModelName( const void* model ) {
return call_vfunc< const char*( __thiscall* )( void*, const void* ) >( this, 3 )( this, model );
}
studiohdr_t* GetStudioModel( const void* model ) {
return call_vfunc< studiohdr_t*( __thiscall* )( void*, const void* ) >( this, 28 )( this, model );
}
model_t* FindOrLoadModel( const char* name ) {
using fn = model_t * ( __thiscall* )( void*, const char* );
return util::get_vfunc< fn >( this, 43 )( this, name );
}
};
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, 19 )( this, matctx, state, pInfo, pCustomBoneToWorld );
}
};
class INetworkStringTable {
public:
virtual ~INetworkStringTable( void ) {};
// Table Info
virtual const char *GetTableName( void ) const = 0;
virtual int GetTableId( void ) const = 0;
virtual int GetNumStrings( void ) const = 0;
virtual int GetMaxStrings( void ) const = 0;
virtual int GetEntryBits( void ) const = 0;
// Networking
virtual void SetTick( int tick ) = 0;
virtual bool ChangedSinceTick( int tick ) const = 0;
// Accessors (length -1 means don't change user data if string already exits)
virtual int AddString( bool bIsServer, const char *value, int length = -1, const void *userdata = 0 ) = 0;
virtual const char *GetString( int stringNumber ) = 0;
virtual void SetStringUserData( int stringNumber, int length, const void *userdata ) = 0;
virtual const void *GetStringUserData( int stringNumber, int *length ) = 0;
virtual int FindStringIndex( char const *string ) = 0; // returns INVALID_STRING_INDEX if not found
// Callbacks
virtual void SetStringChangedCallback( void *object, void* changeFunc ) = 0;
};
class CStringTable {
public:
INetworkStringTable * FindTable( const char* table ) {
using fn = INetworkStringTable * ( __thiscall* )( void*, const char* );
return util::get_vfunc< fn >( this, 3 )( this, table );
}
};
|