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