· 10 years ago · May 21, 2016, 10:12 PM
1//Uncomment to use SQL
2#define SQL_MODE
3
4#include <amxmodx>
5#include <amxmisc>
6#if defined SQL_MODE
7#include <sqlx>
8#endif
9
10#define VERSION "1.4"
11
12#define MAX_CMDS 255
13
14new g_szCmds[MAX_CMDS][36]
15new g_iCmds = 0
16new g_szListed[MAX_CMDS][36]
17new g_iListCount = 0
18
19#if defined SQL_MODE
20new g_sqlHost
21new g_sqlUser
22new g_sqlPass
23new g_sqlDb
24
25new Handle:g_hSqlTuple;
26
27new iError, szError[ 128 ];
28new result
29new Sql:sql
30new Handle:hDb
31
32new bool:g_boolsqlOK = false
33#endif
34
35public plugin_init()
36{
37 register_plugin("Command Logging",VERSION,"$uicid3")
38
39 g_sqlHost = register_cvar("amx_cmd_log_host", "")
40 g_sqlUser = register_cvar("amx_cmd_log_user", "")
41 g_sqlPass = register_cvar("amx_cmd_log_pass", "")
42 g_sqlDb = register_cvar("amx_cmd_log_db","")
43
44 new szHost[ 64 ], szUser[ 64 ], szPass[ 64 ], szDb[ 64 ];
45 get_pcvar_string( g_sqlHost, szHost, charsmax( szHost ) );
46 get_pcvar_string( g_sqlUser, szUser, charsmax( szUser ) );
47 get_pcvar_string( g_sqlPass, szPass, charsmax( szPass ) );
48 get_pcvar_string( g_sqlDb, szDb, charsmax( szDb ) );
49
50 g_hSqlTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDb );
51
52 if( g_hSqlTuple == Empty_Handle ) return;
53
54
55 hDb = SQL_Connect( g_hSqlTuple, iError, szError, charsmax( szError ) );
56
57 register_cvar("amx_cmd_list","0")
58 #if !defined SQL_MODE
59 register_cvar("amx_cmd_log_file","2")
60 register_cvar("amx_cmd_logging","3")
61 #else
62 set_task(0.4,"SetSQL")
63 #endif
64 set_task(0.1,"GetCmds")
65 set_task(0.6,"GetList")
66
67}
68
69#if defined SQL_MODE
70public SetSQL()
71{
72
73
74 if( hDb == Empty_Handle )
75 {
76 log_amx( "Failed to connect to database: (%d) %s", iError, szError );
77 return;
78 }
79 new Handle:hQuery = SQL_PrepareQuery( hDb, "CREATE TABLE IF NOT EXISTS cmd_logs (\
80 name VARCHAR(36) NOT NULL,\
81 auth VARCHAR(35) NOT NULL,\
82 command VARCHAR(15) NOT NULL,\
83 args VARCHAR(101) NOT NULL,\
84 none VARCHAR(35) NOT NULL PRIMARY KEY,\
85 date DATETIME NOT NULL,\
86 time DATETIME NOT NULL,\
87 map VARCHAR(36) NOT NULL)" );
88
89 if( !SQL_Execute( hQuery ) )
90 {
91 SQL_QueryError( hQuery, szError, charsmax( szError ) );
92 log_amx( "Failed create table query: %s", szError );
93 }
94
95 SQL_FreeHandle( hQuery );
96 SQL_FreeHandle( hDb );
97}
98#endif
99
100public GetCmds()
101{
102 new flags
103 for(new x = 0;x < 21;x++)
104 flags |= (1<<x)
105 flags |= (1<<24)
106
107 new szInfo[46],Temp
108 new i , iEnd
109
110 g_iCmds = 0
111
112 iEnd = get_concmdsnum(flags,-1)
113 if(iEnd > MAX_CMDS)
114 iEnd = MAX_CMDS
115
116 for(i = 0;i < iEnd; i++)
117 get_concmd(i,g_szCmds[g_iCmds++],35,Temp,szInfo,45,flags,1)
118
119 new iStart = g_iCmds
120 iEnd = get_clcmdsnum(flags)
121
122 for(new x = iStart;x < iEnd; x++)
123 get_clcmd(x,g_szCmds[g_iCmds++],35,Temp,szInfo,45,flags)
124
125 return
126}
127public GetList()
128{
129 new szFileName[65] , szConf[55]
130 get_configsdir(szConf,54)
131 format(szFileName,64,"%s/log_cmdlist.ini",szConf)
132 szConf[0] = 0
133
134 g_iListCount = 0
135
136 if(!file_exists(szFileName))
137 return
138
139 new k = 0 , pos = 0 , szLine[36]
140 while( read_file( szFileName, pos++, szLine, 35, k ))
141 {
142 if( szLine[0] == ';' || !k ) continue
143
144 copy(g_szListed[g_iListCount],75,szLine)
145 g_iListCount++
146 }
147 return
148}
149public client_command( id )
150{
151 if( !is_user_admin(id) )
152 return PLUGIN_CONTINUE
153
154 new szCmd[36],szArgs[101]
155 read_argv(0,szCmd,35)
156 read_args(szArgs,100)
157
158 remove_quotes(szArgs)
159
160 switch(get_cvar_num("amx_cmd_list"))
161 {
162 case 0:
163 {
164 if(!IsCmd(szCmd))
165 return PLUGIN_CONTINUE
166 }
167 case 1:
168 {
169 if( ( IsCmd(szCmd) && InList(szCmd) ) || !IsCmd(szCmd) )
170 return PLUGIN_CONTINUE
171 }
172 case 2:
173 {
174 if( ( IsCmd(szCmd) && !( InList(szCmd)) ) || !IsCmd(szCmd) )
175 return PLUGIN_CONTINUE
176 }
177 default:
178 {
179 if( ( IsCmd(szCmd) && InList(szCmd) ) || !IsCmd(szCmd) )
180 return PLUGIN_CONTINUE
181 }
182 }
183
184 #if defined SQL_MODE
185 LogSQL(id,szCmd,szArgs)
186 #else
187 LogCmd(id,szCmd,szArgs)
188 #endif
189
190 return PLUGIN_CONTINUE
191}
192
193stock bool:IsCmd( szCmd[36] )
194{
195 for(new i = 0; i < g_iCmds; i++)
196 {
197 if( equali(szCmd,g_szCmds[i]) )
198 return true
199 }
200 return false
201}
202
203stock bool:InList( szCmd[36] )
204{
205 for(new i = 0; i < g_iListCount; i++)
206 {
207 if( equali(szCmd,g_szListed[i]) )
208 return true
209 }
210 return false
211}
212
213#if defined SQL_MODE
214public LogSQL(AdminID , szCmd[36] , szArgs[101])
215{
216 if(!g_boolsqlOK)
217 return PLUGIN_CONTINUE
218 new szAdminName[36], szAdminAuth[32],szDate[26],szMap[36],szTime[16]
219 get_user_name(AdminID,szAdminName,35)
220 remove_quotes(szAdminName)
221 while(replace(szAdminName,35,"'","")) { }
222 get_user_authid(AdminID,szAdminAuth,31)
223 get_time("%m-%d-%Y",szDate,25)
224 get_time("%H:%M:%S",szTime,15)
225 get_mapname(szMap,35)
226
227 if(szArgs[0] == 0)
228 format(szArgs,100,"<i>None</i>")
229 result = SQL_PrepareQuery(sql,"INSERT INTO `cmd_logs` (`name`,`auth`,`command`,`args`,`date`,`time`,`map`) VALUES ('%s','%s','%s','%s','%s','%s','%s');",szAdminName,szAdminAuth,szCmd,szArgs,szDate,szTime,szMap)
230
231
232 SQL_MoreResults(Result:result)
233 return PLUGIN_CONTINUE
234}
235#else
236public LogCmd(AdminID , szCmd[36] , szArgs[101])
237{
238 new szAdminName[36],szAdminAuth[32],szDate[26],szMap[36],szTime[26]
239 new szLogMessage[256],szLogAuth[32]
240
241 get_user_name(AdminID,szAdminName,35)
242 get_user_authid(AdminID,szAdminAuth,31)
243 get_mapname(szMap,35)
244 get_time("%m-%d-%Y",szDate,25)
245 get_time("%m-%d-%Y %H:%M:%S",szTime,25)
246 copy(szLogAuth,31,szAdminAuth)
247 while(replace(szLogAuth,31, ":" , "_" )) { }
248
249 new szFileName[101],szBaseDir[76]
250 get_basedir(szBaseDir,75)
251 new len = format(szFileName,100,"%s/logs/Cmds/",szBaseDir)
252 switch(get_cvar_num("amx_cmd_log_file"))
253 {
254 case 0: format(szFileName[len],100-len,"log.log")
255 case 1: format(szFileName[len],100-len,"%s.log",szAdminName)
256 case 2: format(szFileName[len],100-len,"%s.log",szLogAuth)
257 case 3: format(szFileName[len],100-len,"%s.log",szDate)
258 case 4: format(szFileName[len],100-len,"%s.log",szMap)
259 default: format(szFileName[len],100-len,"%s.log",szLogAuth)
260 }
261 switch(get_cvar_num("amx_cmd_logging"))
262 {
263 case 0: format(szLogMessage,255,"ADMIN [%s] '%s' used '%s %s'",szTime,szAdminName,szCmd,szArgs)
264 case 1: format(szLogMessage,255,"ADMIN [%s] '%s'<%s> used '%s %s'",szTime,szAdminName,szAdminAuth,szCmd,szArgs)
265 case 2: format(szLogMessage,255,"ADMIN [%s] '%s' used Command '%s' with Args '%s'",szTime,szAdminName,szCmd,szArgs)
266 case 3: format(szLogMessage,255,"ADMIN [%s] '%s'<%s> used Command '%s' with Args '%s'",szTime,szAdminName,szAdminAuth,szCmd,szArgs)
267 default: format(szLogMessage,255,"ADMIN [%s] '%s'<%s> used Command '%s' with Args '%s'",szTime,szAdminName,szAdminAuth,szCmd,szArgs)
268 }
269 if(!file_exists(szFileName))
270 {
271 new szHeader[75]
272 new k = format(szHeader,75,"*File Created By: Command Logger*^n")
273 k += format(szHeader[k],75-k,"**A plugin Created by: $uicid3**^n")
274 write_file(szFileName,szHeader,0)
275
276 }
277 write_file(szFileName,szLogMessage,-1)
278 return PLUGIN_CONTINUE
279}
280#endif