· 8 years ago · Mar 18, 2018, 01:42 PM
1#include <amxmodx>
2#include <fakemeta>
3#include <sqlx>
4
5static const
6 HOST[]="localhost",
7 USER[]="valiboss",
8 PASS[]="justdapz",
9 DB[]="admins",
10 TABEL[]="",
11 COL_ACC[]="unique",
12 COL_USER[]="auth"
13
14new Handle:g_SqlTuple,query[512]
15
16#define TASK_MESS 1000
17#define TASK_KICK 2000
18#define TASK_TIMER 4000
19new g_count,g_logtime,g_player_time[33],bool:is_logged[33],bool:changing_name[33],bool:data_ready = false,password[33][34],g_saytxt,g_sync_hud,
20g_maxplayers,bool:is_registered[33],check_pass[34],params[2],validate_client[33][35]
21new const prefix[] = "[LOG-IN SYSTEM]";
22
23new g_client_data[33][35]
24
25public plugin_init()
26{
27 g_count=register_cvar("vjd_logcount", "1")
28 g_logtime=register_cvar("vjd_logtime", "60.0")
29
30 register_concmd("amx_passcode","VERIFY_USER")
31
32 register_forward(FM_ClientUserInfoChanged, "ClientInfoChanged")
33
34 g_saytxt = get_user_msgid("SayText")
35 g_sync_hud = CreateHudSyncObj()
36 g_maxplayers = get_maxplayers()
37
38 set_task(1.0, "init_mysql")
39}
40
41public init_mysql()
42{
43 g_SqlTuple = SQL_MakeDbTuple(HOST, USER, PASS, DB)
44
45 formatex(query, charsmax(query), "CREATE TABLE IF NOT EXISTS %s (Name VARCHAR(65)) ; CREATE TABLE IF NOT EXISTS %s (Password VARCHAR(65))",COL_USER,COL_ACC)
46 SQL_ThreadQuery(g_SqlTuple, "QueryCreateTable", query)
47}
48public QueryCreateTable(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
49{
50 if(failstate == TQUERY_CONNECT_FAILED) set_fail_state("[LOG-IN SYSTEM] Could not connect to database!")
51 else if(failstate == TQUERY_QUERY_FAILED) set_fail_state("[LOG-IN SYSTEM] Query failed!")
52 else if(errcode) server_print("%s Error on query: %s", prefix, error)
53 else
54 {
55 //new qcolAuth = SQL_FieldNameToNum(query, COL_USER)
56 //new AuthData[65];
57 //while (SQL_MoreResults(query))
58 //{
59 //SQL_ReadResult(query, qcolAuth, AuthData, sizeof(AuthData)-1);
60
61 server_print("%s MYSQL connection succesful!", prefix)
62
63 data_ready = true
64
65 for(new i = 1 ; i <= g_maxplayers ; i++)
66 {
67 //if(!is_user_connecting(i) && !is_user_connected(i)) continue//da
68
69 CheckClient(i)
70 }
71
72 //SQL_NextRow(query)
73 //}
74 }
75}
76
77public client_authorized(id)
78{
79 if(is_user_bot(id)||is_user_hltv(id)) return
80
81 clear_user(id)
82 remove_tasks(id)
83
84 if(data_ready) CheckClient(id)
85}
86public CheckClient(id)
87{
88 if(is_user_bot(id) || is_user_hltv(id) || !data_ready) return PLUGIN_HANDLED
89
90 //new name[32],authid[65]
91 //get_user_name(id,name,charsmax(name))
92 //get_user_authid(id,authid,charsmax(authid))
93
94 remove_tasks(id)
95 is_registered[id] = false
96 is_logged[id] = false
97
98 if(!is_user_steam(id))
99 {
100 get_user_name(id,g_client_data[id],charsmax(g_client_data))
101 //formatex(query, charsmax(query), "SELECT `%s` FROM `%s` WHERE %s = ^"%s^";",COL_ACC,TABEL,COL_USER,name)
102 }
103 else if(is_user_steam(id))
104 {
105 get_user_authid(id,g_client_data[id],charsmax(g_client_data))
106 //formatex(query, charsmax(query), "SELECT `%s` FROM `%s` WHERE %s = ^"%s^"; ",COL_ACC,TABEL,COL_USER,authid)
107 }
108
109 new data[1]
110 data[0] = id
111
112 formatex(query, charsmax(query), "SELECT `%s` FROM `%s` WHERE %s = ^"%s^";",COL_ACC,TABEL,COL_USER,g_client_data[id])
113 SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", query, data, 1)
114
115 return PLUGIN_CONTINUE
116}
117public QuerySelectData(FailState, Handle:Query, error[], errorcode, data[], datasize, Float:fQueueTime)
118{
119 if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
120 {
121 log_amx("%s", error)
122 return
123 }
124 else
125 {
126 new id = data[0];
127 new col_auth = SQL_FieldNameToNum(Query, COL_USER)
128 new col_pass = SQL_FieldNameToNum(Query, COL_ACC)
129
130 new AuthData[32]
131 //new steamid[65],name[32]
132 if(!is_user_steam(id)) get_user_name(id,g_client_data[id],charsmax(g_client_data))
133 else if(is_user_steam(id)) get_user_authid(id,g_client_data[id],charsmax(g_client_data))
134
135 while(SQL_MoreResults(Query))
136 {
137 SQL_ReadResult(Query, col_auth, AuthData, charsmax(AuthData));
138 //if(is_user_steam(id)) if(equali(g_client_data[id],AuthData)) is_registered[id]=true
139 //else if(!is_user_steam(id)) if(equal(g_client_data[id],AuthData)) is_registered[id]=true
140 //if(equali(g_client_data[id],AuthData)) is_registered[id]=true
141 //if(equali(AuthData,g_client_data[id])) is_registered[id]=true
142
143
144 validate_client[id]=AuthData
145
146 //if(equali(g_client_data[id],validate_client[id])) is_registered[id]=true
147 //if(equali(validate_client[id],g_client_data[id])) is_registered[id]=true
148
149 is_registered[id]=true
150
151 //if(is_registered[id])
152 //{
153 SQL_ReadResult(Query, col_pass, check_pass, charsmax(check_pass))
154
155 password[id] = check_pass
156
157 if(is_user_connected(id))
158 {
159 //user_silentkill(id)
160 //cs_set_user_team(id, CS_TEAM_UNASSIGNED)
161 ShowMsg(id)
162 }
163 //}
164
165 SQL_NextRow(Query)
166 }
167 //SQL_FreeHandle(Query)
168 }
169}
170public client_putinserver(id) if(data_ready) ShowMsg(id)
171public ShowMsg(id)
172{
173 remove_tasks(id)
174
175 set_task(5.0, "Messages", id+TASK_MESS)
176
177 params[0] = id
178
179 if(!is_logged[id]&&is_registered[id])
180 {
181 if(!changing_name[id])
182 {
183 if(get_pcvar_num(g_count))
184 {
185 g_player_time[id] = get_pcvar_num(g_logtime)
186 ShowTimer(id+TASK_TIMER)
187 }
188 params[1] = 2
189 set_task(get_pcvar_float(g_logtime) + 3, "KickPlayer", id+TASK_KICK, params, sizeof params)
190 return PLUGIN_HANDLED
191 }
192 else
193 {
194 g_player_time[id] = -1
195 set_task(1.0, "ShowTimer", id+TASK_TIMER)
196 }
197 }
198 return PLUGIN_CONTINUE
199}
200public KickPlayer(parameters[])
201{
202 new id = parameters[0]
203 new reason = parameters[1]
204
205 if(/*!is_user_connecting(id) &&*/ !is_user_connected(id)) return PLUGIN_HANDLED
206
207 new userid = get_user_userid(id)
208
209 switch(reason)
210 {
211 case 1:
212 {
213 if(is_registered[id]) return PLUGIN_HANDLED
214
215 console_print(id, "^n* Cont invalid!")
216 server_cmd("kick #%i ^"You must register your name. Please, retry and register it.^"", userid)
217 }
218 case 2:
219 {
220 if(is_logged[id]) return PLUGIN_HANDLED
221
222 console_print(id, "^n* Cont invalid!")
223 server_cmd("kick #%i ^"This name is registered. Please, retry and login.^"", userid)
224 }
225 case 3:
226 {
227 console_print(id, "^n* Cont invalid!")
228 server_cmd("kick #%i ^"You have successfully Logged out! Your Auto Login function is currently disabled!^"", userid)
229 }
230 }
231 return PLUGIN_CONTINUE
232}
233public ShowTimer(id)
234{
235 id -= TASK_TIMER
236
237 if(!is_user_connected(id)) return PLUGIN_HANDLED
238
239 switch(g_player_time[id])
240 {
241 case 10..19: set_hudmessage(255, 255, 0, -1.0, 0.65, 0, 0.02, 1.0,_,_, -1)
242 case 0..9: set_hudmessage(255, 0, 0, -1.0, 0.65, 1, 0.02, 1.0,_,_, -1)
243 case -1: set_hudmessage(255, 255, 255, -1.0, 0.65, 1, 0.02, 1.0,_,_, -1)
244 default: set_hudmessage(0, 255, 0, -1.0, 0.65, 0, 0.02, 1.0,_,_, -1)
245 }
246
247 if(g_player_time[id] == 0)
248 {
249 ShowSyncHudMsg(id, g_sync_hud, "You will be kicked!")
250 return PLUGIN_CONTINUE
251 }
252 else if(is_registered[id] && !is_logged[id])
253 {
254 if(g_player_time[id] == -1)
255 {
256 ShowSyncHudMsg(id, g_sync_hud, "You will can login after the your name is changed!")
257 set_task(1.0, "ShowTimer", id+TASK_TIMER)
258 return PLUGIN_HANDLED
259 }
260
261 ShowSyncHudMsg(id, g_sync_hud, "You have %d second%s to Login!",g_player_time[id], g_player_time[id] > 1 ? "s" : "")
262 }
263 else return PLUGIN_HANDLED
264
265 g_player_time[id]--
266
267 set_task(1.0, "ShowTimer", id+TASK_TIMER)
268
269 return PLUGIN_CONTINUE
270}
271public Messages(id)
272{
273 id -= TASK_MESS
274
275 if(!is_logged[id]&&is_registered[id]) client_printcolor(id, "!g%s!t Ai!g %d!t secunde pentru a te autentifica!", prefix, get_pcvar_num(g_logtime))
276}
277
278public ClientInfoChanged(id)
279{
280 if(!is_user_connected(id)) return FMRES_IGNORED
281
282 new oldname[32], newname[32];
283 get_user_name(id, oldname, charsmax(oldname))
284 get_user_info(id, "name", newname, charsmax(newname))
285
286 if(!equal(oldname, newname))
287 {
288 replace_all(newname, charsmax(newname), "%", " ")
289
290 changing_name[id] = false
291
292 if(!is_user_alive(id)) changing_name[id] = true
293 else
294 {
295 if(is_logged[id])
296 {
297 set_user_info(id, "name", oldname)
298 client_printcolor(id, "!g%s!t Nu permitem schimbarea nick-ului celor ce sunt inregistrati, momentan.", prefix)
299 return FMRES_HANDLED
300 }
301
302 set_task(1.0, "CheckClient", id)
303 }
304 }
305 return FMRES_IGNORED
306}
307
308public VERIFY_USER(id)
309{
310 new arg[65]
311 read_argv(1,arg,charsmax(arg))
312
313 if(!is_user_steam(id)) get_user_name(id,g_client_data[id],charsmax(g_client_data))
314 else if(is_user_steam(id)) get_user_authid(id,g_client_data[id],charsmax(g_client_data))
315
316 if((equal(validate_client[id],g_client_data[id]))) is_registered[id]=true
317 else is_registered[id]=false
318
319 if(!is_registered[id])
320 {
321 client_print(id,print_console,"[LOG-IN SYSTEM] Acest cont nu este rezervat")
322 return PLUGIN_HANDLED
323 }
324
325 if(equal(arg,""))
326 {
327 client_print(id,print_chat,"[LOG-IN SYSTEM] Nu ai introdus nimic...")
328 return PLUGIN_HANDLED
329 }
330
331 if(!is_logged[id]&&is_registered[id])
332 {
333 if(!(equali(arg,password[id]))) server_cmd("kick #%d ^"Nu te-ai putut autentifica^"",get_user_userid(id))
334 else is_logged[id]=true
335 }
336
337 return PLUGIN_HANDLED
338}
339
340public client_disconnect(id)
341{
342 clear_user(id)
343 remove_tasks(id)
344}
345
346stock clear_user(const id)
347{
348 is_logged[id] = false
349 is_registered[id] = false
350 changing_name[id] = false
351}
352
353stock remove_tasks(const id)
354{
355 remove_task(id+TASK_MESS)
356 remove_task(id+TASK_KICK)
357 remove_task(id+TASK_TIMER)
358 remove_task(id)
359}
360
361stock client_printcolor(const id, const message[], any:...)
362{
363 new g_message[191];
364 new i = 1, players[32];
365
366 vformat(g_message, charsmax(g_message), message, 3)
367
368 replace_all(g_message, charsmax(g_message), "!g", "^4")
369 replace_all(g_message, charsmax(g_message), "!n", "^1")
370 replace_all(g_message, charsmax(g_message), "!t", "^3")
371
372 if(id) players[0] = id
373 else get_players(players, i, "ch")
374
375 for(new j = 0; j < i; j++)
376 {
377 if(is_user_connected(players[j]))
378 {
379 message_begin(MSG_ONE_UNRELIABLE, g_saytxt,_, players[j])
380 write_byte(players[j])
381 write_string(g_message)
382 message_end()
383 }
384 }
385}
386
387stock bool: is_user_steam(id)
388{
389 static dp_pointer
390 if(dp_pointer||(dp_pointer=get_cvar_pointer("dp_r_id_provider")))
391 {
392 server_cmd("dp_clientinfo %d",id)
393 server_exec()
394 return (get_pcvar_num(dp_pointer)==2) ? true : false
395 }
396 return false
397}