· 7 years ago · Sep 02, 2018, 10:46 PM
1#include <a_samp>
2#include <YSI\y_timers>
3
4native WP_Hash(buffer[], len, const str[]); // Whirlpool
5
6#define SERVER_NAME "Proyecto"
7
8#define KickEx(%0) defer KickPlayer(%0)
9
10timer KickPlayer[800](playerid) return Kick(playerid);
11
12enum PlayerData
13{
14 Name[MAX_PLAYER_NAME],
15 Password[129],
16 bool:Banned,
17 bool:LoggedIn,
18 IP[16],
19 Score,
20 Money,
21 Kills,
22 Deaths,
23 Level
24};
25
26new PlayerInfo[MAX_PLAYERS][PlayerData];
27
28enum
29{
30 DIALOG_REGISTER,
31 DIALOG_LOGIN
32};
33
34main(){}
35
36new DB:Database;
37
38public OnGameModeInit()
39{
40 new query[500*2];
41
42 if((Database = db_open("Servidor/database.db")) == DB:0)
43 {
44 print("\n\n==========================================");
45 print(" ERROR: Cargar Base de Datos \"database\" ");
46 print("==========================================\n\n");
47 return 0;
48 }
49 else
50 {
51 strcat(query, "CREATE TABLE IF NOT EXISTS `Usuarios` ( \
52 `Name` VARCHAR (24) COLLATE NOCASE NOT NULL, \
53 `Password` VARCHAR (129) NOT NULL, \
54 `Banned` BOOLEAN DEFAULT 0, \
55 `IP` VARCHAR (16), \
56 `Score` INTEGER DEFAULT 0, \
57 `Money` INTEGER DEFAULT 0, \
58 `Kills` INTEGER DEFAULT 0, \
59 `Deaths` INTEGER DEFAULT 0, \
60 `Level` INTEGER DEFAULT 0)");
61 db_free_result(db_query(Database,query));
62 }
63 return 1;
64}
65
66public OnGameModeExit()
67{
68 db_close(Database);
69 return 1;
70}
71
72public OnPlayerConnect(playerid)
73{
74 new query[128], DBResult:result, field[129], string[128], string2[500];
75
76 GetPlayerIp(playerid, PlayerInfo[playerid][IP], 16);
77 GetPlayerName(playerid,PlayerInfo[playerid][Name],MAX_PLAYER_NAME);
78
79 format(query, sizeof(query), "SELECT * FROM `Usuarios` WHERE `Name` = '%s'",DB_Escape(PlayerInfo[playerid][Name]));
80 result = db_query(Database, query);
81
82 if(db_num_rows(result))
83 {
84 db_get_field_assoc(result, "Password", field,129); PlayerInfo[playerid][Password] = field;
85 db_get_field_assoc(result, "Banned", field,129); PlayerInfo[playerid][Banned] = (strval(field)) ? (true) : (false);
86 if(PlayerInfo[playerid][Banned])
87 {
88 format(string,sizeof(string),"{F20000}** %s fue expulsado del servidor, razón: Cuenta Baneada",PlayerInfo[playerid][Name]);
89 SendClientMessageToAll(-1,string);
90 KickEx(playerid);
91 }
92 format(string,sizeof(string),"{00F200}%s - Iniciar Sesión",PlayerInfo[playerid][Name]);
93 format(string2,sizeof(string2),"¡Bienvenido(a) de nuevo %s! a "SERVER_NAME"\nEscribe tu Contraseña para iniciar sesión en el servidor:",PlayerInfo[playerid][Name]);
94 ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,string,string2,"ACEPTAR","SALIR");
95 }
96 else
97 {
98 format(string,sizeof(string),"{00F200}%s - Registrarse",PlayerInfo[playerid][Name]);
99 format(string2,sizeof(string2),"¡Bienvenido(a) %s! "SERVER_NAME"\nEscribe una Contraseña para registrarte en el servidor:",PlayerInfo[playerid][Name]);
100 ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,string,string2,"ACEPTAR","SALIR");
101 }
102 db_free_result(result);
103 return 1;
104}
105
106public OnPlayerDisconnect(playerid, reason)
107{
108 UpdatePlayer(playerid);
109 return 1;
110}
111
112public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
113{
114 new string[128], string2[500];
115 switch(dialogid)
116 {
117 case DIALOG_REGISTER:
118 {
119 if(response)
120 {
121 if(isnull(inputtext) || strlen(inputtext) < 4 || strlen(inputtext) > 20)
122 {
123 format(string,sizeof(string),"{00F200}%s - Registrarse",PlayerInfo[playerid][Name]);
124 format(string2,sizeof(string2),"¡Bienvenido(a) %s! a "SERVER_NAME"\nEscribe una Contraseña para registrarte en el servidor:",PlayerInfo[playerid][Name]);
125 ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,string,string2,"ACEPTAR","SALIR");
126 }
127 else return RegisterPlayer(playerid,inputtext);
128 }
129 else KickEx(playerid);
130 }
131 case DIALOG_LOGIN:
132 {
133 if(response)
134 {
135 new password[129];
136 WP_Hash(password, 129, inputtext);
137 if(!strcmp(password,PlayerInfo[playerid][Password])) LoginPlayer(playerid);
138 else
139 {
140 format(string,sizeof(string),"{00F200}%s - Iniciar Sesión",PlayerInfo[playerid][Name]);
141 format(string2,sizeof(string2),"¡Bienvenido(a) de nuevo %s! a "SERVER_NAME"\nEscribe tu Contraseña para iniciar sesión en el servidor:",PlayerInfo[playerid][Name]);
142 ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,string,string2,"ACEPTAR","SALIR");
143 }
144 }
145 else KickEx(playerid);
146 }
147 }
148 return 1;
149}
150
151DB_Escape(const text[])
152{
153 new ret[80* 2], ch, i, j;
154 while ((ch = text[i++]) && j < sizeof (ret))
155 {
156 if(ch == '\'')
157 {
158 if(j < sizeof (ret) - 2)
159 {
160 ret[j++] = '\'';
161 ret[j++] = '\'';
162 }
163 }
164 else if(j < sizeof (ret)) ret[j++] = ch;
165 else j++;
166 }
167 ret[sizeof (ret) - 1] = '\0';
168 return ret;
169}
170
171RegisterPlayer(playerid, password[])
172{
173 if(PlayerInfo[playerid][LoggedIn]) return 0;
174
175 new query[500];
176
177 WP_Hash(PlayerInfo[playerid][Password], 129, password);
178
179 format(query, sizeof(query), "INSERT INTO `Usuarios` (`Name`, `Password`, `IP`) VALUES('%s', '%s', '%s')",DB_Escape(PlayerInfo[playerid][Name]), PlayerInfo[playerid][Password], PlayerInfo[playerid][IP]);
180 db_free_result(db_query(Database,query));
181
182 PlayerInfo[playerid][LoggedIn] = true;
183 return 1;
184}
185
186LoginPlayer(playerid)
187{
188 if(PlayerInfo[playerid][LoggedIn]) return 0;
189
190 new query[128], DBResult:result, field[129];
191
192 format(query, sizeof(query), "SELECT * FROM `Usuarios` WHERE `Name` = '%s'",DB_Escape(PlayerInfo[playerid][Name]));
193 result = db_query(Database, query);
194
195 if(db_num_rows(result))
196 {
197 db_get_field_assoc(result, "IP", field,129); strcat(PlayerInfo[playerid][IP],field);
198 db_get_field_assoc(result, "Score", field,129); PlayerInfo[playerid][Score] = strval(field);
199 db_get_field_assoc(result, "Money", field,129); PlayerInfo[playerid][Money] = strval(field);
200 db_get_field_assoc(result, "Kills", field,129); PlayerInfo[playerid][Kills] = strval(field);
201 db_get_field_assoc(result, "Deaths", field,129); PlayerInfo[playerid][Deaths] = strval(field);
202 db_get_field_assoc(result, "Level", field,129); PlayerInfo[playerid][Level] = strval(field);
203 }
204 db_free_result(result);
205 PlayerInfo[playerid][LoggedIn] = true;
206 return 1;
207}
208
209UpdatePlayer(playerid)
210{
211 if(!PlayerInfo[playerid][LoggedIn]) return 0;
212
213 new query[500*5], DBResult:result;
214
215 format(query, sizeof(query), "SELECT * FROM `Usuarios` WHERE `Name` = '%s'",DB_Escape(PlayerInfo[playerid][Name]));
216 result = db_query(Database, query);
217
218 if(db_num_rows(result))
219 {
220 format(query,sizeof(query),"UPDATE `Usuarios` SET `Password` = '%s', `IP` = '%s', `Banned` = %d, `Score` = %d, `Money` = %d, `Kills` = %d, `Deaths` = %d, `Level` = %d WHERE `Name` = '%s'", \
221 PlayerInfo[playerid][Password],
222 PlayerInfo[playerid][IP],
223 PlayerInfo[playerid][Banned],
224 PlayerInfo[playerid][Score],
225 PlayerInfo[playerid][Money],
226 PlayerInfo[playerid][Kills],
227 PlayerInfo[playerid][Deaths],
228 PlayerInfo[playerid][Level],
229 DB_Escape(PlayerInfo[playerid][Name]));
230 }
231 db_free_result(db_query(Database,query));
232 return 1;
233}