summaryrefslogtreecommitdiff
path: root/cheat/gmod/CLuaInterface.hpp
blob: adc0f7b416c6a7c5f4ddbf4d8ce3ade469283499 (plain)
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#pragma once

#include <cstdint>
#include <string>

#include "vector.hpp"
#include "color.hpp"

#define LUA_REGISTRYINDEX       (-10000)
#define LUA_ENVIRONINDEX        (-10001)
#define LUA_GLOBALSINDEX        (-10002)

class CLuaInterface;

enum STATE_TYPE
{
	LUA_CLIENT = 0,
	LUA_SERVER,
	LUA_MENU
};


enum LUA_SPECIAL
{
	SPECIAL_GLOB,
	SPECIAL_ENV,
	SPECIAL_REG,
};


enum LUA_TYPE : int8_t {
	TYPE_INVALID = -1,
	TYPE_NIL,
	TYPE_BOOL,
	TYPE_LIGHTUSERDATA,
	TYPE_NUMBER,
	_TYPE_STRING,
	TYPE_TABLE,
	TYPE_FUNCTION,
	TYPE_USERDATA,
	TYPE_THREAD,

	TYPE_ENTITY,
	TYPE_VECTOR,
	TYPE_ANGLE,
	TYPE_PHYSOBJ,
	TYPE_SAVE,
	TYPE_RESTORE,
	TYPE_DAMAGEINFO,
	TYPE_EFFECTDATA,
	TYPE_MOVEDATA,
	TYPE_RECIPIENTFILTER,
	TYPE_USERCMD,
	TYPE_SCRIPTEDVEHICLE,

	TYPE_MATERIAL,
	TYPE_PANEL,
	TYPE_PARTICLE,
	TYPE_PARTICLEEMITTER,
	TYPE_TEXTURE,
	TYPE_USERMSG,

	TYPE_CONVAR,
	TYPE_IMESH,
	TYPE_MATRIX,
	TYPE_SOUND,
	TYPE_PIXELVISHANDLE,
	TYPE_DLIGHT,
	TYPE_VIDEO,
	TYPE_FILE,

	TYPE_COUNT,

	TYPE_PLAYER = TYPE_ENTITY,
};

struct lua_State
{
	uint8_t header[ 69 ];
	CLuaInterface* m_lua_base;
};

struct UserData
{
	void* data;
	LUA_TYPE type;
};

using CLuaFunction = int( __cdecl* )( lua_State* );

class CLuaInterface
{
public:
	virtual int			Top( void ) = 0;
	virtual void		Push( int iStackPos ) = 0;
	virtual void		Pop( int iAmt = 1 ) = 0;
	virtual void		GetTable( int iStackPos ) = 0;
	virtual void		GetField( int iStackPos, const char* strName ) = 0;
	virtual void		SetField( int iStackPos, const char* strName ) = 0;
	virtual void		CreateTable( ) = 0;
	virtual void		SetTable( int i ) = 0;
	virtual void		SetMetaTable( int i ) = 0;
	virtual bool		GetMetaTable( int i ) = 0;
	virtual void		Call( int iArgs, int iResults ) = 0;
	virtual int			PCall( int iArgs, int iResults, int iErrorFunc ) = 0;
	virtual int			Equal( int iA, int iB ) = 0;
	virtual int			RawEqual( int iA, int iB ) = 0;
	virtual void		Insert( int iStackPos ) = 0;
	virtual void		Remove( int iStackPos ) = 0;
	virtual int			Next( int iStackPos ) = 0;
	virtual void*		NewUserdata( unsigned int iSize ) = 0;
	virtual void		ThrowError( const char* strError ) = 0;
	virtual void		CheckType( int iStackPos, int iType ) = 0;
	virtual void		ArgError( int iArgNum, const char* strMessage ) = 0;
	virtual void		RawGet( int iStackPos ) = 0;
	virtual void		RawSet( int iStackPos ) = 0;

	virtual const char*		GetString( int iStackPos = -1, unsigned int* iOutLen = NULL ) = 0;
	virtual double			GetNumber( int iStackPos = -1 ) = 0;
	virtual bool			GetBool( int iStackPos = -1 ) = 0;
	virtual CLuaFunction*	GetCFunction( int iStackPos = -1 ) = 0;
	virtual void*			GetUserdata( int iStackPos = -1 ) = 0;

	virtual void		PushNil( ) = 0;
	virtual void		PushString( const char* val, unsigned int iLen = 0 ) = 0;
	virtual void		PushNumber( double val ) = 0;
	virtual void		PushBool( bool val ) = 0;
	virtual void		PushCFunction( CLuaFunction* val ) = 0;
	virtual void		PushCClosure( CLuaFunction* val, int iVars ) = 0;
	virtual void		PushUserdata( void* ) = 0;

	//
	// If you create a reference - don't forget to free it!
	//
	virtual int			ReferenceCreate( ) = 0;
	virtual void		ReferenceFree( int i ) = 0;
	virtual void		ReferencePush( int i ) = 0;

	//
	// Push a special value onto the top of the stack ( see below )
	//
	virtual void		PushSpecial( int iType ) = 0;

	//
	// For type enums see Types.h 
	//
	virtual bool			IsType( int iStackPos, int iType ) = 0;
	virtual int				GetType( int iStackPos ) = 0;
	virtual const char*		GetTypeName( int iType ) = 0;

	//
	// Creates a new meta table of string and type and leaves it on the stack.
	// Will return the old meta table of this name if it already exists.
	//
	virtual void			CreateMetaTableType( const char* strName, int iType ) = 0;

	//
	// Like Get* but throws errors and returns if they're not of the expected type
	//
	virtual const char*		CheckString( int iStackPos = -1 ) = 0;
	virtual double	CheckNumber( int iStackPos = -1 ) = 0;


	virtual void ObjLen( int ) = 0;
	virtual void GetAngle( int ) = 0;
	virtual void GetVector( int ) = 0;
	virtual void PushAngle( vec3_t const& ) = 0;
	virtual void PushVector( vec3_t const& ) = 0;
	virtual void SetState( lua_State * ) = 0;
	virtual void CreateMetaTable( char const* ) = 0;
	virtual void PushMetaTable( int ) = 0;
	virtual void PushUserType( void *, int ) = 0;
	virtual void SetUserType( int, void * ) = 0;
	virtual void Init( void *, bool ) = 0;
	virtual void Shutdown( void ) = 0;
	virtual void Cycle( void ) = 0;
	virtual void Global( void ) = 0;
	virtual void* GetObject( int ) = 0;
	virtual void PushLuaObject( void * ) = 0;
	virtual void PushLuaFunction( CLuaFunction ) = 0;
	virtual void LuaError( char const*, int ) = 0;
	virtual void TypeError( char const*, int ) = 0;
	virtual void CallInternal( int, int ) = 0;
	virtual void CallInternalNoReturns( int ) = 0;
	virtual void CallInternalGetBool( int ) = 0;
	virtual void CallInternalGetString( int ) = 0;
	virtual void CallInternalGet( int, void * ) = 0;
	virtual void NewGlobalTable( char const* ) = 0;
	virtual void NewTemporaryObject( void ) = 0;
	virtual void isUserData( int ) = 0;
	virtual void GetMetaTableObject( char const*, int ) = 0;
	virtual void GetMetaTableObject( int ) = 0;
	virtual void GetReturn( int ) = 0;
	virtual void IsServer( void ) = 0;
	virtual void IsClient( void ) = 0;
	virtual void IsDedicatedServer( void ) = 0;
	virtual void DestroyObject( void * ) = 0;
	virtual void CreateObject( void ) = 0;
	virtual void SetMember( void *, void *, void * ) = 0;
	virtual void GetNewTable( void ) = 0;
	virtual void SetMember( void *, float ) = 0;
	virtual void SetMember( void *, float, void * ) = 0;
	virtual void SetMember( void *, char const* ) = 0;
	virtual void SetMember( void *, char const*, void * ) = 0;
	virtual void SetIsServer( bool ) = 0;
	virtual void PushLong( long ) = 0;
	virtual void GetFlags( int ) = 0;
	virtual void FindOnObjectsMetaTable( int, int ) = 0;
	virtual void FindObjectOnTable( int, int ) = 0;
	virtual void SetMemberFast( void *, int, int ) = 0;
	virtual void RunString( char const* filename, char const* path, char const* stringtoun, bool run = true, bool showerrors = true ) = 0;
	virtual void IsEqual( void *, void * ) = 0;
	virtual void Error( char const* ) = 0;
	virtual void GetStringOrError( int ) = 0;
	virtual void RunLuaModule( char const* ) = 0;
	virtual void FindAndRunScript( const char* path, bool run = true, bool showerrors = true, const char* type = "!CLIENT" ) = 0;
	virtual void SetPathID( char const* ) = 0;
	virtual void GetPathID( void ) = 0;
	virtual void ErrorNoHalt( char const*, ... ) = 0;
	virtual void Msg( char const*, ... ) = 0;
	virtual void PushPath( char const* ) = 0;
	virtual void PopPath( void ) = 0;
	virtual void GetPath( void ) = 0;
	virtual void GetColor( int ) = 0;
	virtual void PushColor( clr_t ) = 0;
	virtual int GetStack( int, void * ) = 0;
	virtual void GetInfo( char const*, void * ) = 0;
	virtual void GetLocal( void *, int ) = 0;
	virtual void GetUpvalue( int, int ) = 0;
	virtual void RunStringEx( void*, char const* filename, char const* path, char const* torun, bool run, bool showerrors, bool idk, bool idk2 ) = 0;
	virtual void GetDataString( int, void ** ) = 0;
	virtual void ErrorFromLua( char const*, ... ) = 0;
	virtual void GetCurrentLocation( void ) = 0;
	virtual void MsgColour( clr_t const&, char const*, ... ) = 0;
	virtual void GetCurrentFile( std::string & ) = 0;
	virtual void CompileString( int &, std::string const& ) = 0;
	virtual void CallFunctionProtected( int, int, bool ) = 0;
	virtual void Require( char const* ) = 0;
	virtual void GetActualTypeName( int ) = 0;
	virtual void PreCreateTable( int, int ) = 0;
	virtual void PushPooledString( int ) = 0;
	virtual void GetPooledString( int ) = 0;
	virtual void AddThreadedCall( void * ) = 0;

	lua_State* L;
};