· 8 years ago · Mar 18, 2018, 01:00 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((equal(g_client_data[id],AuthData)))
141
142
143 validate_client[id]=AuthData
144
145 if(equali(g_client_data[id],validate_client[id])) is_registered[id]=true
146
147 if(is_registered[id])
148 {
149 SQL_ReadResult(Query, col_pass, check_pass, charsmax(check_pass))
150
151 password[id] = check_pass
152
153 if(is_user_connected(id))
154 {
155 //user_silentkill(id)
156 //cs_set_user_team(id, CS_TEAM_UNASSIGNED)
157 ShowMsg(id)
158 }
159 }
160
161 SQL_NextRow(Query)
162 }
163 //SQL_FreeHandle(Query)
164 }
165}
166public client_putinserver(id) if(data_ready) ShowMsg(id)
167public ShowMsg(id)
168{
169 remove_tasks(id)
170
171 set_task(5.0, "Messages", id+TASK_MESS)
172
173 params[0] = id
174
175 if(!is_logged[id]&&is_registered[id])
176 {
177 if(!changing_name[id])
178 {
179 if(get_pcvar_num(g_count))
180 {
181 g_player_time[id] = get_pcvar_num(g_logtime)
182 ShowTimer(id+TASK_TIMER)
183 }
184 params[1] = 2
185 set_task(get_pcvar_float(g_logtime) + 3, "KickPlayer", id+TASK_KICK, params, sizeof params)
186 return PLUGIN_HANDLED
187 }
188 else
189 {
190 g_player_time[id] = -1
191 set_task(1.0, "ShowTimer", id+TASK_TIMER)
192 }
193 }
194 return PLUGIN_CONTINUE
195}
196public KickPlayer(parameters[])
197{
198 new id = parameters[0]
199 new reason = parameters[1]
200
201 if(/*!is_user_connecting(id) &&*/ !is_user_connected(id)) return PLUGIN_HANDLED
202
203 new userid = get_user_userid(id)
204
205 switch(reason)
206 {
207 case 1:
208 {
209 if(is_registered[id]) return PLUGIN_HANDLED
210
211 console_print(id, "^n* Cont invalid!")
212 server_cmd("kick #%i ^"You must register your name. Please, retry and register it.^"", userid)
213 }
214 case 2:
215 {
216 if(is_logged[id]) return PLUGIN_HANDLED
217
218 console_print(id, "^n* Cont invalid!")
219 server_cmd("kick #%i ^"This name is registered. Please, retry and login.^"", userid)
220 }
221 case 3:
222 {
223 console_print(id, "^n* Cont invalid!")
224 server_cmd("kick #%i ^"You have successfully Logged out! Your Auto Login function is currently disabled!^"", userid)
225 }
226 }
227 return PLUGIN_CONTINUE
228}
229public ShowTimer(id)
230{
231 id -= TASK_TIMER
232
233 if(!is_user_connected(id)) return PLUGIN_HANDLED
234
235 switch(g_player_time[id])
236 {
237 case 10..19: set_hudmessage(255, 255, 0, -1.0, 0.65, 0, 0.02, 1.0,_,_, -1)
238 case 0..9: set_hudmessage(255, 0, 0, -1.0, 0.65, 1, 0.02, 1.0,_,_, -1)
239 case -1: set_hudmessage(255, 255, 255, -1.0, 0.65, 1, 0.02, 1.0,_,_, -1)
240 default: set_hudmessage(0, 255, 0, -1.0, 0.65, 0, 0.02, 1.0,_,_, -1)
241 }
242
243 if(g_player_time[id] == 0)
244 {
245 ShowSyncHudMsg(id, g_sync_hud, "You will be kicked!")
246 return PLUGIN_CONTINUE
247 }
248 else if(is_registered[id] && !is_logged[id])
249 {
250 if(g_player_time[id] == -1)
251 {
252 ShowSyncHudMsg(id, g_sync_hud, "You will can login after the your name is changed!")
253 set_task(1.0, "ShowTimer", id+TASK_TIMER)
254 return PLUGIN_HANDLED
255 }
256
257 ShowSyncHudMsg(id, g_sync_hud, "You have %d second%s to Login!",g_player_time[id], g_player_time[id] > 1 ? "s" : "")
258 }
259 else return PLUGIN_HANDLED
260
261 g_player_time[id]--
262
263 set_task(1.0, "ShowTimer", id+TASK_TIMER)
264
265 return PLUGIN_CONTINUE
266}
267public Messages(id)
268{
269 id -= TASK_MESS
270
271 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))
272}
273
274public ClientInfoChanged(id)
275{
276 if(!is_user_connected(id)) return FMRES_IGNORED
277
278 new oldname[32], newname[32];
279 get_user_name(id, oldname, charsmax(oldname))
280 get_user_info(id, "name", newname, charsmax(newname))
281
282 if(!equal(oldname, newname))
283 {
284 replace_all(newname, charsmax(newname), "%", " ")
285
286 changing_name[id] = false
287
288 if(!is_user_alive(id)) changing_name[id] = true
289 else
290 {
291 if(is_logged[id])
292 {
293 set_user_info(id, "name", oldname)
294 client_printcolor(id, "!g%s!t Nu permitem schimbarea nick-ului celor ce sunt inregistrati, momentan.", prefix)
295 return FMRES_HANDLED
296 }
297
298 set_task(1.0, "CheckClient", id)
299 }
300 }
301 return FMRES_IGNORED
302}
303
304public VERIFY_USER(id)
305{
306 new arg[65]
307 read_argv(1,arg,charsmax(arg))
308
309 if(equal(arg,""))
310 {
311 client_print(id,print_chat,"[LOG-IN SYSTEM] Nu ai introdus nimic...")
312 return PLUGIN_HANDLED
313 }
314
315 if(!is_registered[id])
316 {
317 client_print(id,print_console,"[LOG-IN SYSTEM] Acest cont nu este rezervat")
318 return PLUGIN_HANDLED
319 }
320
321 if(!is_logged[id]&&is_registered[id])
322 {
323 if(!(equali(arg,password[id]))) server_cmd("kick #%d ^"Nu te-ai putut autentifica^"",get_user_userid(id))
324 else is_logged[id]=true
325 }
326
327 return PLUGIN_HANDLED
328}
329
330public client_disconnect(id)
331{
332 clear_user(id)
333 remove_tasks(id)
334}
335
336stock clear_user(const id)
337{
338 is_logged[id] = false
339 is_registered[id] = false
340 changing_name[id] = false
341}
342
343stock remove_tasks(const id)
344{
345 remove_task(id+TASK_MESS)
346 remove_task(id+TASK_KICK)
347 remove_task(id+TASK_TIMER)
348 remove_task(id)
349}
350
351stock client_printcolor(const id, const message[], any:...)
352{
353 new g_message[191];
354 new i = 1, players[32];
355
356 vformat(g_message, charsmax(g_message), message, 3)
357
358 replace_all(g_message, charsmax(g_message), "!g", "^4")
359 replace_all(g_message, charsmax(g_message), "!n", "^1")
360 replace_all(g_message, charsmax(g_message), "!t", "^3")
361
362 if(id) players[0] = id
363 else get_players(players, i, "ch")
364
365 for(new j = 0; j < i; j++)
366 {
367 if(is_user_connected(players[j]))
368 {
369 message_begin(MSG_ONE_UNRELIABLE, g_saytxt,_, players[j])
370 write_byte(players[j])
371 write_string(g_message)
372 message_end()
373 }
374 }
375}
376
377stock bool: is_user_steam(id)
378{
379 static dp_pointer
380 if(dp_pointer||(dp_pointer=get_cvar_pointer("dp_r_id_provider")))
381 {
382 server_cmd("dp_clientinfo %d",id)
383 server_exec()
384 return (get_pcvar_num(dp_pointer)==2) ? true : false
385 }
386 return false
387}