· 8 years ago · Jul 05, 2018, 08:38 PM
1#include <a_samp>
2#include <a_mysql>
3#include <foreach>
4
5//NEMOJ NEKO DA DRKA PO OVOJ MYSQL KONFIGURACIJI OTICE SVE U KURAC!
6
7#define MYSQL_HOST "localhost"
8#define MYSQL_USER "root"
9#define MYSQL_PASS "" //
10#define MYSQL_DATABASE "sa-mp"
11
12#pragma tabsize 0
13
14
15#define isnull
16#define DIALOG_REGISTER (0)
17#define DIALOG_LOGIN (1)
18#define DIALOG_GODINE (2)
19#define DIALOG_DRZAVA (3)
20#define DIALOG_SPOL (4)
21#define DIALOG_PROVJERA (5)
22
23#define MAX_GOD 60
24
25#define POCETNI_NOVAC 20000
26
27#define SCM SendClientMessage
28#define SCMTA SendClientMessageToAll
29
30#define IME_SERVERA "Nation HardPlay"
31#define SKRIPTER "Kicony"
32#define GAME_MODE_TEXT "v0.1 by Kicony"
33
34#define PRESSED(%0) \
35 (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
36
37#define POCETNI_LEVEL 3
38
39//Boje
40#define crvena "{FF0000}" //definiramo boju
41#define plava "{0BE9F4}" //definiramo boju
42#define zelena "{00FF00}" //definiramo boju
43#define bijela "{FFFFFF}" //definiramo boju
44#define COLOR_GREY 0xAFAFAFAA
45#define COLOR_GREEN 0x33AA33AA
46#define COLOR_RED 0xAA3333AA
47#define COLOR_YELLOW 0xFFFF00AA
48#define COLOR_WHITE 0xFFFFFFAA
49#define COLOR_BLUE 0x0000BBAA
50#define COLOR_LIGHTBLUE 0x33CCFFAA
51#define COLOR_ORANGE 0xFF9900AA
52#define COLOR_RED 0xAA3333AA
53#define COLOR_LIME 0x10F441AA
54#define COLOR_MAGENTA 0xFF00FFFF
55#define COLOR_NAVY 0x000080AA
56#define COLOR_AQUA 0xF0F8FFAA
57#define COLOR_CRIMSON 0xDC143CAA
58#define COLOR_FLBLUE 0x6495EDAA
59#define COLOR_BISQUE 0xFFE4C4AA
60#define COLOR_BLACK 0x000000AA
61#define COLOR_CHARTREUSE 0x7FFF00AA
62#define COLOR_BROWN 0XA52A2AAA
63#define COLOR_CORAL 0xFF7F50AA
64#define COLOR_GOLD 0xB8860BAA
65#define COLOR_GREENYELLOW 0xADFF2FAA
66#define COLOR_INDIGO 0x4B00B0AA
67#define COLOR_IVORY 0xFFFF82AA
68#define COLOR_LAWNGREEN 0x7CFC00AA
69#define COLOR_SEAGREEN 0x20B2AAAA
70#define COLOR_LIMEGREEN 0x32CD32AA
71#define COLOR_MIDNIGHTBLUE 0X191970AA
72#define COLOR_MAROON 0x800000AA
73#define COLOR_OLIVE 0x808000AA
74#define COLOR_ORANGERED 0xFF4500AA
75#define COLOR_PINK 0xFFC0CBAA
76//******************************************************************************
77new Ulogovan[MAX_PLAYERS];
78//******************************************************************************
79new MySQL: Database, Corrupt_Check[MAX_PLAYERS];
80
81
82main()
83{
84 print("\n----------------------------------");
85 print(" Nation HardPlay GameMod is strated ");
86 print("----------------------------------\n");
87}
88
89stock GetName(playerid) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); return name; }
90
91//==============================================================================
92
93enum ENUM_PLAYER_DATA
94{
95 ID,
96 Name[25],
97
98 Password[65],
99 Salt[11],
100
101 PasswordFails,
102
103 Kills,
104 Deaths,
105
106 Score,
107 Cash,
108
109 Admin,
110 Registriran,
111
112 Godine,
113 Drzava,
114
115 Spol,
116 Skin,
117
118 Level,
119
120 Cache: Player_Cache,
121 bool:LoggedIn
122}
123
124new pInfo[MAX_PLAYERS][ENUM_PLAYER_DATA];
125
126//==============================================================================
127
128public OnGameModeInit()
129{
130 new MySQLOpt: option_id = mysql_init_options();
131 mysql_set_option(option_id, AUTO_RECONNECT, true);
132 Database = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE, option_id);
133
134 if(Database == MYSQL_INVALID_HANDLE || mysql_errno(Database) != 0)
135 {
136 print("Nemoze se konektovati MYSQL sa bazom,vidi sta si drko po tom kurcu i popravljaj.");
137
138 SendRconCommand("exit");
139 return 1;
140 }
141
142 print("Konektovan MYSQL sa bazom, sta ti je covjece kicony skripta");
143
144 mysql_tquery(Database, "CREATE TABLE IF NOT EXISTS `PLAYERS` (`ID` int(11) NOT NULL AUTO_INCREMENT,`USERNAME` varchar(24) NOT NULL,`PASSWORD` char(65) NOT NULL,`SALT` char(11) NOT NULL,`SCORE` mediumint(7), `KILLS` mediumint(7),`Registriran` mediumint(7),`Admin` mediumint(7),`Skin` mediumint(7),`Spol` text(255),`Godine` mediumint(7),`Drzava` mediumint(7), `CASH` mediumint(7) NOT NULL DEFAULT '0',`DEATHS` mediumint(7) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), UNIQUE KEY `USERNAME` (`USERNAME`))");
145
146
147 SetGameModeText("N:HP V0.1");
148 AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
149
150 return 1;
151}
152
153public OnGameModeExit()
154{
155 foreach(new i: Player)
156 {
157 if(IsPlayerConnected(i))
158 {
159 OnPlayerDisconnect(i, 1);
160 }
161 }
162
163 mysql_close(Database);
164 return 1;
165}
166
167public OnPlayerConnect(playerid)
168{
169 new DB_Query[115];
170
171 pInfo[playerid][Kills] = 0;
172 pInfo[playerid][Deaths] = 0;
173 pInfo[playerid][PasswordFails] = 0;
174 pInfo[playerid][Admin] = 0;
175 pInfo[playerid][Registriran] = 0;
176 pInfo[playerid][Drzava] = 0;
177 pInfo[playerid][Spol] = 0;
178 pInfo[playerid][Godine] = 0;
179 pInfo[playerid][Skin] = 0;
180
181
182 GetPlayerName(playerid, pInfo[playerid][Name], MAX_PLAYER_NAME);
183 Corrupt_Check[playerid]++;
184
185 mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", pInfo[playerid][Name]);
186 mysql_tquery(Database, DB_Query, "OnPlayerDataCheck", "ii", playerid, Corrupt_Check[playerid]);
187 return 1;
188}
189
190public OnPlayerDisconnect(playerid, reason)
191{
192 Corrupt_Check[playerid]++;
193
194 new DB_Query[256];
195 mysql_format(Database, DB_Query, sizeof(DB_Query), "UPDATE `PLAYERS` SET `SCORE` = %d, `CASH` = %d, `KILLS` = %d, `DEATHS` = %d WHERE `ID` = %d LIMIT 1,Skin` = %d,Admin` = %d Level` = %d",
196 pInfo[playerid][Score], pInfo[playerid][Cash], pInfo[playerid][Kills], pInfo[playerid][Deaths],pInfo[playerid][Admin],pInfo[playerid][Skin],pInfo[playerid][Level], pInfo[playerid][ID]);
197
198 mysql_tquery(Database, DB_Query);
199
200 if(cache_is_valid(pInfo[playerid][Player_Cache]))
201 {
202 cache_delete(pInfo[playerid][Player_Cache]);
203 pInfo[playerid][Player_Cache] = MYSQL_INVALID_CACHE;
204 }
205
206 pInfo[playerid][LoggedIn] = false;
207 print("OnPlayerDisconnect has been called.");
208 return 1;
209}
210
211public OnPlayerDeath(playerid, killerid, reason)
212{
213 if(killerid != INVALID_PLAYER_ID)
214 {
215
216 pInfo[killerid][Kills]++;
217 pInfo[playerid][Deaths]++;
218 }
219 return 1;
220}
221
222public OnPlayerRequestSpawn(playerid)
223{
224 if(pInfo[playerid][LoggedIn] == false) return 0;
225 return 1;
226}
227
228public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
229{
230 switch (dialogid)
231 {
232 case DIALOG_LOGIN:
233 {
234 if(!response) return Kick(playerid);
235
236 new Salted_Key[65];
237 SHA256_PassHash(inputtext, pInfo[playerid][Salt], Salted_Key, 65);
238 if(pInfo[playerid][Registriran] == 0)
239 {
240 ShowPlayerDialog(playerid,DIALOG_GODINE,DIALOG_STYLE_INPUT,""plava"Registracija:",""plava"Molimo vas upisite koliko imate godina.","Dalje","Izlaz");
241 }
242 else
243 if(strcmp(Salted_Key, pInfo[playerid][Password]) == 0)
244 {
245
246
247
248 cache_set_active(pInfo[playerid][Player_Cache]);
249
250 cache_get_value_int(0, "ID", pInfo[playerid][ID]);
251
252 cache_get_value_int(0, "KILLS", pInfo[playerid][Kills]);
253 cache_get_value_int(0, "DEATHS", pInfo[playerid][Deaths]);
254
255 cache_get_value_int(0, "SCORE", pInfo[playerid][Score]);
256 cache_get_value_int(0, "CASH", pInfo[playerid][Cash]);
257
258 cache_get_value_int(0, "DRZAVA", pInfo[playerid][Cash]);
259 cache_get_value_int(0, "GODINE", pInfo[playerid][Cash]);
260
261 cache_get_value_int(0, "SPOL", pInfo[playerid][Cash]);
262 cache_get_value_int(0, "ADMIN", pInfo[playerid][Cash]);
263
264 cache_get_value_int(0, "LEVEL", pInfo[playerid][Cash]);
265 cache_get_value_int(0, "SKIN", pInfo[playerid][Cash]);
266
267 cache_get_value_int(0, "REGISTRIRAN", pInfo[playerid][Cash]);
268
269 SetPlayerScore(playerid, pInfo[playerid][Score]);
270
271 ResetPlayerMoney(playerid);
272 GivePlayerMoney(playerid, pInfo[playerid][Cash]);
273
274
275 cache_delete(pInfo[playerid][Player_Cache]);
276 pInfo[playerid][Player_Cache] = MYSQL_INVALID_CACHE;
277
278 pInfo[playerid][LoggedIn] = true;
279 SendClientMessage(playerid, 0x00FF00FF, "Ulogovao si se na acc.");
280 SpawnPlayer(playerid);
281 }
282 else
283 {
284 new String[150];
285
286 pInfo[playerid][PasswordFails] += 1;
287 printf("%s je promasio sifru za login. (%d)", pInfo[playerid][Name], pInfo[playerid][PasswordFails]);
288
289 if (pInfo[playerid][PasswordFails] >= 3)
290 {
291 format(String, sizeof(String), "%s Vi ste kikovani zbog: {FF0000}(%d/3) Neuspesnog logina.", pInfo[playerid][Name], pInfo[playerid][PasswordFails]);
292 SendClientMessageToAll(0x969696FF, String);
293 Kick(playerid);
294 }
295 else
296 {
297
298 format(String, sizeof(String), "Netacan password imate jos 3 pokusaja.", pInfo[playerid][PasswordFails]);
299 SendClientMessage(playerid, 0xFF0000FF, String);
300
301 format(String, sizeof(String), "{FFFFFF}Dobrodosli nazad, %s.\n\n{0099FF}Vas acc je registrovan.\n\
302 {0099FF}Molimo,upisite sifru da nastavite sa igrom.\n\n", pInfo[playerid][Name]);
303 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", String, "Uloguj me", "Izadji");
304 }
305 }
306 }
307 case DIALOG_REGISTER:
308 {
309 if(!response) return Kick(playerid);
310
311 if(strlen(inputtext) <= 5 || strlen(inputtext) > 60)
312 {
313
314 SendClientMessage(playerid, 0x969696FF, "Najmanje 5-60 znakova");
315
316 new String[150];
317
318 format(String, sizeof(String), "{FFFFFF}Dobrodosli %s.\n\n{0099FF}Vas acc nije registrovan.\n\
319 {0099FF}Molimo upisite password da nastavite sa registracijom.\n\n", pInfo[playerid][Name]);
320 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", String, "Registruj me", "Izadji");
321 }
322 else
323 {
324
325
326 for (new i = 0; i < 10; i++)
327 {
328 pInfo[playerid][Salt][i] = random(79) + 47;
329 }
330
331 pInfo[playerid][Salt][10] = 0;
332 SHA256_PassHash(inputtext, pInfo[playerid][Salt], pInfo[playerid][Password], 65);
333
334 new DB_Query[225],String[150];
335
336 mysql_format(Database, DB_Query, sizeof(DB_Query), "INSERT INTO `PLAYERS` (`USERNAME`, `PASSWORD`, `SALT`, `SCORE`, `KILLS`, `CASH`, `DEATHS `, `ADMIN `, `SKIN ` , `SPOL `, `DRZAVA `, `REGISTRIRAN`, `GODINE`, `LEVEL`, `)\
337 VALUES ('%e', '%s', '%e', '20', '0', '0', '0')", pInfo[playerid][Name], pInfo[playerid][Password], pInfo[playerid][Salt], pInfo[playerid][Admin], pInfo[playerid][Skin], pInfo[playerid][Drzava], pInfo[playerid][Registriran], pInfo[playerid][Godine], pInfo[playerid][Level]);
338 mysql_tquery(Database, DB_Query, "OnPlayerRegister", "d", playerid);
339 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", String, "Registruj me", "Izadji");
340 }
341 }
342 case DIALOG_GODINE:
343 {
344 if(!response) SetTimerEx("kick",1000,false,"d",playerid);
345 if(response)
346 {
347 new god = strval(inputtext);
348 if(god < 1) return ShowPlayerDialog(playerid,DIALOG_GODINE,DIALOG_STYLE_INPUT,""plava"Registracija:",""plava"Molimo vas upisite koliko imate godina.","Dalje","Izlaz");
349 if(god > MAX_GOD) return ShowPlayerDialog(playerid,DIALOG_GODINE,DIALOG_STYLE_INPUT,""plava"Registracija:",""plava"Molimo vas upisite koliko imate godina.","Dalje","Izlaz");
350 pInfo[playerid][Godine] = god;
351 ShowPlayerDialog(playerid,DIALOG_DRZAVA,DIALOG_STYLE_LIST,""plava"Registracija: Izaberite vasu drzavu:",""plava"Hrvatska\n"plava"Srbija\n"plava"BIH","Dalje","Izlaz");
352 }
353 return 1;
354 }
355 case DIALOG_DRZAVA:
356 {
357 if(!response) SetTimerEx("kick",1000,false,"d",playerid);
358 if(response)
359 {
360 switch(listitem)
361 {
362 case 0:
363 {
364 pInfo[playerid][Drzava] = 0;
365 ShowPlayerDialog(playerid,DIALOG_SPOL,DIALOG_STYLE_LIST,""plava"Registracija: Izaberite vas spol:",""plava"Musko\n"plava"Zensko","Dalje","Izlaz");
366 return 1;
367 }
368 case 1:
369 {
370 pInfo[playerid][Drzava] = 1;
371 ShowPlayerDialog(playerid,DIALOG_SPOL,DIALOG_STYLE_LIST,""plava"Registracija: Izaberite vas spol:",""plava"Musko\n"plava"Zensko","Dalje","Izlaz");
372 return 1;
373 }
374 case 2:
375 {
376 pInfo[playerid][Drzava] = 2;
377 ShowPlayerDialog(playerid,DIALOG_SPOL,DIALOG_STYLE_LIST,""plava"Registracija: Izaberite vas spol:",""plava"Musko\n"plava"Zensko","Dalje","Izlaz");
378 return 1;
379 }
380 }
381 }
382 return 1;
383 }
384 case DIALOG_SPOL:
385 {
386 if(!response) SetTimerEx("kick",1000,false,"d",playerid);
387 if(response)
388 {
389 switch(listitem)
390 {
391 case 0:
392 {
393 new str[200],dtxt[24],stxt[24],String[150];
394 pInfo[playerid][Spol] = 1;
395 if(pInfo[playerid][Drzava] == 0) { dtxt = "Hrvatska";
396 }else if(pInfo[playerid][Drzava] == 1) { dtxt = "Srbija";
397 }else if(pInfo[playerid][Drzava] == 2) { dtxt = "BIH"; }
398 if(pInfo[playerid][Spol] == 1) { stxt = "Musko";
399 }else if(pInfo[playerid][Spol] == 2) { stxt = "Zensko"; }
400 format(str,sizeof(str),""plava"Zahvaljujemo vam se na registraciji\n\n\n"plava"Vasi podatci:\n"plava"Godine: %d\n"plava"Drzava: %s\n"plava"Spol: %s",pInfo[playerid][Godine],dtxt,stxt);
401 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", String, "Registruj me", "Izadji");
402 return 1;
403 }
404 case 1:
405 {
406 new str[200],dtxt[24],stxt[24],String[150];
407 pInfo[playerid][Spol] = 2;
408 if(pInfo[playerid][Drzava] == 0) { dtxt = "Hrvatska";
409 }else if(pInfo[playerid][Drzava] == 1) { dtxt = "Srbija";
410 }else if(pInfo[playerid][Drzava] == 2) { dtxt = "BIH"; }
411 if(pInfo[playerid][Spol] == 1) { stxt = "Musko";
412 }else if(pInfo[playerid][Spol] == 2) { stxt = "Zensko"; }
413 format(String, sizeof(String), "{FFFFFF}Dobrodosli %s.\n\n{0099FF}Vas acc nije registrovan.\n\
414 {0099FF}Molimo upisite password da nastavite sa registracijom.\n\n", pInfo[playerid][Name]);
415 ShowPlayerDialog(playerid,DIALOG_PROVJERA,DIALOG_STYLE_MSGBOX,""plava"Registracija:",str,"Zavrsi","Ponovi");
416 return 1;
417 }
418 }
419 }
420 return 1;
421 }
422 case DIALOG_PROVJERA:
423 {
424 if(!response) return ShowPlayerDialog(playerid,DIALOG_GODINE,DIALOG_STYLE_INPUT,""plava"Registracija:",""plava"Molimo vas upisite koliko imate godina.","Dalje","Izlaz");
425 if(response)
426 {
427 pInfo[playerid][Registriran] = 1;
428 Ulogovan[playerid] = 1;
429 //sta ima pocetno
430 GivePlayerMoney(playerid,POCETNI_NOVAC);
431 pInfo[playerid][Cash] = POCETNI_NOVAC;
432 pInfo[playerid][Admin] = 0;
433 pInfo[playerid][Level] = POCETNI_LEVEL;
434 SetSpawnInfo( playerid, 0, 0, -2086.7197,-2471.3123,30.6250,0, 0, 0, 0, 0, 0, 0 );
435 SpawnPlayer(playerid);
436 if(pInfo[playerid][Spol] == 1) { SetPlayerSkin(playerid,2);
437 }else if(pInfo[playerid][Spol] == 2) { SetPlayerSkin(playerid,12); }
438 }
439 return 1;
440 }
441 }
442 return 1;
443}
444
445forward public OnPlayerDataCheck(playerid, corrupt_check);
446public OnPlayerDataCheck(playerid, corrupt_check)
447{
448 if (corrupt_check != Corrupt_Check[playerid]) return Kick(playerid);
449
450
451 new String[150];
452
453 if(cache_num_rows() > 0)
454 {
455
456 cache_get_value(0, "PASSWORD", pInfo[playerid][Password], 65);
457 cache_get_value(0, "SALT", pInfo[playerid][Salt], 11);
458
459 pInfo[playerid][Player_Cache] = cache_save();
460
461 format(String, sizeof(String), "{FFFFFF}Dobrodosao nazad, %s.\n\n{0099FF}Tvoj acc je registrovan\n\
462 {0099FF}Molimo upisite vas password da udjete u igru.\n\n", pInfo[playerid][Name]);
463 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", String, "Uloguj me", "Izadji");
464 }
465 else
466 {
467 format(String, sizeof(String), "{FFFFFF}Dobrodosao nazad, %s.\n\n{0099FF}Tvoj acc nije registrovan\n\
468 {0099FF}Molimo upisite vas password da udjete u igru.\n\n", pInfo[playerid][Name]);
469 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", String, "Registruj me", "Izadji");
470 }
471 return 1;
472}
473
474forward public OnPlayerRegister(playerid);
475public OnPlayerRegister(playerid)
476{
477 SendClientMessage(playerid, 0x00FF00FF,"N:HP STUFF:Cestitamo,uspjesno ste se registrovali zelimo vam ugodnu igru");
478 SpawnPlayer(playerid);
479 pInfo[playerid][LoggedIn] = true;
480 return 1;
481}
482forward public OnPlayerLogin(playerid);
483public OnPlayerLogin(playerid)
484{
485 SendClientMessage(playerid, 0x00FF00FF,"N:HP STUFF:Cestitamo,uspjesno ste se prijavili zeli mo vam ugodnu igru!");
486 SpawnPlayer(playerid);
487 pInfo[playerid][LoggedIn] = true;
488 return 1;
489}