Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <a_mysql>
- #define mysql_host "localhost" // aici punem ip hostului. Daca folosim in PC GM lasam localhost
- #define mysql_db "bazadate"// aici punem numele bazei de date.
- #define mysql_user "root"// aici punem numele userului de la host. Daca folositi PC lasati root.
- #define mysql_pass ""//Aici puneti parola de la host(de la phpmyadmin al hostului). In caz de folositi PC lasati asa.
- enum
- {
- DIALOG_LOGIN, // dialogul de login
- DIALOG_REGISTER// dialogul de register
- };
- enum pInfo //numele enumului este pInfo. in el vom pune datele playerului gen Admin/Level/ Money/Experianta si altele.
- {
- pParola,//cu pParola vom lua parola din baza de date a playerului
- pID// cu pID vom lua ID-ul din baza de date a playerului
- };
- 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;
- new handle; // handle(mâner) este cea de care ne vom folosi sa facem lagatura intre baza de date si server
- forward MySQLConnect();// se creaza un nou callback cu forward
- public MySQLConnect()// se face callback-ul
- {
- 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
- 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)
- {
- printf("Conexiunea la baza de date %s a esuat ---> Server Inchis ~~~", mysql_db);// va trimite un mesaj in consola
- SendRconCommand("exit");// se inchide serverul
- }
- else// altfel daca este 0(daca se face legatura)
- {
- printf("Conexiunea la baza de date '%s' cu user-ul '%s' a reusit!!!", mysql_db, mysql_user);// ne va da acest mesaj in consola
- }
- return 1;
- }
- public OnGameModeInit()
- {
- MySQLConnect();
- return 1;
- }
- stock GetName(playerid)
- {
- new Name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, Name, sizeof(Name));
- return Name;
- }
- forward OnPlayerLogin(playerid);// se creaza callbac-ul
- public OnPlayerLogin(playerid)//Se creaza publicul
- {
- new rows, fields;// definim rows(randurile)si fields(domeniile)
- cache_get_data(rows, fields);//cache_get_data interogheaza date din baza de date. acele date sunt rows si fields
- 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:
- {
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logheaza-te!", "Te rog sa-ti introduci parola contuului mai jos!", "Logare", "Exit");// dialogul register
- }
- else// daca nu i se gasesc randuri, adica daca contul nu exista, atunci i se va da urmatorul dialog
- {
- 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
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- new query[100];// definim query(interogare)
- 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
- //handle reprezinta conectarea la mysql, query si sizeof(queri) reprezinta interogarea
- //"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
- 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.
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- new query[128], ip[25];// se creaza interogarea si ip.
- switch(dialogid)// se va folosi switch pentru a selecta dialogul
- {
- case DIALOG_REGISTER:// daca se va selecta dialogul register
- {
- if(!response)
- return Kick(playerid);// daca se va apasa pe butonul Exit ii va da kick
- if(response)// daca se apasa pe Butonul inregistrare se vor face urmatoarele verificari
- {
- if(!strlen(inputtext))// daca nu e scris nimic la parola
- 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
- GetPlayerIp(playerid, ip, sizeof(ip));// definim ip-ul de mai sus
- 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
- mysql_query(handle, query);// se va trimite setarile si se va interoga callback-ul OnRegistration
- SpawnPlayer(playerid); // ii da spawn
- }
- return 1;
- }
- case DIALOG_LOGIN:// daca se va selecta dialogul de login
- {
- if(!response) return Kick(playerid);// si se va apasa pe butonul exit ii va da kick
- if(response)//daca se apasa pe butonul LOGARE se va face urmatoarele verificari
- {
- if(!strlen(inputtext))// daca nu a scris nimic la parola
- 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
- // daca se va trece peste aceasta verificare se vor face urmatoarele:
- 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
- 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)
- }
- return 1;
- }
- }
- return 1;
- }
- forward OnLogin(playerid);// definim callback ul
- public OnLogin(playerid)// facem publicul
- {
- new rows, fields,temporar[200];// definim randurile si domeniile, iar temporar se va folosi la extragerea stringurilor
- cache_get_data(rows, fields);// facem interogarea lor
- if(rows)// daca playerul are randuri(adica daca are cont creat, odata cu contul se creeaza randurile)
- {
- //deci daca are randuri
- 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)
- P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");// i se vaextrage ip-ul
- //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
- SpawnPlayer(playerid);// si se va da spawn
- }
- else// altfel , daca parola este gresita
- {
- 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.
- }
- return 1;
- }
- public OnGameModeExit()
- {
- mysql_close( handle ) ;// deconectam serverul de la baza de date, daca se inchide
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement