Guest User

Untitled

a guest
Jan 17th, 2019
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.49 KB | None | 0 0
  1. /*============================================================================================================================*
  2. * Credits: Dieser Filterscript "Register-Login-System" wurde von Jeffry gemacht! *
  3. * *
  4. * *
  5. * Kompatible MySQL Versionen: R40 - R41-4 *
  6. * *
  7. * Made in October 2017. *
  8. * *
  9. * Rechte des Benutzers: *
  10. * *
  11. * -Es ist erlaubt diesen Filterscript zu modifizieren, solange keine Credits entfernt werden. *
  12. * -Es ist erlaubt diesen Filterscript neu zu veröffentlichen, solange keine Credits entfernt werden. *
  13. * *
  14. * -Es ist nicht erlaubt dies als sein eigenes Werk darzustellen oder zu verkaufen. *
  15. * -Es ist nicht erlaubt die Credits zu entfernen. *
  16. * *
  17. * Danke. *
  18. * Viel Spaß damit! :) *
  19. * *
  20. *=============================================================================================================================*/
  21. #include <a_samp>
  22. #include <a_mysql>
  23. #include <zcmd>
  24.  
  25. #define MYSQL_HOST "127.0.0.1" //IP Adresse des MySQL Servers
  26. #define MYSQL_USER "root" //Benutzername der angemeldet wird
  27. #define MYSQL_PASS "Pass123!" //Passwort des Benutzers
  28. #define MYSQL_DBSE "samp_db" //Name der Datenbank
  29.  
  30. new MySQL:handle; //Die Connection-Handle, über die wir später auf die Tabellen der Datenbank zugreifen
  31.  
  32. //Dialog IDs (gegebenenfalls ändern, falls bereits belegt)
  33. #define DIALOG_REGISTER 2
  34. #define DIALOG_LOGIN 1
  35. #define DIALOG_REGISTER_EMAIL 3
  36.  
  37.  
  38. // define colori
  39. #define COLOR_SYSTEM_ERROR 0xAA3333AA
  40. #define COLOR_SYSTEM_TITLE 0xFFFFFFAA
  41. #define COLOR_SYSTEM_TEXT 0xFFFFFFAA
  42. #define COLOR_SYSTEM_SUCCESS 0x33AA33AA
  43. #define COLOR_SYSTEM_INFO 0xAFAFAFAA
  44.  
  45. #define COLOR_GREY 0xAFAFAFAA
  46. #define COLOR_GREEN 0x33AA33AA
  47. #define COLOR_RED 0xAA3333AA
  48. #define COLOR_YELLOW 0xFFFF00AA
  49. #define COLOR_WHITE 0xFFFFFFAA
  50. #define COLOR_BLUE 0x0000BBAA
  51. #define COLOR_LIGHTBLUE 0x33CCFFAA
  52. #define COLOR_ORANGE 0xFF9900AA
  53. #define COLOR_INFO 0xFFFFE1FF
  54.  
  55. #define COL_WHITE "{FFFFFF}"
  56. #define COL_RED "{F81414}"
  57. #define COL_GREEN "{00FF22}"
  58. #define COL_LIGHTBLUE "{00CED1}"
  59.  
  60. enum pDataEnum
  61. {
  62. p_id,
  63. bool:pLoggedIn,
  64. pName[MAX_PLAYER_NAME],
  65. pLevel,
  66. pMoney,
  67. pAdmin,
  68. pEmail,
  69. pKills,
  70. pDeaths,
  71. }
  72. new PlayerInfo[MAX_PLAYERS][pDataEnum];
  73.  
  74. public OnGameModeInit()
  75. {
  76. MySQL_SetupConnection();
  77. return 1;
  78. }
  79. public OnGameModeExit()
  80. {
  81. mysql_close(handle);
  82. return 1;
  83. }
  84. /*
  85. public OnFilterScriptInit()
  86. {
  87. MySQL_SetupConnection();
  88. return 1;
  89. }
  90. public OnFilterScriptExit()
  91. {
  92. mysql_close(handle);
  93. return 1;
  94. }
  95. */
  96. public OnPlayerConnect(playerid)
  97. {
  98. PlayerInfo[playerid][p_id] = 0;
  99. PlayerInfo[playerid][pLoggedIn] = false;
  100. PlayerInfo[playerid][pLevel] = 0;
  101. PlayerInfo[playerid][pMoney] = 0;
  102. PlayerInfo[playerid][pKills] = 0;
  103. PlayerInfo[playerid][pDeaths] = 0;
  104. PlayerInfo[playerid][pEmail] = 0;
  105. GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
  106. return 1;
  107. }
  108.  
  109. public OnPlayerSpawn(playerid)
  110. {
  111. // SetPlayerPos(playerid,x,y,z);
  112. return 1;
  113. }
  114.  
  115. public OnPlayerRequestClass(playerid)
  116. {
  117. //Wenn der Spieler die Class-Selection betritt prüfe, ob er bereits eingeloggt ist
  118. if(!PlayerInfo[playerid][pLoggedIn])
  119. {
  120. //Wenn nicht, dann prüfe ob der Spieler ein Konto hat
  121. //Dazu wird ein Query gesendet und ein neues Callback aufgerufen
  122. //%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
  123. new query[128];
  124. mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);
  125.  
  126. //Das Query wird abgesendet und die playerid an OnUserCheck übergeben
  127. mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
  128. }
  129. return 1;
  130. }
  131.  
  132. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  133. {
  134. if(dialogid == DIALOG_REGISTER)
  135. {
  136. //Spieler hat Abbrechen gewählt
  137. if(!response) return Kick(playerid);
  138.  
  139. //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
  140. if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrazione", "Inserisci una password per iniziare la registrazione:\n{FF0000}Scegline una sicura", "Ok", "Annulla");
  141.  
  142. //Wenn alles passt wird der Spieler in der Datenbank angelegt
  143. //Als Verschlüsselung für das Passwort wird MD5 verwendet
  144. new query[256];
  145. mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
  146. ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_INPUT, "Registrazione", "Inserisci una mail per la registrazione:\n{FF0000}Sarà usata per aiutarti a tenere sicuro il tuo account", "Ok", "Annulla");
  147. //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
  148. // mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
  149. return 1;
  150. }
  151.  
  152. if(dialogid == DIALOG_REGISTER_EMAIL)
  153. {
  154. //Spieler hat Abbrechen gewählt
  155. if(!response) return Kick(playerid);
  156.  
  157. new query[256];
  158. mysql_format(handle, query, sizeof(query), "INSERT INTO users (email) VALUES ('%e')", inputtext);
  159. mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
  160. return 1;
  161. }
  162.  
  163. if(dialogid == DIALOG_LOGIN)
  164. {
  165. //Spieler hat Abbrechen gewählt
  166. if(!response) return Kick(playerid);
  167.  
  168. //se il campo è vuoto o contiene meno di 3 caratteri
  169. if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Hai inserito una password troppo corta:\n{FF0000}Usa almeno 3 caratteri!", "Continua", "Annulla");
  170.  
  171. //Wenn alles passt wird die Datenbank ausgelesen
  172. new query[256];
  173. mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
  174.  
  175. //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
  176. mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
  177. return 1;
  178. }
  179. return 0;
  180. }
  181.  
  182. public OnPlayerDisconnect(playerid, reason)
  183. {
  184. //Speichere den Spieler wenn er der Server verlässt
  185. SaveUserStats(playerid);
  186. return 1;
  187. }
  188.  
  189. forward OnUserCheck(playerid);
  190. public OnUserCheck(playerid)
  191. {
  192. //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
  193. new rows;
  194. cache_get_row_count(rows);
  195. if(rows == 0)
  196. {
  197. //Der Spieler konnte nicht gefunden werden, er muss sich registrieren
  198. ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrazione", "Inserisci la password per iniziare la registrazione:", "Continua", "Annulla");
  199. }
  200. else
  201. {
  202. //Es existiert ein Ergebnis, das heißt der Spieler ist registriert und muss sich einloggen
  203. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Inserisci la password per loggarti:", "Ok", "Annulla");
  204. }
  205. return 1;
  206. }
  207.  
  208. forward OnUserRegister(playerid);
  209. public OnUserRegister(playerid)
  210. {
  211. //Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
  212. PlayerInfo[playerid][p_id] = cache_insert_id();
  213. PlayerInfo[playerid][pLoggedIn] = true;
  214. PlayerInfo[playerid][pAdmin] = 2;
  215. GivePlayerMoney(playerid, 250);
  216. SendClientMessage(playerid, 0x00FF00FF, "[INFO:] Registrazione effettuata con successo.");
  217.  
  218. return 1;
  219. }
  220.  
  221. forward OnUserLogin(playerid);
  222. public OnUserLogin(playerid)
  223. {
  224. //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
  225. new rows;
  226. cache_get_row_count(rows);
  227. if(rows == 0)
  228. {
  229. //password errata
  230. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}Password errata...\n{FFFFE1}Inserisci la password per accedere!", "Ok", "Abbrechen");
  231. }
  232. else
  233. {
  234. //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
  235. //Wir lesen nun die erste Zeile des Caches aus (ID 0)
  236. cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
  237. cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
  238. cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
  239. cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
  240. cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
  241. cache_get_value_name_int(0, "admin", PlayerInfo[playerid][pAdmin]);
  242. cache_get_value_name(0, "email", PlayerInfo[playerid][pEmail]);
  243. PlayerInfo[playerid][pLoggedIn] = true;
  244. SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
  245. GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
  246. SetPlayerVirtualWorld(playerid, 0);
  247. SpawnPlayer(playerid);
  248.  
  249. }
  250. return 1;
  251. }
  252.  
  253. public OnPlayerDeath(playerid, killerid, reason)
  254. {
  255. //Beispielcode
  256. if(killerid != INVALID_PLAYER_ID)
  257. {
  258. PlayerInfo[killerid][pKills]++;
  259. GivePlayerMoney(killerid, 10);
  260. PlayerInfo[killerid][pMoney] += 10;
  261. if(PlayerInfo[killerid][pKills] > 3)
  262. {
  263. PlayerInfo[killerid][pLevel] = 1;
  264. }
  265. }
  266. PlayerInfo[playerid][pDeaths]++;
  267. return 1;
  268. }
  269.  
  270. stock SaveUserStats(playerid)
  271. { // quando si disconnette passano i dati prima qua
  272. //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
  273. if(!PlayerInfo[playerid][pLoggedIn]) return 1;
  274. //pPosSX
  275. //Ansonsten speichere sie
  276. new livello = PlayerInfo[playerid][pLevel];
  277. new adminl = PlayerInfo[playerid][pAdmin];
  278. new soldi = PlayerInfo[playerid][pMoney];
  279. new uccisioni = PlayerInfo[playerid][pKills];
  280. new morti = PlayerInfo[playerid][pDeaths];
  281. new idgiocatore = PlayerInfo[playerid][p_id];
  282. new playeremail = PlayerInfo[playerid][pEmail];
  283.  
  284. new query[256];
  285. mysql_format(handle, query, sizeof(query),
  286. "UPDATE users SET email = '%d', level = '%d', admin = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
  287. playeremail, livello, adminl, soldi, uccisioni, morti, idgiocatore);
  288.  
  289. //Das Query wird abgesendet
  290. mysql_pquery(handle, query);
  291. return 1;
  292. }
  293.  
  294. stock MySQL_SetupConnection(ttl = 3)
  295. {
  296. print("[MySQL] Verbindungsaufbau...");
  297. //mysql_log(); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
  298.  
  299. handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
  300.  
  301. //Prüfen und gegebenenfalls wiederholen
  302. if(mysql_errno(handle) != 0)
  303. {
  304. //Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
  305. if(ttl > 1)
  306. {
  307. //Versuche erneut eine Verbindung aufzubauen
  308. print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
  309. printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
  310. return MySQL_SetupConnection(ttl-1);
  311. }
  312. else
  313. {
  314. //Abbrechen und Server schließen
  315. print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
  316. print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
  317. print("[MySQL] Der Server wird heruntergefahren.");
  318. return SendRconCommand("exit");
  319. }
  320. }
  321. printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
  322. return 1;
  323. }
  324.  
  325. CMD:soldi(playerid, params[])
  326. {
  327. GivePlayerMoney(playerid, 100);
  328. return 1;
  329. }
Advertisement
Add Comment
Please, Sign In to add comment