Guest User

Untitled

a guest
Aug 6th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.21 KB | None | 0 0
  1. /*
  2. New Yorker Community Snice 2020
  3. Copyright New Yorker Community
  4. Sva prava zadrzava NY:RP Community @
  5. Owner:Lykenzzi
  6. Scripter:Lykenzzi
  7. GameMode Created by Lykenzzi
  8. */
  9. //==============================================================================
  10. //============================[Include-ovi]=====================================
  11. #include <a_samp>
  12. //============================[New-ovi]=========================================
  13. new MySQL:handle;
  14. //============================[Dialog Reg/Log Sys]==============================
  15. #define DIALOG_LOGIN (0)
  16. #define DIALOG_REGISTER (1)
  17. //==============================[MysQL SetUP====================================
  18. #define MYSQL_HOST "localhost"
  19. #define MYSQL_USER "root"
  20. #define MYSQL_PASSWORD "" // po defaultu na localhostu nemate password, osim ukoliko ne koristite MAMP onda je password root
  21. #define MYSQL_DATABASE "samp"
  22. //============================Enumulator Login==================================
  23. enum ENUM_PLAYER_DATA
  24. {
  25. SQLID, // sqlid, unikatni user id
  26. Password[65], // password, za ovo koristimo SHA256 password hash koji je dodat u zadnjoj samp verziji
  27. Salt[11], // nasumicno generisano da modifikuje originalni hash,
  28. RegDate[65] // datum registracije, ovo je samo "test" da vam pokazem kako da uzmete nesto iz tablice
  29. }
  30. new PlayerInfo[MAX_PLAYERS][ENUM_PLAYER_DATA];
  31. //==============================================================================
  32. #if defined FILTERSCRIPT
  33.  
  34. public OnFilterScriptInit()
  35. {
  36. print("\n--------------------------------------");
  37. print(" Blank Filterscript by your name here");
  38. print("--------------------------------------\n");
  39. return 1;
  40. }
  41.  
  42. public OnFilterScriptExit()
  43. {
  44. return 1;
  45. }
  46.  
  47. #else
  48.  
  49. main()
  50. {
  51. print("\n----------------------------------");
  52. print(" Blank Gamemode by your name here");
  53. print("----------------------------------\n");
  54. }
  55.  
  56. #endif
  57.  
  58. public OnGameModeInit()
  59. {
  60. // Don't use these lines if it's a filterscript
  61. SetGameModeText("Blank Script");
  62. AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  63.  
  64. {
  65. handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE); // ovde sada koristimo onaj vec definisani handle i pokusavamo da se konektujemo sa vec definisanim informacijama
  66.  
  67. if(mysql_errno(handle) != 0 || handle == MYSQL_INVALID_HANDLE) // ukoliko postoji eror kod konekcije sa databazom ispisujemo sledece i zatvaramo konzolu ->
  68. {
  69. print("Konekcija sa databazom nije uspesna, pogledajte da li su sve informacije ispravne.");
  70. SendRconCommand("exit");
  71. return true;
  72. }
  73.  
  74. mysql_tquery(handle, "CREATE TABLE IF NOT EXISTS `players` ( `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 , PRIMARY KEY (`id`))");
  75.  
  76. // Ovaj upit radi sledece:
  77. // Proverava da li postoji tabela players i ukoliko ne postoji kreira istu
  78. // id postavlja kao primary key i stavlja ga na auto increment sto znaci da prilikom svakog unosa u bazu id ce se sam podizati za jedan.
  79. // name postavlja kao string duzine 24 karaktera, mozete name staviti da bude i unique sto bi znacilo da je to ime jedinstveno i da se ne moze uneti drugi red sa istim imenom, ali meni je to nepotrebno zbog provere na konektu.
  80. // password stavljamo kao string isto duzine 65 karaktera
  81. // salt isto samo sto je duzina 11 karaktera
  82. // i na kraju regdate je datum registracije njega postavljamo kao DATETIME sto je u sustine vreme i datum.
  83. return true;
  84. }
  85. return 1;
  86. }
  87.  
  88. public OnGameModeExit()
  89. {
  90. return 1;
  91. }
  92.  
  93. public OnPlayerRequestClass(playerid, classid)
  94. {
  95. SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  96. SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  97. SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  98. return 1;
  99. }
  100.  
  101. public OnPlayerConnect(playerid)
  102. {
  103. new query[128], // ovde definisemo string za query koji cemo formatirati i poslati kao upit
  104. name[MAX_PLAYER_NAME]; // uzimamo ime igraca u ovu varijablu
  105.  
  106. GetPlayerName(playerid, name, sizeof(name)); // uzimamo ime
  107.  
  108. mysql_format(handle, query, sizeof(query), "SELECT * FROM players WHERE name=`%e` LIMIT 1", name); // ovaj upit uzima sve iz tablice sa vasim imenom, limit 1 znaci prekid pretrage na prvom nadjenom rezultatu
  109. mysql_tquery(handle, query, "CheckPlayerData", "i", playerid); // ovo je "threaded query" uzima sve ovo i salje ga na sledecu funkciju na proveru
  110. return true;
  111. }
  112. forward CheckPlayerData(playerid);
  113. public CheckPlayerData(playerid)
  114. {
  115. if(cache_num_rows() > 0)
  116. {
  117. // cache_num_rows > 0 znaci da u tablici postoji bar jedan rezultat sa tim imenom
  118. // sada uzimamo password i salt iz tablice i saljemo igraca na prijavu
  119.  
  120. cache_get_value(0, "password", PlayerInfo[playerid][Password], 65);
  121. cache_get_value(0, "salt", PlayerInfo[playerid][Salt], 11);
  122.  
  123. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Prijava", "Vas racun je pronadjen, molimo vas upisite lozinku da se prijavite:", "Dalje", "Izlaz");
  124. }
  125. else {
  126. ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registracija", "Vas racun nije pronadjen, molimo vas upisite lozinku da se registrujete:", "Dalje", "Izlaz");
  127. }
  128. return true;
  129. }
  130. public OnPlayerDisconnect(playerid, reason)
  131. {
  132. new query[128];
  133. mysql_format(handle, query, sizeof(query), "UPDATE players SET money=`%d`, level=`%d`, skin=`%d` WHERE id=`%d`",
  134. PlayerInfo[playerid][Money], PlayerInfo[playerid][Level], PlayerInfo[playerid][Skin],
  135. PlayerInfo[playerid][SQLID]);
  136. mysql_tquery(handle, query);
  137. return true;
  138. }
  139.  
  140. public OnPlayerSpawn(playerid)
  141. {
  142. return 1;
  143. }
  144.  
  145. public OnPlayerDeath(playerid, killerid, reason)
  146. {
  147. return 1;
  148. }
  149.  
  150. public OnVehicleSpawn(vehicleid)
  151. {
  152. return 1;
  153. }
  154.  
  155. public OnVehicleDeath(vehicleid, killerid)
  156. {
  157. return 1;
  158. }
  159.  
  160. public OnPlayerText(playerid, text[])
  161. {
  162. return 1;
  163. }
  164.  
  165. public OnPlayerCommandText(playerid, cmdtext[])
  166. {
  167. if (strcmp("/mycommand", cmdtext, true, 10) == 0)
  168. {
  169. // Do something here
  170. return 1;
  171. }
  172. return 0;
  173. }
  174.  
  175. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  176. {
  177. return 1;
  178. }
  179.  
  180. public OnPlayerExitVehicle(playerid, vehicleid)
  181. {
  182. return 1;
  183. }
  184.  
  185. public OnPlayerStateChange(playerid, newstate, oldstate)
  186. {
  187. return 1;
  188. }
  189.  
  190. public OnPlayerEnterCheckpoint(playerid)
  191. {
  192. return 1;
  193. }
  194.  
  195. public OnPlayerLeaveCheckpoint(playerid)
  196. {
  197. return 1;
  198. }
  199.  
  200. public OnPlayerEnterRaceCheckpoint(playerid)
  201. {
  202. return 1;
  203. }
  204.  
  205. public OnPlayerLeaveRaceCheckpoint(playerid)
  206. {
  207. return 1;
  208. }
  209.  
  210. public OnRconCommand(cmd[])
  211. {
  212. return 1;
  213. }
  214.  
  215. public OnPlayerRequestSpawn(playerid)
  216. {
  217. return 1;
  218. }
  219.  
  220. public OnObjectMoved(objectid)
  221. {
  222. return 1;
  223. }
  224.  
  225. public OnPlayerObjectMoved(playerid, objectid)
  226. {
  227. return 1;
  228. }
  229.  
  230. public OnPlayerPickUpPickup(playerid, pickupid)
  231. {
  232. return 1;
  233. }
  234.  
  235. public OnVehicleMod(playerid, vehicleid, componentid)
  236. {
  237. return 1;
  238. }
  239.  
  240. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  241. {
  242. return 1;
  243. }
  244.  
  245. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  246. {
  247. return 1;
  248. }
  249.  
  250. public OnPlayerSelectedMenuRow(playerid, row)
  251. {
  252. return 1;
  253. }
  254.  
  255. public OnPlayerExitedMenu(playerid)
  256. {
  257. return 1;
  258. }
  259.  
  260. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  261. {
  262. return 1;
  263. }
  264.  
  265. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  266. {
  267. return 1;
  268. }
  269.  
  270. public OnRconLoginAttempt(ip[], password[], success)
  271. {
  272. return 1;
  273. }
  274.  
  275. public OnPlayerUpdate(playerid)
  276. {
  277. return 1;
  278. }
  279.  
  280. public OnPlayerStreamIn(playerid, forplayerid)
  281. {
  282. return 1;
  283. }
  284.  
  285. public OnPlayerStreamOut(playerid, forplayerid)
  286. {
  287. return 1;
  288. }
  289.  
  290. public OnVehicleStreamIn(vehicleid, forplayerid)
  291. {
  292. return 1;
  293. }
  294.  
  295. public OnVehicleStreamOut(vehicleid, forplayerid)
  296. {
  297. return 1;
  298. }
  299.  
  300. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  301. {
  302. switch(dialogid)
  303. {
  304. case DIALOG_LOGIN:
  305. {
  306. if(!response) return Kick(playerid);
  307.  
  308. new buf[65], name[MAX_PLAYER_NAME];
  309. SHA256_PassHash(inputtext, PlayerInfo[playerid][Salt], buf, 65);
  310.  
  311. if(strcmp(buf, PlayerInfo[playerid][Password]) == 0)
  312. {
  313. // Password se podudara sa unesenim
  314. // Sada treba da uzmemo ostale podatke
  315.  
  316. GetPlayerName(playerid, name, sizeof(name));
  317.  
  318. mysql_format(handle, query, sizeof(query), "SELECT * FROM players WHERE name = `%e` LIMIT 1", name);
  319. mysql_tquery(handle, query, "OnAccountLoad", "i", playerid);
  320.  
  321. // sve smo zavrsili, u funkciji OnAccountLoad idete dalje
  322. }
  323. else
  324. {
  325. // ukoliko lozinka nije ispravna vracamo dialog
  326. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Prijava", "Lozinka koju ste uneli nije ispravna, pokusajte ponovo:", "Dalje", "Izlaz");
  327. }
  328. }
  329.  
  330. case DIALOG_REGISTER:
  331. {
  332. if(!response) return Kick(playerid);
  333.  
  334. if(strlen(inputtext) < 6 || strlen(inputtext) > 20) // ako je lozinka kraca od 6 i duza od 20 karaktera vraca dialog
  335. {
  336. ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registracija", "Vas racun nije pronadjen, molimo vas upisite lozinku da se registrujete:", "Dalje", "Izlaz");
  337. return true;
  338. }
  339.  
  340. // kao sto sam rekao salt je random generisan key, sada cemo ga randomizirati:
  341.  
  342. for (new i = 0; i < 10; i++) {
  343. PlayerInfo[playerid][Salt][i] = random(100) + 50;
  344. }
  345.  
  346. PlayerInfo[playerid][Salt][10] = 0;
  347. SHA256_PassHash(inputtext, PlayerInfo[playerid][Salt], PlayerInfo[playerid][Password], 65);
  348.  
  349. // sada unosimo u bazu podatke igraca
  350. new query[256], name[MAX_PLAYER_NAME];
  351. GetPlayerName(playerid, name, sizeof(name));
  352.  
  353. mysql_format(handle, query, sizeof(query), "INSERT INTO players SET \
  354. name=`%e`,\
  355. password=`%e`,\
  356. salt=`%e`,\
  357. regdate=NOW()", name, PlayerInfo[playerid][Password], PlayerInfo[playerid][Salt]);
  358.  
  359. mysql_tquery(handle, query, "OnPlayerRegister", "d", playerid);
  360. }
  361. }
  362. return true;
  363. }
  364. forward OnAccountLoad(playerid);
  365. public OnAccountLoad(playerid)
  366. {
  367. if(cache_num_rows() > 0) {
  368.  
  369. cache_get_value_int(0, "id", PlayerInfo[playerid][SQLID]);
  370. cache_get_value(0, "regdate", PlayerInfo[playerid][RegDate], 65);
  371.  
  372. // ovde ispod dodajete spawn, novac i slicno
  373.  
  374. printf("SQLID: %d | Register date: %s", PlayerInfo[playerid][SQLID], PlayerInfo[playerid][RegDate]);
  375.  
  376. SendClientMessage(playerid, -1, "Dobrodosli nazad.");
  377. }
  378. return true;
  379. }
  380. forward OnPlayerRegister(playerid);
  381. public OnPlayerRegister(playerid)
  382. {
  383. PlayerInfo[playerid][SQLID] = cache_insert_id(); // uzimamo id igraca koji je unesen u bazu
  384. SendClientMessage(playerid, -1, "Registrovali ste se na server.");
  385. return true;
  386. }
  387. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  388. {
  389. return 1;
  390. }
Advertisement
Add Comment
Please, Sign In to add comment