· 8 years ago · Nov 16, 2017, 12:26 AM
1#include <a_samp>
2#include <a_mysql>
3#include <sscanf2>
4#include <foreach>
5#include <streamer>
6#include <crashdetect>
7#include <zcmd>
8/////////////////////////////////////////////////////////
9new MySQL:handle;
10new query[1024];
11
12#define MYSQL_HOST "localhost"
13#define MYSQL_USER "root"
14#define MYSQL_PASSWORD ""
15#define MYSQL_DATABASE "baza"
16/////////////////////////////////////////////////////////
17new hour, minute, second;
18/////////////////////////////
19new LoginAttempt[MAX_PLAYERS];
20/////////////////////////////
21new bool:Logged[MAX_PLAYERS];
22/////////////////////////////////////////////////////////
23#define DIALOG_REGISTER 1
24#define DIALOG_LOGIN 2
25/////////////////////////////////////////////////////////
26enum ENUM_PLAYER_DATA
27{
28 SQLID,
29 Password[24],
30 Salt[11],
31 RegDate[65],
32 Email[64],
33 Gender,
34 BirthDate[12],
35 Money,
36 Level,
37 Skin,
38 Admin,
39 GM
40}
41new PlayerInfo[MAX_PLAYERS][ENUM_PLAYER_DATA];
42///////////////////////////////////////////////////////////////////////////////////
43forward CheckPlayerData(playerid);
44public CheckPlayerData(playerid)
45{
46 new string[256];
47 if(cache_num_rows() > 0)
48 {
49 cache_get_value_name(0, "password", PlayerInfo[playerid][Password], 65);
50 cache_get_value_name(0, "salt", PlayerInfo[playerid][Salt], 11);
51 format(string, sizeof(string), "{FF1DCE}===============================================\n\n{FFFFFF}Dobrodosli nazad %s\nMolimo upisite vasu lozinku kako bi ste se ulogovali!\n\n{FF1DCE}===============================================", PlayerName(playerid));
52 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Izlaz");
53 }
54 else
55 {
56 format(string, sizeof(string), "{FCC200}Dobrodosli {FF033E}%s{FCC200} na nas server. Vas profil nije registrovan, molimo registrujte se!\nUpisite ispod zeljenu lozinku\n", PlayerName(playerid));
57 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", string, "Potvrdi", "Izlaz");
58 }
59 return true;
60}
61
62forward OnAccountLoad(playerid);
63public OnAccountLoad(playerid)
64{
65 if(cache_num_rows() > 0) {
66
67 cache_get_value_int(0, "id", PlayerInfo[playerid][SQLID]);
68 cache_get_value_name(0, "regdate", PlayerInfo[playerid][RegDate], 65);
69 cache_get_value_name(0, "e-mail", PlayerInfo[playerid][Email], 64);
70 cache_get_value_int(0, "gender", PlayerInfo[playerid][Gender]);
71 cache_get_value_name(0, "birthdate", PlayerInfo[playerid][BirthDate], 12);
72 cache_get_value_int(0, "money", PlayerInfo[playerid][Money]);
73 cache_get_value_int(0, "level", PlayerInfo[playerid][Level]);
74 cache_get_value_int(0, "skin", PlayerInfo[playerid][Skin]);
75 cache_get_value_int(0, "admin", PlayerInfo[playerid][Admin]);
76 cache_get_value_int(0, "gm", PlayerInfo[playerid][GM]);
77
78 Logged[playerid] = true;
79 GivePlayerMoney(playerid, PlayerInfo[playerid][Money]);
80 SetPlayerScore(playerid, PlayerInfo[playerid][Level]);
81 SetPlayerSkin(playerid, PlayerInfo[playerid][Skin]);
82 SendClientMessage(playerid, -1, "Dobrodosli nazad.");
83 SetSpawnInfo(playerid, 0, PlayerInfo[playerid][Skin], 1640.7422, -2330.6375, 13.5469, 0.1715, 0, 0, 0, 0, 0, 0);
84 SetCameraBehindPlayer(playerid);
85 SpawnPlayer(playerid);
86 }
87 return true;
88}
89
90forward OnPlayerRegister(playerid);
91public OnPlayerRegister(playerid)
92{
93 PlayerInfo[playerid][SQLID] = cache_insert_id(); // uzimamo id igraca koji je unesen u bazu
94 SendClientMessage(playerid, -1, "Registrovali ste se na server.");
95
96 Logged[playerid] = true;
97 GivePlayerMoney(playerid, PlayerInfo[playerid][Money]);
98 SetPlayerScore(playerid, PlayerInfo[playerid][Level]);
99 SetPlayerSkin(playerid, PlayerInfo[playerid][Skin]);
100 SetSpawnInfo(playerid, 0, PlayerInfo[playerid][Skin], 1640.7422, -2330.6375, 13.5469, 0.1715, 0, 0, 0, 0, 0, 0);
101 SetCameraBehindPlayer(playerid);
102 SpawnPlayer(playerid);
103 return true;
104}
105
106forward Kicking(playerid);
107public Kicking(playerid)
108{
109 Kick(playerid);
110 return true;
111}
112///////////////////////////////////////////////////////////////////////////////////
113stock MySQLConnect()
114{
115 handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
116 if(mysql_errno(handle) != 0 || handle == MYSQL_INVALID_HANDLE)
117 {
118 print("DOSLO JE DO GRESKE! KONEKCIJA SA DATABAZOM JE NEUSPESNA! PROVERITE PODATKE ZA KONEKCIJU.");
119 SendRconCommand("exit");
120 return true;
121 }
122 mysql_tquery(handle, "CREATE TABLE IF NOT EXISTS `df_users` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(24) NOT NULL , `password` VARCHAR(65) NOT NULL , `salt` VARCHAR(11) NOT NULL , `regdate` DATETIME NOT NULL ,\
123 `e-mail` VARCHAR(64) NOT NULL , `gender` INT NOT NULL , `birthdate` VARCHAR(12) NOT NULL, `money` INT NOT NULL, `level` INT NOT NULL, `skin` INT NOT NULL, `admin` INT NOT NULL, `gm` INT NOT NULL, PRIMARY KEY (`id`))");
124 return true;
125}
126
127stock PlayerName(playerid)
128{
129 new name[MAX_PLAYER_NAME];
130 GetPlayerName(playerid, name, sizeof(name));
131 return name;
132}
133///////////////////////////////////////////////////////////////////////////////////
134main()
135{
136}
137
138public OnGameModeInit()
139{
140 MySQLConnect();
141 return true;
142}
143
144public OnGameModeExit()
145{
146 mysql_close(handle);
147 return true;
148}
149
150public OnPlayerRequestClass(playerid, classid)
151{
152 return true;
153}
154
155public OnPlayerConnect(playerid)
156{
157 SetPlayerColor(playerid, -1);
158 SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
159 SetPlayerHealth(playerid, 100);
160 SetPlayerVirtualWorld(playerid, 0);
161 SetPlayerInterior(playerid, 0);
162 ///////////////////////////////////////////////////////////////////
163 Logged[playerid] = false; LoginAttempt[playerid] = 0;
164 ///////////////////////////////////////////////////////////////////
165 PlayerInfo[playerid][SQLID] = 0; PlayerInfo[playerid][Gender] = 0; PlayerInfo[playerid][Money] = 0;
166 PlayerInfo[playerid][Level] = 0; PlayerInfo[playerid][Skin] = 0; PlayerInfo[playerid][Admin] = 0; PlayerInfo[playerid][GM] = 0;
167 ///////////////////////////////////////////////////////////////////
168 mysql_format(handle, query, sizeof(query), "SELECT * FROM df_users WHERE `name` = '%e' LIMIT 1", PlayerName(playerid));
169 mysql_tquery(handle, query, "CheckPlayerData", "i", playerid);
170 return true;
171}
172
173public OnPlayerDisconnect(playerid, reason)
174{
175 mysql_format(handle, query, sizeof(query), "UPDATE df_users SET money = '%d', level = '%d', skin = '%d', admin = '$d' WHERE id = '%d'",
176 PlayerInfo[playerid][Money], PlayerInfo[playerid][Level], PlayerInfo[playerid][Skin], PlayerInfo[playerid][Admin],
177 PlayerInfo[playerid][SQLID]);
178 mysql_tquery(handle, query);
179 return true;
180}
181
182public OnPlayerSpawn(playerid)
183{
184 return true;
185}
186
187public OnPlayerDeath(playerid, killerid, reason)
188{
189 return true;
190}
191
192public OnVehicleSpawn(vehicleid)
193{
194 return true;
195}
196
197public OnVehicleDeath(vehicleid, killerid)
198{
199 return true;
200}
201
202public OnPlayerText(playerid, text[])
203{
204 return true;
205}
206
207public OnPlayerCommandText(playerid, cmdtext[])
208{
209 return true;
210}
211
212public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
213{
214 return true;
215}
216
217public OnPlayerExitVehicle(playerid, vehicleid)
218{
219 return true;
220}
221
222public OnPlayerStateChange(playerid, newstate, oldstate)
223{
224 return true;
225}
226
227public OnPlayerEnterCheckpoint(playerid)
228{
229 return true;
230}
231
232public OnPlayerLeaveCheckpoint(playerid)
233{
234 return true;
235}
236
237public OnPlayerEnterRaceCheckpoint(playerid)
238{
239 return true;
240}
241
242public OnPlayerLeaveRaceCheckpoint(playerid)
243{
244 return true;
245}
246
247public OnRconCommand(cmd[])
248{
249 return true;
250}
251
252public OnPlayerRequestSpawn(playerid)
253{
254 return true;
255}
256
257public OnObjectMoved(objectid)
258{
259 return true;
260}
261
262public OnPlayerObjectMoved(playerid, objectid)
263{
264 return true;
265}
266
267public OnPlayerPickUpPickup(playerid, pickupid)
268{
269 return true;
270}
271
272public OnVehicleMod(playerid, vehicleid, componentid)
273{
274 return true;
275}
276
277public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
278{
279 return true;
280}
281
282public OnVehicleRespray(playerid, vehicleid, color1, color2)
283{
284 return true;
285}
286
287public OnPlayerSelectedMenuRow(playerid, row)
288{
289 return true;
290}
291
292public OnPlayerExitedMenu(playerid)
293{
294 return true;
295}
296
297public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
298{
299 return true;
300}
301
302public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
303{
304 return true;
305}
306
307public OnRconLoginAttempt(ip[], password[], success)
308{
309 return true;
310}
311
312public OnPlayerUpdate(playerid)
313{
314 return true;
315}
316
317public OnPlayerStreamIn(playerid, forplayerid)
318{
319 return true;
320}
321
322public OnPlayerStreamOut(playerid, forplayerid)
323{
324 return true;
325}
326
327public OnVehicleStreamIn(vehicleid, forplayerid)
328{
329 return true;
330}
331
332public OnVehicleStreamOut(vehicleid, forplayerid)
333{
334 return true;
335}
336
337public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
338{
339 if(dialogid == DIALOG_LOGIN)
340 {
341 if(!response) return Kick(playerid);
342 new buf[65], string[128];
343 //SHA256_PassHash(inputtext, PlayerInfo[playerid][Salt], buf, 65);
344 if(strcmp(inputtext, PlayerInfo[playerid][Password]) == 0)
345 {
346 mysql_format(handle, query, sizeof(query), "SELECT * FROM df_users WHERE name = '%e' LIMIT 1", PlayerName(playerid));
347 mysql_tquery(handle, query, "OnAccountLoad", "i", playerid);
348 }
349 else
350 {
351 format(string, sizeof(string), "{FF1DCE}===============================================\n\n{FFFFFF}Dobrodosli nazad %s\nMolimo upisite vasu lozinku kako bi ste se ulogovali!\n\n{FF1DCE}===============================================", PlayerName(playerid));
352 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Izlaz");
353 LoginAttempt[playerid] ++;
354 if(LoginAttempt[playerid] == 1)
355 {
356 SendClientMessage(playerid, -1, "[SERVER] Pogresili ste lozinku, ukoliko pogresite lozinku jos 2 puta bicete kikovani!");
357 }
358 if(LoginAttempt[playerid] == 2)
359 {
360 SendClientMessage(playerid, -1, "[SERVER] Pogresili ste lozinku, ukoliko pogresite lozinku jos 1 bicete kikovani!");
361 }
362 if(LoginAttempt[playerid] == 3)
363 {
364 SendClientMessage(playerid, -1, "[SERVER] Kikovani ste. Admin: Server; Razlog: Pogresna lozinka (3 puta)!");
365 SetTimerEx("Kicking", 100, false, "d", playerid);
366 }
367 }
368 }
369
370 if(dialogid == DIALOG_REGISTER)
371 {
372 if(!response) return Kick(playerid);
373 if(strlen(inputtext) < 6 || strlen(inputtext) > 24)
374 {
375 new string[256];
376 format(string, sizeof(string), "{FCC200}Dobrodosli {FF033E}%s{FCC200} na nas server. Vas profil nije registrovan, molimo registrujte se!\nUpisite ispod zeljenu lozinku\n", PlayerName(playerid));
377 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", string, "Potvrdi", "Izlaz");
378 return true;
379 }
380 for (new i = 0; i < 10; i++)
381 {
382 PlayerInfo[playerid][Salt][i] = random(100) + 50;
383 }
384 PlayerInfo[playerid][Salt][10] = 0;
385 //SHA256_PassHash(inputtext, PlayerInfo[playerid][Salt], PlayerInfo[playerid][Password], 65);
386 strmid(PlayerInfo[playerid][Password], inputtext, 0, strlen(inputtext), 24);
387 strmid(PlayerInfo[playerid][Email], "test@gmail.com", 0, strlen("test@gmail.com"), 64);
388 PlayerInfo[playerid][Gender] = 0;
389 strmid(PlayerInfo[playerid][BirthDate], "00-00-0000", 0, strlen("00-00-0000"), 12);
390 PlayerInfo[playerid][Money] = 5000;
391 PlayerInfo[playerid][Level] = 1;
392 PlayerInfo[playerid][Skin] = 1;
393 PlayerInfo[playerid][Admin] = 0;
394 PlayerInfo[playerid][GM] = 0;
395 mysql_format(handle, query, sizeof(query), "INSERT INTO df_users SET \
396 name = '%e',\
397 password = '%e',\
398 salt = '%e',\
399 regdate = NOW(),\
400 email = '%e',\
401 gender = '%d',\
402 birthdate = '%e',\
403 money = '%d',\
404 level = '%d',\
405 skin = '%d',\
406 admin = '%d',\
407 gm = '%d'", PlayerName(playerid), PlayerInfo[playerid][Password], PlayerInfo[playerid][Salt], PlayerInfo[playerid][Email], PlayerInfo[playerid][Gender], PlayerInfo[playerid][BirthDate], PlayerInfo[playerid][Money], PlayerInfo[playerid][Level], PlayerInfo[playerid][Skin], PlayerInfo[playerid][Admin], PlayerInfo[playerid][GM]);
408 mysql_tquery(handle, query, "OnPlayerRegister", "d", playerid);
409 }
410 return true;
411}
412
413public OnPlayerClickPlayer(playerid, clickedplayerid, source)
414{
415 return true;
416}
417
418CMD:setskin(playerid, params[])
419{
420 new id, skin;
421 if(sscanf(params, "ui", id, skin)) return SendClientMessage(playerid, -1, "Koristi: /setskin [player id] [skin]");
422 if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Taj igrac nije online!");
423 if(skin < 0 || skin > 311) return SendClientMessage(playerid, -1, "Skin nije validan.");
424 SetPlayerSkin(id, skin);
425 PlayerInfo[id][Skin] = skin;
426 mysql_format(handle, query, sizeof(query), "UPDATE df_users SET skin = '%d' WHERE id = '%d'", PlayerInfo[id][Skin], PlayerInfo[id][SQLID]);
427 mysql_tquery(handle, query);
428 return true;
429}