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