· 5 years ago · Aug 15, 2020, 10:08 PM
1#include <amxmodx>
2#include <sqlx>
3#include <fakemeta>
4#include <hamsandwich>
5#include <fun>
6#include <csgomod>
7
8#define PLUGIN "CS:GO Accounts"
9#define VERSION "2.0"
10#define AUTHOR "O'Zone"
11
12#define TASK_PASSWORD 1945
13#define TASK_LOAD 2491
14
15enum _:playerInfo { STATUS, FAILS, PASSWORD[32], TEMP_PASSWORD[32], NAME[32], SAFE_NAME[64] };
16enum _:status { NOT_REGISTERED, NOT_LOGGED, LOGGED, GUEST };
17enum _:queries { UPDATE, INSERT, DELETE };
18
19new const accountStatus[status][] = { "CSGO_ACCOUNT_STATUS1", "CSGO_ACCOUNT_STATUS2", "CSGO_ACCOUNT_STATUS3", "CSGO_ACCOUNT_STATUS4" };
20
21new const commandAccount[][] = { "say /haslo", "say_team /haslo", "say /password", "say_team /password",
22 "say /konto", "say_team /konto", "say /account", "say_team /account", "konto" };
23
24new playerData[MAX_PLAYERS + 1][playerInfo], setinfo[16], Handle:sql, bool:sqlConnected, dataLoaded,
25 autoLogin, loginMaxTime, passwordMaxFails, passwordMinLength, blockMovement, loginForward;
26
27public plugin_init()
28{
29 register_plugin(PLUGIN, VERSION, AUTHOR);
30
31 for (new i; i < sizeof commandAccount; i++) register_clcmd(commandAccount[i], "account_menu");
32
33 bind_pcvar_num(create_cvar("csgo_accounts_login_max_time", "60"), loginMaxTime);
34 bind_pcvar_num(create_cvar("csgo_accounts_password_max_fails", "3"), passwordMaxFails);
35 bind_pcvar_num(create_cvar("csgo_accounts_password_min_length", "5"), passwordMinLength);
36 bind_pcvar_num(create_cvar("csgo_accounts_block_movement", "1"), blockMovement);
37 bind_pcvar_string(create_cvar("csgo_accounts_setinfo", "csgopass"), setinfo, charsmax(setinfo));
38
39 register_dictionary("common.txt");
40 register_dictionary("csgo_accounts.txt");
41
42 register_clcmd("ENTER_YOUR_PASSWORD", "login_account");
43 register_clcmd("ENTER_THE_SELECTED_PASSWORD", "register_step_one");
44 register_clcmd("REPEAT_THE_SELECTED_PASSWORD", "register_step_two");
45 register_clcmd("ENTER_THE_CURRENT_PASSWORD", "change_step_one");
46 register_clcmd("ENTER_NEW_PASSWORD", "change_step_two");
47 register_clcmd("REPEAT_NEW_PASSWORD", "change_step_three");
48 register_clcmd("ENTER_YOUR_CURRENT_PASSWORD", "delete_account");
49
50 RegisterHam(Ham_Spawn, "player", "player_spawn", 1);
51 RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "block_movement", 1);
52
53 loginForward = CreateMultiForward("csgo_user_login", ET_IGNORE, FP_CELL);
54}
55
56public plugin_natives()
57 register_native("csgo_check_account", "_csgo_check_account", 1);
58
59public plugin_cfg()
60 sql_init();
61
62public plugin_end()
63 SQL_FreeHandle(sql);
64
65public client_connect(id)
66{
67 playerData[id][PASSWORD] = "";
68 playerData[id][STATUS] = NOT_REGISTERED;
69 playerData[id][FAILS] = 0;
70
71 rem_bit(id, dataLoaded);
72 rem_bit(id, autoLogin);
73
74 if (is_user_bot(id) || is_user_hltv(id)) return;
75
76 get_user_name(id, playerData[id][NAME], charsmax(playerData[][NAME]));
77
78 mysql_escape_string(playerData[id][NAME], playerData[id][SAFE_NAME], charsmax(playerData[][SAFE_NAME]));
79
80 set_task(0.1, "load_account", id + TASK_LOAD);
81}
82
83public client_disconnected(id)
84{
85 remove_task(id + TASK_PASSWORD);
86 remove_task(id + TASK_LOAD);
87 remove_task(id);
88}
89
90public player_spawn(id)
91{
92 if (!is_user_alive(id) || playerData[id][STATUS] >= LOGGED) return;
93
94 account_menu(id);
95}
96
97public kick_player(id)
98{
99 id -= TASK_PASSWORD;
100
101 if (!is_user_connected(id)) return;
102
103 server_cmd("kick #%d ^"You have not logged in within %is!^"", get_user_userid(id), loginMaxTime);
104}
105
106public block_movement(id)
107{
108 if (!blockMovement || !is_user_alive(id) || playerData[id][STATUS] >= LOGGED) return HAM_IGNORED;
109
110 set_user_maxspeed(id, 0.1);
111
112 return HAM_IGNORED;
113}
114
115public account_menu(id)
116{
117 if (!is_user_connected(id) || !is_user_valid(id)) return PLUGIN_HANDLED;
118
119 if (!get_bit(id, dataLoaded)) {
120 remove_task(id);
121
122 set_task(1.0, "account_menu", id);
123
124 return PLUGIN_HANDLED;
125 }
126
127 if (playerData[id][STATUS] <= NOT_LOGGED && !task_exists(id + TASK_PASSWORD)) {
128 set_task(float(loginMaxTime), "kick_player", id + TASK_PASSWORD);
129 }
130
131 new menuData[256];
132
133 formatex(menuData, charsmax(menuData), "\rREGISTRATION SYSTEM^n^n\rNick: \w[\y%s\w]^n\rStatus: \w[\y%L\w]", playerData[id][NAME], id, accountStatus[playerData[id][STATUS]]);
134
135 if ((playerData[id][STATUS] == NOT_LOGGED || playerData[id][STATUS] == LOGGED) && !get_bit(id, autoLogin)) format(menuData, charsmax(menuData),"%s^n\wType in console \ysetinfo ^"_%s^" ^"your password^"^n\wThis will log you in \rautomatically\w.", menuData, setinfo);
136
137 new menu = menu_create(menuData, "account_menu_handle"), callback = menu_makecallback("account_menu_callback");
138
139 new item[48];
140
141 formatex(item, charsmax(item), "\y%L", id, "CSGO_ACCOUNT_LOGIN");
142 menu_additem(menu, item, _, _, callback);
143 formatex(item, charsmax(item), "\y%L^n", id, "CSGO_ACCOUNT_REGISTRATION");
144 menu_additem(menu, item, _, _, callback);
145 formatex(item, charsmax(item), "\y%L", id, "CSGO_ACCOUNT_PW_CHANGE");
146 menu_additem(menu, item, _, _, callback);
147 formatex(item, charsmax(item), "\y%L^n", id, "CSGO_ACCOUNT_CLEAR");
148 menu_additem(menu, item, _, _, callback);
149 formatex(item, charsmax(item), "\y%L^n", id, "CSGO_ACCOUNT_LOGIN_GUEST");
150 menu_additem(menu, item, _, _, callback);
151
152 if (playerData[id][STATUS] >= LOGGED)
153 {
154 formatex(item, charsmax(item), "%L", id, "EXIT");
155 menu_additem(menu, item, _, _, callback);
156 }
157
158 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
159
160 menu_display(id, menu);
161
162 return PLUGIN_HANDLED;
163}
164
165public account_menu_callback(id, menu, item)
166{
167 switch (item) {
168 case 0: return playerData[id][STATUS] == NOT_LOGGED ? ITEM_ENABLED : ITEM_DISABLED;
169 case 1: return (playerData[id][STATUS] == NOT_REGISTERED || playerData[id][STATUS] == GUEST) ? ITEM_ENABLED : ITEM_DISABLED;
170 case 2, 3: return playerData[id][STATUS] == LOGGED ? ITEM_ENABLED : ITEM_DISABLED;
171 case 4: return playerData[id][STATUS] == NOT_REGISTERED ? ITEM_ENABLED : ITEM_DISABLED;
172 }
173
174 return ITEM_ENABLED;
175}
176
177public account_menu_handle(id, menu, item)
178{
179 if (!is_user_connected(id)) return PLUGIN_HANDLED;
180
181 if (item == MENU_EXIT || item == 5) {
182 menu_destroy(menu);
183
184 return PLUGIN_HANDLED;
185 }
186
187 switch (item) {
188 case 0: {
189 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_LOGIN_PW");
190
191 set_hudmessage(255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
192 show_hudmessage(id, "%L", id, "CSGO_HUD_LOGIN_PW");
193
194 client_cmd(id, "messagemode ENTER_YOUR_PASSWORD");
195 } case 1: {
196 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_SELECT_PW");
197
198 set_hudmessage(255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
199 show_hudmessage(id, "%L", id, "CSGO_HUD_LOGIN_PW");
200
201 client_cmd(id, "messagemode ENTER_THE_SELECTED_PASSWORD");
202
203 remove_task(id + TASK_PASSWORD);
204 } case 2: {
205 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_ENTER_CURRENT_PW");
206
207 set_hudmessage(255, 128, 0, 0.22, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
208 show_hudmessage(id, "%L", id, "CSGO_HUD_ENTER_CURRENT_PW");
209
210 client_cmd(id, "messagemode ENTER_THE_CURRENT_PASSWORD");
211 } case 3: {
212 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_ENTER_CURRENT_PW");
213
214 set_hudmessage(255, 128, 0, 0.22, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
215 show_hudmessage(id, "%L", id, "CSGO_HUD_ENTER_CURRENT_PW");
216
217 client_cmd(id, "messagemode ENTER_YOUR_CURRENT_PASSWORD");
218 } case 4: {
219 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_REGISTER_TO");
220
221 set_hudmessage(0, 255, 0, -1.0, 0.9, 0, 0.0, 3.5, 0.0, 0.0);
222 show_hudmessage(id, "%L", id, "CSGO_HUD_REGISTER_TO");
223
224 remove_task(id + TASK_PASSWORD);
225
226 playerData[id][STATUS] = GUEST;
227
228 if (is_user_alive(id)) {
229 ExecuteHamB(Ham_CS_Player_ResetMaxSpeed, id);
230 }
231
232 new ret;
233
234 ExecuteForward(loginForward, ret, id);
235 }
236 }
237
238 menu_destroy(menu);
239
240 return PLUGIN_HANDLED;
241}
242
243public login_account(id)
244{
245 if (playerData[id][STATUS] != NOT_LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
246
247 new password[32];
248
249 read_args(password, charsmax(password));
250
251 remove_quotes(password);
252
253 if (!equal(playerData[id][PASSWORD], password)) {
254 if (++playerData[id][FAILS] >= passwordMaxFails) {
255 server_cmd("kick #%d ^"Nieprawidlowe haslo!^"", get_user_userid(id));
256
257 return PLUGIN_HANDLED;
258 }
259
260 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_WRONG_PASSWORD", playerData[id][FAILS], passwordMaxFails);
261
262 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
263
264 show_hudmessage(id, "%L", id, "CSGO_HUD_WRONG_PASSWORD");
265
266 account_menu(id);
267
268 return PLUGIN_HANDLED;
269 }
270
271 playerData[id][STATUS] = LOGGED;
272 playerData[id][FAILS] = 0;
273
274 remove_task(id + TASK_PASSWORD);
275
276 if (is_user_alive(id)) {
277 ExecuteHamB(Ham_CS_Player_ResetMaxSpeed, id);
278 }
279
280 new ret;
281
282 ExecuteForward(loginForward, ret, id);
283
284 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_LOGIN_SUCCESS");
285
286 set_hudmessage(0, 255, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
287 show_hudmessage(id, "%L", id, "CSGO_HUD_LOGIN_SUCCESS");
288
289 return PLUGIN_HANDLED;
290}
291
292public register_step_one(id)
293{
294 if ((playerData[id][STATUS] != NOT_REGISTERED && playerData[id][STATUS] != GUEST) || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
295
296 new password[32];
297
298 read_args(password, charsmax(password));
299 remove_quotes(password);
300
301 if (strlen(password) < passwordMinLength) {
302 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_MIN_LENGTH", passwordMinLength);
303
304 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
305 show_hudmessage(id, "%L", id, "CSGO_HUD_MIN_LENGTH", passwordMinLength);
306
307 account_menu(id);
308
309 return PLUGIN_HANDLED;
310 }
311
312 copy(playerData[id][TEMP_PASSWORD], charsmax(playerData[][TEMP_PASSWORD]), password);
313
314 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_REPEAT_PW");
315
316 set_hudmessage(255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
317 show_hudmessage(id, "%L", id, "CSGO_HUD_REPEAT_PW");
318
319 client_cmd(id, "messagemode REPEAT_THE_SELECTED_PASSWORD");
320
321 return PLUGIN_HANDLED;
322}
323
324public register_step_two(id)
325{
326 if ((playerData[id][STATUS] != NOT_REGISTERED && playerData[id][STATUS] != GUEST) || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
327
328 new password[32];
329
330 read_args(password, charsmax(password));
331 remove_quotes(password);
332
333 if (!equal(password, playerData[id][TEMP_PASSWORD])) {
334 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_PW_DIFFER");
335
336 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
337 show_hudmessage(id, "%L", id, "CSGO_HUD_PW_DIFFER");
338
339 account_menu(id);
340
341 return PLUGIN_HANDLED;
342 }
343
344 new menuData[192];
345
346 formatex(menuData, charsmax(menuData), "\rREGISTRATION CONFIRMATION^n^n\wNick: \y[\r%s\y]^n\wPassword: \y[\r%s\y]", playerData[id][NAME], playerData[id][TEMP_PASSWORD]);
347
348 new menu = menu_create(menuData, "register_confirmation_handle");
349
350 new option[32];
351 formatex(option, charsmax(option), "\y%L", id, "CSGO_ACCOUNT_LOGIN");
352 menu_additem(menu, option);
353 formatex(option, charsmax(option), "\y%L", id, "CSGO_REG_CHANGE_PW");
354 menu_additem(menu, option);
355 formatex(option, charsmax(option), "\y%L", id, "CSGO_REG_CANCEL");
356 menu_additem(menu, option);
357
358 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
359
360 menu_display(id, menu);
361
362 return PLUGIN_HANDLED;
363}
364
365public register_confirmation_handle(id, menu, item)
366{
367 if (!is_user_connected(id)) return PLUGIN_HANDLED;
368
369 if (item == MENU_EXIT) {
370 menu_destroy(menu);
371
372 return PLUGIN_HANDLED;
373 }
374
375 menu_destroy(menu);
376
377 switch (item) {
378 case 0: {
379 playerData[id][STATUS] = LOGGED;
380
381 copy(playerData[id][PASSWORD], charsmax(playerData[][PASSWORD]), playerData[id][TEMP_PASSWORD]);
382
383 account_query(id, INSERT);
384
385 if (is_user_alive(id)) {
386 ExecuteHamB(Ham_CS_Player_ResetMaxSpeed, id);
387 }
388
389 new ret;
390
391 ExecuteForward(loginForward, ret, id);
392
393 set_hudmessage(0, 255, 0, -1.0, 0.9, 0, 0.0, 3.5, 0.0, 0.0);
394 show_hudmessage(id, "%L", id, "CSGO_HUD_REGISTER_SUCCESS");
395
396 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_REGISTER_SUCCESS");
397 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_SETINFO_HELP", setinfo, playerData[id][PASSWORD]);
398
399 cmd_execute(id, "setinfo _%s %s", setinfo, playerData[id][PASSWORD]);
400 cmd_execute(id, "writecfg %s", setinfo);
401 } case 1: {
402 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_REGISTER_STARTED");
403
404 set_hudmessage(255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
405 show_hudmessage(id, "%L", id, "CSGO_HUD_REGISTER_STARTED");
406
407 client_cmd(id, "messagemode ENTER_THE_SELECTED_PASSWORD");
408 } case 2: {
409 account_menu(id);
410 }
411 }
412
413 return PLUGIN_HANDLED;
414}
415
416public change_step_one(id)
417{
418 if (playerData[id][STATUS] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
419
420 new password[32];
421
422 read_args(password, charsmax(password));
423 remove_quotes(password);
424
425 if (!equal(playerData[id][PASSWORD], password)) {
426 if (++playerData[id][FAILS] >= passwordMaxFails) {
427 server_cmd("kick #%d ^"Nieprawidlowe haslo!^"", get_user_userid(id));
428
429 return PLUGIN_HANDLED;
430 }
431
432 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_WRONG_PASSWORD", playerData[id][FAILS], passwordMaxFails);
433
434 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
435 show_hudmessage(id, "%L", id, "CSGO_HUD_WRONG_PASSWORD");
436
437 account_menu(id);
438
439 return PLUGIN_HANDLED;
440 }
441
442 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_ENTER_NEW_PW");
443
444 set_hudmessage(255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
445 show_hudmessage(id, "%L", id, "CSGO_HUD_ENTER_NEW_PW");
446
447 client_cmd(id, "messagemode ENTER_NEW_PASSWORD");
448
449 return PLUGIN_HANDLED;
450}
451
452public change_step_two(id)
453{
454 if (playerData[id][STATUS] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
455
456 new password[32];
457
458 read_args(password, charsmax(password));
459 remove_quotes(password);
460
461 if (equal(playerData[id][PASSWORD], password)) {
462 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_NEW_MATCHES_OLD");
463
464 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
465 show_hudmessage(id, "%L", id, "CSGO_HUD_NEW_MATCHES_OLD");
466
467 account_menu(id);
468
469 return PLUGIN_HANDLED;
470 }
471
472 if (strlen(password) < passwordMinLength) {
473 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_NEW_MIN_LENGTH", passwordMinLength);
474
475 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
476 show_hudmessage(id, "%L", id, "CSGO_HUD_NEW_MIN_LENGTH", passwordMinLength);
477
478 account_menu(id);
479
480 return PLUGIN_HANDLED;
481 }
482
483 copy(playerData[id][TEMP_PASSWORD], charsmax(playerData[][TEMP_PASSWORD]), password);
484
485 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_REPEAT_NEW_PW");
486
487 set_hudmessage(255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
488 show_hudmessage(id, "%L", id, "CSGO_HUD_REPEAT_NEW_PW");
489
490 client_cmd(id, "messagemode REPEAT_NEW_PASSWORD");
491
492 return PLUGIN_HANDLED;
493}
494
495public change_step_three(id)
496{
497 if (playerData[id][STATUS] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
498
499 new password[32];
500
501 read_args(password, charsmax(password));
502 remove_quotes(password);
503
504 if (!equal(password, playerData[id][TEMP_PASSWORD])) {
505 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_PW_DIFFER");
506
507 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
508 show_hudmessage(id, "%L", id, "CSGO_HUD_PW_DIFFER");
509
510 account_menu(id);
511
512 return PLUGIN_HANDLED;
513 }
514
515 copy(playerData[id][PASSWORD], charsmax(playerData[][PASSWORD]), password);
516
517 account_query(id, UPDATE);
518
519 set_hudmessage(0, 255, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
520 show_hudmessage(id, "%L", id, "CSGO_HUD_PW_CHANGE_SUCCESS");
521
522 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_PW_CHANGE_SUCCESS");
523 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_SETINFO_HELP", setinfo, playerData[id][PASSWORD]);
524
525 cmd_execute(id, "setinfo _%s %s", setinfo, playerData[id][PASSWORD]);
526 cmd_execute(id, "writecfg %s", setinfo);
527
528 return PLUGIN_HANDLED;
529}
530
531public delete_account(id)
532{
533 if (playerData[id][STATUS] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
534
535 new password[32];
536
537 read_args(password, charsmax(password));
538 remove_quotes(password);
539
540 if (!equal(playerData[id][PASSWORD], password)) {
541 if (++playerData[id][FAILS] >= passwordMaxFails) {
542 server_cmd("kick #%d ^"Nieprawidlowe haslo!^"", get_user_userid(id));
543
544 return PLUGIN_HANDLED;
545 }
546
547 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_WRONG_PASSWORD", playerData[id][FAILS], passwordMaxFails);
548
549 set_hudmessage(255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0);
550 show_hudmessage(id, "%L", id, "CSGO_HUD_WRONG_PASSWORD");
551
552 account_menu(id);
553
554 return PLUGIN_HANDLED;
555 }
556
557 new menuData[128];
558
559 formatex(menuData, charsmax(menuData), "%L", id, "CSGO_REG_DELETE");
560
561 new menu = menu_create(menuData, "delete_account_handle");
562
563 new option[16];
564 formatex(option, charsmax(option), "\r%L", id, "YES");
565 menu_additem(menu, option);
566 formatex(option, charsmax(option), "\y%L", id, "NO");
567 menu_additem(menu, option);
568 formatex(option, charsmax(option), "\y%L", id, "CSGO_REG_LEAVE");
569 menu_additem(menu, option);
570
571 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
572
573 menu_display(id, menu);
574
575 return PLUGIN_HANDLED;
576}
577
578public delete_account_handle(id, menu, item)
579{
580 if (item == 0) {
581 account_query(id, DELETE);
582
583 console_print(id, "=====================================");
584 console_print(id, "========== REGISTRATION SYSTEM ==========");
585 console_print(id, " Your account (named %s) has been deleted!", playerData[id][NAME]);
586 console_print(id, "=====================================");
587
588 server_cmd("kick #%d ^"This account has been deleted!^"", get_user_userid(id));
589 }
590
591 menu_destroy(menu);
592
593 return PLUGIN_CONTINUE;
594}
595
596public sql_init()
597{
598 new host[64], user[64], pass[64], db[64], queryData[128], error[128], errorNum;
599
600 get_cvar_string("csgo_sql_host", host, charsmax(host));
601 get_cvar_string("csgo_sql_user", user, charsmax(user));
602 get_cvar_string("csgo_sql_pass", pass, charsmax(pass));
603 get_cvar_string("csgo_sql_db", db, charsmax(db));
604
605 sql = SQL_MakeDbTuple(host, user, pass, db);
606
607 new Handle:connectHandle = SQL_Connect(sql, errorNum, error, charsmax(error));
608
609 if (errorNum) {
610 log_to_file("csgo-error.log", "[CS:GO Accounts] Init SQL Error: %s (%i)", error, errorNum);
611
612 return;
613 }
614
615 formatex(queryData, charsmax(queryData), "CREATE TABLE IF NOT EXISTS `csgo_accounts` (`name` VARCHAR(64), `pass` VARCHAR(32), PRIMARY KEY(`name`));");
616
617 new Handle:query = SQL_PrepareQuery(connectHandle, queryData);
618
619 SQL_Execute(query);
620
621 SQL_FreeHandle(query);
622 SQL_FreeHandle(connectHandle);
623
624 sqlConnected = true;
625}
626
627public load_account(id)
628{
629 id -= TASK_LOAD;
630
631 if (!sqlConnected) {
632 set_task(1.0, "load_account", id + TASK_LOAD);
633
634 return;
635 }
636
637 new queryData[128], tempId[1];
638
639 tempId[0] = id;
640
641 formatex(queryData, charsmax(queryData), "SELECT * FROM `csgo_accounts` WHERE name = ^"%s^"", playerData[id][SAFE_NAME]);
642
643 SQL_ThreadQuery(sql, "load_account_handle", queryData, tempId, sizeof(tempId));
644}
645
646public load_account_handle(failState, Handle:query, error[], errorNum, tempId[], dataSize)
647{
648 new id = tempId[0];
649
650 if (failState) {
651 log_to_file("csgo-error.log", "[CS:GO Accounts] SQL Error: %s (%d)", error, errorNum);
652
653 return;
654 }
655
656 if (SQL_MoreResults(query)) {
657 SQL_ReadResult(query, SQL_FieldNameToNum(query, "pass"), playerData[id][PASSWORD], charsmax(playerData[][PASSWORD]));
658
659 if (playerData[id][PASSWORD][0]) {
660 new password[32], info[32];
661
662 formatex(info, charsmax(info), "_%s", setinfo);
663
664 cmd_execute(id, "exec %s.cfg", setinfo);
665
666 get_user_info(id, info, password, charsmax(password));
667
668 if (equal(playerData[id][PASSWORD], password)) {
669 playerData[id][STATUS] = LOGGED;
670
671 set_bit(id, autoLogin);
672
673 new ret;
674
675 ExecuteForward(loginForward, ret, id);
676 } else {
677 playerData[id][STATUS] = NOT_LOGGED;
678 }
679
680 cmd_execute(id, "exec config.cfg");
681 }
682 }
683
684 set_bit(id, dataLoaded);
685}
686
687public account_query(id, type)
688{
689 if (!is_user_connected(id)) return;
690
691 new queryData[128], password[32];
692
693 mysql_escape_string(playerData[id][PASSWORD], password, charsmax(password));
694
695 switch (type) {
696 case INSERT: formatex(queryData, charsmax(queryData), "INSERT INTO `csgo_accounts` VALUES (^"%s^", '%s')", playerData[id][SAFE_NAME], password);
697 case UPDATE: formatex(queryData, charsmax(queryData), "UPDATE `csgo_accounts` SET pass = '%s' WHERE name = ^"%s^"", password, playerData[id][SAFE_NAME]);
698 case DELETE: formatex(queryData, charsmax(queryData), "DELETE FROM `csgo_accounts` WHERE name = ^"%s^"", playerData[id][SAFE_NAME]);
699 }
700
701 SQL_ThreadQuery(sql, "ignore_handle", queryData);
702}
703
704public ignore_handle(failState, Handle:query, error[], errorNum, data[], dataSize)
705{
706 if (failState) {
707 if (failState == TQUERY_CONNECT_FAILED) log_to_file("csgo-error.log", "[CS:GO Accounts] Could not connect to SQL database. [%d] %s", errorNum, error);
708 else if (failState == TQUERY_QUERY_FAILED) log_to_file("csgo-error.log", "[CS:GO Accounts] Query failed. [%d] %s", errorNum, error);
709 }
710
711 return PLUGIN_CONTINUE;
712}
713
714public _csgo_check_account(id)
715{
716 if (sql == Empty_Handle) {
717 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_DB_ERROR");
718
719 return false;
720 } else if (playerData[id][STATUS] < LOGGED) {
721 client_print_color(id, id, "^4[CS:GO]^1 %L", id, "CSGO_LOGIN_FIRST");
722
723 account_menu(id);
724
725 return false;
726 }
727
728 return true;
729}