· 6 years ago · May 13, 2019, 08:50 PM
1#include <amxmodx>
2#include <sqlx>
3#include <fakemeta>
4#include <cod>
5
6#define PLUGIN "CoD Accounts System"
7#define VERSION "1.0.9"
8#define AUTHOR "O'Zone"
9
10#define SETINFO "_csrpass"
11#define CONFIG "csrpass"
12
13#define TASK_PASSWORD 1945
14
15new const commandAccount[][] = { "say /haslo", "say_team /haslo", "say /password", "say_team /password",
16 "say /konto", "say_team /konto", "say /account", "say_team /account", "konto" };
17
18enum _:status { NOT_REGISTERED, NOT_LOGGED, LOGGED, GUEST };
19enum _:queries { UPDATE, INSERT, DELETE };
20
21new const accountStatus[status][] = { "Niezarejestrowany", "Niezalogowany", "Zalogowany", "Gosc" };
22
23new playerName[MAX_PLAYERS + 1][64], playerSafeName[MAX_PLAYERS + 1][64], playerPassword[MAX_PLAYERS + 1][32], playerTempPassword[MAX_PLAYERS + 1][32],
24 playerFails[MAX_PLAYERS + 1], playerStatus[MAX_PLAYERS + 1], Handle:sql, bool:sqlConnected, dataLoaded, autoLogin, cvarAccountsEnabled;
25
26public plugin_init()
27{
28 register_plugin(PLUGIN, VERSION, AUTHOR);
29
30 bind_pcvar_num(create_cvar("cod_accounts_enabled", "1"), cvarAccountsEnabled);
31
32 for (new i; i < sizeof commandAccount; i++) register_clcmd(commandAccount[i], "account_menu");
33
34 register_clcmd("WPROWADZ_SWOJE_HASLO", "login_account");
35 register_clcmd("WPROWADZ_WYBRANE_HASLO", "register_step_one");
36 register_clcmd("POWTORZ_WYBRANE_HASLO", "register_step_two");
37 register_clcmd("WPROWADZ_AKTUALNE_HASLO", "change_step_one");
38 register_clcmd("WPROWADZ_NOWE_HASLO", "change_step_two");
39 register_clcmd("POWTORZ_NOWE_HASLO", "change_step_three");
40 register_clcmd("WPROWADZ_SWOJE_AKTUALNE_HASLO", "delete_account");
41
42 register_concmd("joinclass", "check_account");
43 register_concmd("jointeam", "check_account");
44 register_concmd("chooseteam", "check_account");
45
46 register_message(get_user_msgid("ShowMenu"), "message_show_menu");
47 register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu");
48
49 register_forward(FM_PlayerPreThink, "player_prethink");
50}
51
52public plugin_natives()
53 register_native("cod_check_account", "_cod_check_account");
54
55public plugin_cfg()
56 sql_init();
57
58public plugin_end()
59 SQL_FreeHandle(sql);
60
61public client_connect(id)
62{
63 if (is_user_bot(id) || is_user_hltv(id)) return;
64
65 playerPassword[id] = "";
66
67 playerFails[id] = 0;
68
69 playerStatus[id] = NOT_REGISTERED;
70
71 rem_bit(id, dataLoaded);
72 rem_bit(id, autoLogin);
73
74 get_user_name(id, playerName[id], charsmax(playerName[]));
75
76 cod_sql_string(playerName[id], playerSafeName[id], charsmax(playerSafeName[]));
77
78 set_task(0.1, "load_account", id);
79}
80
81public client_disconnected(id)
82{
83 remove_task(id);
84 remove_task(id + TASK_PASSWORD);
85}
86
87public message_show_menu(msgId, dest, id)
88{
89 new const Team_Select[] = "#Team_Select";
90 static menuData[sizeof(Team_Select)];
91
92 get_msg_arg_string(4, menuData, charsmax(menuData));
93
94 if (equal(menuData, Team_Select) && playerStatus[id] < LOGGED) {
95 set_pdata_int(id, 205, 0, 5);
96
97 set_task(0.1, "account_menu", id);
98
99 return PLUGIN_HANDLED;
100 }
101
102 return PLUGIN_CONTINUE;
103}
104
105public message_vgui_menu(msgId, dest, id)
106{
107 if (get_msg_arg_int(1) == 2 && playerStatus[id] < LOGGED) {
108 set_task(0.1, "account_menu", id);
109
110 return PLUGIN_HANDLED;
111 }
112
113 return PLUGIN_CONTINUE;
114}
115
116public player_prethink(id)
117{
118 if (get_bit(id, dataLoaded) && !is_user_bot(id) && !is_user_hltv(id) && is_user_connected(id) && playerStatus[id] < LOGGED) {
119 static msgScreenFade;
120
121 if (!msgScreenFade) msgScreenFade = get_user_msgid("ScreenFade");
122
123 message_begin(MSG_ONE, msgScreenFade, {0, 0, 0}, id);
124 write_short(1<<12);
125 write_short(1<<12);
126 write_short(0x0000);
127 write_byte(0);
128 write_byte(0);
129 write_byte(0);
130 write_byte(255);
131 message_end();
132 }
133}
134
135public check_account(id)
136{
137 if (playerStatus[id] < LOGGED) {
138 account_menu(id, true);
139
140 return PLUGIN_HANDLED;
141 }
142
143 return PLUGIN_CONTINUE;
144}
145
146public kick_player(id)
147{
148 id -= TASK_PASSWORD;
149
150 if (is_user_connected(id)) server_cmd("kick #%d ^"Nie zalogowales sie w ciagu 60s!^"", get_user_userid(id));
151}
152public account_menu(id, sound)
153{
154 if (!is_user_connected(id) || !is_user_valid(id) || !cvarAccountsEnabled) return PLUGIN_HANDLED;
155
156 if (!get_bit(id, dataLoaded)) {
157 remove_task(id);
158
159 set_task(0.1, "account_menu", id);
160
161 return PLUGIN_HANDLED;
162 }
163
164 if (!get_user_team(id) && playerStatus[id] == LOGGED) {
165 client_cmd(id, "chooseteam");
166
167 engclient_cmd(id, "chooseteam");
168
169 return PLUGIN_HANDLED;
170 }
171
172 if (playerStatus[id] <= NOT_LOGGED) if (!task_exists(id + TASK_PASSWORD)) set_task(60.0, "kick_player", id + TASK_PASSWORD);
173
174 if (sound) client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
175
176 static menuData[256];
177
178 formatex(menuData, charsmax(menuData), "\rSYSTEM REJESTRACJI^n^n\rNick: \w[\y%s\w]^n\rStatus: \w[\y%s\w]", playerName[id], accountStatus[playerStatus[id]]);
179
180 if ((playerStatus[id] == NOT_LOGGED || playerStatus[id] == LOGGED) && !get_bit(id, autoLogin)) format(menuData, charsmax(menuData),"%s^n\wWpisz w konsoli \ysetinfo ^"%s^" ^"twojehaslo^"^n\wSprawi to, ze twoje haslo bedzie ladowane \rautomatycznie\w.", menuData, SETINFO);
181
182 new menu = menu_create(menuData, "account_menu_handle"), callback = menu_makecallback("account_menu_callback");
183
184 menu_additem(menu, "\yLogowanie", _, _, callback);
185 menu_additem(menu, "\yRejestracja^n", _, _, callback);
186 menu_additem(menu, "\yZmien \wHaslo", _, _, callback);
187 menu_additem(menu, "\ySkasuj \wKonto^n", _, _, callback);
188 menu_additem(menu, "\yZaloguj jako \wGosc \r(NIEZALECANE)^n", _, _, callback);
189 if (playerStatus[id] == LOGGED) menu_additem(menu, "\wWyjdz", _, _, callback);
190
191 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
192
193 menu_display(id, menu);
194
195 return PLUGIN_HANDLED;
196}
197
198public account_menu_callback(id, menu, item)
199{
200 switch (item) {
201 case 0: return playerStatus[id] == NOT_LOGGED ? ITEM_ENABLED : ITEM_DISABLED;
202 case 1: return (playerStatus[id] == NOT_REGISTERED || playerStatus[id] == GUEST) ? ITEM_ENABLED : ITEM_DISABLED;
203 case 2, 3: return playerStatus[id] == LOGGED ? ITEM_ENABLED : ITEM_DISABLED;
204 case 4: return playerStatus[id] == NOT_REGISTERED ? ITEM_ENABLED : ITEM_DISABLED;
205 }
206
207 return ITEM_ENABLED;
208}
209
210public account_menu_handle(id, menu, item)
211{
212 if (!is_user_connected(id)) return PLUGIN_HANDLED;
213
214 if (item == MENU_EXIT || item == 5) {
215 client_cmd(id, "spk %s", codSounds[SOUND_EXIT]);
216
217 menu_destroy(menu);
218
219 return PLUGIN_HANDLED;
220 }
221
222 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
223
224 switch (item) {
225 case 0: {
226 cod_print_chat(id, "Wprowadz swoje^x04 haslo^x01, aby sie^x04 zalogowac.");
227
228 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Wprowadz swoje haslo.");
229
230 client_cmd(id, "messagemode WPROWADZ_SWOJE_HASLO");
231 }
232 case 1: {
233 cod_print_chat(id, "Rozpoczales proces^x04 rejestracji^x01. Wprowadz wybrane^x04 haslo^x01.");
234
235 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Wprowadz wybrane haslo.");
236
237 client_cmd(id, "messagemode WPROWADZ_WYBRANE_HASLO");
238
239 remove_task(id + TASK_PASSWORD);
240 }
241 case 2: {
242 cod_print_chat(id, "Wprowadz swoje^x04 aktualne haslo^x01 w celu potwierdzenia tozsamosci.");
243
244 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.22, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Wprowadz swoje aktualne haslo.");
245
246 client_cmd(id, "messagemode WPROWADZ_AKTUALNE_HASLO");
247 }
248 case 3: {
249 cod_print_chat(id, "Wprowadz swoje^x04 aktualne haslo^x01 w celu potwierdzenia tozsamosci.");
250
251 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.22, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Wprowadz swoje aktualne haslo.");
252
253 client_cmd(id, "messagemode WPROWADZ_SWOJE_AKTUALNE_HASLO");
254 }
255 case 4: {
256 cod_print_chat(id, "Zalogowales sie jako^x04 Gosc^x01. By zabezpieczyc swoj nick^x04 zarejestruj sie^x01.");
257
258 cod_show_hud(id, TYPE_HUD, 0, 255, 0, -1.0, 0.9, 0, 0.0, 3.5, 0.0, 0.0, "Zostales pomyslnie zalogowany jako Gosc.");
259
260 remove_task(id + TASK_PASSWORD);
261
262 playerStatus[id] = GUEST;
263
264 client_cmd(id, "chooseteam");
265
266 engclient_cmd(id, "chooseteam");
267 }
268 }
269
270 menu_destroy(menu);
271
272 return PLUGIN_HANDLED;
273}
274
275public login_account(id)
276{
277 if (playerStatus[id] != NOT_LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
278
279 new password[33];
280
281 read_args(password, charsmax(password));
282
283 remove_quotes(password);
284
285 if (!equal(playerPassword[id], password)) {
286 if (++playerFails[id] >= 3) server_cmd("kick #%d ^"Nieprawidlowe haslo!^"", get_user_userid(id));
287
288 cod_print_chat(id, "Podane haslo jest^x04 nieprawidlowe^x01. (Bledne haslo^x04 %i/3^x01)", playerFails[id]);
289
290 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Podane haslo jest nieprawidlowe.");
291
292 account_menu(id, true);
293
294 return PLUGIN_HANDLED;
295 }
296
297 client_cmd(id, "spk %s", codSounds[SOUND_EXIT]);
298
299 playerStatus[id] = LOGGED;
300
301 playerFails[id] = 0;
302
303 remove_task(id + TASK_PASSWORD);
304
305 cod_print_chat(id, "Zostales pomyslnie^x04 zalogowany^x01. Zyczymy milej gry.");
306
307 cod_show_hud(id, TYPE_HUD, 0, 255, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Zostales pomyslnie zalogowany.");
308
309 client_cmd(id, "chooseteam");
310
311 engclient_cmd(id, "chooseteam");
312
313 return PLUGIN_HANDLED;
314}
315
316public register_step_one(id)
317{
318 if ((playerStatus[id] != NOT_REGISTERED && playerStatus[id] != GUEST) || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
319
320 new password[33];
321
322 read_args(password, charsmax(password));
323 remove_quotes(password);
324
325 if (strlen(password) < 5) {
326 cod_print_chat(id, "Haslo musi miec co najmniej^x04 5 znakow^x01.");
327
328 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Haslo musi miec co najmniej 5 znakow.");
329
330 account_menu(id, true);
331
332 return PLUGIN_HANDLED;
333 }
334
335 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
336
337 copy(playerTempPassword[id], charsmax(playerTempPassword), password);
338
339 cod_print_chat(id, "Teraz powtorz wybrane^x04 haslo^x01.");
340
341 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Powtorz wybrane haslo.");
342
343 client_cmd(id, "messagemode POWTORZ_WYBRANE_HASLO");
344
345 return PLUGIN_HANDLED;
346}
347
348public register_step_two(id)
349{
350 if ((playerStatus[id] != NOT_REGISTERED && playerStatus[id] != GUEST) || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
351
352 new password[33];
353
354 read_args(password, charsmax(password));
355 remove_quotes(password);
356
357 if (!equal(password, playerTempPassword[id])) {
358 cod_print_chat(id, "Podane hasla^x04 roznia sie^x01 od siebie.");
359
360 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Podane hasla roznia sie od siebie.");
361
362 account_menu(id, true);
363
364 return PLUGIN_HANDLED;
365 }
366
367 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
368
369 new menuData[192];
370
371 formatex(menuData, charsmax(menuData), "\rPOTWIERDZENIE REJESTRACJI^n^n\wTwoj Nick: \y[\r%s\y]^n\wTwoje Haslo: \y[\r%s\y]", playerName[id], playerTempPassword[id]);
372
373 new menu = menu_create(menuData, "register_confirmation_handle");
374
375 menu_additem(menu, "\rPotwierdz \wRejestracje");
376 menu_additem(menu, "\yZmien \wHaslo^n");
377 menu_additem(menu, "\wAnuluj \wRejestracje");
378
379 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
380
381 menu_display(id, menu);
382
383 return PLUGIN_HANDLED;
384}
385
386public register_confirmation_handle(id, menu, item)
387{
388 if (!is_user_connected(id)) return PLUGIN_HANDLED;
389
390 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
391
392 if (item == MENU_EXIT) {
393 client_cmd(id, "spk %s", codSounds[SOUND_EXIT]);
394
395 menu_destroy(menu);
396
397 return PLUGIN_HANDLED;
398 }
399
400 menu_destroy(menu);
401
402 switch (item) {
403 case 0: {
404 playerStatus[id] = LOGGED;
405
406 copy(playerPassword[id], charsmax(playerPassword[]), playerTempPassword[id]);
407
408 account_query(id, INSERT);
409
410 client_cmd(id, "spk %s", codSounds[SOUND_EXIT]);
411
412 cod_show_hud(id, TYPE_HUD, 0, 255, 0, -1.0, 0.9, 0, 0.0, 3.5, 0.0, 0.0, "Zostales pomyslnie zarejestrowany i zalogowany.");
413
414 cod_print_chat(id, "Twoj nick zostal pomyslnie^x04 zarejestrowany^x01.");
415 cod_print_chat(id, "Wpisz w konsoli komende^x04 setinfo ^"%s^" ^"%s^"^x01, aby twoje haslo bylo ladowane automatycznie.", SETINFO, playerPassword[id]);
416
417 cod_cmd_execute(id, "setinfo %s %s", SETINFO, playerPassword[id]);
418 cod_cmd_execute(id, "writecfg %s", CONFIG);
419
420 client_cmd(id, "chooseteam");
421
422 engclient_cmd(id, "chooseteam");
423 }
424 case 1: {
425 cod_print_chat(id, "Rozpoczales proces^x04 rejestracji^x01. Wprowadz wybrane^x04 haslo^x01.");
426
427 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
428
429 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Wprowadz wybrane haslo.");
430
431 client_cmd(id, "messagemode WPROWADZ_WYBRANE_HASLO");
432 }
433 case 2: account_menu(id, false);
434 }
435
436 return PLUGIN_HANDLED;
437}
438
439public change_step_one(id)
440{
441 if (playerStatus[id] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
442
443 new password[33];
444
445 read_args(password, charsmax(password));
446 remove_quotes(password);
447
448 if (!equal(playerPassword[id], password)) {
449 if (++playerFails[id] >= 3) server_cmd("kick #%d ^"Nieprawidlowe haslo!^"", get_user_userid(id));
450
451 cod_print_chat(id, "Podane haslo jest^x04 nieprawidlowe^x01. (Bledne haslo^x04 %i/3^x01)", playerFails[id]);
452
453 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Podane haslo jest nieprawidlowe.");
454
455 account_menu(id, true);
456
457 return PLUGIN_HANDLED;
458 }
459
460 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
461
462 cod_print_chat(id, "Wprowadz swoje^x04 nowe haslo^x01.");
463
464 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Wprowadz swoje nowe haslo.");
465
466 client_cmd(id, "messagemode WPROWADZ_NOWE_HASLO");
467
468 return PLUGIN_HANDLED;
469}
470
471public change_step_two(id)
472{
473 if (playerStatus[id] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
474
475 new password[33];
476
477 read_args(password, charsmax(password));
478 remove_quotes(password);
479
480 if (equal(playerPassword[id], password)) {
481 cod_print_chat(id, "Nowe haslo jest^x04 takie samo^x01 jak aktualne.");
482
483 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Nowe haslo jest takie samo jak aktualne.");
484
485 account_menu(id, true);
486
487 return PLUGIN_HANDLED;
488 }
489
490 if (strlen(password) < 5) {
491 cod_print_chat(id, "Nowe haslo musi miec co najmniej^x04 5 znakow^x01.");
492
493 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Nowe haslo musi miec co najmniej 5 znakow.");
494
495 account_menu(id, true);
496
497 return PLUGIN_HANDLED;
498 }
499
500 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
501
502 copy(playerTempPassword[id], charsmax(playerTempPassword), password);
503
504 cod_print_chat(id, "Powtorz swoje nowe^x04 haslo^x01.");
505
506 cod_show_hud(id, TYPE_HUD, 255, 128, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Powtorz swoje nowe haslo.");
507
508 client_cmd(id, "messagemode POWTORZ_NOWE_HASLO");
509
510 return PLUGIN_HANDLED;
511}
512
513public change_step_three(id)
514{
515 if (playerStatus[id] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
516
517 new password[33];
518
519 read_args(password, charsmax(password));
520 remove_quotes(password);
521
522 if (!equal(password, playerTempPassword[id])) {
523 cod_print_chat(id, "Podane hasla^x04 roznia sie^x01 od siebie.");
524
525 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Podane hasla roznia sie od siebie.");
526
527 account_menu(id, true);
528
529 return PLUGIN_HANDLED;
530 }
531
532 client_cmd(id, "spk %s", codSounds[SOUND_EXIT]);
533
534 copy(playerPassword[id], charsmax(playerPassword[]), password);
535
536 account_query(id, UPDATE);
537
538 cod_show_hud(id, TYPE_HUD, 0, 255, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Twoje haslo zostalo pomyslnie zmienione.");
539
540 cod_print_chat(id, "Twoje haslo zostalo pomyslnie^x04 zmienione^x01.");
541 cod_print_chat(id, "Wpisz w konsoli komende^x04 setinfo ^"%s^" ^"%s^"^x01, aby twoje haslo bylo ladowane automatycznie.", SETINFO, playerPassword[id]);
542
543 cod_cmd_execute(id, "setinfo %s %s", SETINFO, playerPassword[id]);
544 cod_cmd_execute(id, "writecfg %s", CONFIG);
545
546 return PLUGIN_HANDLED;
547}
548
549public delete_account(id)
550{
551 if (playerStatus[id] != LOGGED || !get_bit(id, dataLoaded)) return PLUGIN_HANDLED;
552
553 new password[33];
554
555 read_args(password, charsmax(password));
556 remove_quotes(password);
557
558 if (!equal(playerPassword[id], password)) {
559 if (++playerFails[id] >= 3) server_cmd("kick #%d ^"Nieprawidlowe haslo!^"", get_user_userid(id));
560
561 cod_print_chat(id, "Podane haslo jest^x04 nieprawidlowe^x01. (Bledne haslo^x04 %i/3^x01)", playerFails[id]);
562
563 cod_show_hud(id, TYPE_HUD, 255, 0, 0, 0.24, 0.07, 0, 0.0, 3.5, 0.0, 0.0, "Podane haslo jest nieprawidlowe.");
564
565 account_menu(id, true);
566
567 return PLUGIN_HANDLED;
568 }
569
570 client_cmd(id, "spk %s", codSounds[SOUND_SELECT]);
571
572 new menuData[128];
573
574 formatex(menuData, charsmax(menuData), "\wCzy na pewno chcesz \rusunac \wswoje konto?");
575
576 new menu = menu_create(menuData, "delete_account_handle");
577
578 menu_additem(menu, "\rTak");
579 menu_additem(menu, "\wNie^n");
580 menu_additem(menu, "\wWyjdz");
581
582 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
583
584 menu_display(id, menu);
585
586 return PLUGIN_HANDLED;
587}
588
589public delete_account_handle(id, menu, item)
590{
591 if (item == 0) {
592 account_query(id, DELETE);
593
594 console_print(id, "==================================");
595 console_print(id, "==========SYSTEM REJESTRACJI==========");
596 console_print(id, " Skasowales konto o nicku: %s", playerName[id]);
597 console_print(id, "==================================");
598
599 server_cmd("kick #%d ^"Konto zostalo usuniete!^"", get_user_userid(id));
600 }
601
602 menu_destroy(menu);
603
604 return PLUGIN_CONTINUE;
605}
606
607public sql_init()
608{
609 new host[32], user[32], pass[32], db[32], queryData[128], error[128], errorNum;
610
611 get_cvar_string("cod_sql_host", host, charsmax(host));
612 get_cvar_string("cod_sql_user", user, charsmax(user));
613 get_cvar_string("cod_sql_pass", pass, charsmax(pass));
614 get_cvar_string("cod_sql_db", db, charsmax(db));
615
616 sql = SQL_MakeDbTuple(host, user, pass, db);
617
618 new Handle:connectHandle = SQL_Connect(sql, errorNum, error, charsmax(error));
619
620 if (errorNum) {
621 log_to_file("cod_mod.log", "[CoD Accounts] SQL Error: %s", error);
622
623 set_task(3.0, "sql_init");
624
625 return;
626 }
627
628 sqlConnected = true;
629
630 formatex(queryData, charsmax(queryData), "CREATE TABLE IF NOT EXISTS `cod_accounts` (`name` VARCHAR(64), `pass` VARCHAR(33), PRIMARY KEY(`name`));");
631
632 new Handle:query = SQL_PrepareQuery(connectHandle, queryData);
633
634 SQL_Execute(query);
635
636 SQL_FreeHandle(query);
637 SQL_FreeHandle(connectHandle);
638}
639
640public load_account(id)
641{
642 if (!sqlConnected) {
643 set_task(1.0, "load_account", id);
644
645 return;
646 }
647
648 new queryData[128], tempId[1];
649
650 tempId[0] = id;
651
652 formatex(queryData, charsmax(queryData), "SELECT * FROM `cod_accounts` WHERE name = '%s'", playerSafeName[id]);
653 SQL_ThreadQuery(sql, "load_account_handle", queryData, tempId, sizeof(tempId));
654}
655
656public load_account_handle(failState, Handle:query, error[], errorNum, tempId[], dataSize)
657{
658 if (failState) {
659 log_to_file("cod_mod.log", "[CoD Accounts] SQL Error: %s (%d)", error, errorNum);
660
661 return;
662 }
663
664 new id = tempId[0];
665
666 if (SQL_MoreResults(query)) {
667 SQL_ReadResult(query, SQL_FieldNameToNum(query, "pass"), playerPassword[id], charsmax(playerPassword[]));
668
669 if (playerPassword[id][0]) {
670 new password[33], info[32];
671
672 get_user_info(id, "name", info, charsmax(info));
673
674 cod_cmd_execute(id, "exec %s.cfg", CONFIG);
675
676 get_user_info(id, SETINFO, password, charsmax(password));
677
678 if (equal(playerPassword[id], password)) {
679 playerStatus[id] = LOGGED;
680
681 set_bit(id, autoLogin);
682 } else playerStatus[id] = NOT_LOGGED;
683
684 cod_cmd_execute(id, "exec config.cfg");
685 }
686 }
687
688 set_bit(id, dataLoaded);
689}
690
691public account_query(id, type)
692{
693 if (!is_user_connected(id)) return;
694
695 new queryData[128], password[33];
696
697 cod_sql_string(playerPassword[id], password, charsmax(password));
698
699 switch (type) {
700 case INSERT: formatex(queryData, charsmax(queryData), "INSERT INTO `cod_accounts` VALUES ('%s', '%s')", playerSafeName[id], password);
701 case UPDATE: formatex(queryData, charsmax(queryData), "UPDATE `cod_accounts` SET pass = '%s' WHERE name = '%s'", password, playerSafeName[id]);
702 case DELETE: formatex(queryData, charsmax(queryData), "DELETE FROM `cod_accounts` WHERE name = '%s'", playerSafeName[id]);
703 }
704
705 SQL_ThreadQuery(sql, "ignore_handle", queryData);
706}
707
708public ignore_handle(failState, Handle:query, error[], errorNum, data[], dataSize)
709{
710 if (failState) {
711 if (failState == TQUERY_CONNECT_FAILED) log_to_file("cod_mod.log", "[CoD Accounts] Could not connect to SQL database. [%d] %s", errorNum, error);
712 else if (failState == TQUERY_QUERY_FAILED) log_to_file("cod_mod.log", "[CoD Accounts] Query failed. [%d] %s", errorNum, error);
713 }
714
715 return PLUGIN_CONTINUE;
716}
717
718public _cod_check_account(plugin_id, num_params)
719{
720 if (!cvarAccountsEnabled) return true;
721
722 new id = get_param(1);
723
724 if (!is_user_valid(id)) {
725 log_error(AMX_ERR_NATIVE, "[CoD] Invalid Player (%d)", id);
726
727 return false;
728 }
729
730 if (playerStatus[id] < LOGGED) {
731 cod_print_chat(id, "Musisz sie^x03 zalogowac^x01, aby miec dostep do glownych funkcji!");
732
733 account_menu(id, true);
734
735 return false;
736 }
737
738 return true;
739}