· 7 years ago · Jan 28, 2019, 08:38 AM
1
2#ifndef GARRYSMOD_LUA_LUABASE_H
3#define GARRYSMOD_LUA_LUABASE_H
4
5#include <stddef.h>
6
7struct lua_State;
8
9namespace GarrysMod
10{
11 namespace Lua
12 {
13 typedef int (*CFunc) (lua_State *L);
14
15 //
16 // Access to raw Lua function calls
17 //
18 class ILuaBase
19 {
20 public:
21
22 virtual int Top( void ) = 0;
23 virtual void Push( int iStackPos ) = 0;
24 virtual void Pop( int iAmt = 1 ) = 0;
25 virtual void GetTable( int iStackPos ) = 0;
26 virtual void GetField( int iStackPos, const char* strName ) = 0;
27 virtual void SetField( int iStackPos, const char* strName ) = 0;
28 virtual void CreateTable() = 0;
29 virtual void SetTable( int i ) = 0;
30 virtual void SetMetaTable( int i ) = 0;
31 virtual bool GetMetaTable( int i ) = 0;
32 virtual void Call( int iArgs, int iResults ) = 0;
33 virtual int PCall( int iArgs, int iResults, int iErrorFunc ) = 0;
34 virtual int Equal( int iA, int iB ) = 0;
35 virtual int RawEqual( int iA, int iB ) = 0;
36 virtual void Insert( int iStackPos ) = 0;
37 virtual void Remove( int iStackPos ) = 0;
38 virtual int Next( int iStackPos ) = 0;
39 virtual void* NewUserdata( unsigned int iSize ) = 0;
40 virtual void ThrowError( const char* strError ) = 0;
41 virtual void CheckType( int iStackPos, int iType ) = 0;
42 virtual void ArgError( int iArgNum, const char* strMessage ) = 0;
43 virtual void RawGet( int iStackPos ) = 0;
44 virtual void RawSet( int iStackPos ) = 0;
45
46 virtual const char* GetString( int iStackPos = -1, unsigned int* iOutLen = NULL ) = 0;
47 virtual double GetNumber( int iStackPos = -1 ) = 0;
48 virtual bool GetBool( int iStackPos = -1 ) = 0;
49 virtual CFunc GetCFunction( int iStackPos = -1 ) = 0;
50 virtual void* GetUserdata( int iStackPos = -1 ) = 0;
51
52 virtual void PushNil() = 0;
53 virtual void PushString( const char* val, unsigned int iLen = 0 ) = 0;
54 virtual void PushNumber( double val ) = 0;
55 virtual void PushBool( bool val ) = 0;
56 virtual void PushCFunction( CFunc val ) = 0;
57 virtual void PushCClosure( CFunc val, int iVars ) = 0;
58 virtual void PushUserdata( void* ) = 0;
59
60 //
61 // If you create a reference - don't forget to free it!
62 //
63 virtual int ReferenceCreate() = 0;
64 virtual void ReferenceFree( int i ) = 0;
65 virtual void ReferencePush( int i ) = 0;
66
67 //
68 // Push a special value onto the top of the stack ( see below )
69 //
70 virtual void PushSpecial( int iType ) = 0;
71
72 //
73 // For type enums see Types.h
74 //
75 virtual bool IsType( int iStackPos, int iType ) = 0;
76 virtual int GetType( int iStackPos ) = 0;
77 virtual const char* GetTypeName( int iType ) = 0;
78
79 //
80 // Creates a new meta table of string and type and leaves it on the stack.
81 // Will return the old meta table of this name if it already exists.
82 //
83 virtual void CreateMetaTableType( const char* strName, int iType ) = 0;
84
85 //
86 // Like Get* but throws errors and returns if they're not of the expected type
87 //
88 virtual const char* CheckString( int iStackPos = -1 ) = 0;
89 virtual double CheckNumber( int iStackPos = -1 ) = 0; //44
90
91 // Ugly, deal with it
92 // cough getvfunc cough
93 virtual void unk45( void ) = 0;
94 virtual void unk46( void ) = 0;
95 virtual void unk47( void ) = 0;
96 virtual void unk48( void ) = 0;
97 virtual void unk49( void ) = 0;
98 virtual void unk50( void ) = 0;
99 virtual void unk51( void ) = 0;
100 virtual void unk52( void ) = 0;
101 virtual void unk53( void ) = 0;
102 virtual void unk54( void ) = 0;
103 virtual void unk55( void ) = 0;
104 virtual void unk56( void ) = 0;
105 virtual void unk57( void ) = 0;
106 virtual void unk58( void ) = 0;
107 virtual void unk59( void ) = 0;
108 virtual void unk60( void ) = 0;
109 virtual void unk61( void ) = 0;
110 virtual void unk62( void ) = 0;
111 virtual void unk63( void ) = 0;
112 virtual void unk64( void ) = 0;
113 virtual void unk65( void ) = 0;
114 virtual void unk66( void ) = 0;
115 virtual void unk67( void ) = 0;
116 virtual void unk68( void ) = 0;
117 virtual void unk69( void ) = 0;
118 virtual void unk70( void ) = 0;
119 virtual void unk71( void ) = 0;
120 virtual void unk72( void ) = 0;
121 virtual void unk73( void ) = 0;
122 virtual void unk74( void ) = 0;
123 virtual void unk75( void ) = 0;
124 virtual void unk76( void ) = 0;
125 virtual void unk77( void ) = 0;
126 virtual void unk78( void ) = 0;
127 virtual void unk79( void ) = 0;
128 virtual void unk80( void ) = 0;
129 virtual void unk81( void ) = 0;
130 virtual void unk82( void ) = 0;
131 virtual void unk83( void ) = 0;
132 virtual void unk84( void ) = 0;
133 virtual void unk85( void ) = 0;
134 virtual void unk86( void ) = 0;
135 virtual void unk87( void ) = 0;
136 // Filename is a inique identifier for your script.
137 // Path can be left blank as it is just used as a path to the lua file if there is an error
138 // Run should ALWAYS be true
139 // ShowErrors I recommend you leave on
140 virtual bool RunString( const char* pszFilename, const char* pszPath, const char* pszStringToRun, bool bRun = true, bool bShowErrors = true ) = 0;
141 virtual void unk89( void ) = 0;
142 virtual void unk90( void ) = 0;
143 virtual void unk91( void ) = 0;
144 virtual void unk92( void ) = 0;
145 // Path is just the path to it from the lua folder
146 // Run should always be true
147 // Show errors I recommend you leave on
148 // Type basically tells Garry's Mod how to handle the script. Just leave it at !CLIENT
149 virtual bool FindAndRunScript( const char* path, bool bRun = true, bool bShowErrors = true, const char* pszType = "!CLIENT" ) = 0;
150 };
151
152 enum
153 {
154 SPECIAL_GLOB, // Global table
155 SPECIAL_ENV, // Environment table
156 SPECIAL_REG, // Registry table
157 };
158 }
159}
160
161#endif