· 5 years ago · Apr 17, 2020, 09:24 AM
1#include <a_samp>
2#include <sqlitei>
3#include <easyDialog>
4
5static
6 DB:dbHandler;
7
8main() {}
9
10public OnGameModeInit()
11{
12 if ((dbHandler = db_open("servertest.db")) == DB: 0) {
13 print("Failed to open a connection to \"servertest.db\"");
14 } else {
15 db_query(dbHandler, "PRAGMA synchronous = OFF");
16 db_query(dbHandler, "CREATE TABLE IF NOT EXISTS users (userid INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(24) COLLATE NOCASE, password VARCHAR(129), admin INTEGER DEFAULT 0 NOT NULL)");
17 }
18 return 1;
19}
20
21public OnGameModeExit()
22{
23 db_close(dbHandler);
24 return 1;
25}
26
27enum E_ACCOUNT_DATA
28{
29 pSQLID,
30 Name[MAX_PLAYER_NAME],
31 Password[129],
32 Admin
33}
34
35static
36 E_ACCOUNT_INFO[MAX_PLAYERS][E_ACCOUNT_DATA];
37
38public OnPlayerConnect(playerid)
39{
40 static
41 tmp[E_ACCOUNT_DATA];
42
43 E_ACCOUNT_INFO[playerid] = tmp;
44
45 GetPlayerName(playerid, E_ACCOUNT_INFO[playerid][Name], MAX_PLAYER_NAME);
46
47 static
48 Query[82],
49 DBResult: Result;
50
51 format(Query, sizeof Query, "\
52 SELECT password FROM users WHERE username = '%q' LIMIT 1",
53 E_ACCOUNT_INFO[playerid][Name]);
54 Result = db_query(dbHandler, Query);
55
56 if (db_num_rows(Result)) {
57 db_get_field_assoc(Result, "password", E_ACCOUNT_INFO[playerid][Password], 129);
58
59 Dialog_Show(playerid, "DialogLogin", DIALOG_STYLE_INPUT,
60 "Login",
61 "Password:",
62 "Enter", "Cancel"
63 );
64 } else {
65 Dialog_Show(playerid, "DialogRegister", DIALOG_STYLE_INPUT,
66 "Register",
67 "Password:",
68 "Enter", "Cancel"
69 );
70 }
71 db_free_result(Result);
72 return 1;
73}
74
75public OnPlayerDisconnect(playerid, reason)
76{
77 static
78 Query[51],
79 tmp[E_ACCOUNT_DATA];
80
81 format(Query, sizeof Query, "UPDATE users SET admin = '%d' WHERE userid = '%d'",
82 E_ACCOUNT_INFO[playerid][Admin], E_ACCOUNT_INFO[playerid][pSQLID]);
83 db_query(dbHandler, Query);
84
85 E_ACCOUNT_INFO[playerid] = tmp;
86 return 1;
87}
88
89Dialog:DialogRegister (const playerid, response, listitem, const inputtext[])
90{
91 if (!response)
92 return Kick(playerid);
93
94 if (!(3 <= strlen(inputtext) <= 20))
95 return Dialog_Show(playerid, "DialogRegister", DIALOG_STYLE_INPUT,
96 "Register",
97 "Password:",
98 "Enter", "Cancel"
99 );
100
101 static
102 Query[208],
103 DBResult: Result;
104
105 format(Query, sizeof Query, "INSERT INTO users (username, password) \
106 VALUES ('%q', '%q')", E_ACCOUNT_INFO[playerid][Name], inputtext);
107 db_query(dbHandler, Query);
108
109 Result = db_query(dbHandler, "SELECT last_insert_rowid()");
110 E_ACCOUNT_INFO[playerid][pSQLID] = db_get_field_int(Result);
111
112 db_free_result(Result);
113 return 1;
114}