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