Advertisement
Banditul

Untitled

Aug 21st, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.86 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_mysql>
  3.  
  4. #define mysql_host "localhost" // aici punem ip hostului. Daca folosim in PC GM lasam localhost
  5. #define mysql_db "bazadate"// aici punem numele bazei de date.
  6. #define mysql_user "root"// aici punem numele userului de la host. Daca folositi PC lasati root.
  7. #define mysql_pass ""//Aici puneti parola de la host(de la phpmyadmin al hostului). In caz de folositi PC lasati asa.
  8.  
  9. enum
  10. {
  11.     DIALOG_LOGIN, // dialogul de login
  12.     DIALOG_REGISTER// dialogul de register
  13. };
  14.  
  15. enum pInfo //numele enumului este pInfo. in el vom pune datele playerului gen Admin/Level/ Money/Experianta si altele.
  16. {
  17.     pParola,//cu pParola vom lua parola din baza de date a playerului
  18.     pID// cu pID vom lua ID-ul din baza de date a playerului
  19. };
  20.  
  21. new P_Data[MAX_PLAYERS][pInfo];// Aceasta variabila este array. cu ea vom verifica 2 lucruri. id playerului si datele lui gen P_Data[playerid][pID] == 1;
  22.  
  23. new handle; // handle(mâner) este cea de care ne vom folosi sa facem lagatura intre baza de date si server
  24.  
  25. forward MySQLConnect();// se creaza un nou callback cu forward
  26. public MySQLConnect()// se face callback-ul
  27. {
  28.     handle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);// definim handle(manerul) ca fiind conectarea mysql la host, baza de date, parola si user-ul
  29.     if(mysql_errno() != 0)// in caz ca aceasta va fi diferita de 0(0 inseamna ca e conectat, 1 inseamna ca nu e conectat , fiind un vector)
  30.     {
  31.         printf("Conexiunea la baza de date %s a esuat ---> Server Inchis ~~~", mysql_db);// va trimite un mesaj in consola
  32.         SendRconCommand("exit");// se inchide serverul
  33.     }
  34.     else// altfel daca este 0(daca se face legatura)
  35.     {
  36.         printf("Conexiunea la baza de date '%s' cu user-ul '%s' a reusit!!!", mysql_db, mysql_user);// ne va da acest mesaj in consola
  37.     }
  38.     return 1;
  39. }
  40.  
  41. public OnGameModeInit()
  42. {
  43.     MySQLConnect();
  44.     return 1;
  45. }
  46.  
  47. stock GetName(playerid)
  48. {
  49.     new Name[MAX_PLAYER_NAME];
  50.  
  51.     GetPlayerName(playerid, Name, sizeof(Name));
  52.     return Name;
  53. }
  54.  
  55. forward OnPlayerLogin(playerid);// se creaza callbac-ul
  56. public OnPlayerLogin(playerid)//Se creaza publicul
  57. {
  58.     new rows, fields;// definim rows(randurile)si fields(domeniile)
  59.     cache_get_data(rows, fields);//cache_get_data interogheaza date din baza de date. acele date sunt rows si fields
  60.     if(rows)// atunci cand playerul se inregistreaza i se va crea niste randuri. Daca i se gasesc atunci cand se va conecta ii va da:
  61.     {
  62.         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logheaza-te!", "Te rog sa-ti introduci parola contuului mai jos!", "Logare", "Exit");// dialogul register
  63.     }
  64.     else// daca nu i se gasesc randuri, adica daca contul nu exista, atunci i se va da urmatorul dialog
  65.     {
  66.         ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Inregistrare", "Trebuie sa iti creezi un cont ca sa joci pe server. nTasteaza mai jos o parola, pentru a te inregistra!", "Inregistreaza", "Exit");// dialogul register
  67.     }
  68.     return 1;
  69. }
  70.  
  71. public OnPlayerConnect(playerid)
  72. {
  73.     new query[100];// definim query(interogare)
  74.     mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi WHERE Nume = '%s'", GetName(playerid));// mysql format face interogarile/setarile/obtiunile/updateurile la baza de date
  75.     //handle reprezinta conectarea la mysql, query si sizeof(queri) reprezinta interogarea
  76.     //"SELECT * FROM conturi WHERE Nume = '%s'"- Selecteaza de la tabelul cu conturi, unde numele este %s(de exemplu eu am numele Widualk pe sa-mp. Mi se va extrage numele si
  77.     mysql_tquery(handle, query, "OnPlayerLogin", "i", playerid);// se va interoga OnPlayerLogin. Adica mai pe scurt , cand se conecteaza se va verifica daca are cont sau nu acel player.
  78.     return 1;
  79. }
  80.  
  81. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  82. {
  83.     new query[128], ip[25];// se creaza interogarea si ip.
  84.     switch(dialogid)// se va folosi switch pentru a selecta dialogul
  85.     {
  86.         case DIALOG_REGISTER:// daca se va selecta dialogul register
  87.         {
  88.             if(!response)
  89.                     return Kick(playerid);// daca se va apasa pe butonul Exit ii va da kick
  90.             if(response)// daca se apasa pe Butonul inregistrare se vor face urmatoarele verificari
  91.             {
  92.                 if(!strlen(inputtext))// daca nu e scris nimic la parola
  93.                         return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Introdu-ti o parola pentru a te inregistra pe server! n", "Inregistreaza", "Exit");// ii va da din nou dialogul register cu mesajul specific
  94.  
  95.                 GetPlayerIp(playerid, ip, sizeof(ip));// definim ip-ul de mai sus
  96.                 mysql_format(handle, query, sizeof(query), "INSERT INTO conturi (Nume, Parola, IP) VALUES ('%s', '%e', '%s')", GetName(playerid), inputtext, ip);// se insereaza in tabelul cu conturi numele playerului, parola pe care a scris-o si ip pe care il are
  97.                 mysql_query(handle, query);// se va trimite setarile si se va interoga callback-ul OnRegistration
  98.                 SpawnPlayer(playerid); // ii da spawn
  99.             }
  100.             return 1;
  101.         }
  102.         case DIALOG_LOGIN:// daca se va selecta dialogul de login
  103.         {
  104.             if(!response) return Kick(playerid);// si se va apasa pe butonul exit ii va da kick
  105.             if(response)//daca se apasa pe butonul LOGARE se va face urmatoarele verificari
  106.             {
  107.                 if(!strlen(inputtext))// daca nu a scris nimic la parola
  108.                         return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu login cu mesajul specific
  109.                 // daca se va trece peste aceasta verificare se vor face urmatoarele:
  110.                 mysql_format(handle, query, sizeof(query), "SELECT * FROM `conturi` WHERE `Nume`='%e' AND `Parola` = '%e'", GetName(playerid),inputtext);// va fi selectata parola de la tabelul cu conturi
  111.                 mysql_tquery(handle, query, "OnLogin", "i", playerid);// se va face apel la baza si se va interoga CallBackUl OnLogin (Tquery = take query sau ia interogare in romana)
  112.             }
  113.             return 1;
  114.         }
  115.     }
  116.     return 1;
  117. }
  118.  
  119. forward OnLogin(playerid);// definim callback ul
  120. public OnLogin(playerid)// facem publicul
  121. {
  122.     new rows, fields,temporar[200];// definim randurile si domeniile, iar temporar se va folosi la extragerea stringurilor
  123.     cache_get_data(rows, fields);// facem interogarea lor
  124.     if(rows)// daca playerul are randuri(adica daca are cont creat, odata cu contul se creeaza randurile)
  125.     {
  126.         //deci daca are randuri
  127.         cache_get_field_content(0, "Parola",temporar), format(P_Data[playerid][pParola], 25, temporar);// i se vaextrage parola si i se verifica daca coincide cu numele. Se foloseste new-ul temporar pentru extragerea parolei, ea retinandu-se temporar(pana cand se deconecteaza jucatorul)
  128.         P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");// i se vaextrage ip-ul
  129.         //un exemplu ar fi , daca are Admin , va fi ceva de genu P_Data[playerid][pAdmin] = cache_get_field_content_int(0,"Admin)"; i se va extrage din baza de date levelul de admin si i se va returna pe server, mai precis, cand se conecteaza are levelul de admin , care i-a fost setat de owner
  130.         SpawnPlayer(playerid);// si se va da spawn
  131.     }
  132.     else// altfel , daca parola este gresita
  133.     {
  134.         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu mesajul specific.
  135.     }
  136.     return 1;
  137. }
  138.  
  139. public OnGameModeExit()
  140. {
  141.     mysql_close( handle ) ;// deconectam serverul de la baza de date, daca se inchide
  142.     return 1;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement